Loading crypto/shash.c +22 −20 Original line number Diff line number Diff line Loading @@ -202,9 +202,8 @@ static int shash_async_init(struct ahash_request *req) return crypto_shash_init(desc); } static int shash_async_update(struct ahash_request *req) int shash_ahash_update(struct ahash_request *req, struct shash_desc *desc) { struct shash_desc *desc = ahash_request_ctx(req); struct crypto_hash_walk walk; int nbytes; Loading @@ -214,13 +213,19 @@ static int shash_async_update(struct ahash_request *req) return nbytes; } EXPORT_SYMBOL_GPL(shash_ahash_update); static int shash_async_update(struct ahash_request *req) { return shash_ahash_update(req, ahash_request_ctx(req)); } static int shash_async_final(struct ahash_request *req) { return crypto_shash_final(ahash_request_ctx(req), req->result); } static int shash_async_digest(struct ahash_request *req) int shash_ahash_digest(struct ahash_request *req, struct shash_desc *desc) { struct scatterlist *sg = req->src; unsigned int offset = sg->offset; Loading @@ -228,34 +233,31 @@ static int shash_async_digest(struct ahash_request *req) int err; if (nbytes < min(sg->length, ((unsigned int)(PAGE_SIZE)) - offset)) { struct crypto_shash **ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); struct shash_desc *desc = ahash_request_ctx(req); void *data; desc->tfm = *ctx; desc->flags = req->base.flags; data = crypto_kmap(sg_page(sg), 0); err = crypto_shash_digest(desc, data + offset, nbytes, req->result); crypto_kunmap(data, 0); crypto_yield(desc->flags); goto out; } } else err = crypto_shash_init(desc) ?: shash_ahash_update(req, desc) ?: crypto_shash_final(desc, req->result); err = shash_async_init(req); if (err) goto out; return err; } EXPORT_SYMBOL_GPL(shash_ahash_digest); err = shash_async_update(req); if (err) goto out; static int shash_async_digest(struct ahash_request *req) { struct crypto_shash **ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); struct shash_desc *desc = ahash_request_ctx(req); err = shash_async_final(req); desc->tfm = *ctx; desc->flags = req->base.flags; out: return err; return shash_ahash_digest(req, desc); } static void crypto_exit_shash_ops_async(struct crypto_tfm *tfm) Loading include/crypto/internal/hash.h +3 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ int crypto_init_shash_spawn(struct crypto_shash_spawn *spawn, struct shash_alg *shash_attr_alg(struct rtattr *rta, u32 type, u32 mask); int shash_ahash_update(struct ahash_request *req, struct shash_desc *desc); int shash_ahash_digest(struct ahash_request *req, struct shash_desc *desc); static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm) { return crypto_tfm_ctx(&tfm->base); Loading Loading
crypto/shash.c +22 −20 Original line number Diff line number Diff line Loading @@ -202,9 +202,8 @@ static int shash_async_init(struct ahash_request *req) return crypto_shash_init(desc); } static int shash_async_update(struct ahash_request *req) int shash_ahash_update(struct ahash_request *req, struct shash_desc *desc) { struct shash_desc *desc = ahash_request_ctx(req); struct crypto_hash_walk walk; int nbytes; Loading @@ -214,13 +213,19 @@ static int shash_async_update(struct ahash_request *req) return nbytes; } EXPORT_SYMBOL_GPL(shash_ahash_update); static int shash_async_update(struct ahash_request *req) { return shash_ahash_update(req, ahash_request_ctx(req)); } static int shash_async_final(struct ahash_request *req) { return crypto_shash_final(ahash_request_ctx(req), req->result); } static int shash_async_digest(struct ahash_request *req) int shash_ahash_digest(struct ahash_request *req, struct shash_desc *desc) { struct scatterlist *sg = req->src; unsigned int offset = sg->offset; Loading @@ -228,34 +233,31 @@ static int shash_async_digest(struct ahash_request *req) int err; if (nbytes < min(sg->length, ((unsigned int)(PAGE_SIZE)) - offset)) { struct crypto_shash **ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); struct shash_desc *desc = ahash_request_ctx(req); void *data; desc->tfm = *ctx; desc->flags = req->base.flags; data = crypto_kmap(sg_page(sg), 0); err = crypto_shash_digest(desc, data + offset, nbytes, req->result); crypto_kunmap(data, 0); crypto_yield(desc->flags); goto out; } } else err = crypto_shash_init(desc) ?: shash_ahash_update(req, desc) ?: crypto_shash_final(desc, req->result); err = shash_async_init(req); if (err) goto out; return err; } EXPORT_SYMBOL_GPL(shash_ahash_digest); err = shash_async_update(req); if (err) goto out; static int shash_async_digest(struct ahash_request *req) { struct crypto_shash **ctx = crypto_ahash_ctx(crypto_ahash_reqtfm(req)); struct shash_desc *desc = ahash_request_ctx(req); err = shash_async_final(req); desc->tfm = *ctx; desc->flags = req->base.flags; out: return err; return shash_ahash_digest(req, desc); } static void crypto_exit_shash_ops_async(struct crypto_tfm *tfm) Loading
include/crypto/internal/hash.h +3 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ int crypto_init_shash_spawn(struct crypto_shash_spawn *spawn, struct shash_alg *shash_attr_alg(struct rtattr *rta, u32 type, u32 mask); int shash_ahash_update(struct ahash_request *req, struct shash_desc *desc); int shash_ahash_digest(struct ahash_request *req, struct shash_desc *desc); static inline void *crypto_ahash_ctx(struct crypto_ahash *tfm) { return crypto_tfm_ctx(&tfm->base); Loading