Use memset instead of setting buffers byte by byte
authorJussi Kivilinna <jussi.kivilinna@iki.fi>
Thu, 21 Mar 2019 18:43:46 +0000 (20:43 +0200)
committerJussi Kivilinna <jussi.kivilinna@iki.fi>
Sat, 23 Mar 2019 18:44:49 +0000 (20:44 +0200)
* cipher/cipher-ccm.c (do_cbc_mac): Replace buffer setting loop with memset call.
* cipher/cipher-gcm.c (do_ghash_buf): Ditto.
* cipher/poly1305.c (poly1305_final): Ditto.
--

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
cipher/cipher-ccm.c
cipher/cipher-gcm.c
cipher/poly1305.c

index 3bacb6b..dcb268d 100644 (file)
@@ -65,8 +65,12 @@ do_cbc_mac (gcry_cipher_hd_t c, const unsigned char *inbuf, size_t inlen,
           if (!do_padding)
             break;
 
-          while (unused < blocksize)
-            c->u_mode.ccm.macbuf[unused++] = 0;
+         n = blocksize - unused;
+         if (n > 0)
+           {
+             memset (&c->u_mode.ccm.macbuf[unused], 0, n);
+             unused = blocksize;
+           }
         }
 
       if (unused > 0)
index f9ddbc5..4fdd612 100644 (file)
@@ -525,8 +525,12 @@ do_ghash_buf(gcry_cipher_hd_t c, byte *hash, const byte *buf,
           if (!do_padding)
             break;
 
-          while (unused < blocksize)
-            c->u_mode.gcm.macbuf[unused++] = 0;
+         n = blocksize - unused;
+         if (n > 0)
+           {
+             memset (&c->u_mode.gcm.macbuf[unused], 0, n);
+             unused = blocksize;
+           }
         }
 
       if (unused > 0)
index 8de6cd5..cded7cb 100644 (file)
@@ -202,8 +202,12 @@ static unsigned int poly1305_final (poly1305_context_t *ctx,
   if (ctx->leftover)
     {
       ctx->buffer[ctx->leftover++] = 1;
-      for (; ctx->leftover < POLY1305_BLOCKSIZE; ctx->leftover++)
-       ctx->buffer[ctx->leftover] = 0;
+      if (ctx->leftover < POLY1305_BLOCKSIZE)
+       {
+         memset (&ctx->buffer[ctx->leftover], 0,
+                 POLY1305_BLOCKSIZE - ctx->leftover);
+         ctx->leftover = POLY1305_BLOCKSIZE;
+       }
       burn = poly1305_blocks (ctx, ctx->buffer, POLY1305_BLOCKSIZE, 0);
     }
 
@@ -398,8 +402,12 @@ static unsigned int poly1305_final (poly1305_context_t *ctx,
   if (ctx->leftover)
     {
       ctx->buffer[ctx->leftover++] = 1;
-      for (; ctx->leftover < POLY1305_BLOCKSIZE; ctx->leftover++)
-       ctx->buffer[ctx->leftover] = 0;
+      if (ctx->leftover < POLY1305_BLOCKSIZE)
+       {
+         memset (&ctx->buffer[ctx->leftover], 0,
+                 POLY1305_BLOCKSIZE - ctx->leftover);
+         ctx->leftover = POLY1305_BLOCKSIZE;
+       }
       burn = poly1305_blocks (ctx, ctx->buffer, POLY1305_BLOCKSIZE, 0);
     }