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) {
304305const 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);
314314setOwnProperty(idlDict, key, idlMemberValue);
315315} else if (member.required) {
316316throw 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+ ]);
783791784792converters.Argon2Params = createDictionaryConverter(
785793'Argon2Params', [