test: add Web Cryptography wrap/unwrap vectors · nodejs/node@16afd10

@@ -5,6 +5,8 @@ const common = require('../common');

55

if (!common.hasCrypto)

66

common.skip('missing crypto');

778+

const { hasOpenSSL } = require('../common/crypto');

9+810

const assert = require('assert');

911

const { subtle } = globalThis.crypto;

1012

@@ -187,6 +189,17 @@ async function generateKeysToWrap() {

187189

},

188190

];

189191192+

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

}

221234222235

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+

}

227258

}

228259

}

229260

@@ -285,7 +316,7 @@ function testWrapping(name, keys) {

285316

} = kWrappingData[name];

286317287318

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

});