]> git.kaiwu.me - njs.git/commitdiff
Fixed crypto.createHmac() for keys with size >= alg size and < 64.
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 4 May 2018 16:25:15 +0000 (19:25 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 4 May 2018 16:25:15 +0000 (19:25 +0300)
njs/njs_crypto.c
njs/test/njs_unit_test.c

index 984f9d3c1a1b36e88d80c9e29f4abb2d6f46a62f..ccb60710c682ced140b3d5a2bed77fc1068b4470 100644 (file)
@@ -425,13 +425,9 @@ njs_crypto_create_hmac(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         memcpy(key_buf, digest, alg->size);
         memset(key_buf + alg->size, 0, sizeof(key_buf) - alg->size);
 
-    } else if (key.length < alg->size) {
-
-        memcpy(key_buf, key.start, key.length);
-        memset(key_buf + key.length, 0, sizeof(key_buf) - key.length);
-
     } else {
         memcpy(key_buf, key.start, sizeof(key_buf));
+        memset(key_buf + key.length, 0, sizeof(key_buf) - key.length);
     }
 
     for (i = 0; i < 64; i++) {
index d32c76b40d9d2fd491accae704e0b697e20a5900..1bf0411e69c296a23bc5907e770fdc891e6e98e2 100644 (file)
@@ -9256,6 +9256,10 @@ static njs_unit_test_t  njs_test[] =
                  "h.update('abc'.repeat(100)).digest('hex')"),
       nxt_string("b105ad6921e4c54d3fa0a9ec3f7f0ee9bd2c659d") },
 
+    { nxt_string("var h = require('crypto').createHmac('sha1', 'A'.repeat(40));"
+                 "h.update('AB').digest('hex')"),
+      nxt_string("0b84f78ca5275d76d4b7dafb5845ee2b6a79c4c2") },
+
     { nxt_string("var h = require('crypto').createHmac('sha1', 'A'.repeat(64));"
                  "h.update('AB').digest('hex')"),
       nxt_string("400ce530816c6b3247e2959f3982a12aaf58c0c9") },