From bfd5f1598cc462b460791fdfca9bb6c2c69fec9b Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Sat, 6 Jan 2024 16:48:31 +0530 Subject: feat(ext/crypto): initial support for p521 in `generateKey` and `importKey` (#21815) Part 1 of a potential 3 part series. Ref #13449 The current implementation passes key material back and forth RustCrypto group of crates and ring. ring does not implement p521 yet. This PR adds support for P521 named curve in `generateKey` and `importKey` where we use RustCrypto. Other parts should be moved over to the RustGroup group of crates for consistency. --- tools/wpt/expectation.json | 160 +++------------------------------------------ 1 file changed, 8 insertions(+), 152 deletions(-) (limited to 'tools') diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json index 2c9aa8ceb..f473eef20 100644 --- a/tools/wpt/expectation.json +++ b/tools/wpt/expectation.json @@ -12,7 +12,6 @@ "P-521 mismatched curves", "P-521 public property of algorithm is not an ECDSA public key", "P-521 no deriveBits usage for base key", - "P-521 base key is not a private key", "P-521 public property value is a private key", "P-521 public property value is a secret key", "P-521 asking for too many bits" @@ -26,7 +25,6 @@ "P-521 mismatched curves", "P-521 public property of algorithm is not an ECDSA public key", "P-521 no deriveBits usage for base key", - "P-521 base key is not a private key", "P-521 public property value is a private key", "P-521 public property value is a secret key", "P-521 asking for too many bits" @@ -37,7 +35,6 @@ "P-521 mismatched curves", "P-521 public property of algorithm is not an ECDSA public key", "P-521 no deriveKey usage for base key", - "P-521 base key is not a private key", "P-521 public property value is a private key", "P-521 public property value is a secret key" ], @@ -47,7 +44,6 @@ "P-521 mismatched curves", "P-521 public property of algorithm is not an ECDSA public key", "P-521 no deriveKey usage for base key", - "P-521 base key is not a private key", "P-521 public property value is a private key", "P-521 public property value is a secret key" ], @@ -699,22 +695,10 @@ "failures_AES-GCM.https.any.worker.html": true, "failures_AES-KW.https.any.html": true, "failures_AES-KW.https.any.worker.html": true, - "failures_ECDH.https.any.html": [ - "Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, [])", - "Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, [])" - ], - "failures_ECDH.https.any.worker.html": [ - "Empty usages: generateKey({name: ECDH, namedCurve: P-521}, false, [])", - "Empty usages: generateKey({name: ECDH, namedCurve: P-521}, true, [])" - ], - "failures_ECDSA.https.any.html": [ - "Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, [])", - "Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [])" - ], - "failures_ECDSA.https.any.worker.html": [ - "Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, false, [])", - "Empty usages: generateKey({name: ECDSA, namedCurve: P-521}, true, [])" - ], + "failures_ECDH.https.any.html": true, + "failures_ECDH.https.any.worker.html": true, + "failures_ECDSA.https.any.html": true, + "failures_ECDSA.https.any.worker.html": true, "failures_HMAC.https.any.html": true, "failures_HMAC.https.any.worker.html": true, "failures_RSA-OAEP.https.any.html": true, @@ -733,98 +717,10 @@ "successes_AES-KW.https.any.worker.html": true, "successes_HMAC.https.any.html": true, "successes_HMAC.https.any.worker.html": true, - "successes_ECDH.https.any.html": [ - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])" - ], - "successes_ECDH.https.any.worker.html": [ - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits, deriveKey])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveBits])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveBits])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits, deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits, deriveKey])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", - "Success: generateKey({name: Ecdh, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])" - ], - "successes_ECDSA.https.any.html": [ - "Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify])" - ], - "successes_ECDSA.https.any.worker.html": [ - "Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [verify, sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [verify, sign])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, false, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: ECDSA, namedCurve: P-521}, true, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [verify, sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [verify, sign])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [verify, sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [verify, sign])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, false, [sign, verify, sign, sign, verify])", - "Success: generateKey({name: Ecdsa, namedCurve: P-521}, true, [sign, verify, sign, sign, verify])" - ], + "successes_ECDH.https.any.html": true, + "successes_ECDH.https.any.worker.html": true, + "successes_ECDSA.https.any.html": true, + "successes_ECDSA.https.any.worker.html": true, "successes_RSA-OAEP.https.any.html?1-10": true, "successes_RSA-OAEP.https.any.html?101-110": true, "successes_RSA-OAEP.https.any.html?11-20": true, @@ -1061,21 +957,6 @@ "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign])", "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign, sign])", "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign, sign])", "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [])", @@ -1109,11 +990,6 @@ "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits])", "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits])", "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDH, namedCurve: P-521}, false, [])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveKey])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits])", @@ -1167,21 +1043,6 @@ "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign])", "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [sign, sign])", "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDSA, namedCurve: P-521}, true, [])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDSA, namedCurve: P-521}, false, [verify, verify])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [sign, sign])", "Empty Usages: P-521 bits (pkcs8, buffer(241), {name: ECDSA, namedCurve: P-521}, false, [])", @@ -1215,11 +1076,6 @@ "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveBits])", "Good parameters: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [deriveKey, deriveBits, deriveKey, deriveBits])", "Empty Usages: P-521 bits (jwk, object(kty, crv, x, y, d), {name: ECDH, namedCurve: P-521}, true, [])", - "Good parameters: P-521 bits (spki, buffer(158), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (spki, buffer(90, compressed), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (jwk, object(kty, crv, x, y), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(133), {name: ECDH, namedCurve: P-521}, false, [])", - "Good parameters: P-521 bits (raw, buffer(67, compressed), {name: ECDH, namedCurve: P-521}, false, [])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveKey])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits, deriveKey])", "Good parameters: P-521 bits (pkcs8, buffer(241), {name: ECDH, namedCurve: P-521}, false, [deriveBits])", -- cgit v1.2.3