diff options
Diffstat (limited to 'crypto/ahash.c')
-rw-r--r-- | crypto/ahash.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/crypto/ahash.c b/crypto/ahash.c index 27128f2c687a..ba5292d69ebd 100644 --- a/crypto/ahash.c +++ b/crypto/ahash.c | |||
@@ -112,6 +112,22 @@ int crypto_hash_walk_first(struct ahash_request *req, | |||
112 | } | 112 | } |
113 | EXPORT_SYMBOL_GPL(crypto_hash_walk_first); | 113 | EXPORT_SYMBOL_GPL(crypto_hash_walk_first); |
114 | 114 | ||
115 | int crypto_hash_walk_first_compat(struct hash_desc *hdesc, | ||
116 | struct crypto_hash_walk *walk, | ||
117 | struct scatterlist *sg, unsigned int len) | ||
118 | { | ||
119 | walk->total = len; | ||
120 | |||
121 | if (!walk->total) | ||
122 | return 0; | ||
123 | |||
124 | walk->alignmask = crypto_hash_alignmask(hdesc->tfm); | ||
125 | walk->sg = sg; | ||
126 | walk->flags = hdesc->flags; | ||
127 | |||
128 | return hash_walk_new_entry(walk); | ||
129 | } | ||
130 | |||
115 | static int ahash_setkey_unaligned(struct crypto_ahash *tfm, const u8 *key, | 131 | static int ahash_setkey_unaligned(struct crypto_ahash *tfm, const u8 *key, |
116 | unsigned int keylen) | 132 | unsigned int keylen) |
117 | { | 133 | { |
@@ -146,6 +162,26 @@ static int ahash_setkey(struct crypto_ahash *tfm, const u8 *key, | |||
146 | return ahash->setkey(tfm, key, keylen); | 162 | return ahash->setkey(tfm, key, keylen); |
147 | } | 163 | } |
148 | 164 | ||
165 | static int ahash_nosetkey(struct crypto_ahash *tfm, const u8 *key, | ||
166 | unsigned int keylen) | ||
167 | { | ||
168 | return -ENOSYS; | ||
169 | } | ||
170 | |||
171 | int crypto_ahash_import(struct ahash_request *req, const u8 *in) | ||
172 | { | ||
173 | struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); | ||
174 | struct ahash_alg *alg = crypto_ahash_alg(tfm); | ||
175 | |||
176 | memcpy(ahash_request_ctx(req), in, crypto_ahash_reqsize(tfm)); | ||
177 | |||
178 | if (alg->reinit) | ||
179 | alg->reinit(req); | ||
180 | |||
181 | return 0; | ||
182 | } | ||
183 | EXPORT_SYMBOL_GPL(crypto_ahash_import); | ||
184 | |||
149 | static unsigned int crypto_ahash_ctxsize(struct crypto_alg *alg, u32 type, | 185 | static unsigned int crypto_ahash_ctxsize(struct crypto_alg *alg, u32 type, |
150 | u32 mask) | 186 | u32 mask) |
151 | { | 187 | { |
@@ -164,7 +200,7 @@ static int crypto_init_ahash_ops(struct crypto_tfm *tfm, u32 type, u32 mask) | |||
164 | crt->update = alg->update; | 200 | crt->update = alg->update; |
165 | crt->final = alg->final; | 201 | crt->final = alg->final; |
166 | crt->digest = alg->digest; | 202 | crt->digest = alg->digest; |
167 | crt->setkey = ahash_setkey; | 203 | crt->setkey = alg->setkey ? ahash_setkey : ahash_nosetkey; |
168 | crt->digestsize = alg->digestsize; | 204 | crt->digestsize = alg->digestsize; |
169 | 205 | ||
170 | return 0; | 206 | return 0; |