Skip to content

Commit b5b56b6

Browse files
aduh95targos
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 <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Minwoo Jung <[email protected]>
1 parent 49840d4 commit b5b56b6

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
@@ -58,7 +58,6 @@ const {
5858
getArrayBufferOrView,
5959
getBlockSize,
6060
hasAnyNotIn,
61-
lazyRequire,
6261
normalizeAlgorithm,
6362
normalizeHashName,
6463
validateMaxBufferLength,
@@ -104,7 +103,7 @@ async function generateKey(
104103
// Fall through
105104
case 'RSA-OAEP':
106105
resultType = 'CryptoKeyPair';
107-
result = await lazyRequire('internal/crypto/rsa')
106+
result = await require('internal/crypto/rsa')
108107
.rsaKeyGenerate(algorithm, extractable, keyUsages);
109108
break;
110109
case 'Ed25519':
@@ -115,19 +114,19 @@ async function generateKey(
115114
// Fall through
116115
case 'X448':
117116
resultType = 'CryptoKeyPair';
118-
result = await lazyRequire('internal/crypto/cfrg')
117+
result = await require('internal/crypto/cfrg')
119118
.cfrgGenerateKey(algorithm, extractable, keyUsages);
120119
break;
121120
case 'ECDSA':
122121
// Fall through
123122
case 'ECDH':
124123
resultType = 'CryptoKeyPair';
125-
result = await lazyRequire('internal/crypto/ec')
124+
result = await require('internal/crypto/ec')
126125
.ecGenerateKey(algorithm, extractable, keyUsages);
127126
break;
128127
case 'HMAC':
129128
resultType = 'CryptoKey';
130-
result = await lazyRequire('internal/crypto/mac')
129+
result = await require('internal/crypto/mac')
131130
.hmacGenerateKey(algorithm, extractable, keyUsages);
132131
break;
133132
case 'AES-CTR':
@@ -138,7 +137,7 @@ async function generateKey(
138137
// Fall through
139138
case 'AES-KW':
140139
resultType = 'CryptoKey';
141-
result = await lazyRequire('internal/crypto/aes')
140+
result = await require('internal/crypto/aes')
142141
.aesGenerateKey(algorithm, extractable, keyUsages);
143142
break;
144143
default:
@@ -177,13 +176,13 @@ async function deriveBits(algorithm, baseKey, length) {
177176
case 'X448':
178177
// Fall through
179178
case 'ECDH':
180-
return lazyRequire('internal/crypto/diffiehellman')
179+
return require('internal/crypto/diffiehellman')
181180
.ecdhDeriveBits(algorithm, baseKey, length);
182181
case 'HKDF':
183-
return lazyRequire('internal/crypto/hkdf')
182+
return require('internal/crypto/hkdf')
184183
.hkdfDeriveBits(algorithm, baseKey, length);
185184
case 'PBKDF2':
186-
return lazyRequire('internal/crypto/pbkdf2')
185+
return require('internal/crypto/pbkdf2')
187186
.pbkdf2DeriveBits(algorithm, baseKey, length);
188187
}
189188
throw lazyDOMException('Unrecognized name.');
@@ -247,15 +246,15 @@ async function deriveKey(
247246
case 'X448':
248247
// Fall through
249248
case 'ECDH':
250-
bits = await lazyRequire('internal/crypto/diffiehellman')
249+
bits = await require('internal/crypto/diffiehellman')
251250
.ecdhDeriveBits(algorithm, baseKey, length);
252251
break;
253252
case 'HKDF':
254-
bits = await lazyRequire('internal/crypto/hkdf')
253+
bits = await require('internal/crypto/hkdf')
255254
.hkdfDeriveBits(algorithm, baseKey, length);
256255
break;
257256
case 'PBKDF2':
258-
bits = await lazyRequire('internal/crypto/pbkdf2')
257+
bits = await require('internal/crypto/pbkdf2')
259258
.pbkdf2DeriveBits(algorithm, baseKey, length);
260259
break;
261260
default:
@@ -277,15 +276,15 @@ async function exportKeySpki(key) {
277276
// Fall through
278277
case 'RSA-OAEP':
279278
if (key.type === 'public') {
280-
return lazyRequire('internal/crypto/rsa')
279+
return require('internal/crypto/rsa')
281280
.rsaExportKey(key, kWebCryptoKeyFormatSPKI);
282281
}
283282
break;
284283
case 'ECDSA':
285284
// Fall through
286285
case 'ECDH':
287286
if (key.type === 'public') {
288-
return lazyRequire('internal/crypto/ec')
287+
return require('internal/crypto/ec')
289288
.ecExportKey(key, kWebCryptoKeyFormatSPKI);
290289
}
291290
break;
@@ -297,7 +296,7 @@ async function exportKeySpki(key) {
297296
// Fall through
298297
case 'X448':
299298
if (key.type === 'public') {
300-
return lazyRequire('internal/crypto/cfrg')
299+
return require('internal/crypto/cfrg')
301300
.cfrgExportKey(key, kWebCryptoKeyFormatSPKI);
302301
}
303302
break;
@@ -316,15 +315,15 @@ async function exportKeyPkcs8(key) {
316315
// Fall through
317316
case 'RSA-OAEP':
318317
if (key.type === 'private') {
319-
return lazyRequire('internal/crypto/rsa')
318+
return require('internal/crypto/rsa')
320319
.rsaExportKey(key, kWebCryptoKeyFormatPKCS8);
321320
}
322321
break;
323322
case 'ECDSA':
324323
// Fall through
325324
case 'ECDH':
326325
if (key.type === 'private') {
327-
return lazyRequire('internal/crypto/ec')
326+
return require('internal/crypto/ec')
328327
.ecExportKey(key, kWebCryptoKeyFormatPKCS8);
329328
}
330329
break;
@@ -336,7 +335,7 @@ async function exportKeyPkcs8(key) {
336335
// Fall through
337336
case 'X448':
338337
if (key.type === 'private') {
339-
return lazyRequire('internal/crypto/cfrg')
338+
return require('internal/crypto/cfrg')
340339
.cfrgExportKey(key, kWebCryptoKeyFormatPKCS8);
341340
}
342341
break;
@@ -353,7 +352,7 @@ async function exportKeyRaw(key) {
353352
// Fall through
354353
case 'ECDH':
355354
if (key.type === 'public') {
356-
return lazyRequire('internal/crypto/ec')
355+
return require('internal/crypto/ec')
357356
.ecExportKey(key, kWebCryptoKeyFormatRaw);
358357
}
359358
break;
@@ -365,7 +364,7 @@ async function exportKeyRaw(key) {
365364
// Fall through
366365
case 'X448':
367366
if (key.type === 'public') {
368-
return lazyRequire('internal/crypto/cfrg')
367+
return require('internal/crypto/cfrg')
369368
.cfrgExportKey(key, kWebCryptoKeyFormatRaw);
370369
}
371370
break;
@@ -430,7 +429,7 @@ async function exportKeyJWK(key) {
430429
case 'AES-GCM':
431430
// Fall through
432431
case 'AES-KW':
433-
jwk.alg = lazyRequire('internal/crypto/aes')
432+
jwk.alg = require('internal/crypto/aes')
434433
.getAlgorithmName(key.algorithm.name, key.algorithm.length);
435434
return jwk;
436435
case 'HMAC':
@@ -529,12 +528,12 @@ async function importKey(
529528
case 'RSA-PSS':
530529
// Fall through
531530
case 'RSA-OAEP':
532-
return lazyRequire('internal/crypto/rsa')
531+
return require('internal/crypto/rsa')
533532
.rsaImportKey(format, keyData, algorithm, extractable, keyUsages);
534533
case 'ECDSA':
535534
// Fall through
536535
case 'ECDH':
537-
return lazyRequire('internal/crypto/ec')
536+
return require('internal/crypto/ec')
538537
.ecImportKey(format, keyData, algorithm, extractable, keyUsages);
539538
case 'Ed25519':
540539
// Fall through
@@ -543,10 +542,10 @@ async function importKey(
543542
case 'X25519':
544543
// Fall through
545544
case 'X448':
546-
return lazyRequire('internal/crypto/cfrg')
545+
return require('internal/crypto/cfrg')
547546
.cfrgImportKey(format, keyData, algorithm, extractable, keyUsages);
548547
case 'HMAC':
549-
return lazyRequire('internal/crypto/mac')
548+
return require('internal/crypto/mac')
550549
.hmacImportKey(format, keyData, algorithm, extractable, keyUsages);
551550
case 'AES-CTR':
552551
// Fall through
@@ -555,7 +554,7 @@ async function importKey(
555554
case 'AES-GCM':
556555
// Fall through
557556
case 'AES-KW':
558-
return lazyRequire('internal/crypto/aes')
557+
return require('internal/crypto/aes')
559558
.aesImportKey(algorithm, format, keyData, extractable, keyUsages);
560559
case 'HKDF':
561560
// Fall through
@@ -655,19 +654,19 @@ function signVerify(algorithm, key, data, signature) {
655654
case 'RSA-PSS':
656655
// Fall through
657656
case 'RSASSA-PKCS1-v1_5':
658-
return lazyRequire('internal/crypto/rsa')
657+
return require('internal/crypto/rsa')
659658
.rsaSignVerify(key, data, algorithm, signature);
660659
case 'ECDSA':
661-
return lazyRequire('internal/crypto/ec')
660+
return require('internal/crypto/ec')
662661
.ecdsaSignVerify(key, data, algorithm, signature);
663662
case 'Ed25519':
664663
// Fall through
665664
case 'Ed448':
666665
// Fall through
667-
return lazyRequire('internal/crypto/cfrg')
666+
return require('internal/crypto/cfrg')
668667
.eddsaSignVerify(key, data, algorithm, signature);
669668
case 'HMAC':
670-
return lazyRequire('internal/crypto/mac')
669+
return require('internal/crypto/mac')
671670
.hmacSignVerify(key, data, algorithm, signature);
672671
}
673672
throw lazyDOMException('Unrecognized named.', 'NotSupportedError');
@@ -710,18 +709,18 @@ async function cipherOrWrap(mode, algorithm, key, data, op) {
710709

711710
switch (algorithm.name) {
712711
case 'RSA-OAEP':
713-
return lazyRequire('internal/crypto/rsa')
712+
return require('internal/crypto/rsa')
714713
.rsaCipher(mode, key, data, algorithm);
715714
case 'AES-CTR':
716715
// Fall through
717716
case 'AES-CBC':
718717
// Fall through
719718
case 'AES-GCM':
720-
return lazyRequire('internal/crypto/aes')
719+
return require('internal/crypto/aes')
721720
.aesCipher(mode, key, data, algorithm);
722721
case 'AES-KW':
723722
if (op === 'wrapKey' || op === 'unwrapKey') {
724-
return lazyRequire('internal/crypto/aes')
723+
return require('internal/crypto/aes')
725724
.aesCipher(mode, key, data, algorithm);
726725
}
727726
}

0 commit comments

Comments
 (0)