summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2024-03-13 20:26:07 -0700
committerGitHub <noreply@github.com>2024-03-14 08:56:07 +0530
commit10e592f95491b3a464bbf2199e7ee5819b537570 (patch)
treec07b6ce2e1caa0868b731a91f68e7e3202f3f370
parent66fd6f286641d4d2491d7b4bb314bd7e7eff16d8 (diff)
fix(ext/node): DH (`dhKeyAgreement`) support for `createPrivateKey` (#22891)
Ref https://github.com/denoland/deno/pull/22511
-rw-r--r--ext/node/ops/crypto/mod.rs5
-rw-r--r--tests/unit_node/crypto/crypto_key_test.ts18
2 files changed, 23 insertions, 0 deletions
diff --git a/ext/node/ops/crypto/mod.rs b/ext/node/ops/crypto/mod.rs
index c2a9b1ab7..e597a9109 100644
--- a/ext/node/ops/crypto/mod.rs
+++ b/ext/node/ops/crypto/mod.rs
@@ -1216,6 +1216,8 @@ pub enum AsymmetricKeyDetails {
#[serde(rename = "ec")]
#[serde(rename_all = "camelCase")]
Ec { named_curve: String },
+ #[serde(rename = "dh")]
+ Dh,
}
// https://oidref.com/
@@ -1275,6 +1277,8 @@ static MGF1_SHA1_MASK_ALGORITHM: Lazy<
pub const RSA_ENCRYPTION_OID: const_oid::ObjectIdentifier =
const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.1");
+pub const DH_KEY_AGREEMENT_OID: const_oid::ObjectIdentifier =
+ const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.3.1");
pub const RSASSA_PSS_OID: const_oid::ObjectIdentifier =
const_oid::ObjectIdentifier::new_unwrap("1.2.840.113549.1.1.10");
pub const EC_OID: const_oid::ObjectIdentifier =
@@ -1409,6 +1413,7 @@ pub fn op_node_create_private_key(
.into(),
})
}
+ DH_KEY_AGREEMENT_OID => Ok(AsymmetricKeyDetails::Dh),
RSASSA_PSS_OID => {
let params = PssPrivateKeyParameters::try_from(
pk_info
diff --git a/tests/unit_node/crypto/crypto_key_test.ts b/tests/unit_node/crypto/crypto_key_test.ts
index 9b8224cd1..656c7bb24 100644
--- a/tests/unit_node/crypto/crypto_key_test.ts
+++ b/tests/unit_node/crypto/crypto_key_test.ts
@@ -229,6 +229,24 @@ Deno.test("createPrivateKey rsa", function () {
assertEquals(key.asymmetricKeyDetails?.publicExponent, 65537n);
});
+Deno.test("createPrivateKey dh", function () {
+ // 1.2.840.113549.1.3.1
+ const pem = "-----BEGIN PRIVATE KEY-----\n" +
+ "MIIBoQIBADCB1QYJKoZIhvcNAQMBMIHHAoHBAP//////////yQ/aoiFowjTExmKL\n" +
+ "gNwc0SkCTgiKZ8x0Agu+pjsTmyJRSgh5jjQE3e+VGbPNOkMbMCsKbfJfFDdP4TVt\n" +
+ "bVHCReSFtXZiXn7G9ExC6aY37WsL/1y29Aa37e44a/taiZ+lrp8kEXxLH+ZJKGZR\n" +
+ "7ORbPcIAfLihY78FmNpINhxV05ppFj+o/STPX4NlXSPco62WHGLzViCFUrue1SkH\n" +
+ "cJaWbWcMNU5KvJgE8XRsCMojcyf//////////wIBAgSBwwKBwHxnT7Zw2Ehh1vyw\n" +
+ "eolzQFHQzyuT0y+3BF+FxK2Ox7VPguTp57wQfGHbORJ2cwCdLx2mFM7gk4tZ6COS\n" +
+ "E3Vta85a/PuhKXNLRdP79JgLnNtVtKXB+ePDS5C2GgXH1RHvqEdJh7JYnMy7Zj4P\n" +
+ "GagGtIy3dV5f4FA0B/2C97jQ1pO16ah8gSLQRKsNpTCw2rqsZusE0rK6RaYAef7H\n" +
+ "y/0tmLIsHxLIn+WK9CANqMbCWoP4I178BQaqhiOBkNyNZ0ndqA==\n" +
+ "-----END PRIVATE KEY-----";
+ const key = createPrivateKey(pem);
+ assertEquals(key.type, "private");
+ assertEquals(key.asymmetricKeyType, "dh");
+});
+
// openssl ecparam -name secp256r1 -genkey -noout -out a.pem
// openssl pkcs8 -topk8 -nocrypt -in a.pem -out b.pem
const ecPrivateKey = Deno.readTextFileSync(