Lines Matching +full:data +full:- +full:out
1 // SPDX-License-Identifier: GPL-2.0-or-later
26 return -ENOSYS; in shash_no_setkey()
39 absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1)); in shash_setkey_unaligned()
42 return -ENOMEM; in shash_setkey_unaligned()
46 err = shash->setkey(tfm, alignbuffer, keylen); in shash_setkey_unaligned()
67 err = shash->setkey(tfm, key, keylen); in crypto_shash_setkey()
79 static int shash_update_unaligned(struct shash_desc *desc, const u8 *data, in shash_update_unaligned() argument
82 struct crypto_shash *tfm = desc->tfm; in shash_update_unaligned()
85 unsigned int unaligned_len = alignmask + 1 - in shash_update_unaligned()
86 ((unsigned long)data & alignmask); in shash_update_unaligned()
96 return -EINVAL; in shash_update_unaligned()
101 memcpy(buf, data, unaligned_len); in shash_update_unaligned()
102 err = shash->update(desc, buf, unaligned_len); in shash_update_unaligned()
106 shash->update(desc, data + unaligned_len, len - unaligned_len); in shash_update_unaligned()
109 int crypto_shash_update(struct shash_desc *desc, const u8 *data, in crypto_shash_update() argument
112 struct crypto_shash *tfm = desc->tfm; in crypto_shash_update()
116 if ((unsigned long)data & alignmask) in crypto_shash_update()
117 return shash_update_unaligned(desc, data, len); in crypto_shash_update()
119 return shash->update(desc, data, len); in crypto_shash_update()
123 static int shash_final_unaligned(struct shash_desc *desc, u8 *out) in shash_final_unaligned() argument
125 struct crypto_shash *tfm = desc->tfm; in shash_final_unaligned()
138 return -EINVAL; in shash_final_unaligned()
140 err = shash->final(desc, buf); in shash_final_unaligned()
142 goto out; in shash_final_unaligned()
144 memcpy(out, buf, ds); in shash_final_unaligned()
146 out: in shash_final_unaligned()
151 int crypto_shash_final(struct shash_desc *desc, u8 *out) in crypto_shash_final() argument
153 struct crypto_shash *tfm = desc->tfm; in crypto_shash_final()
157 if ((unsigned long)out & alignmask) in crypto_shash_final()
158 return shash_final_unaligned(desc, out); in crypto_shash_final()
160 return shash->final(desc, out); in crypto_shash_final()
164 static int shash_finup_unaligned(struct shash_desc *desc, const u8 *data, in shash_finup_unaligned() argument
165 unsigned int len, u8 *out) in shash_finup_unaligned() argument
167 return crypto_shash_update(desc, data, len) ?: in shash_finup_unaligned()
168 crypto_shash_final(desc, out); in shash_finup_unaligned()
171 int crypto_shash_finup(struct shash_desc *desc, const u8 *data, in crypto_shash_finup() argument
172 unsigned int len, u8 *out) in crypto_shash_finup() argument
174 struct crypto_shash *tfm = desc->tfm; in crypto_shash_finup()
178 if (((unsigned long)data | (unsigned long)out) & alignmask) in crypto_shash_finup()
179 return shash_finup_unaligned(desc, data, len, out); in crypto_shash_finup()
181 return shash->finup(desc, data, len, out); in crypto_shash_finup()
185 static int shash_digest_unaligned(struct shash_desc *desc, const u8 *data, in shash_digest_unaligned() argument
186 unsigned int len, u8 *out) in shash_digest_unaligned() argument
189 crypto_shash_finup(desc, data, len, out); in shash_digest_unaligned()
192 int crypto_shash_digest(struct shash_desc *desc, const u8 *data, in crypto_shash_digest() argument
193 unsigned int len, u8 *out) in crypto_shash_digest() argument
195 struct crypto_shash *tfm = desc->tfm; in crypto_shash_digest()
200 return -ENOKEY; in crypto_shash_digest()
202 if (((unsigned long)data | (unsigned long)out) & alignmask) in crypto_shash_digest()
203 return shash_digest_unaligned(desc, data, len, out); in crypto_shash_digest()
205 return shash->digest(desc, data, len, out); in crypto_shash_digest()
209 int crypto_shash_tfm_digest(struct crypto_shash *tfm, const u8 *data, in crypto_shash_tfm_digest() argument
210 unsigned int len, u8 *out) in crypto_shash_tfm_digest() argument
215 desc->tfm = tfm; in crypto_shash_tfm_digest()
217 err = crypto_shash_digest(desc, data, len, out); in crypto_shash_tfm_digest()
225 static int shash_default_export(struct shash_desc *desc, void *out) in shash_default_export() argument
227 memcpy(out, shash_desc_ctx(desc), crypto_shash_descsize(desc->tfm)); in shash_default_export()
233 memcpy(shash_desc_ctx(desc), in, crypto_shash_descsize(desc->tfm)); in shash_default_import()
250 desc->tfm = *ctx; in shash_async_init()
262 nbytes = crypto_shash_update(desc, walk.data, nbytes); in shash_ahash_update()
275 return crypto_shash_final(ahash_request_ctx(req), req->result); in shash_async_final()
285 return crypto_shash_final(desc, req->result); in shash_ahash_finup()
289 crypto_shash_finup(desc, walk.data, nbytes, in shash_ahash_finup()
290 req->result) : in shash_ahash_finup()
291 crypto_shash_update(desc, walk.data, nbytes); in shash_ahash_finup()
304 desc->tfm = *ctx; in shash_async_finup()
311 unsigned int nbytes = req->nbytes; in shash_ahash_digest()
317 (sg = req->src, offset = sg->offset, in shash_ahash_digest()
318 nbytes <= min(sg->length, ((unsigned int)(PAGE_SIZE)) - offset))) { in shash_ahash_digest()
319 void *data; in shash_ahash_digest() local
321 data = kmap_atomic(sg_page(sg)); in shash_ahash_digest()
322 err = crypto_shash_digest(desc, data + offset, nbytes, in shash_ahash_digest()
323 req->result); in shash_ahash_digest()
324 kunmap_atomic(data); in shash_ahash_digest()
338 desc->tfm = *ctx; in shash_async_digest()
343 static int shash_async_export(struct ahash_request *req, void *out) in shash_async_export() argument
345 return crypto_shash_export(ahash_request_ctx(req), out); in shash_async_export()
353 desc->tfm = *ctx; in shash_async_import()
367 struct crypto_alg *calg = tfm->__crt_alg; in crypto_init_shash_ops_async()
374 return -EAGAIN; in crypto_init_shash_ops_async()
383 tfm->exit = crypto_exit_shash_ops_async; in crypto_init_shash_ops_async()
385 crt->init = shash_async_init; in crypto_init_shash_ops_async()
386 crt->update = shash_async_update; in crypto_init_shash_ops_async()
387 crt->final = shash_async_final; in crypto_init_shash_ops_async()
388 crt->finup = shash_async_finup; in crypto_init_shash_ops_async()
389 crt->digest = shash_async_digest; in crypto_init_shash_ops_async()
391 crt->setkey = shash_async_setkey; in crypto_init_shash_ops_async()
396 crt->export = shash_async_export; in crypto_init_shash_ops_async()
397 crt->import = shash_async_import; in crypto_init_shash_ops_async()
399 crt->reqsize = sizeof(struct shash_desc) + crypto_shash_descsize(shash); in crypto_init_shash_ops_async()
409 alg->exit_tfm(hash); in crypto_shash_exit_tfm()
418 hash->descsize = alg->descsize; in crypto_shash_init_tfm()
422 if (alg->exit_tfm) in crypto_shash_init_tfm()
423 tfm->exit = crypto_shash_exit_tfm; in crypto_shash_init_tfm()
425 if (!alg->init_tfm) in crypto_shash_init_tfm()
428 err = alg->init_tfm(hash); in crypto_shash_init_tfm()
432 /* ->init_tfm() may have increased the descsize. */ in crypto_shash_init_tfm()
433 if (WARN_ON_ONCE(hash->descsize > HASH_MAX_DESCSIZE)) { in crypto_shash_init_tfm()
434 if (alg->exit_tfm) in crypto_shash_init_tfm()
435 alg->exit_tfm(hash); in crypto_shash_init_tfm()
436 return -EINVAL; in crypto_shash_init_tfm()
446 shash->free(shash); in crypto_shash_free_instance()
459 rhash.blocksize = alg->cra_blocksize; in crypto_shash_report()
460 rhash.digestsize = salg->digestsize; in crypto_shash_report()
467 return -ENOSYS; in crypto_shash_report()
478 seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); in crypto_shash_show()
479 seq_printf(m, "digestsize : %u\n", salg->digestsize); in crypto_shash_show()
500 spawn->base.frontend = &crypto_shash_type; in crypto_grab_shash()
501 return crypto_grab_spawn(&spawn->base, inst, name, type, mask); in crypto_grab_shash()
514 struct crypto_alg *base = &alg->base; in shash_prepare_alg()
516 if (alg->digestsize > HASH_MAX_DIGESTSIZE || in shash_prepare_alg()
517 alg->descsize > HASH_MAX_DESCSIZE || in shash_prepare_alg()
518 alg->statesize > HASH_MAX_STATESIZE) in shash_prepare_alg()
519 return -EINVAL; in shash_prepare_alg()
521 if ((alg->export && !alg->import) || (alg->import && !alg->export)) in shash_prepare_alg()
522 return -EINVAL; in shash_prepare_alg()
524 base->cra_type = &crypto_shash_type; in shash_prepare_alg()
525 base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK; in shash_prepare_alg()
526 base->cra_flags |= CRYPTO_ALG_TYPE_SHASH; in shash_prepare_alg()
528 if (!alg->finup) in shash_prepare_alg()
529 alg->finup = shash_finup_unaligned; in shash_prepare_alg()
530 if (!alg->digest) in shash_prepare_alg()
531 alg->digest = shash_digest_unaligned; in shash_prepare_alg()
532 if (!alg->export) { in shash_prepare_alg()
533 alg->export = shash_default_export; in shash_prepare_alg()
534 alg->import = shash_default_import; in shash_prepare_alg()
535 alg->statesize = alg->descsize; in shash_prepare_alg()
537 if (!alg->setkey) in shash_prepare_alg()
538 alg->setkey = shash_no_setkey; in shash_prepare_alg()
545 struct crypto_alg *base = &alg->base; in crypto_register_shash()
558 crypto_unregister_alg(&alg->base); in crypto_unregister_shash()
575 for (--i; i >= 0; --i) in crypto_register_shashes()
586 for (i = count - 1; i >= 0; --i) in crypto_unregister_shashes()
596 if (WARN_ON(!inst->free)) in shash_register_instance()
597 return -EINVAL; in shash_register_instance()
599 err = shash_prepare_alg(&inst->alg); in shash_register_instance()