Commit 3751f402e099893c34089ed303dca6f5f92dbfd1
1 parent
b812eb0076
Exists in
master
and in
39 other branches
crypto: hash - Make setkey optional
Since most cryptographic hash algorithms have no keys, this patch makes the setkey function optional for ahash and shash. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Showing 2 changed files with 10 additions and 1 deletions Side-by-side Diff
crypto/ahash.c
... | ... | @@ -162,6 +162,12 @@ |
162 | 162 | return ahash->setkey(tfm, key, keylen); |
163 | 163 | } |
164 | 164 | |
165 | +static int ahash_nosetkey(struct crypto_ahash *tfm, const u8 *key, | |
166 | + unsigned int keylen) | |
167 | +{ | |
168 | + return -ENOSYS; | |
169 | +} | |
170 | + | |
165 | 171 | int crypto_ahash_import(struct ahash_request *req, const u8 *in) |
166 | 172 | { |
167 | 173 | struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); |
... | ... | @@ -194,7 +200,7 @@ |
194 | 200 | crt->update = alg->update; |
195 | 201 | crt->final = alg->final; |
196 | 202 | crt->digest = alg->digest; |
197 | - crt->setkey = ahash_setkey; | |
203 | + crt->setkey = alg->setkey ? ahash_setkey : ahash_nosetkey; | |
198 | 204 | crt->digestsize = alg->digestsize; |
199 | 205 | |
200 | 206 | return 0; |
crypto/shash.c
... | ... | @@ -55,6 +55,9 @@ |
55 | 55 | struct shash_alg *shash = crypto_shash_alg(tfm); |
56 | 56 | unsigned long alignmask = crypto_shash_alignmask(tfm); |
57 | 57 | |
58 | + if (!shash->setkey) | |
59 | + return -ENOSYS; | |
60 | + | |
58 | 61 | if ((unsigned long)key & alignmask) |
59 | 62 | return shash_setkey_unaligned(tfm, key, keylen); |
60 | 63 |