diff options
-rw-r--r-- | ext/node/ops/crypto/mod.rs | 5 | ||||
-rw-r--r-- | tests/unit_node/crypto/crypto_key_test.ts | 18 |
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( |