summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/node/polyfills/internal/crypto/keygen.ts20
-rw-r--r--tests/unit_node/crypto/crypto_key_test.ts23
2 files changed, 39 insertions, 4 deletions
diff --git a/ext/node/polyfills/internal/crypto/keygen.ts b/ext/node/polyfills/internal/crypto/keygen.ts
index 44bfd8327..b023ab106 100644
--- a/ext/node/polyfills/internal/crypto/keygen.ts
+++ b/ext/node/polyfills/internal/crypto/keygen.ts
@@ -30,6 +30,7 @@ import {
import { Buffer } from "node:buffer";
import { KeyFormat, KeyType } from "ext:deno_node/internal/crypto/types.ts";
import process from "node:process";
+import { promisify } from "node:util";
import {
op_node_generate_dh_group_key,
@@ -570,7 +571,15 @@ export function generateKeyPair(
privateKey: any,
) => void,
) {
- createJob(kAsync, type, options).then((pair) => {
+ _generateKeyPair(type, options)
+ .then(
+ (res) => callback(null, res.publicKey, res.privateKey),
+ (err) => callback(err, null, null),
+ );
+}
+
+function _generateKeyPair(type: string, options: unknown) {
+ return createJob(kAsync, type, options).then((pair) => {
const privateKeyHandle = op_node_get_private_key_from_pair(pair);
const publicKeyHandle = op_node_get_public_key_from_pair(pair);
@@ -589,12 +598,15 @@ export function generateKeyPair(
}
}
- callback(null, publicKey, privateKey);
- }).catch((err) => {
- callback(err, null, null);
+ return { publicKey, privateKey };
});
}
+Object.defineProperty(generateKeyPair, promisify.custom, {
+ enumerable: false,
+ value: _generateKeyPair,
+});
+
export interface KeyPairKeyObjectResult {
publicKey: KeyObject;
privateKey: KeyObject;
diff --git a/tests/unit_node/crypto/crypto_key_test.ts b/tests/unit_node/crypto/crypto_key_test.ts
index 3c7ad4423..5d206acc7 100644
--- a/tests/unit_node/crypto/crypto_key_test.ts
+++ b/tests/unit_node/crypto/crypto_key_test.ts
@@ -677,3 +677,26 @@ Deno.test("generateKeyPair large pem", function () {
},
});
});
+
+Deno.test("generateKeyPair promisify", async () => {
+ const passphrase = "mypassphrase";
+ const cipher = "aes-256-cbc";
+ const modulusLength = 4096;
+
+ const { privateKey, publicKey } = await promisify(generateKeyPair)("rsa", {
+ modulusLength,
+ publicKeyEncoding: {
+ type: "spki",
+ format: "pem",
+ },
+ privateKeyEncoding: {
+ type: "pkcs8",
+ format: "pem",
+ cipher,
+ passphrase,
+ },
+ });
+
+ assert(publicKey.startsWith("-----BEGIN PUBLIC KEY-----"));
+ assert(privateKey.startsWith("-----BEGIN PRIVATE KEY-----"));
+});