1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

fix(ext/crypto): fix identity test for x25519 derive bits (#26011)

This commit is contained in:
Divy Srivastava 2024-10-03 16:46:48 +05:30 committed by GitHub
parent ac73b1042b
commit e54809f2d5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 46 additions and 70 deletions

View file

@ -47,10 +47,10 @@ pub fn op_crypto_derive_bits_x25519(
let sh_sec = x25519_dalek::x25519(k, u); let sh_sec = x25519_dalek::x25519(k, u);
let point = MontgomeryPoint(sh_sec); let point = MontgomeryPoint(sh_sec);
if point.ct_eq(&MONTGOMERY_IDENTITY).unwrap_u8() == 1 { if point.ct_eq(&MONTGOMERY_IDENTITY).unwrap_u8() == 1 {
return false; return true;
} }
secret.copy_from_slice(&sh_sec); secret.copy_from_slice(&sh_sec);
true false
} }
// id-X25519 OBJECT IDENTIFIER ::= { 1 3 101 110 } // id-X25519 OBJECT IDENTIFIER ::= { 1 3 101 110 }

View file

@ -2045,3 +2045,43 @@ Deno.test(async function p521Generate() {
assert(key.privateKey instanceof CryptoKey); assert(key.privateKey instanceof CryptoKey);
assert(key.publicKey instanceof CryptoKey); assert(key.publicKey instanceof CryptoKey);
}); });
Deno.test(async function x25519SharedSecret() {
const alicesKeyPair = await crypto.subtle.generateKey(
{
name: "X25519",
},
false,
["deriveBits"],
) as CryptoKeyPair;
const bobsKeyPair = await crypto.subtle.generateKey(
{
name: "X25519",
},
false,
["deriveBits"],
) as CryptoKeyPair;
const sharedSecret1 = await crypto.subtle.deriveBits(
{
name: "X25519",
public: bobsKeyPair.publicKey,
},
alicesKeyPair.privateKey,
128,
);
const sharedSecret2 = await crypto.subtle.deriveBits(
{
name: "X25519",
public: alicesKeyPair.publicKey,
},
bobsKeyPair.privateKey,
128,
);
assertEquals(sharedSecret1.byteLength, sharedSecret2.byteLength);
assertEquals(sharedSecret1.byteLength, 16);
assertEquals(new Uint8Array(sharedSecret1), new Uint8Array(sharedSecret2));
});

View file

