@@ -5,6 +5,8 @@ const common = require('../common');
5
5
if ( ! common . hasCrypto )
6
6
common . skip ( 'missing crypto' ) ;
7
7
8
+ const { hasOpenSSL } = require ( '../common/crypto' ) ;
9
+
8
10
const assert = require ( 'assert' ) ;
9
11
const { subtle } = globalThis . crypto ;
10
12
@@ -187,6 +189,17 @@ async function generateKeysToWrap() {
187
189
} ,
188
190
] ;
189
191
192
+ if ( hasOpenSSL ( 3 , 5 ) ) {
193
+ for ( const name of [ 'ML-DSA-44' , 'ML-DSA-65' , 'ML-DSA-87' ] ) {
194
+ parameters . push ( {
195
+ algorithm : { name } ,
196
+ privateUsages : [ 'sign' ] ,
197
+ publicUsages : [ 'verify' ] ,
198
+ pair : true ,
199
+ } ) ;
200
+ }
201
+ }
202
+
190
203
const allkeys = await Promise . all ( parameters . map ( async ( params ) => {
191
204
const usages = 'usages' in params ?
192
205
params . usages :
@@ -220,10 +233,28 @@ async function generateKeysToWrap() {
220
233
}
221
234
222
235
function getFormats ( key ) {
223
- switch ( key . key . type ) {
224
- case 'secret' : return [ 'raw' , 'jwk' ] ;
225
- case 'public' : return [ 'spki' , 'jwk' ] ;
226
- case 'private' : return [ 'pkcs8' , 'jwk' ] ;
236
+ switch ( key . type ) {
237
+ case 'secret' : {
238
+ return [ 'raw-secret' , 'raw' , 'jwk' ] ;
239
+ } ;
240
+ case 'public' : {
241
+ switch ( key . algorithm . name . slice ( 0 , 2 ) ) {
242
+ case 'EC' : // ECDSA, ECDH
243
+ return [ 'spki' , 'jwk' , 'raw' , 'raw-public' ] ;
244
+ case 'ML' : // ML-DSA
245
+ return [ 'jwk' , 'raw-public' ] ;
246
+ default :
247
+ return [ 'spki' , 'jwk' ] ;
248
+ }
249
+ }
250
+ case 'private' : {
251
+ switch ( key . algorithm . name . slice ( 0 , 2 ) ) {
252
+ case 'ML' : // ML-DSA
253
+ return [ 'jwk' , 'raw-seed' ] ;
254
+ default :
255
+ return [ 'pkcs8' , 'jwk' ] ;
256
+ }
257
+ }
227
258
}
228
259
}
229
260
@@ -285,7 +316,7 @@ function testWrapping(name, keys) {
285
316
} = kWrappingData [ name ] ;
286
317
287
318
keys . forEach ( ( key ) => {
288
- getFormats ( key ) . forEach ( ( format ) => {
319
+ getFormats ( key . key ) . forEach ( ( format ) => {
289
320
variations . push ( testWrap ( wrappingKey , unwrappingKey , key , wrap , format ) ) ;
290
321
} ) ;
291
322
} ) ;
0 commit comments