]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: aspeed/hash - Provide rctx->buffer as argument to fill padding
authorHerbert Xu <herbert@gondor.apana.org.au>
Tue, 13 May 2025 06:03:54 +0000 (14:03 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 13 Jun 2025 09:26:15 +0000 (17:26 +0800)
Instead of always writing the padding to rctx->buffer, make it
an argument.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/aspeed/aspeed-hace-hash.c

index 4a479a204331b9675b9b60278f6c83e99353bab9..9f776ec8f5ec1208108212065d840a82d3dc527c 100644 (file)
@@ -73,10 +73,10 @@ static const __be64 sha512_iv[8] = {
  *  - if message length < 112 bytes then padlen = 112 - message length
  *  - else padlen = 128 + 112 - message length
  */
-static void aspeed_ahash_fill_padding(struct aspeed_hace_dev *hace_dev,
-                                     struct aspeed_sham_reqctx *rctx)
+static int aspeed_ahash_fill_padding(struct aspeed_hace_dev *hace_dev,
+                                    struct aspeed_sham_reqctx *rctx, u8 *buf)
 {
-       unsigned int index, padlen;
+       unsigned int index, padlen, bitslen;
        __be64 bits[2];
 
        AHASH_DBG(hace_dev, "rctx flags:0x%x\n", (u32)rctx->flags);
@@ -86,25 +86,23 @@ static void aspeed_ahash_fill_padding(struct aspeed_hace_dev *hace_dev,
        case SHA_FLAGS_SHA224:
        case SHA_FLAGS_SHA256:
                bits[0] = cpu_to_be64(rctx->digcnt[0] << 3);
-               index = rctx->bufcnt & 0x3f;
+               index = rctx->digcnt[0] & 0x3f;
                padlen = (index < 56) ? (56 - index) : ((64 + 56) - index);
-               *(rctx->buffer + rctx->bufcnt) = 0x80;
-               memset(rctx->buffer + rctx->bufcnt + 1, 0, padlen - 1);
-               memcpy(rctx->buffer + rctx->bufcnt + padlen, bits, 8);
-               rctx->bufcnt += padlen + 8;
+               bitslen = 8;
                break;
        default:
                bits[1] = cpu_to_be64(rctx->digcnt[0] << 3);
                bits[0] = cpu_to_be64(rctx->digcnt[1] << 3 |
                                      rctx->digcnt[0] >> 61);
-               index = rctx->bufcnt & 0x7f;
+               index = rctx->digcnt[0] & 0x7f;
                padlen = (index < 112) ? (112 - index) : ((128 + 112) - index);
-               *(rctx->buffer + rctx->bufcnt) = 0x80;
-               memset(rctx->buffer + rctx->bufcnt + 1, 0, padlen - 1);
-               memcpy(rctx->buffer + rctx->bufcnt + padlen, bits, 16);
-               rctx->bufcnt += padlen + 16;
+               bitslen = 16;
                break;
        }
+       buf[0] = 0x80;
+       memset(buf + 1, 0, padlen - 1);
+       memcpy(buf + padlen, bits, bitslen);
+       return padlen + bitslen;
 }
 
 /*
@@ -346,7 +344,8 @@ static int aspeed_ahash_req_final(struct aspeed_hace_dev *hace_dev)
 
        AHASH_DBG(hace_dev, "\n");
 
-       aspeed_ahash_fill_padding(hace_dev, rctx);
+       rctx->bufcnt += aspeed_ahash_fill_padding(hace_dev, rctx,
+                                                 rctx->buffer + rctx->bufcnt);
 
        rctx->digest_dma_addr = dma_map_single(hace_dev->dev,
                                               rctx->digest,