mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const common = require('../common');
|
||
|
if (!common.hasCrypto)
|
||
|
common.skip('missing crypto');
|
||
|
|
||
|
const assert = require('assert');
|
||
|
const {
|
||
|
constants,
|
||
|
generateKeyPair,
|
||
|
} = require('crypto');
|
||
|
const {
|
||
|
testEncryptDecrypt,
|
||
|
testSignVerify,
|
||
|
} = require('../common/crypto');
|
||
|
|
||
|
// Test RSA-PSS.
|
||
|
{
|
||
|
generateKeyPair('rsa-pss', {
|
||
|
modulusLength: 512,
|
||
|
saltLength: 16,
|
||
|
hashAlgorithm: 'sha256',
|
||
|
mgf1HashAlgorithm: 'sha256'
|
||
|
}, common.mustSucceed((publicKey, privateKey) => {
|
||
|
assert.strictEqual(publicKey.type, 'public');
|
||
|
assert.strictEqual(publicKey.asymmetricKeyType, 'rsa-pss');
|
||
|
assert.deepStrictEqual(publicKey.asymmetricKeyDetails, {
|
||
|
modulusLength: 512,
|
||
|
publicExponent: 65537n,
|
||
|
hashAlgorithm: 'sha256',
|
||
|
mgf1HashAlgorithm: 'sha256',
|
||
|
saltLength: 16
|
||
|
});
|
||
|
|
||
|
assert.strictEqual(privateKey.type, 'private');
|
||
|
assert.strictEqual(privateKey.asymmetricKeyType, 'rsa-pss');
|
||
|
assert.deepStrictEqual(privateKey.asymmetricKeyDetails, {
|
||
|
modulusLength: 512,
|
||
|
publicExponent: 65537n,
|
||
|
hashAlgorithm: 'sha256',
|
||
|
mgf1HashAlgorithm: 'sha256',
|
||
|
saltLength: 16
|
||
|
});
|
||
|
|
||
|
// Unlike RSA, RSA-PSS does not allow encryption.
|
||
|
assert.throws(() => {
|
||
|
testEncryptDecrypt(publicKey, privateKey);
|
||
|
}, /operation not supported for this keytype/);
|
||
|
|
||
|
// RSA-PSS also does not permit signing with PKCS1 padding.
|
||
|
assert.throws(() => {
|
||
|
testSignVerify({
|
||
|
key: publicKey,
|
||
|
padding: constants.RSA_PKCS1_PADDING
|
||
|
}, {
|
||
|
key: privateKey,
|
||
|
padding: constants.RSA_PKCS1_PADDING
|
||
|
});
|
||
|
}, /illegal or unsupported padding mode/);
|
||
|
|
||
|
// The padding should correctly default to RSA_PKCS1_PSS_PADDING now.
|
||
|
testSignVerify(publicKey, privateKey);
|
||
|
}));
|
||
|
}
|