@ -54,23 +54,12 @@
"pbkdf2.https.any.worker.html?7001-8000": true, "pbkdf2.https.any.worker.html?7001-8000": true,
"pbkdf2.https.any.worker.html?8001-last": true, "pbkdf2.https.any.worker.html?8001-last": true,
"cfrg_curves_bits.https.any.html": [ "cfrg_curves_bits.https.any.html": [
"X25519 key derivation checks for all-zero value result with a key of order 0",
"X25519 key derivation checks for all-zero value result with a key of order 1",
"X25519 key derivation checks for all-zero value result with a key of order 8",
"X25519 key derivation checks for all-zero value result with a key of order p-1 (order 2)",
"X25519 key derivation checks for all-zero value result with a key of order p (=0, order 4)",
"X25519 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)",
"X448 key derivation checks for all-zero value result with a key of order 0", "X448 key derivation checks for all-zero value result with a key of order 0",
"X448 key derivation checks for all-zero value result with a key of order 1", "X448 key derivation checks for all-zero value result with a key of order 1",
"X448 key derivation checks for all-zero value result with a key of order p-1 (order 2)", "X448 key derivation checks for all-zero value result with a key of order p-1 (order 2)",
"X448 key derivation checks for all-zero value result with a key of order p (=0, order 4)", "X448 key derivation checks for all-zero value result with a key of order p (=0, order 4)",
"X448 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)", "X448 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)",
"X25519 good parameters",
"X25519 mixed case parameters",
"X25519 short result",
"X25519 non-multiple of 8 bits",
"X25519 mismatched algorithms", "X25519 mismatched algorithms",
"X25519 no deriveBits usage for base key",
"X448 good parameters", "X448 good parameters",
"X448 mixed case parameters", "X448 mixed case parameters",
"X448 short result", "X448 short result",
@ -83,23 +72,12 @@
"X448 asking for too many bits" "X448 asking for too many bits"
], ],
"cfrg_curves_bits.https.any.worker.html": [ "cfrg_curves_bits.https.any.worker.html": [
"X25519 key derivation checks for all-zero value result with a key of order 0",
"X25519 key derivation checks for all-zero value result with a key of order 1",
"X25519 key derivation checks for all-zero value result with a key of order 8",
"X25519 key derivation checks for all-zero value result with a key of order p-1 (order 2)",
"X25519 key derivation checks for all-zero value result with a key of order p (=0, order 4)",
"X25519 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)",
"X448 key derivation checks for all-zero value result with a key of order 0", "X448 key derivation checks for all-zero value result with a key of order 0",
"X448 key derivation checks for all-zero value result with a key of order 1", "X448 key derivation checks for all-zero value result with a key of order 1",
"X448 key derivation checks for all-zero value result with a key of order p-1 (order 2)", "X448 key derivation checks for all-zero value result with a key of order p-1 (order 2)",
"X448 key derivation checks for all-zero value result with a key of order p (=0, order 4)", "X448 key derivation checks for all-zero value result with a key of order p (=0, order 4)",
"X448 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)", "X448 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)",
"X25519 good parameters",
"X25519 mixed case parameters",
"X25519 short result",
"X25519 non-multiple of 8 bits",
"X25519 mismatched algorithms", "X25519 mismatched algorithms",
"X25519 no deriveBits usage for base key",
"X448 good parameters", "X448 good parameters",
"X448 mixed case parameters", "X448 mixed case parameters",
"X448 short result", "X448 short result",
@ -112,21 +90,12 @@
"X448 asking for too many bits" "X448 asking for too many bits"
], ],
"cfrg_curves_keys.https.any.html": [ "cfrg_curves_keys.https.any.html": [
"X25519 deriveBits checks for all-zero value result with a key of order 0",
"X25519 deriveBits checks for all-zero value result with a key of order 1",
"X25519 deriveBits checks for all-zero value result with a key of order 8",
"X25519 deriveBits checks for all-zero value result with a key of order p-1 (order 2)",
"X25519 deriveBits checks for all-zero value result with a key of order p (=0, order 4)",
"X25519 deriveBits checks for all-zero value result with a key of order p+1 (=1, order 1)",
"X448 deriveBits checks for all-zero value result with a key of order 0", "X448 deriveBits checks for all-zero value result with a key of order 0",
"X448 deriveBits checks for all-zero value result with a key of order 1", "X448 deriveBits checks for all-zero value result with a key of order 1",
"X448 deriveBits checks for all-zero value result with a key of order p-1 (order 2)", "X448 deriveBits checks for all-zero value result with a key of order p-1 (order 2)",
"X448 deriveBits checks for all-zero value result with a key of order p (=0, order 4)", "X448 deriveBits checks for all-zero value result with a key of order p (=0, order 4)",
"X448 deriveBits checks for all-zero value result with a key of order p+1 (=1, order 1)", "X448 deriveBits checks for all-zero value result with a key of order p+1 (=1, order 1)",
"Key derivation using a X25519 generated keys.",
"Key derivation using a X448 generated keys.", "Key derivation using a X448 generated keys.",
"X25519 good parameters",
"X25519 mixed case parameters",
"X25519 mismatched algorithms", "X25519 mismatched algorithms",
"X448 good parameters", "X448 good parameters",
"X448 mixed case parameters", "X448 mixed case parameters",
@ -137,21 +106,12 @@
"X448 public property value is a secret key" "X448 public property value is a secret key"
], ],
"cfrg_curves_keys.https.any.worker.html": [ "cfrg_curves_keys.https.any.worker.html": [
"X25519 deriveBits checks for all-zero value result with a key of order 0",
"X25519 deriveBits checks for all-zero value result with a key of order 1",
"X25519 deriveBits checks for all-zero value result with a key of order 8",
"X25519 deriveBits checks for all-zero value result with a key of order p-1 (order 2)",
"X25519 deriveBits checks for all-zero value result with a key of order p (=0, order 4)",
"X25519 deriveBits checks for all-zero value result with a key of order p+1 (=1, order 1)",
"X448 deriveBits checks for all-zero value result with a key of order 0", "X448 deriveBits checks for all-zero value result with a key of order 0",
"X448 deriveBits checks for all-zero value result with a key of order 1", "X448 deriveBits checks for all-zero value result with a key of order 1",
"X448 deriveBits checks for all-zero value result with a key of order p-1 (order 2)", "X448 deriveBits checks for all-zero value result with a key of order p-1 (order 2)",
"X448 deriveBits checks for all-zero value result with a key of order p (=0, order 4)", "X448 deriveBits checks for all-zero value result with a key of order p (=0, order 4)",
"X448 deriveBits checks for all-zero value result with a key of order p+1 (=1, order 1)", "X448 deriveBits checks for all-zero value result with a key of order p+1 (=1, order 1)",
"Key derivation using a X25519 generated keys.",
"Key derivation using a X448 generated keys.", "Key derivation using a X448 generated keys.",
"X25519 good parameters",
"X25519 mixed case parameters",
"X25519 mismatched algorithms", "X25519 mismatched algorithms",
"X448 good parameters", "X448 good parameters",
"X448 mixed case parameters", "X448 mixed case parameters",
@ -161,20 +121,8 @@
"X448 public property value is a private key", "X448 public property value is a private key",
"X448 public property value is a secret key" "X448 public property value is a secret key"
], ],
"derived_bits_length.https.any.html": [ "derived_bits_length.https.any.html": true,
"X25519 derivation with 256 as 'length' parameter", "derived_bits_length.https.any.worker.html": true
"X25519 derivation with 0 as 'length' parameter",
"X25519 derivation with null as 'length' parameter",
"X25519 derivation with undefined as 'length' parameter",
"X25519 derivation with omitted as 'length' parameter"
],
"derived_bits_length.https.any.worker.html": [
"X25519 derivation with 256 as 'length' parameter",
"X25519 derivation with 0 as 'length' parameter",
"X25519 derivation with null as 'length' parameter",
"X25519 derivation with undefined as 'length' parameter",
"X25519 derivation with omitted as 'length' parameter"
]
}, },
"digest": { "digest": {
"digest.https.any.html": true, "digest.https.any.html": true,
@ -1530,20 +1478,8 @@
"crypto-subtle-secure-context-available.https.sub.html": true "crypto-subtle-secure-context-available.https.sub.html": true
}, },
"wrapKey_unwrapKey": { "wrapKey_unwrapKey": {
"wrapKey_unwrapKey.https.any.html": [ "wrapKey_unwrapKey.https.any.html": true,
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-CTR", "wrapKey_unwrapKey.https.any.worker.html": true
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-CBC",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-GCM",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-KW",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and RSA-OAEP"
],
"wrapKey_unwrapKey.https.any.worker.html": [
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-CTR",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-CBC",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-GCM",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and AES-KW",
"Can wrap and unwrap X25519 private key keys as non-extractable using pkcs8 and RSA-OAEP"
]
} }
}, },
"console": { "console": {