]> wagner.pp.ru Git - openssl-gost/engine.git/commitdiff
gosthash2012: Optimize `gost2012_hash_block' loop
authordmitry dulesov <dmitry.dulesov@gmail.com>
Thu, 30 Jan 2020 02:41:36 +0000 (05:41 +0300)
committerDmitry Belyavskiy <beldmit@users.noreply.github.com>
Sun, 2 Feb 2020 18:05:29 +0000 (21:05 +0300)
Some simple optimizations.

Committed-by: Vitaly Chikunov <vt@altlinux.org>
gosthash2012.c

index 0868d6c1c2113d90ac920cf8e76a24adce8edb2d..b844ab3fb28838f3c2a4aba16ab2af2dd357ec14 100644 (file)
@@ -190,33 +190,35 @@ static INLINE void stage3(gost2012_hash_ctx * CTX)
 void gost2012_hash_block(gost2012_hash_ctx * CTX,
                          const unsigned char *data, size_t len)
 {
-    size_t chunksize;
+    register size_t chunksize;
+    register size_t bufsize = CTX->bufsize;
 
-    while (len > 63 && CTX->bufsize == 0) {
-        memcpy(CTX->buffer.B, data, 64);
-        stage2(CTX, &(CTX->buffer));
-
-        data += 64;
-        len -= 64;
+    if (bufsize == 0) {
+        while (len >= 64) {
+            memcpy(&CTX->buffer.B[0], data, 64);
+            stage2(CTX, &(CTX->buffer));
+            data += 64;
+            len -= 64;
+        }
     }
 
     while (len) {
-        chunksize = 64 - CTX->bufsize;
+        chunksize = 64 - bufsize;
         if (chunksize > len)
             chunksize = len;
 
-        memcpy(&CTX->buffer.B[CTX->bufsize], data, chunksize);
+        memcpy(&CTX->buffer.B[bufsize], data, chunksize);
 
-        CTX->bufsize += chunksize;
+        bufsize += chunksize;
         len -= chunksize;
         data += chunksize;
 
-        if (CTX->bufsize == 64) {
-            stage2(CTX, &(CTX->buffer));
-
-            CTX->bufsize = 0;
+        if (bufsize == 64) {
+            stage2(CTX, &(CTX->buffer) );
+            bufsize = 0;
         }
     }
+    CTX->bufsize = bufsize;
 }
 
 /*