11'use strict' ;
22
3+ const common = require ( '../common' ) ;
4+ const assert = require ( 'node:assert' ) ;
35const { test } = require ( 'node:test' ) ;
4- const assert = require ( 'assert' ) ;
56const { subtle } = globalThis . crypto ;
67
7- const common = require ( '../common' ) ;
88if ( ! common . hasCrypto ) common . skip ( 'missing crypto' ) ;
99
1010const vectors = require ( '../fixtures/crypto/eddsa' ) ( ) ;
1111
1212// Test function for verification
13- async function testVerify ( { name, publicKeyBuffer, privateKeyBuffer, signature, data } ) {
14- const [
15- publicKey ,
16- noVerifyPublicKey ,
17- privateKey ,
18- hmacKey ,
19- rsaKeys ,
20- ecKeys ,
21- ] = await Promise . all ( [
22- subtle . importKey ( 'spki' , publicKeyBuffer , { name } , false , [ 'verify' ] ) ,
23- subtle . importKey ( 'spki' , publicKeyBuffer , { name } , false , [ ] ) , // No usages for this key
24- subtle . importKey ( 'pkcs8' , privateKeyBuffer , { name } , false , [ 'sign' ] ) ,
25- subtle . generateKey ( { name : 'HMAC' , hash : 'SHA-256' } , false , [ 'sign' ] ) ,
26- subtle . generateKey ( { name : 'RSA-PSS' , modulusLength : 1024 , publicExponent : new Uint8Array ( [ 1 , 0 , 1 ] ) , hash : 'SHA-256' } , false , [ 'sign' ] ) ,
27- subtle . generateKey ( { name : 'ECDSA' , namedCurve : 'P-256' } , false , [ 'sign' ] ) ,
28- ] ) ;
13+ async function testVerify ( {
14+ name,
15+ publicKeyBuffer,
16+ privateKeyBuffer,
17+ signature,
18+ data,
19+ } ) {
20+ const [ publicKey , noVerifyPublicKey , privateKey , hmacKey , rsaKeys , ecKeys ] =
21+ await Promise . all ( [
22+ subtle . importKey ( 'spki' , publicKeyBuffer , { name } , false , [ 'verify' ] ) ,
23+ subtle . importKey ( 'spki' , publicKeyBuffer , { name } , false , [ ] ) , // No usages for this key
24+ subtle . importKey ( 'pkcs8' , privateKeyBuffer , { name } , false , [ 'sign' ] ) ,
25+ subtle . generateKey ( { name : 'HMAC' , hash : 'SHA-256' } , false , [ 'sign' ] ) ,
26+ subtle . generateKey (
27+ {
28+ name : 'RSA-PSS' ,
29+ modulusLength : 1024 ,
30+ publicExponent : new Uint8Array ( [ 1 , 0 , 1 ] ) ,
31+ hash : 'SHA-256' ,
32+ } ,
33+ false ,
34+ [ 'sign' ] ,
35+ ) ,
36+ subtle . generateKey ( { name : 'ECDSA' , namedCurve : 'P-256' } , false , [
37+ 'sign' ,
38+ ] ) ,
39+ ] ) ;
2940
3041 // Test valid verification
3142 assert ( await subtle . verify ( { name } , publicKey , signature , data ) ) ;
@@ -40,49 +51,69 @@ async function testVerify({ name, publicKeyBuffer, privateKeyBuffer, signature,
4051
4152 // Test failure with wrong key or algorithm
4253 await assert . rejects ( subtle . verify ( { name } , privateKey , signature , data ) , {
43- message : / U n a b l e t o u s e t h i s k e y t o v e r i f y /
54+ message : / U n a b l e t o u s e t h i s k e y t o v e r i f y / ,
4455 } ) ;
4556
46- await assert . rejects ( subtle . verify ( { name } , noVerifyPublicKey , signature , data ) , {
47- message : / U n a b l e t o u s e t h i s k e y t o v e r i f y /
48- } ) ;
57+ await assert . rejects (
58+ subtle . verify ( { name } , noVerifyPublicKey , signature , data ) ,
59+ {
60+ message : / U n a b l e t o u s e t h i s k e y t o v e r i f y / ,
61+ } ,
62+ ) ;
4963
5064 await assert . rejects ( subtle . verify ( { name } , hmacKey , signature , data ) , {
51- message : / U n a b l e t o u s e t h i s k e y t o v e r i f y /
65+ message : / U n a b l e t o u s e t h i s k e y t o v e r i f y / ,
5266 } ) ;
5367
54- await assert . rejects ( subtle . verify ( { name } , rsaKeys . publicKey , signature , data ) , {
55- message : / U n a b l e t o u s e t h i s k e y t o v e r i f y /
56- } ) ;
68+ await assert . rejects (
69+ subtle . verify ( { name } , rsaKeys . publicKey , signature , data ) ,
70+ {
71+ message : / U n a b l e t o u s e t h i s k e y t o v e r i f y / ,
72+ } ,
73+ ) ;
5774
58- await assert . rejects ( subtle . verify ( { name } , ecKeys . publicKey , signature , data ) , {
59- message : / U n a b l e t o u s e t h i s k e y t o v e r i f y /
60- } ) ;
75+ await assert . rejects (
76+ subtle . verify ( { name } , ecKeys . publicKey , signature , data ) ,
77+ {
78+ message : / U n a b l e t o u s e t h i s k e y t o v e r i f y / ,
79+ } ,
80+ ) ;
6181
6282 // Test failure when signature or data is altered
6383 const alteredSig = Buffer . from ( signature ) ;
6484 alteredSig [ 0 ] = 255 - alteredSig [ 0 ] ;
6585 assert ( ! ( await subtle . verify ( { name } , publicKey , alteredSig , data ) ) ) ;
66- assert ( ! ( await subtle . verify ( { name } , publicKey , alteredSig . slice ( 1 ) , data ) ) ) ;
86+ assert (
87+ ! ( await subtle . verify ( { name } , publicKey , alteredSig . slice ( 1 ) , data ) ) ,
88+ ) ;
6789
6890 const alteredData = Buffer . from ( data ) ;
6991 alteredData [ 0 ] = 255 - alteredData [ 0 ] ;
7092 assert ( ! ( await subtle . verify ( { name } , publicKey , signature , alteredData ) ) ) ;
7193}
7294
7395// Test function for signing
74- async function testSign ( { name , publicKeyBuffer , privateKeyBuffer , signature , data } ) {
75- const [
76- publicKey ,
77- privateKey ,
78- hmacKey ,
79- rsaKeys ,
80- ecKeys ,
81- ] = await Promise . all ( [
96+ async function testSign ( {
97+ name ,
98+ publicKeyBuffer ,
99+ privateKeyBuffer ,
100+ signature ,
101+ data ,
102+ } ) {
103+ const [ publicKey , privateKey , hmacKey , rsaKeys , ecKeys ] = await Promise . all ( [
82104 subtle . importKey ( 'spki' , publicKeyBuffer , { name } , false , [ 'verify' ] ) ,
83105 subtle . importKey ( 'pkcs8' , privateKeyBuffer , { name } , false , [ 'sign' ] ) ,
84106 subtle . generateKey ( { name : 'HMAC' , hash : 'SHA-256' } , false , [ 'sign' ] ) ,
85- subtle . generateKey ( { name : 'RSA-PSS' , modulusLength : 1024 , publicExponent : new Uint8Array ( [ 1 , 0 , 1 ] ) , hash : 'SHA-256' } , false , [ 'sign' ] ) ,
107+ subtle . generateKey (
108+ {
109+ name : 'RSA-PSS' ,
110+ modulusLength : 1024 ,
111+ publicExponent : new Uint8Array ( [ 1 , 0 , 1 ] ) ,
112+ hash : 'SHA-256' ,
113+ } ,
114+ false ,
115+ [ 'sign' ] ,
116+ ) ,
86117 subtle . generateKey ( { name : 'ECDSA' , namedCurve : 'P-256' } , false , [ 'sign' ] ) ,
87118 ] ) ;
88119
@@ -98,19 +129,19 @@ async function testSign({ name, publicKeyBuffer, privateKeyBuffer, signature, da
98129
99130 // Test failure with wrong key or algorithm
100131 await assert . rejects ( subtle . sign ( { name } , publicKey , data ) , {
101- message : / U n a b l e t o u s e t h i s k e y t o s i g n /
132+ message : / U n a b l e t o u s e t h i s k e y t o s i g n / ,
102133 } ) ;
103134
104135 await assert . rejects ( subtle . sign ( { name } , hmacKey , data ) , {
105- message : / U n a b l e t o u s e t h i s k e y t o s i g n /
136+ message : / U n a b l e t o u s e t h i s k e y t o s i g n / ,
106137 } ) ;
107138
108139 await assert . rejects ( subtle . sign ( { name } , rsaKeys . privateKey , data ) , {
109- message : / U n a b l e t o u s e t h i s k e y t o s i g n /
140+ message : / U n a b l e t o u s e t h i s k e y t o s i g n / ,
110141 } ) ;
111142
112143 await assert . rejects ( subtle . sign ( { name } , ecKeys . privateKey , data ) , {
113- message : / U n a b l e t o u s e t h i s k e y t o s i g n /
144+ message : / U n a b l e t o u s e t h i s k e y t o s i g n / ,
114145 } ) ;
115146}
116147
@@ -128,19 +159,54 @@ vectors.forEach((vector) => {
128159test ( 'Ed448 context' , async ( ) => {
129160 const vector = vectors . find ( ( { name } ) => name === 'Ed448' ) ;
130161 const [ privateKey , publicKey ] = await Promise . all ( [
131- subtle . importKey ( 'pkcs8' , vector . privateKeyBuffer , { name : 'Ed448' } , false , [ 'sign' ] ) ,
132- subtle . importKey ( 'spki' , vector . publicKeyBuffer , { name : 'Ed448' } , false , [ 'verify' ] ) ,
162+ subtle . importKey (
163+ 'pkcs8' ,
164+ vector . privateKeyBuffer ,
165+ { name : 'Ed448' } ,
166+ false ,
167+ [ 'sign' ] ,
168+ ) ,
169+ subtle . importKey ( 'spki' , vector . publicKeyBuffer , { name : 'Ed448' } , false , [
170+ 'verify' ,
171+ ] ) ,
133172 ] ) ;
134173
135- const sig = await subtle . sign ( { name : 'Ed448' , context : Buffer . alloc ( 0 ) } , privateKey , vector . data ) ;
174+ const sig = await subtle . sign (
175+ { name : 'Ed448' , context : Buffer . alloc ( 0 ) } ,
176+ privateKey ,
177+ vector . data ,
178+ ) ;
136179 assert . deepStrictEqual ( Buffer . from ( sig ) , vector . signature ) ;
137- assert . strictEqual ( await subtle . verify ( { name : 'Ed448' , context : Buffer . alloc ( 0 ) } , publicKey , sig , vector . data ) , true ) ;
138-
139- await assert . rejects ( subtle . sign ( { name : 'Ed448' , context : Buffer . alloc ( 1 ) } , privateKey , vector . data ) , {
140- message : / N o n z e r o - l e n g t h c o n t e x t i s n o t y e t s u p p o r t e d /
141- } ) ;
142-
143- await assert . rejects ( subtle . verify ( { name : 'Ed448' , context : Buffer . alloc ( 1 ) } , publicKey , sig , vector . data ) , {
144- message : / N o n z e r o - l e n g t h c o n t e x t i s n o t y e t s u p p o r t e d /
145- } ) ;
180+ assert . strictEqual (
181+ await subtle . verify (
182+ { name : 'Ed448' , context : Buffer . alloc ( 0 ) } ,
183+ publicKey ,
184+ sig ,
185+ vector . data ,
186+ ) ,
187+ true ,
188+ ) ;
189+
190+ await assert . rejects (
191+ subtle . sign (
192+ { name : 'Ed448' , context : Buffer . alloc ( 1 ) } ,
193+ privateKey ,
194+ vector . data ,
195+ ) ,
196+ {
197+ message : / N o n z e r o - l e n g t h c o n t e x t i s n o t y e t s u p p o r t e d / ,
198+ } ,
199+ ) ;
200+
201+ await assert . rejects (
202+ subtle . verify (
203+ { name : 'Ed448' , context : Buffer . alloc ( 1 ) } ,
204+ publicKey ,
205+ sig ,
206+ vector . data ,
207+ ) ,
208+ {
209+ message : / N o n z e r o - l e n g t h c o n t e x t i s n o t y e t s u p p o r t e d / ,
210+ } ,
211+ ) ;
146212} ) ;
0 commit comments