Skip to content

Commit bbad7c5

Browse files
authoredOct 14, 2024··
fix(ext/node): compute pem length (upper bound) for key exports (denoland#26231)
Fixes denoland#26188
1 parent 68b388a commit bbad7c5

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed
 

‎ext/node/ops/crypto/keys.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -2024,7 +2024,9 @@ pub fn op_node_export_public_key_pem(
20242024
_ => unreachable!("export_der would have errored"),
20252025
};
20262026

2027-
let mut out = vec![0; 2048];
2027+
let pem_len = der::pem::encapsulated_len(label, LineEnding::LF, data.len())
2028+
.map_err(|_| type_error("very large data"))?;
2029+
let mut out = vec![0; pem_len];
20282030
let mut writer = PemWriter::new(label, LineEnding::LF, &mut out)?;
20292031
writer.write(&data)?;
20302032
let len = writer.finish()?;
@@ -2063,7 +2065,9 @@ pub fn op_node_export_private_key_pem(
20632065
_ => unreachable!("export_der would have errored"),
20642066
};
20652067

2066-
let mut out = vec![0; 2048];
2068+
let pem_len = der::pem::encapsulated_len(label, LineEnding::LF, data.len())
2069+
.map_err(|_| type_error("very large data"))?;
2070+
let mut out = vec![0; pem_len];
20672071
let mut writer = PemWriter::new(label, LineEnding::LF, &mut out)?;
20682072
writer.write(&data)?;
20692073
let len = writer.finish()?;

‎tests/unit_node/crypto/crypto_key_test.ts

+21
Original file line numberDiff line numberDiff line change
@@ -656,3 +656,24 @@ z6TExWlQMjt66nV7R8cRAkzmABrG+NW3e8Zpac7Lkuv+zu0S+K7c
656656
assertEquals(publicKey.type, "public");
657657
assertEquals(publicKey.asymmetricKeyType, "rsa");
658658
});
659+
660+
// https://github.com/denoland/deno/issues/26188
661+
Deno.test("generateKeyPair large pem", function () {
662+
const passphrase = "mypassphrase";
663+
const cipher = "aes-256-cbc";
664+
const modulusLength = 4096;
665+
666+
generateKeyPairSync("rsa", {
667+
modulusLength,
668+
publicKeyEncoding: {
669+
type: "spki",
670+
format: "pem",
671+
},
672+
privateKeyEncoding: {
673+
type: "pkcs8",
674+
format: "pem",
675+
cipher,
676+
passphrase,
677+
},
678+
});
679+
});

0 commit comments

Comments
 (0)
Please sign in to comment.