]> git.kaiwu.me - njs.git/commitdiff
Webcrypto: validate EC JWK curve type
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 21 Sep 2026 23:22:24 +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
test/webcrypto/import.t.mjs

index 9dfc3a7ed8baea06e08557174506e9dcf60f070a..0d54a2629cf897de7400aa2930fa99654a162080 100644 (file)
@@ -3584,14 +3584,17 @@ fail0:
     curve = 0;
 
     val = njs_vm_object_prop(vm, jwk, &string_crv, &value);
-    if (val != NULL && !njs_value_is_undefined(val)) {
-        njs_value_string_get(vm, val, &name);
+    if (val == NULL || !njs_value_is_string(val)) {
+        njs_vm_type_error(vm, "Invalid JWK EC key");
+        return NULL;
+    }
 
-        for (e = &njs_webcrypto_curve[0]; e->name.length != 0; e++) {
-            if (njs_strstr_eq(&name, &e->name)) {
-                curve = e->value;
-                break;
-            }
+    njs_value_string_get(vm, val, &name);
+
+    for (e = &njs_webcrypto_curve[0]; e->name.length != 0; e++) {
+        if (njs_strstr_eq(&name, &e->name)) {
+            curve = e->value;
+            break;
         }
     }
 
index 2d1ea70c0343984d1f335e383a5bc5149988173a..9972d68d301c64e98c236428cf6e74ec156eca70 100644 (file)
@@ -269,15 +269,25 @@ let ec_tsuite = {
                extractable: true,
                usage: [ "sign" ] },
         exception: "TypeError: Invalid JWK EC key" },
+      { key: { fmt: "jwk",
+               key: { kty: "EC",
+                       x: "cUUsZRGuVYReGiTQl9MqR7ir6dZIgw-8pM-F0phJWdw",
+                       y: "4Nzn_7uNz0AA3U4fhpfVxSD4U5QciGyEoM4r3jC7bjI",
+                       d: "E2sW0_4a3QXaSTJ0JKbSUbieKTD1UFtr7i_2CuetP6A" },
+                alg: { name: "ECDSA", namedCurve: "P-256" },
+                extractable: true,
+                usage: [ "sign" ] },
+        exception: "TypeError: Invalid JWK EC key" },
       { key: { fmt: "jwk",
                key: { kty: "EC",
                       x: "cUUsZRGuVYReGiTQl9MqR7ir6dZIgw-8pM-F0phJWdw",
                       y: "4Nzn_7uNz0AA3U4fhpfVxSD4U5QciGyEoM4r3jC7bjI",
-                      d: "E2sW0_4a3QXaSTJ0JKbSUbieKTD1UFtr7i_2CuetP6A" },
+                      d: "E2sW0_4a3QXaSTJ0JKbSUbieKTD1UFtr7i_2CuetP6A",
+                      crv: 256 },
                alg: { name: "ECDSA", namedCurve: "P-256" },
                extractable: true,
                usage: [ "sign" ] },
-        exception: "JWK EC curve mismatch" },
+        exception: "TypeError: Invalid JWK EC key" },
       { key: { fmt: "jwk",
                key: { kty: "EC",
                       x: "cUUsZRGuVYReGiTQl9MqR7ir6dZIgw-8pM-F0phJWdw",