@@ -7,125 +7,89 @@ if (!common.hasCrypto) common.skip('missing crypto');
77// Regression test for https://github.com/nodejs/node/pull/61492
88// and https://github.com/nodejs/node/issues/59699.
99
10- import * as assert from 'node:assert/strict' ;
1110import { hasOpenSSL } from '../common/crypto.js' ;
1211
1312const { subtle } = globalThis . crypto ;
1413
15- const originalThen = Promise . prototype . then ;
16- const intercepted = [ ] ;
17-
18- // Pollute Promise.prototype.then to record all resolved values.
19- Promise . prototype . then = function ( onFulfilled , ...rest ) {
20- return originalThen . call ( this , function ( value ) {
21- intercepted . push ( value ) ;
22- return typeof onFulfilled === 'function' ? onFulfilled ( value ) : value ;
23- } , ...rest ) ;
24- } ;
25-
26- async function test ( label , fn ) {
27- const result = await fn ( ) ;
28- assert . strictEqual (
29- intercepted . length , 0 ,
30- `Promise.prototype.then was called during ${ label } `
31- ) ;
32- return result ;
33- }
14+ Promise . prototype . then = common . mustNotCall ( 'Promise.prototype.then' ) ;
3415
35- await test ( 'digest' , ( ) =>
36- subtle . digest ( 'SHA-256' , new Uint8Array ( [ 1 , 2 , 3 ] ) ) ) ;
16+ await subtle . digest ( 'SHA-256' , new Uint8Array ( [ 1 , 2 , 3 ] ) ) ;
3717
38- await test ( 'generateKey (AES-CBC)' , ( ) =>
39- subtle . generateKey ( { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ) ;
18+ await subtle . generateKey ( { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ;
4019
41- await test ( 'generateKey (ECDSA)' , ( ) =>
42- subtle . generateKey ( { name : 'ECDSA' , namedCurve : 'P-256' } , true , [ 'sign' , 'verify' ] ) ) ;
20+ await subtle . generateKey ( { name : 'ECDSA' , namedCurve : 'P-256' } , true , [ 'sign' , 'verify' ] ) ;
4321
4422const rawKey = globalThis . crypto . getRandomValues ( new Uint8Array ( 32 ) ) ;
4523
46- const importedKey = await test ( ' importKey' , ( ) =>
47- subtle . importKey ( 'raw' , rawKey , { name : 'AES-CBC' , length : 256 } , false , [ 'encrypt' , 'decrypt' ] ) ) ;
24+ const importedKey = await subtle . importKey (
25+ 'raw' , rawKey , { name : 'AES-CBC' , length : 256 } , false , [ 'encrypt' , 'decrypt' ] ) ;
4826
49- const exportableKey = await test ( ' importKey (extractable)' , ( ) =>
50- subtle . importKey ( 'raw' , rawKey , { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ) ;
27+ const exportableKey = await subtle . importKey (
28+ 'raw' , rawKey , { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ;
5129
52- await test ( 'exportKey' , ( ) =>
53- subtle . exportKey ( 'raw' , exportableKey ) ) ;
30+ await subtle . exportKey ( 'raw' , exportableKey ) ;
5431
5532const iv = globalThis . crypto . getRandomValues ( new Uint8Array ( 16 ) ) ;
5633const plaintext = new TextEncoder ( ) . encode ( 'Hello, world!' ) ;
5734
58- const ciphertext = await test ( 'encrypt' , ( ) =>
59- subtle . encrypt ( { name : 'AES-CBC' , iv } , importedKey , plaintext ) ) ;
35+ const ciphertext = await subtle . encrypt ( { name : 'AES-CBC' , iv } , importedKey , plaintext ) ;
6036
61- await test ( 'decrypt' , ( ) =>
62- subtle . decrypt ( { name : 'AES-CBC' , iv } , importedKey , ciphertext ) ) ;
37+ await subtle . decrypt ( { name : 'AES-CBC' , iv } , importedKey , ciphertext ) ;
6338
64- const signingKey = await test ( ' generateKey (HMAC)' , ( ) =>
65- subtle . generateKey ( { name : 'HMAC' , hash : 'SHA-256' } , false , [ 'sign' , 'verify' ] ) ) ;
39+ const signingKey = await subtle . generateKey (
40+ { name : 'HMAC' , hash : 'SHA-256' } , false , [ 'sign' , 'verify' ] ) ;
6641
6742const data = new TextEncoder ( ) . encode ( 'test data' ) ;
6843
69- const signature = await test ( 'sign' , ( ) =>
70- subtle . sign ( 'HMAC' , signingKey , data ) ) ;
44+ const signature = await subtle . sign ( 'HMAC' , signingKey , data ) ;
7145
72- await test ( 'verify' , ( ) =>
73- subtle . verify ( 'HMAC' , signingKey , signature , data ) ) ;
46+ await subtle . verify ( 'HMAC' , signingKey , signature , data ) ;
7447
75- const pbkdf2Key = await test ( ' importKey (PBKDF2)' , ( ) =>
76- subtle . importKey ( 'raw' , rawKey , 'PBKDF2' , false , [ 'deriveBits' , 'deriveKey' ] ) ) ;
48+ const pbkdf2Key = await subtle . importKey (
49+ 'raw' , rawKey , 'PBKDF2' , false , [ 'deriveBits' , 'deriveKey' ] ) ;
7750
78- await test ( 'deriveBits' , ( ) =>
79- subtle . deriveBits (
80- { name : 'PBKDF2' , salt : rawKey , iterations : 1000 , hash : 'SHA-256' } ,
81- pbkdf2Key , 256 ) ) ;
51+ await subtle . deriveBits (
52+ { name : 'PBKDF2' , salt : rawKey , iterations : 1000 , hash : 'SHA-256' } ,
53+ pbkdf2Key , 256 ) ;
8254
83- // deriveKey — this was the primary leak reported in the issue
84- await test ( 'deriveKey' , ( ) =>
85- subtle . deriveKey (
86- { name : 'PBKDF2' , salt : rawKey , iterations : 1000 , hash : 'SHA-256' } ,
87- pbkdf2Key ,
88- { name : 'AES-CBC' , length : 256 } ,
89- true ,
90- [ 'encrypt' , 'decrypt' ] ) ) ;
55+ await subtle . deriveKey (
56+ { name : 'PBKDF2' , salt : rawKey , iterations : 1000 , hash : 'SHA-256' } ,
57+ pbkdf2Key ,
58+ { name : 'AES-CBC' , length : 256 } ,
59+ true ,
60+ [ 'encrypt' , 'decrypt' ] ) ;
9161
92- const wrappingKey = await test ( ' generateKey (AES-KW)' , ( ) =>
93- subtle . generateKey ( { name : 'AES-KW' , length : 256 } , true , [ 'wrapKey' , 'unwrapKey' ] ) ) ;
62+ const wrappingKey = await subtle . generateKey (
63+ { name : 'AES-KW' , length : 256 } , true , [ 'wrapKey' , 'unwrapKey' ] ) ;
9464
95- const keyToWrap = await test ( ' generateKey (AES-CBC for wrap)' , ( ) =>
96- subtle . generateKey ( { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ) ;
65+ const keyToWrap = await subtle . generateKey (
66+ { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ;
9767
98- const wrapped = await test ( 'wrapKey' , ( ) =>
99- subtle . wrapKey ( 'raw' , keyToWrap , wrappingKey , 'AES-KW' ) ) ;
68+ const wrapped = await subtle . wrapKey ( 'raw' , keyToWrap , wrappingKey , 'AES-KW' ) ;
10069
101- await test ( 'unwrapKey' , ( ) =>
102- subtle . unwrapKey (
103- 'raw' , wrapped , wrappingKey , 'AES-KW' ,
104- { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ) ;
70+ await subtle . unwrapKey (
71+ 'raw' , wrapped , wrappingKey , 'AES-KW' ,
72+ { name : 'AES-CBC' , length : 256 } , true , [ 'encrypt' , 'decrypt' ] ) ;
10573
106- const { privateKey } = await test ( ' generateKey (ECDSA for getPublicKey)' , ( ) =>
107- subtle . generateKey ( { name : 'ECDSA' , namedCurve : 'P-256' } , true , [ 'sign' , 'verify' ] ) ) ;
74+ const { privateKey } = await subtle . generateKey (
75+ { name : 'ECDSA' , namedCurve : 'P-256' } , true , [ 'sign' , 'verify' ] ) ;
10876
109- await test ( 'getPublicKey' , ( ) =>
110- subtle . getPublicKey ( privateKey , [ 'verify' ] ) ) ;
77+ await subtle . getPublicKey ( privateKey , [ 'verify' ] ) ;
11178
11279if ( hasOpenSSL ( 3 , 5 ) ) {
113- const kemPair = await test ( 'generateKey (ML-KEM-768)' , ( ) =>
114- subtle . generateKey (
115- { name : 'ML-KEM-768' } , false ,
116- [ 'encapsulateKey' , 'encapsulateBits' , 'decapsulateKey' , 'decapsulateBits' ] ) ) ;
80+ const kemPair = await subtle . generateKey (
81+ { name : 'ML-KEM-768' } , false ,
82+ [ 'encapsulateKey' , 'encapsulateBits' , 'decapsulateKey' , 'decapsulateBits' ] ) ;
11783
118- const { ciphertext : ct1 } = await test ( 'encapsulateKey' , ( ) =>
119- subtle . encapsulateKey (
120- { name : 'ML-KEM-768' } , kemPair . publicKey , 'HKDF' , false , [ 'deriveBits' ] ) ) ;
84+ const { ciphertext : ct1 } = await subtle . encapsulateKey (
85+ { name : 'ML-KEM-768' } , kemPair . publicKey , 'HKDF' , false , [ 'deriveBits' ] ) ;
12186
122- await test ( 'decapsulateKey' , ( ) =>
123- subtle . decapsulateKey (
124- { name : 'ML-KEM-768' } , kemPair . privateKey , ct1 , 'HKDF' , false , [ 'deriveBits' ] ) ) ;
87+ await subtle . decapsulateKey (
88+ { name : 'ML-KEM-768' } , kemPair . privateKey , ct1 , 'HKDF' , false , [ 'deriveBits' ] ) ;
12589
126- const { ciphertext : ct2 } = await test ( ' encapsulateBits' , ( ) =>
127- subtle . encapsulateBits ( { name : 'ML-KEM-768' } , kemPair . publicKey ) ) ;
90+ const { ciphertext : ct2 } = await subtle . encapsulateBits (
91+ { name : 'ML-KEM-768' } , kemPair . publicKey ) ;
12892
129- await test ( ' decapsulateBits' , ( ) =>
130- subtle . decapsulateBits ( { name : 'ML-KEM-768' } , kemPair . privateKey , ct2 ) ) ;
93+ await subtle . decapsulateBits (
94+ { name : 'ML-KEM-768' } , kemPair . privateKey , ct2 ) ;
13195}
0 commit comments