@@ -11,6 +11,8 @@ const {
11
11
DataViewPrototypeGetByteOffset,
12
12
FunctionPrototypeBind,
13
13
Number,
14
+ ObjectDefineProperty,
15
+ ObjectEntries,
14
16
ObjectKeys,
15
17
ObjectPrototypeHasOwnProperty,
16
18
Promise,
@@ -63,6 +65,7 @@ const { Buffer } = require('buffer');
63
65
64
66
const {
65
67
cachedResult,
68
+ emitExperimentalWarning,
66
69
filterDuplicateStrings,
67
70
lazyDOMException,
68
71
} = require ( 'internal/util' ) ;
@@ -195,26 +198,18 @@ const kSupportedAlgorithms = {
195
198
'AES-GCM' : 'AesKeyGenParams' ,
196
199
'AES-KW' : 'AesKeyGenParams' ,
197
200
'HMAC' : 'HmacKeyGenParams' ,
198
- 'X25519' : null ,
199
- 'Ed25519' : null ,
200
- 'X448' : null ,
201
- 'Ed448' : null ,
202
201
} ,
203
202
'sign' : {
204
203
'RSASSA-PKCS1-v1_5' : null ,
205
204
'RSA-PSS' : 'RsaPssParams' ,
206
205
'ECDSA' : 'EcdsaParams' ,
207
206
'HMAC' : null ,
208
- 'Ed25519' : null ,
209
- 'Ed448' : 'Ed448Params' ,
210
207
} ,
211
208
'verify' : {
212
209
'RSASSA-PKCS1-v1_5' : null ,
213
210
'RSA-PSS' : 'RsaPssParams' ,
214
211
'ECDSA' : 'EcdsaParams' ,
215
212
'HMAC' : null ,
216
- 'Ed25519' : null ,
217
- 'Ed448' : 'Ed448Params' ,
218
213
} ,
219
214
'importKey' : {
220
215
'RSASSA-PKCS1-v1_5' : 'RsaHashedImportParams' ,
@@ -229,17 +224,11 @@ const kSupportedAlgorithms = {
229
224
'AES-CBC' : null ,
230
225
'AES-GCM' : null ,
231
226
'AES-KW' : null ,
232
- 'Ed25519' : null ,
233
- 'X25519' : null ,
234
- 'Ed448' : null ,
235
- 'X448' : null ,
236
227
} ,
237
228
'deriveBits' : {
238
229
'HKDF' : 'HkdfParams' ,
239
230
'PBKDF2' : 'Pbkdf2Params' ,
240
231
'ECDH' : 'EcdhKeyDeriveParams' ,
241
- 'X25519' : 'EcdhKeyDeriveParams' ,
242
- 'X448' : 'EcdhKeyDeriveParams' ,
243
232
} ,
244
233
'encrypt' : {
245
234
'RSA-OAEP' : 'RsaOaepParams' ,
@@ -270,6 +259,47 @@ const kSupportedAlgorithms = {
270
259
} ,
271
260
} ;
272
261
262
+ const experimentalAlgorithms = ObjectEntries ( {
263
+ 'X25519' : {
264
+ generateKey : null ,
265
+ importKey : null ,
266
+ deriveBits : 'EcdhKeyDeriveParams' ,
267
+ } ,
268
+ 'Ed25519' : {
269
+ generateKey : null ,
270
+ sign : null ,
271
+ verify : null ,
272
+ importKey : null ,
273
+ } ,
274
+ 'X448' : {
275
+ generateKey : null ,
276
+ importKey : null ,
277
+ deriveBits : 'EcdhKeyDeriveParams' ,
278
+ } ,
279
+ 'Ed448' : {
280
+ generateKey : null ,
281
+ sign : 'Ed448Params' ,
282
+ verify : 'Ed448Params' ,
283
+ importKey : null ,
284
+ } ,
285
+ } ) ;
286
+
287
+ for ( let i = 0 ; i < experimentalAlgorithms . length ; i ++ ) {
288
+ const name = experimentalAlgorithms [ i ] [ 0 ] ;
289
+ const ops = ObjectEntries ( experimentalAlgorithms [ i ] [ 1 ] ) ;
290
+ for ( let j = 0 ; j < ops . length ; j ++ ) {
291
+ const { 0 : op , 1 : dict } = ops [ j ] ;
292
+ ObjectDefineProperty ( kSupportedAlgorithms [ op ] , name , {
293
+ get ( ) {
294
+ emitExperimentalWarning ( `The ${ name } Web Crypto API algorithm` ) ;
295
+ return dict ;
296
+ } ,
297
+ __proto__ : null ,
298
+ enumerable : true ,
299
+ } ) ;
300
+ }
301
+ }
302
+
273
303
const simpleAlgorithmDictionaries = {
274
304
AesGcmParams : { iv : 'BufferSource' , additionalData : 'BufferSource' } ,
275
305
RsaHashedKeyGenParams : { hash : 'HashAlgorithmIdentifier' } ,
0 commit comments