Lines Matching +full:data +full:- +full:out

1 // SPDX-License-Identifier: GPL-2.0-or-later
26 return -ENOSYS; in shash_no_setkey()
38 return alg->setkey != shash_no_setkey; in crypto_shash_alg_has_setkey()
51 absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1)); in shash_setkey_unaligned()
54 return -ENOMEM; in shash_setkey_unaligned()
58 err = shash->setkey(tfm, alignbuffer, keylen); in shash_setkey_unaligned()
79 err = shash->setkey(tfm, key, keylen); in crypto_shash_setkey()
91 static int shash_update_unaligned(struct shash_desc *desc, const u8 *data, in shash_update_unaligned() argument
94 struct crypto_shash *tfm = desc->tfm; in shash_update_unaligned()
97 unsigned int unaligned_len = alignmask + 1 - in shash_update_unaligned()
98 ((unsigned long)data & alignmask); in shash_update_unaligned()
108 return -EINVAL; in shash_update_unaligned()
113 memcpy(buf, data, unaligned_len); in shash_update_unaligned()
114 err = shash->update(desc, buf, unaligned_len); in shash_update_unaligned()
118 shash->update(desc, data + unaligned_len, len - unaligned_len); in shash_update_unaligned()
121 int crypto_shash_update(struct shash_desc *desc, const u8 *data, in crypto_shash_update() argument
124 struct crypto_shash *tfm = desc->tfm; in crypto_shash_update()
128 if ((unsigned long)data & alignmask) in crypto_shash_update()
129 return shash_update_unaligned(desc, data, len); in crypto_shash_update()
131 return shash->update(desc, data, len); in crypto_shash_update()
135 static int shash_final_unaligned(struct shash_desc *desc, u8 *out) in shash_final_unaligned() argument
137 struct crypto_shash *tfm = desc->tfm; in shash_final_unaligned()
150 return -EINVAL; in shash_final_unaligned()
152 err = shash->final(desc, buf); in shash_final_unaligned()
154 goto out; in shash_final_unaligned()
156 memcpy(out, buf, ds); in shash_final_unaligned()
158 out: in shash_final_unaligned()
163 int crypto_shash_final(struct shash_desc *desc, u8 *out) in crypto_shash_final() argument
165 struct crypto_shash *tfm = desc->tfm; in crypto_shash_final()
169 if ((unsigned long)out & alignmask) in crypto_shash_final()
170 return shash_final_unaligned(desc, out); in crypto_shash_final()
172 return shash->final(desc, out); in crypto_shash_final()
176 static int shash_finup_unaligned(struct shash_desc *desc, const u8 *data, in shash_finup_unaligned() argument
177 unsigned int len, u8 *out) in shash_finup_unaligned() argument
179 return crypto_shash_update(desc, data, len) ?: in shash_finup_unaligned()
180 crypto_shash_final(desc, out); in shash_finup_unaligned()
183 int crypto_shash_finup(struct shash_desc *desc, const u8 *data, in crypto_shash_finup() argument
184 unsigned int len, u8 *out) in crypto_shash_finup() argument
186 struct crypto_shash *tfm = desc->tfm; in crypto_shash_finup()
190 if (((unsigned long)data | (unsigned long)out) & alignmask) in crypto_shash_finup()
191 return shash_finup_unaligned(desc, data, len, out); in crypto_shash_finup()
193 return shash->finup(desc, data, len, out); in crypto_shash_finup()
197 static int shash_digest_unaligned(struct shash_desc *desc, const u8 *data, in shash_digest_unaligned() argument
198 unsigned int len, u8 *out) in shash_digest_unaligned() argument
201 crypto_shash_finup(desc, data, len, out); in shash_digest_unaligned()
204 int crypto_shash_digest(struct shash_desc *desc, const u8 *data, in crypto_shash_digest() argument
205 unsigned int len, u8 *out) in crypto_shash_digest() argument
207 struct crypto_shash *tfm = desc->tfm; in crypto_shash_digest()
212 return -ENOKEY; in crypto_shash_digest()
214 if (((unsigned long)data | (unsigned long)out) & alignmask) in crypto_shash_digest()
215 return shash_digest_unaligned(desc, data, len, out); in crypto_shash_digest()
217 return shash->digest(desc, data, len, out); in crypto_shash_digest()
221 int crypto_shash_tfm_digest(struct crypto_shash *tfm, const u8 *data, in crypto_shash_tfm_digest() argument
222 unsigned int len, u8 *out) in crypto_shash_tfm_digest() argument
227 desc->tfm = tfm; in crypto_shash_tfm_digest()
229 err = crypto_shash_digest(desc, data, len, out); in crypto_shash_tfm_digest()
237 static int shash_default_export(struct shash_desc *desc, void *out) in shash_default_export() argument
239 memcpy(out, shash_desc_ctx(desc), crypto_shash_descsize(desc->tfm)); in shash_default_export()
245 memcpy(shash_desc_ctx(desc), in, crypto_shash_descsize(desc->tfm)); in shash_default_import()
262 desc->tfm = *ctx; in shash_async_init()
274 nbytes = crypto_shash_update(desc, walk.data, nbytes); in shash_ahash_update()
287 return crypto_shash_final(ahash_request_ctx(req), req->result); in shash_async_final()
297 return crypto_shash_final(desc, req->result); in shash_ahash_finup()
301 crypto_shash_finup(desc, walk.data, nbytes, in shash_ahash_finup()
302 req->result) : in shash_ahash_finup()
303 crypto_shash_update(desc, walk.data, nbytes); in shash_ahash_finup()
316 desc->tfm = *ctx; in shash_async_finup()
323 unsigned int nbytes = req->nbytes; in shash_ahash_digest()
329 (sg = req->src, offset = sg->offset, in shash_ahash_digest()
330 nbytes <= min(sg->length, ((unsigned int)(PAGE_SIZE)) - offset))) { in shash_ahash_digest()
331 void *data; in shash_ahash_digest() local
333 data = kmap_atomic(sg_page(sg)); in shash_ahash_digest()
334 err = crypto_shash_digest(desc, data + offset, nbytes, in shash_ahash_digest()
335 req->result); in shash_ahash_digest()
336 kunmap_atomic(data); in shash_ahash_digest()
350 desc->tfm = *ctx; in shash_async_digest()
355 static int shash_async_export(struct ahash_request *req, void *out) in shash_async_export() argument
357 return crypto_shash_export(ahash_request_ctx(req), out); in shash_async_export()
365 desc->tfm = *ctx; in shash_async_import()
379 struct crypto_alg *calg = tfm->__crt_alg; in crypto_init_shash_ops_async()
386 return -EAGAIN; in crypto_init_shash_ops_async()
395 tfm->exit = crypto_exit_shash_ops_async; in crypto_init_shash_ops_async()
397 crt->init = shash_async_init; in crypto_init_shash_ops_async()
398 crt->update = shash_async_update; in crypto_init_shash_ops_async()
399 crt->final = shash_async_final; in crypto_init_shash_ops_async()
400 crt->finup = shash_async_finup; in crypto_init_shash_ops_async()
401 crt->digest = shash_async_digest; in crypto_init_shash_ops_async()
403 crt->setkey = shash_async_setkey; in crypto_init_shash_ops_async()
408 crt->export = shash_async_export; in crypto_init_shash_ops_async()
409 crt->import = shash_async_import; in crypto_init_shash_ops_async()
411 crt->reqsize = sizeof(struct shash_desc) + crypto_shash_descsize(shash); in crypto_init_shash_ops_async()
421 alg->exit_tfm(hash); in crypto_shash_exit_tfm()
430 hash->descsize = alg->descsize; in crypto_shash_init_tfm()
434 if (alg->exit_tfm) in crypto_shash_init_tfm()
435 tfm->exit = crypto_shash_exit_tfm; in crypto_shash_init_tfm()
437 if (!alg->init_tfm) in crypto_shash_init_tfm()
440 err = alg->init_tfm(hash); in crypto_shash_init_tfm()
444 /* ->init_tfm() may have increased the descsize. */ in crypto_shash_init_tfm()
445 if (WARN_ON_ONCE(hash->descsize > HASH_MAX_DESCSIZE)) { in crypto_shash_init_tfm()
446 if (alg->exit_tfm) in crypto_shash_init_tfm()
447 alg->exit_tfm(hash); in crypto_shash_init_tfm()
448 return -EINVAL; in crypto_shash_init_tfm()
458 shash->free(shash); in crypto_shash_free_instance()
471 rhash.blocksize = alg->cra_blocksize; in crypto_shash_report()
472 rhash.digestsize = salg->digestsize; in crypto_shash_report()
479 return -ENOSYS; in crypto_shash_report()
490 seq_printf(m, "blocksize : %u\n", alg->cra_blocksize); in crypto_shash_show()
491 seq_printf(m, "digestsize : %u\n", salg->digestsize); in crypto_shash_show()
512 spawn->base.frontend = &crypto_shash_type; in crypto_grab_shash()
513 return crypto_grab_spawn(&spawn->base, inst, name, type, mask); in crypto_grab_shash()
526 struct crypto_alg *base = &alg->base; in shash_prepare_alg()
528 if (alg->digestsize > HASH_MAX_DIGESTSIZE || in shash_prepare_alg()
529 alg->descsize > HASH_MAX_DESCSIZE || in shash_prepare_alg()
530 alg->statesize > HASH_MAX_STATESIZE) in shash_prepare_alg()
531 return -EINVAL; in shash_prepare_alg()
533 if ((alg->export && !alg->import) || (alg->import && !alg->export)) in shash_prepare_alg()
534 return -EINVAL; in shash_prepare_alg()
536 base->cra_type = &crypto_shash_type; in shash_prepare_alg()
537 base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK; in shash_prepare_alg()
538 base->cra_flags |= CRYPTO_ALG_TYPE_SHASH; in shash_prepare_alg()
540 if (!alg->finup) in shash_prepare_alg()
541 alg->finup = shash_finup_unaligned; in shash_prepare_alg()
542 if (!alg->digest) in shash_prepare_alg()
543 alg->digest = shash_digest_unaligned; in shash_prepare_alg()
544 if (!alg->export) { in shash_prepare_alg()
545 alg->export = shash_default_export; in shash_prepare_alg()
546 alg->import = shash_default_import; in shash_prepare_alg()
547 alg->statesize = alg->descsize; in shash_prepare_alg()
549 if (!alg->setkey) in shash_prepare_alg()
550 alg->setkey = shash_no_setkey; in shash_prepare_alg()
557 struct crypto_alg *base = &alg->base; in crypto_register_shash()
570 crypto_unregister_alg(&alg->base); in crypto_unregister_shash()
587 for (--i; i >= 0; --i) in crypto_register_shashes()
598 for (i = count - 1; i >= 0; --i) in crypto_unregister_shashes()
608 if (WARN_ON(!inst->free)) in shash_register_instance()
609 return -EINVAL; in shash_register_instance()
611 err = shash_prepare_alg(&inst->alg); in shash_register_instance()