Skip to content

Commit bac6b7d

Browse files
aduh95danielleadams
authored andcommitted
crypto: simplify lazy loading of internal modules
The internal `require()` is actually just one map load (to see if the module is already loaded) + one property load (state check for circular dependencies) for modules that are already loaded. Refs: #45659 (comment) PR-URL: #45809 Reviewed-By: Daeyeon Jeong <daeyeon.dev@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Minwoo Jung <nodecorelab@gmail.com>
1 parent ae61740 commit bac6b7d

File tree

2 files changed

+32
-43
lines changed

2 files changed

+32
-43
lines changed

lib/internal/crypto/util.js

-10
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,6 @@ const {
6262
const kHandle = Symbol('kHandle');
6363
const kKeyObject = Symbol('kKeyObject');
6464

65-
const lazyRequireCache = {};
66-
67-
function lazyRequire(name) {
68-
let ret = lazyRequireCache[name];
69-
if (ret === undefined)
70-
ret = lazyRequireCache[name] = require(name);
71-
return ret;
72-
}
73-
7465
let defaultEncoding = 'buffer';
7566

7667
function setDefaultEncoding(val) {
@@ -431,7 +422,6 @@ module.exports = {
431422
validateByteSource,
432423
validateKeyOps,
433424
jobPromise,
434-
lazyRequire,
435425
validateMaxBufferLength,
436426
bigIntArrayToUnsignedBigInt,
437427
bigIntArrayToUnsignedInt,

lib/internal/crypto/webcrypto.js

+32-33
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ const {
5353
getArrayBufferOrView,
5454
getBlockSize,
5555
hasAnyNotIn,
56-
lazyRequire,
5756
normalizeAlgorithm,
5857
normalizeHashName,
5958
validateMaxBufferLength,
@@ -99,7 +98,7 @@ async function generateKey(
9998
// Fall through
10099
case 'RSA-OAEP':
101100
resultType = 'CryptoKeyPair';
102-
result = await lazyRequire('internal/crypto/rsa')
101+
result = await require('internal/crypto/rsa')
103102
.rsaKeyGenerate(algorithm, extractable, keyUsages);
104103
break;
105104
case 'Ed25519':
@@ -110,19 +109,19 @@ async function generateKey(
110109
// Fall through
111110
case 'X448':
112111
resultType = 'CryptoKeyPair';
113-
result = await lazyRequire('internal/crypto/cfrg')
112+
result = await require('internal/crypto/cfrg')
114113
.cfrgGenerateKey(algorithm, extractable, keyUsages);
115114
break;
116115
case 'ECDSA':
117116
// Fall through
118117
case 'ECDH':
119118
resultType = 'CryptoKeyPair';
120-
result = await lazyRequire('internal/crypto/ec')
119+
result = await require('internal/crypto/ec')
121120
.ecGenerateKey(algorithm, extractable, keyUsages);
122121
break;
123122
case 'HMAC':
124123
resultType = 'CryptoKey';
125-
result = await lazyRequire('internal/crypto/mac')
124+
result = await require('internal/crypto/mac')
126125
.hmacGenerateKey(algorithm, extractable, keyUsages);
127126
break;
128127
case 'AES-CTR':
@@ -133,7 +132,7 @@ async function generateKey(
133132
// Fall through
134133
case 'AES-KW':
135134
resultType = 'CryptoKey';
136-
result = await lazyRequire('internal/crypto/aes')
135+
result = await require('internal/crypto/aes')
137136
.aesGenerateKey(algorithm, extractable, keyUsages);
138137
break;
139138
default:
@@ -172,13 +171,13 @@ async function deriveBits(algorithm, baseKey, length) {
172171
case 'X448':
173172
// Fall through
174173
case 'ECDH':
175-
return lazyRequire('internal/crypto/diffiehellman')
174+
return require('internal/crypto/diffiehellman')
176175
.ecdhDeriveBits(algorithm, baseKey, length);
177176
case 'HKDF':
178-
return lazyRequire('internal/crypto/hkdf')
177+
return require('internal/crypto/hkdf')
179178
.hkdfDeriveBits(algorithm, baseKey, length);
180179
case 'PBKDF2':
181-
return lazyRequire('internal/crypto/pbkdf2')
180+
return require('internal/crypto/pbkdf2')
182181
.pbkdf2DeriveBits(algorithm, baseKey, length);
183182
}
184183
throw lazyDOMException('Unrecognized name.');
@@ -242,15 +241,15 @@ async function deriveKey(
242241
case 'X448':
243242
// Fall through
244243
case 'ECDH':
245-
bits = await lazyRequire('internal/crypto/diffiehellman')
244+
bits = await require('internal/crypto/diffiehellman')
246245
.ecdhDeriveBits(algorithm, baseKey, length);
247246
break;
248247
case 'HKDF':
249-
bits = await lazyRequire('internal/crypto/hkdf')
248+
bits = await require('internal/crypto/hkdf')
250249
.hkdfDeriveBits(algorithm, baseKey, length);
251250
break;
252251
case 'PBKDF2':
253-
bits = await lazyRequire('internal/crypto/pbkdf2')
252+
bits = await require('internal/crypto/pbkdf2')
254253
.pbkdf2DeriveBits(algorithm, baseKey, length);
255254
break;
256255
default:
@@ -272,15 +271,15 @@ async function exportKeySpki(key) {
272271
// Fall through
273272
case 'RSA-OAEP':
274273
if (key.type === 'public') {
275-
return lazyRequire('internal/crypto/rsa')
274+
return require('internal/crypto/rsa')
276275
.rsaExportKey(key, kWebCryptoKeyFormatSPKI);
277276
}
278277
break;
279278
case 'ECDSA':
280279
// Fall through
281280
case 'ECDH':
282281
if (key.type === 'public') {
283-
return lazyRequire('internal/crypto/ec')
282+
return require('internal/crypto/ec')
284283
.ecExportKey(key, kWebCryptoKeyFormatSPKI);
285284
}
286285
break;
@@ -292,7 +291,7 @@ async function exportKeySpki(key) {
292291
// Fall through
293292
case 'X448':
294293
if (key.type === 'public') {
295-
return lazyRequire('internal/crypto/cfrg')
294+
return require('internal/crypto/cfrg')
296295
.cfrgExportKey(key, kWebCryptoKeyFormatSPKI);
297296
}
298297
break;
@@ -311,15 +310,15 @@ async function exportKeyPkcs8(key) {
311310
// Fall through
312311
case 'RSA-OAEP':
313312
if (key.type === 'private') {
314-
return lazyRequire('internal/crypto/rsa')
313+
return require('internal/crypto/rsa')
315314
.rsaExportKey(key, kWebCryptoKeyFormatPKCS8);
316315
}
317316
break;
318317
case 'ECDSA':
319318
// Fall through
320319
case 'ECDH':
321320
if (key.type === 'private') {
322-
return lazyRequire('internal/crypto/ec')
321+
return require('internal/crypto/ec')
323322
.ecExportKey(key, kWebCryptoKeyFormatPKCS8);
324323
}
325324
break;
@@ -331,7 +330,7 @@ async function exportKeyPkcs8(key) {
331330
// Fall through
332331
case 'X448':
333332
if (key.type === 'private') {
334-
return lazyRequire('internal/crypto/cfrg')
333+
return require('internal/crypto/cfrg')
335334
.cfrgExportKey(key, kWebCryptoKeyFormatPKCS8);
336335
}
337336
break;
@@ -348,7 +347,7 @@ async function exportKeyRaw(key) {
348347
// Fall through
349348
case 'ECDH':
350349
if (key.type === 'public') {
351-
return lazyRequire('internal/crypto/ec')
350+
return require('internal/crypto/ec')
352351
.ecExportKey(key, kWebCryptoKeyFormatRaw);
353352
}
354353
break;
@@ -360,7 +359,7 @@ async function exportKeyRaw(key) {
360359
// Fall through
361360
case 'X448':
362361
if (key.type === 'public') {
363-
return lazyRequire('internal/crypto/cfrg')
362+
return require('internal/crypto/cfrg')
364363
.cfrgExportKey(key, kWebCryptoKeyFormatRaw);
365364
}
366365
break;
@@ -425,7 +424,7 @@ async function exportKeyJWK(key) {
425424
case 'AES-GCM':
426425
// Fall through
427426
case 'AES-KW':
428-
jwk.alg = lazyRequire('internal/crypto/aes')
427+
jwk.alg = require('internal/crypto/aes')
429428
.getAlgorithmName(key.algorithm.name, key.algorithm.length);
430429
return jwk;
431430
case 'HMAC':
@@ -524,12 +523,12 @@ async function importKey(
524523
case 'RSA-PSS':
525524
// Fall through
526525
case 'RSA-OAEP':
527-
return lazyRequire('internal/crypto/rsa')
526+
return require('internal/crypto/rsa')
528527
.rsaImportKey(format, keyData, algorithm, extractable, keyUsages);
529528
case 'ECDSA':
530529
// Fall through
531530
case 'ECDH':
532-
return lazyRequire('internal/crypto/ec')
531+
return require('internal/crypto/ec')
533532
.ecImportKey(format, keyData, algorithm, extractable, keyUsages);
534533
case 'Ed25519':
535534
// Fall through
@@ -538,10 +537,10 @@ async function importKey(
538537
case 'X25519':
539538
// Fall through
540539
case 'X448':
541-
return lazyRequire('internal/crypto/cfrg')
540+
return require('internal/crypto/cfrg')
542541
.cfrgImportKey(format, keyData, algorithm, extractable, keyUsages);
543542
case 'HMAC':
544-
return lazyRequire('internal/crypto/mac')
543+
return require('internal/crypto/mac')
545544
.hmacImportKey(format, keyData, algorithm, extractable, keyUsages);
546545
case 'AES-CTR':
547546
// Fall through
@@ -550,7 +549,7 @@ async function importKey(
550549
case 'AES-GCM':
551550
// Fall through
552551
case 'AES-KW':
553-
return lazyRequire('internal/crypto/aes')
552+
return require('internal/crypto/aes')
554553
.aesImportKey(algorithm, format, keyData, extractable, keyUsages);
555554
case 'HKDF':
556555
// Fall through
@@ -650,19 +649,19 @@ function signVerify(algorithm, key, data, signature) {
650649
case 'RSA-PSS':
651650
// Fall through
652651
case 'RSASSA-PKCS1-v1_5':
653-
return lazyRequire('internal/crypto/rsa')
652+
return require('internal/crypto/rsa')
654653
.rsaSignVerify(key, data, algorithm, signature);
655654
case 'ECDSA':
656-
return lazyRequire('internal/crypto/ec')
655+
return require('internal/crypto/ec')
657656
.ecdsaSignVerify(key, data, algorithm, signature);
658657
case 'Ed25519':
659658
// Fall through
660659
case 'Ed448':
661660
// Fall through
662-
return lazyRequire('internal/crypto/cfrg')
661+
return require('internal/crypto/cfrg')
663662
.eddsaSignVerify(key, data, algorithm, signature);
664663
case 'HMAC':
665-
return lazyRequire('internal/crypto/mac')
664+
return require('internal/crypto/mac')
666665
.hmacSignVerify(key, data, algorithm, signature);
667666
}
668667
throw lazyDOMException('Unrecognized named.', 'NotSupportedError');
@@ -705,18 +704,18 @@ async function cipherOrWrap(mode, algorithm, key, data, op) {
705704

706705
switch (algorithm.name) {
707706
case 'RSA-OAEP':
708-
return lazyRequire('internal/crypto/rsa')
707+
return require('internal/crypto/rsa')
709708
.rsaCipher(mode, key, data, algorithm);
710709
case 'AES-CTR':
711710
// Fall through
712711
case 'AES-CBC':
713712
// Fall through
714713
case 'AES-GCM':
715-
return lazyRequire('internal/crypto/aes')
714+
return require('internal/crypto/aes')
716715
.aesCipher(mode, key, data, algorithm);
717716
case 'AES-KW':
718717
if (op === 'wrapKey' || op === 'unwrapKey') {
719-
return lazyRequire('internal/crypto/aes')
718+
return require('internal/crypto/aes')
720719
.aesCipher(mode, key, data, algorithm);
721720
}
722721
}

0 commit comments

Comments
 (0)