@@ -607,8 +607,8 @@ if (hasOpenSSL(3, 2)) {
607607 assert . throws ( ( ) => crypto . sign ( null , data , input ) , errObj ) ;
608608 assert . throws ( ( ) => crypto . verify ( null , data , input , sig ) , errObj ) ;
609609
610- errObj . message = 'The "signature" argument must be an instance of ' +
611- 'Buffer, TypedArray, or DataView.' +
610+ errObj . message = 'The "signature" argument must be of type string or an instance of ' +
611+ 'ArrayBuffer, Buffer, TypedArray, or DataView.' +
612612 common . invalidArgTypeHelper ( input ) ;
613613 assert . throws ( ( ) => crypto . verify ( null , data , 'test' , input ) , errObj ) ;
614614} ) ;
@@ -932,3 +932,39 @@ if (hasOpenSSL(3, 2)) {
932932 } , { code : 'ERR_OSSL_EVP_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE' , message : / o p e r a t i o n n o t s u p p o r t e d f o r t h i s k e y t y p e / } ) ;
933933 }
934934}
935+
936+ // crypto.verify accepts ArrayBuffer and SharedArrayBuffer for data and signature
937+ {
938+ const { privateKey, publicKey } = crypto . generateKeyPairSync ( 'rsa' , { modulusLength : 2048 } ) ;
939+ const dataBuffer = Buffer . from ( 'Hello world' ) ;
940+
941+ // Data as ArrayBuffer
942+ {
943+ const ab = dataBuffer . buffer . slice ( dataBuffer . byteOffset , dataBuffer . byteOffset + dataBuffer . byteLength ) ;
944+ const sig = crypto . sign ( 'SHA256' , dataBuffer , privateKey ) ;
945+ assert . strictEqual ( crypto . verify ( 'SHA256' , ab , publicKey , sig ) , true ) ;
946+ }
947+
948+ // Data as SharedArrayBuffer
949+ {
950+ const sab = new SharedArrayBuffer ( dataBuffer . length ) ;
951+ new Uint8Array ( sab ) . set ( dataBuffer ) ;
952+ const sig = crypto . sign ( 'SHA256' , dataBuffer , privateKey ) ;
953+ assert . strictEqual ( crypto . verify ( 'SHA256' , sab , publicKey , sig ) , true ) ;
954+ }
955+
956+ // Signature as ArrayBuffer
957+ {
958+ const sig = crypto . sign ( 'SHA256' , dataBuffer , privateKey ) ;
959+ const sigAB = sig . buffer . slice ( sig . byteOffset , sig . byteOffset + sig . byteLength ) ;
960+ assert . strictEqual ( crypto . verify ( 'SHA256' , dataBuffer , publicKey , sigAB ) , true ) ;
961+ }
962+
963+ // Signature as SharedArrayBuffer
964+ {
965+ const sig = crypto . sign ( 'SHA256' , dataBuffer , privateKey ) ;
966+ const sigSAB = new SharedArrayBuffer ( sig . length ) ;
967+ new Uint8Array ( sigSAB ) . set ( sig ) ;
968+ assert . strictEqual ( crypto . verify ( 'SHA256' , dataBuffer , publicKey , sigSAB ) , true ) ;
969+ }
970+ }
0 commit comments