]> git.kaiwu.me - njs.git/commitdiff
Webcrypto: use constant-time HMAC verification
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 21 Sep 2026 23:22:45 +0000 (16:22 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Fri, 25 Sep 2026 23:00:29 +0000 (16:00 -0700)
external/njs_webcrypto_module.c
external/qjs_webcrypto_module.c
test/webcrypto/verify.t.mjs

index 0d54a2629cf897de7400aa2930fa99654a162080..cc4ef26f8414b6316e3732861eefb79618355fdb 100644 (file)
@@ -4787,7 +4787,8 @@ njs_ext_sign(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
         }
 
         if (verify) {
-            ret = (sig.length == outlen && memcmp(sig.start, dst, outlen) == 0);
+            ret = (sig.length == outlen
+                   && CRYPTO_memcmp(sig.start, dst, outlen) == 0);
         }
 
         break;
index 29f1931cbf435febc9764223c24d8296f2f3539f..9a06a50f036f44e55a2c21a757e707a96a80b48f 100644 (file)
@@ -4758,7 +4758,8 @@ qjs_webcrypto_sign(JSContext *cx, JSValueConst this_val, int argc,
         }
 
         if (verify) {
-            rc = (sig.length == outlen && memcmp(sig.start, dst, outlen) == 0);
+            rc = (sig.length == outlen
+                  && CRYPTO_memcmp(sig.start, dst, outlen) == 0);
         }
 
         break;
index 5f77ad4762a961020561b3328d39eac4c3327a34..a4fb9e94cfb17dd50444c9175770eac38ceeffd5 100644 (file)
@@ -73,6 +73,7 @@ let hmac_tsuite = {
     tests: [
         { signature: "text.base64.sha256.hmac.sig", expected: true },
         { signature: "text.base64.sha256.hmac.sig.broken", expected: false },
+        { signature: "text.base64.sha1.hmac.sig", expected: false },
         { import_alg: { hash: "SHA-1" }, signature: "text.base64.sha1.hmac.sig", expected: true },
         { import_alg: { hash: "SHA-1" }, signature: "text.base64.sha256.hmac.sig", expected: false },
         { key: { file: "aabbccdd" }, signature: "text.base64.sha256.hmac.sig", expected: false },