crypto: support Ed448 and ML-DSA context parameter in Web Cryptography · nodejs/node@4b631be

@@ -19,6 +19,7 @@ const {

1919

MathTrunc,

2020

Number,

2121

NumberIsFinite,

22+

NumberParseInt,

2223

ObjectPrototypeHasOwnProperty,

2324

ObjectPrototypeIsPrototypeOf,

2425

SafeArrayIterator,

@@ -304,13 +305,12 @@ function createDictionaryConverter(name, dictionaries) {

304305

const context = `'${key}' of '${name}'${

305306

opts.context ? ` (${opts.context})` : ''

306307

}`;

307-

const { converter, validator } = member;

308-

const idlMemberValue = converter(esMemberValue, {

308+

const idlMemberValue = member.converter(esMemberValue, {

309309

__proto__: null,

310310

...opts,

311311

context,

312312

});

313-

validator?.(idlMemberValue, esDict);

313+

member.validator?.(idlMemberValue, esDict);

314314

setOwnProperty(idlDict, key, idlMemberValue);

315315

} else if (member.required) {

316316

throw makeException(

@@ -769,17 +769,25 @@ converters.EcdhKeyDeriveParams = createDictionaryConverter(

769769

},

770770

]);

771771772-

for (const name of ['Ed448Params', 'ContextParams']) {

773-

converters[name] = createDictionaryConverter(

774-

name, [

775-

...new SafeArrayIterator(dictAlgorithm),

776-

{

777-

key: 'context',

778-

converter: converters.BufferSource,

779-

validator: validateZeroLength(`${name}.context`),

772+

converters.ContextParams = createDictionaryConverter(

773+

'ContextParams', [

774+

...new SafeArrayIterator(dictAlgorithm),

775+

{

776+

key: 'context',

777+

converter: converters.BufferSource,

778+

validator(V, dict) {

779+

let { 0: major, 1: minor } = process.versions.openssl.split('.');

780+

major = NumberParseInt(major, 10);

781+

minor = NumberParseInt(minor, 10);

782+

if (major > 3 || (major === 3 && minor >= 2)) {

783+

this.validator = undefined;

784+

} else {

785+

this.validator = validateZeroLength('ContextParams.context');

786+

this.validator(V, dict);

787+

}

780788

},

781-

]);

782-

}

789+

},

790+

]);

783791784792

converters.Argon2Params = createDictionaryConverter(

785793

'Argon2Params', [