crypto: axis - remove sha384 support for artpec7
authorLars Persson <lars.persson@axis.com>
Wed, 23 Jan 2019 11:59:40 +0000 (12:59 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 1 Feb 2019 06:42:04 +0000 (14:42 +0800)
The hardware implementation of SHA384 was not correct and it cannot
be used in any situation.

Signed-off-by: Lars Persson <larper@axis.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/axis/artpec6_crypto.c

index 1a1858cea9791030d4d803fd11c4f4e01304dcbc..ea3d59104ce6e5ca474c5f5c94c91dfdf9271694 100644 (file)
 #define regk_crypto_ext         0x00000001
 #define regk_crypto_hmac_sha1   0x00000007
 #define regk_crypto_hmac_sha256 0x00000009
-#define regk_crypto_hmac_sha384 0x0000000b
 #define regk_crypto_hmac_sha512 0x0000000d
 #define regk_crypto_init        0x00000000
 #define regk_crypto_key_128     0x00000000
 #define regk_crypto_null        0x00000000
 #define regk_crypto_sha1        0x00000006
 #define regk_crypto_sha256      0x00000008
-#define regk_crypto_sha384      0x0000000a
 #define regk_crypto_sha512      0x0000000c
 
 /* DMA descriptor structures */
@@ -190,7 +188,6 @@ struct pdma_stat_descr {
 /* Hash modes (including HMAC variants) */
 #define ARTPEC6_CRYPTO_HASH_SHA1       1
 #define ARTPEC6_CRYPTO_HASH_SHA256     2
-#define ARTPEC6_CRYPTO_HASH_SHA384     3
 #define ARTPEC6_CRYPTO_HASH_SHA512     4
 
 /* Crypto modes */
@@ -1315,8 +1312,7 @@ static int artpec6_crypto_prepare_hash(struct ahash_request *areq)
        struct artpec6_hashalg_context *ctx = crypto_tfm_ctx(areq->base.tfm);
        struct artpec6_hash_request_context *req_ctx = ahash_request_ctx(areq);
        size_t digestsize = crypto_ahash_digestsize(crypto_ahash_reqtfm(areq));
-       size_t contextsize = digestsize == SHA384_DIGEST_SIZE ?
-               SHA512_DIGEST_SIZE : digestsize;
+       size_t contextsize = digestsize;
        size_t blocksize = crypto_tfm_alg_blocksize(
                crypto_ahash_tfm(crypto_ahash_reqtfm(areq)));
        struct artpec6_crypto_req_common *common = &req_ctx->common;
@@ -1456,7 +1452,6 @@ static int artpec6_crypto_prepare_hash(struct ahash_request *areq)
 
        /* Finalize */
        if (req_ctx->hash_flags & HASH_FLAG_FINALIZE) {
-               bool needtrim = contextsize != digestsize;
                size_t hash_pad_len;
                u64 digest_bits;
                u32 oper;
@@ -1502,19 +1497,10 @@ static int artpec6_crypto_prepare_hash(struct ahash_request *areq)
                /* Descriptor for the final result */
                error = artpec6_crypto_setup_in_descr(common, areq->result,
                                                      digestsize,
-                                                     !needtrim);
+                                                     true);
                if (error)
                        return error;
 
-               if (needtrim) {
-                       /* Discard the extra context bytes for SHA-384 */
-                       error = artpec6_crypto_setup_in_descr(common,
-                                       req_ctx->partial_buffer,
-                                       digestsize - contextsize, true);
-                       if (error)
-                               return error;
-               }
-
        } else { /* This is not the final operation for this request */
                if (!run_hw)
                        return ARTPEC6_CRYPTO_PREPARE_HASH_NO_START;
@@ -2266,9 +2252,6 @@ artpec6_crypto_init_hash(struct ahash_request *req, u8 type, int hmac)
        case ARTPEC6_CRYPTO_HASH_SHA256:
                oper = hmac ? regk_crypto_hmac_sha256 : regk_crypto_sha256;
                break;
-       case ARTPEC6_CRYPTO_HASH_SHA384:
-               oper = hmac ? regk_crypto_hmac_sha384 : regk_crypto_sha384;
-               break;
        case ARTPEC6_CRYPTO_HASH_SHA512:
                oper = hmac ? regk_crypto_hmac_sha512 : regk_crypto_sha512;
                break;
@@ -2368,22 +2351,6 @@ static int artpec6_crypto_sha256_digest(struct ahash_request *req)
        return artpec6_crypto_prepare_submit_hash(req);
 }
 
-static int __maybe_unused artpec6_crypto_sha384_init(struct ahash_request *req)
-{
-       return artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA384, 0);
-}
-
-static int __maybe_unused
-artpec6_crypto_sha384_digest(struct ahash_request *req)
-{
-       struct artpec6_hash_request_context *req_ctx = ahash_request_ctx(req);
-
-       artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA384, 0);
-       req_ctx->hash_flags |= HASH_FLAG_UPDATE | HASH_FLAG_FINALIZE;
-
-       return artpec6_crypto_prepare_submit_hash(req);
-}
-
 static int artpec6_crypto_sha512_init(struct ahash_request *req)
 {
        return artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA512, 0);
