| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- From: Tom Lendacky <[email protected]>
- Subject: [PATCH v1] crypto: ccp - Add hash state import and export support
- Date: Tue, 12 Jan 2016 11:17:38 -0600
- Message-ID: <[email protected]>
- Mime-Version: 1.0
- Content-Type: text/plain; charset="utf-8"
- Content-Transfer-Encoding: 7bit
- Cc: Herbert Xu <[email protected]>, <[email protected]>,
- "David Miller" <[email protected]>
- To: <[email protected]>
- Commit 8996eafdcbad ("crypto: ahash - ensure statesize is non-zero")
- added a check to prevent ahash algorithms from successfully registering
- if the import and export functions were not implemented. This prevents
- an oops in the hash_accept function of algif_hash. This commit causes
- the ccp-crypto module SHA support and AES CMAC support from successfully
- registering and causing the ccp-crypto module load to fail because the
- ahash import and export functions are not implemented.
- Update the CCP Crypto API support to provide import and export support
- for ahash algorithms.
- Cc: <[email protected]> # 3.14.x-
- Signed-off-by: Tom Lendacky <[email protected]>
- ---
- drivers/crypto/ccp/ccp-crypto-aes-cmac.c | 23 +++++++++++++++++++++++
- drivers/crypto/ccp/ccp-crypto-sha.c | 23 +++++++++++++++++++++++
- 2 files changed, 46 insertions(+)
- --- a/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
- +++ b/drivers/crypto/ccp/ccp-crypto-aes-cmac.c
- @@ -220,6 +220,26 @@ static int ccp_aes_cmac_digest(struct ah
- return ccp_aes_cmac_finup(req);
- }
-
- +static int ccp_aes_cmac_export(struct ahash_request *req, void *out)
- +{
- + struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
- + struct ccp_aes_cmac_req_ctx *state = out;
- +
- + *state = *rctx;
- +
- + return 0;
- +}
- +
- +static int ccp_aes_cmac_import(struct ahash_request *req, const void *in)
- +{
- + struct ccp_aes_cmac_req_ctx *rctx = ahash_request_ctx(req);
- + const struct ccp_aes_cmac_req_ctx *state = in;
- +
- + *rctx = *state;
- +
- + return 0;
- +}
- +
- static int ccp_aes_cmac_setkey(struct crypto_ahash *tfm, const u8 *key,
- unsigned int key_len)
- {
- @@ -352,10 +372,13 @@ int ccp_register_aes_cmac_algs(struct li
- alg->final = ccp_aes_cmac_final;
- alg->finup = ccp_aes_cmac_finup;
- alg->digest = ccp_aes_cmac_digest;
- + alg->export = ccp_aes_cmac_export;
- + alg->import = ccp_aes_cmac_import;
- alg->setkey = ccp_aes_cmac_setkey;
-
- halg = &alg->halg;
- halg->digestsize = AES_BLOCK_SIZE;
- + halg->statesize = sizeof(struct ccp_aes_cmac_req_ctx);
-
- base = &halg->base;
- snprintf(base->cra_name, CRYPTO_MAX_ALG_NAME, "cmac(aes)");
- --- a/drivers/crypto/ccp/ccp-crypto-sha.c
- +++ b/drivers/crypto/ccp/ccp-crypto-sha.c
- @@ -207,6 +207,26 @@ static int ccp_sha_digest(struct ahash_r
- return ccp_sha_finup(req);
- }
-
- +static int ccp_sha_export(struct ahash_request *req, void *out)
- +{
- + struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
- + struct ccp_sha_req_ctx *state = out;
- +
- + *state = *rctx;
- +
- + return 0;
- +}
- +
- +static int ccp_sha_import(struct ahash_request *req, const void *in)
- +{
- + struct ccp_sha_req_ctx *rctx = ahash_request_ctx(req);
- + const struct ccp_sha_req_ctx *state = in;
- +
- + *rctx = *state;
- +
- + return 0;
- +}
- +
- static int ccp_sha_setkey(struct crypto_ahash *tfm, const u8 *key,
- unsigned int key_len)
- {
- @@ -403,9 +423,12 @@ static int ccp_register_sha_alg(struct l
- alg->final = ccp_sha_final;
- alg->finup = ccp_sha_finup;
- alg->digest = ccp_sha_digest;
- + alg->export = ccp_sha_export;
- + alg->import = ccp_sha_import;
-
- halg = &alg->halg;
- halg->digestsize = def->digest_size;
- + halg->statesize = sizeof(struct ccp_sha_req_ctx);
-
- base = &halg->base;
- snprintf(base->cra_name, CRYPTO_MAX_ALG_NAME, "%s", def->name);
|