File tree Expand file tree Collapse file tree 2 files changed +44
-1
lines changed Expand file tree Collapse file tree 2 files changed +44
-1
lines changed Original file line number Diff line number Diff line change @@ -50,6 +50,8 @@ const {
5050 isArrayBufferView,
5151} = require ( 'internal/util/types' ) ;
5252
53+ const constants = internalBinding ( 'constants' ) . crypto ;
54+
5355function Sign ( algorithm , options ) {
5456 if ( ! ( this instanceof Sign ) )
5557 return new Sign ( algorithm , options ) ;
@@ -85,7 +87,11 @@ function getPadding(options) {
8587}
8688
8789function getSaltLength ( options ) {
88- return getIntOption ( 'saltLength' , options ) ;
90+ let saltLength = getIntOption ( 'saltLength' , options ) ;
91+ if ( options . padding === constants . RSA_PKCS1_PSS_PADDING && saltLength === undefined ) {
92+ saltLength = constants . RSA_PSS_SALTLEN_MAX_SIGN ;
93+ }
94+ return saltLength ;
8995}
9096
9197function getDSASignatureEncoding ( options ) {
Original file line number Diff line number Diff line change 1+ 'use strict' ;
2+ const common = require ( '../common' ) ;
3+ if ( ! common . hasCrypto )
4+ common . skip ( 'missing crypto' ) ;
5+
6+ const assert = require ( 'assert' ) ;
7+ const crypto = require ( 'crypto' ) ;
8+
9+ const fixtures = require ( '../common/fixtures' ) ;
10+
11+ const privateKey = crypto . createPrivateKey ( fixtures . readKey ( 'rsa_private.pem' , 'ascii' ) ) ;
12+ const publicKey = crypto . createPublicKey ( fixtures . readKey ( 'rsa_public.pem' , 'ascii' ) ) ;
13+
14+ const data = crypto . randomBytes ( 32 ) ;
15+
16+ for ( const digest of [ 'sha256' , 'sha384' , 'sha512' ] ) {
17+ const hLen = crypto . hash ( digest , data , 'buffer' ) . byteLength ;
18+ const maxSaltLength =
19+ privateKey . asymmetricKeyDetails . modulusLength / 8 - hLen - 2 ;
20+
21+ const sig = crypto . sign ( digest , data , {
22+ key : privateKey ,
23+ padding : crypto . constants . RSA_PKCS1_PSS_PADDING ,
24+ // No "saltLength" provided, documented default RSA_PSS_SALTLEN_MAX_SIGN expected
25+ } ) ;
26+
27+ assert . strictEqual ( crypto . verify (
28+ digest ,
29+ data ,
30+ {
31+ key : publicKey ,
32+ padding : crypto . constants . RSA_PKCS1_PSS_PADDING ,
33+ saltLength : maxSaltLength ,
34+ } ,
35+ sig
36+ ) , true ) ;
37+ }
You can’t perform that action at this time.
0 commit comments