@@ -2404,12 +2371,6 @@ static int artpec6_crypto_hmac_sha256_init(struct ahash_request *req)
        return artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA256, 1);
 }
 
-static int __maybe_unused
-artpec6_crypto_hmac_sha384_init(struct ahash_request *req)
-{
-       return artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA384, 1);
-}
-
 static int artpec6_crypto_hmac_sha512_init(struct ahash_request *req)
 {
        return artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA512, 1);
@@ -2425,17 +2386,6 @@ static int artpec6_crypto_hmac_sha256_digest(struct ahash_request *req)
        return artpec6_crypto_prepare_submit_hash(req);
 }
 
-static int __maybe_unused
-artpec6_crypto_hmac_sha384_digest(struct ahash_request *req)
-{
-       struct artpec6_hash_request_context *req_ctx = ahash_request_ctx(req);
-
-       artpec6_crypto_init_hash(req, ARTPEC6_CRYPTO_HASH_SHA384, 1);
-       req_ctx->hash_flags |= HASH_FLAG_UPDATE | HASH_FLAG_FINALIZE;
-
-       return artpec6_crypto_prepare_submit_hash(req);
-}
-
 static int artpec6_crypto_hmac_sha512_digest(struct ahash_request *req)
 {
        struct artpec6_hash_request_context *req_ctx = ahash_request_ctx(req);
@@ -2480,12 +2430,6 @@ static int artpec6_crypto_ahash_init_hmac_sha256(struct crypto_tfm *tfm)
        return artpec6_crypto_ahash_init_common(tfm, "sha256");
 }
 
-static int __maybe_unused
-artpec6_crypto_ahash_init_hmac_sha384(struct crypto_tfm *tfm)
-{
-       return artpec6_crypto_ahash_init_common(tfm, "sha384");
-}
-
 static int artpec6_crypto_ahash_init_hmac_sha512(struct crypto_tfm *tfm)
 {
        return artpec6_crypto_ahash_init_common(tfm, "sha512");
@@ -2762,53 +2706,6 @@ static struct ahash_alg hash_algos[] = {
 };
 
 static struct ahash_alg artpec7_hash_algos[] = {
-       /* SHA-384 */
-       {
-               .init = artpec6_crypto_sha384_init,
-               .update = artpec6_crypto_hash_update,
-               .final = artpec6_crypto_hash_final,
-               .digest = artpec6_crypto_sha384_digest,
-               .import = artpec6_crypto_hash_import,
-               .export = artpec6_crypto_hash_export,
-               .halg.digestsize = SHA384_DIGEST_SIZE,
-               .halg.statesize = sizeof(struct artpec6_hash_export_state),
-               .halg.base = {
-                       .cra_name = "sha384",
-                       .cra_driver_name = "artpec-sha384",
-                       .cra_priority = 300,
-                       .cra_flags = CRYPTO_ALG_ASYNC,
-                       .cra_blocksize = SHA384_BLOCK_SIZE,
-                       .cra_ctxsize = sizeof(struct artpec6_hashalg_context),
-                       .cra_alignmask = 3,
-                       .cra_module = THIS_MODULE,
-                       .cra_init = artpec6_crypto_ahash_init,
-                       .cra_exit = artpec6_crypto_ahash_exit,
-               }
-       },
-       /* HMAC SHA-384 */
-       {
-               .init = artpec6_crypto_hmac_sha384_init,
-               .update = artpec6_crypto_hash_update,
-               .final = artpec6_crypto_hash_final,
-               .digest = artpec6_crypto_hmac_sha384_digest,
-               .import = artpec6_crypto_hash_import,
-               .export = artpec6_crypto_hash_export,
-               .setkey = artpec6_crypto_hash_set_key,
-               .halg.digestsize = SHA384_DIGEST_SIZE,
-               .halg.statesize = sizeof(struct artpec6_hash_export_state),
-               .halg.base = {
-                       .cra_name = "hmac(sha384)",
-                       .cra_driver_name = "artpec-hmac-sha384",
-                       .cra_priority = 300,
-                       .cra_flags = CRYPTO_ALG_ASYNC,
-                       .cra_blocksize = SHA384_BLOCK_SIZE,
-                       .cra_ctxsize = sizeof(struct artpec6_hashalg_context),
-                       .cra_alignmask = 3,
-                       .cra_module = THIS_MODULE,
-                       .cra_init = artpec6_crypto_ahash_init_hmac_sha384,
-                       .cra_exit = artpec6_crypto_ahash_exit,
-               }
-       },
        /* SHA-512 */
        {
                .init = artpec6_crypto_sha512_init,