| 'use strict'; |
| |
| const common = require('../common'); |
| if (!common.hasCrypto) |
| common.skip('missing crypto'); |
| |
| const assert = require('assert'); |
| const { |
| generateKeyPair, |
| } = require('crypto'); |
| const { |
| assertApproximateSize, |
| testSignVerify, |
| spkiExp, |
| } = require('../common/crypto'); |
| |
| // Test async DSA key generation. |
| { |
| const privateKeyEncoding = { |
| type: 'pkcs8', |
| format: 'der' |
| }; |
| |
| generateKeyPair('dsa', { |
| modulusLength: common.hasOpenSSL3 ? 2048 : 512, |
| divisorLength: 256, |
| publicKeyEncoding: { |
| type: 'spki', |
| format: 'pem' |
| }, |
| privateKeyEncoding: { |
| cipher: 'aes-128-cbc', |
| passphrase: 'secret', |
| ...privateKeyEncoding |
| } |
| }, common.mustSucceed((publicKey, privateKeyDER) => { |
| assert.strictEqual(typeof publicKey, 'string'); |
| assert.match(publicKey, spkiExp); |
| // The private key is DER-encoded. |
| assert(Buffer.isBuffer(privateKeyDER)); |
| |
| assertApproximateSize(publicKey, common.hasOpenSSL3 ? 1194 : 440); |
| assertApproximateSize(privateKeyDER, common.hasOpenSSL3 ? 721 : 336); |
| |
| // Since the private key is encrypted, signing shouldn't work anymore. |
| assert.throws(() => { |
| return testSignVerify(publicKey, { |
| key: privateKeyDER, |
| ...privateKeyEncoding |
| }); |
| }, { |
| name: 'TypeError', |
| code: 'ERR_MISSING_PASSPHRASE', |
| message: 'Passphrase required for encrypted key' |
| }); |
| |
| // Signing should work with the correct password. |
| testSignVerify(publicKey, { |
| key: privateKeyDER, |
| ...privateKeyEncoding, |
| passphrase: 'secret' |
| }); |
| })); |
| } |