@@ -5,6 +5,8 @@ const common = require('../common');
55if ( ! common . hasCrypto )
66 common . skip ( 'missing crypto' ) ;
77
8+ const { hasOpenSSL } = require ( '../common/crypto' ) ;
9+
810const assert = require ( 'assert' ) ;
911const { subtle } = globalThis . crypto ;
1012
@@ -187,6 +189,17 @@ async function generateKeysToWrap() {
187189 } ,
188190 ] ;
189191
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+
190203 const allkeys = await Promise . all ( parameters . map ( async ( params ) => {
191204 const usages = 'usages' in params ?
192205 params . usages :
@@ -220,10 +233,28 @@ async function generateKeysToWrap() {
220233}
221234
222235function 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+ }
227258 }
228259}
229260
@@ -285,7 +316,7 @@ function testWrapping(name, keys) {
285316 } = kWrappingData [ name ] ;
286317
287318 keys . forEach ( ( key ) => {
288- getFormats ( key ) . forEach ( ( format ) => {
319+ getFormats ( key . key ) . forEach ( ( format ) => {
289320 variations . push ( testWrap ( wrappingKey , unwrappingKey , key , wrap , format ) ) ;
290321 } ) ;
291322 } ) ;
0 commit comments