crypto: arm64 - use the new scatterwalk functions
authorEric Biggers <ebiggers@google.com>
Wed, 19 Feb 2025 18:23:31 +0000 (10:23 -0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 2 Mar 2025 07:19:43 +0000 (15:19 +0800)
Use scatterwalk_next() which consolidates scatterwalk_clamp() and
scatterwalk_map(), and use scatterwalk_done_src() which consolidates
scatterwalk_unmap(), scatterwalk_advance(), and scatterwalk_done().
Remove unnecessary code that seemed to be intended to advance to the
next sg entry, which is already handled by the scatterwalk functions.
Adjust variable naming slightly to keep things consistent.

Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/arm64/crypto/aes-ce-ccm-glue.c
arch/arm64/crypto/ghash-ce-glue.c
arch/arm64/crypto/sm4-ce-ccm-glue.c
arch/arm64/crypto/sm4-ce-gcm-glue.c

index a2b5d6f..1c29546 100644 (file)
@@ -156,23 +156,14 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, len);
-               u8 *p;
-
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, len);
-               }
-               p = scatterwalk_map(&walk);
+               unsigned int n;
+               const u8 *p;
 
+               p = scatterwalk_next(&walk, len, &n);
                macp = ce_aes_ccm_auth_data(mac, p, n, macp, ctx->key_enc,
                                            num_rounds(ctx));
-
+               scatterwalk_done_src(&walk, p, n);
                len -= n;
-
-               scatterwalk_unmap(p);
-               scatterwalk_advance(&walk, n);
-               scatterwalk_done(&walk, 0, len);
        } while (len);
 }
 
index da7b7ec..69d4fb7 100644 (file)
@@ -308,21 +308,13 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u64 dg[], u32 len)
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, len);
-               u8 *p;
-
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, len);
-               }
-               p = scatterwalk_map(&walk);
+               unsigned int n;
+               const u8 *p;
 
+               p = scatterwalk_next(&walk, len, &n);
                gcm_update_mac(dg, p, n, buf, &buf_count, ctx);
+               scatterwalk_done_src(&walk, p, n);
                len -= n;
-
-               scatterwalk_unmap(p);
-               scatterwalk_advance(&walk, n);
-               scatterwalk_done(&walk, 0, len);
        } while (len);
 
        if (buf_count) {
index 5e7e17b..119f86e 100644 (file)
@@ -112,17 +112,12 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, assoclen);
-               u8 *p, *ptr;
+               unsigned int n, orig_n;
+               const u8 *p, *orig_p;
 
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, assoclen);
-               }
-
-               p = ptr = scatterwalk_map(&walk);
-               assoclen -= n;
-               scatterwalk_advance(&walk, n);
+               orig_p = scatterwalk_next(&walk, assoclen, &orig_n);
+               p = orig_p;
+               n = orig_n;
 
                while (n > 0) {
                        unsigned int l, nblocks;
@@ -136,9 +131,9 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
                                } else {
                                        nblocks = n / SM4_BLOCK_SIZE;
                                        sm4_ce_cbcmac_update(ctx->rkey_enc,
-                                                            mac, ptr, nblocks);
+                                                            mac, p, nblocks);
 
-                                       ptr += nblocks * SM4_BLOCK_SIZE;
+                                       p += nblocks * SM4_BLOCK_SIZE;
                                        n %= SM4_BLOCK_SIZE;
 
                                        continue;
@@ -147,15 +142,15 @@ static void ccm_calculate_auth_mac(struct aead_request *req, u8 mac[])
 
                        l = min(n, SM4_BLOCK_SIZE - len);
                        if (l) {
-                               crypto_xor(mac + len, ptr, l);
+                               crypto_xor(mac + len, p, l);
                                len += l;
-                               ptr += l;
+                               p += l;
                                n -= l;
                        }
                }
 
-               scatterwalk_unmap(p);
-               scatterwalk_done(&walk, 0, assoclen);
+               scatterwalk_done_src(&walk, orig_p, orig_n);
+               assoclen -= orig_n;
        } while (assoclen);
 }
 
index 73bfb69..2e27d77 100644 (file)
@@ -82,20 +82,15 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u8 ghash[])
        scatterwalk_start(&walk, req->src);
 
        do {
-               u32 n = scatterwalk_clamp(&walk, assoclen);
-               u8 *p, *ptr;
+               unsigned int n, orig_n;
+               const u8 *p, *orig_p;
 
-               if (!n) {
-                       scatterwalk_start(&walk, sg_next(walk.sg));
-                       n = scatterwalk_clamp(&walk, assoclen);
-               }
-
-               p = ptr = scatterwalk_map(&walk);
-               assoclen -= n;
-               scatterwalk_advance(&walk, n);
+               orig_p = scatterwalk_next(&walk, assoclen, &orig_n);
+               p = orig_p;
+               n = orig_n;
 
                if (n + buflen < GHASH_BLOCK_SIZE) {
-                       memcpy(&buffer[buflen], ptr, n);
+                       memcpy(&buffer[buflen], p, n);
                        buflen += n;
                } else {
                        unsigned int nblocks;
@@ -103,8 +98,8 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u8 ghash[])
                        if (buflen) {
                                unsigned int l = GHASH_BLOCK_SIZE - buflen;
 
-                               memcpy(&buffer[buflen], ptr, l);
-                               ptr += l;
+                               memcpy(&buffer[buflen], p, l);
+                               p += l;
                                n -= l;
 
                                pmull_ghash_update(ctx->ghash_table, ghash,
@@ -114,17 +109,17 @@ static void gcm_calculate_auth_mac(struct aead_request *req, u8 ghash[])
                        nblocks = n / GHASH_BLOCK_SIZE;
                        if (nblocks) {
                                pmull_ghash_update(ctx->ghash_table, ghash,
-                                                  ptr, nblocks);
-                               ptr += nblocks * GHASH_BLOCK_SIZE;
+                                                  p, nblocks);
+                               p += nblocks * GHASH_BLOCK_SIZE;
                        }
 
                        buflen = n % GHASH_BLOCK_SIZE;
                        if (buflen)
-                               memcpy(&buffer[0], ptr, buflen);
+                               memcpy(&buffer[0], p, buflen);
                }
 
-               scatterwalk_unmap(p);
-               scatterwalk_done(&walk, 0, assoclen);
+               scatterwalk_done_src(&walk, orig_p, orig_n);
+               assoclen -= orig_n;
        } while (assoclen);
 
        /* padding with '0' */