@@ -6,16 +6,27 @@ const { hasOpenSSL } = require('../../common/crypto.js');
66
77const s390x = os.arch() === 's390x';
88
9- const conditionalSkips = { } ;
9+ const conditionalFileSkips = {};
10+ const conditionalSubtestSkips = {};
1011
1112function skip(...files) {
1213 for (const file of files) {
13- conditionalSkips [ file ] = {
14- 'skip' : ` Unsupported in OpenSSL ${ process . versions . openssl } `,
14+ conditionalFileSkips [file] = {
15+ 'skip': ' Unsupported in ' + (process.features.openssl_is_boringssl ? 'BoringSSL' : ` OpenSSL ${process.versions.openssl}`) ,
1516 };
1617 }
1718}
1819
20+ function skipSubtests(...entries) {
21+ for (const [file, regexp] of entries) {
22+ conditionalSubtestSkips[file] ||= {
23+ 'skipTests': [],
24+ };
25+
26+ conditionalSubtestSkips[file].skipTests.push(regexp);
27+ }
28+ }
29+
1930if (!hasOpenSSL(3, 0)) {
2031 skip(
2132 'encrypt_decrypt/aes_ocb.tentative.https.any.js',
@@ -45,8 +56,54 @@ if (!hasOpenSSL(3, 5)) {
4556 'import_export/ML-DSA_importKey.tentative.https.any.js',
4657 'import_export/ML-KEM_importKey.tentative.https.any.js',
4758 'sign_verify/mldsa.tentative.https.any.js');
59+
60+ skipSubtests(
61+ ['supports-modern.tentative.https.any.js', /ml-(?:kem|dsa)/i]);
4862}
4963
64+ if (process.features.openssl_is_boringssl) {
65+ skip(
66+ 'derive_bits_keys/cfrg_curves_bits_curve448.tentative.https.any.js',
67+ 'derive_bits_keys/cfrg_curves_keys_curve448.tentative.https.any.js',
68+ 'digest/cshake.tentative.https.any.js',
69+ 'digest/sha3.tentative.https.any.js',
70+ 'encrypt_decrypt/chacha20_poly1305.tentative.https.any.js',
71+ 'generateKey/failures_AES-KW.https.any.js',
72+ 'generateKey/failures_Ed448.tentative.https.any.js',
73+ 'generateKey/failures_X448.tentative.https.any.js',
74+ 'generateKey/failures_chacha20_poly1305.tentative.https.any.js',
75+ 'generateKey/successes_AES-KW.https.any.js',
76+ 'generateKey/successes_Ed448.tentative.https.any.js',
77+ 'generateKey/successes_X448.tentative.https.any.js',
78+ 'generateKey/successes_chacha20_poly1305.tentative.https.any.js',
79+ 'import_export/ChaCha20-Poly1305_importKey.tentative.https.any.js',
80+ 'import_export/okp_importKey_Ed448.tentative.https.any.js',
81+ 'import_export/okp_importKey_failures_Ed448.tentative.https.any.js',
82+ 'import_export/okp_importKey_failures_X448.tentative.https.any.js',
83+ 'import_export/okp_importKey_X448.tentative.https.any.js',
84+ 'sign_verify/eddsa_curve448.tentative.https.any.js');
85+
86+ skipSubtests(
87+ ['derive_bits_keys/hkdf.https.any.js', /AES-KW/],
88+ ['derive_bits_keys/pbkdf2.https.any.js', /AES-KW/],
89+ ['import_export/raw_format_aliases.tentative.https.any.js', /AES-KW/],
90+ ['import_export/symmetric_importKey.https.any.js', /AES-KW/],
91+ ['supports.tentative.https.any.js', /AES-KW/],
92+ ['supports-modern.tentative.https.any.js', /ChaCha20-Poly1305/],
93+ ['supports-modern.tentative.https.any.js', /^supports returns true for algorithm objects with valid parameters$/]);
94+ }
95+
96+ function assertNoOverlap(fileSkips, subtestSkips) {
97+ const subtestSkipFiles = new Set(Object.keys(subtestSkips));
98+ const overlap = Object.keys(fileSkips).filter((file) => subtestSkipFiles.has(file));
99+
100+ if (overlap.length !== 0) {
101+ throw new Error(`conditionalFileSkips and conditionalSubtestSkips overlap: ${overlap.join(', ')}`);
102+ }
103+ }
104+
105+ assertNoOverlap(conditionalFileSkips, conditionalSubtestSkips);
106+
50107const cshakeExpectedFailures = ['cSHAKE128', 'cSHAKE256'].flatMap((algorithm) => {
51108 return [0, 256, 384, 512].flatMap((length) => {
52109 return ['empty', 'short', 'medium'].flatMap((size) => {
@@ -95,7 +152,8 @@ const kmacExpectedFailures = kmacVectorNames.flatMap((name) => {
95152});
96153
97154module.exports = {
98- ...conditionalSkips ,
155+ ...conditionalFileSkips,
156+ ...conditionalSubtestSkips,
99157 'algorithm-discards-context.https.window.js': {
100158 'skip': 'Not relevant in Node.js context',
101159 },
@@ -133,13 +191,13 @@ module.exports = {
133191 ],
134192 },
135193 },
136- 'digest/cshake.tentative.https.any.js' : {
194+ 'digest/cshake.tentative.https.any.js': conditionalFileSkips['digest/cshake.tentative.https.any.js'] ?? {
137195 'fail': {
138196 'note': 'WPT still uses CShakeParams.length; implementation moved to CShakeParams.outputLength',
139197 'expected': cshakeExpectedFailures,
140198 },
141199 },
142- 'sign_verify/kmac.tentative.https.any.js' : conditionalSkips [ 'sign_verify/kmac.tentative.https.any.js' ] ?? {
200+ 'sign_verify/kmac.tentative.https.any.js': conditionalFileSkips ['sign_verify/kmac.tentative.https.any.js'] ?? {
143201 'fail': {
144202 'note': 'WPT still uses KmacParams.length; implementation moved to KmacParams.outputLength',
145203 'expected': kmacExpectedFailures,
0 commit comments