@digitaldefiance/ecies-lib 3.0.8 → 3.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/package.json +4 -3
- package/src/builders/ecies-builder.js +5 -9
- package/src/builders/ecies-builder.js.map +1 -1
- package/src/builders/index.js +2 -5
- package/src/builders/index.js.map +1 -1
- package/src/builders/member-builder.js +12 -16
- package/src/builders/member-builder.js.map +1 -1
- package/src/constants.d.ts +14 -0
- package/src/constants.d.ts.map +1 -1
- package/src/constants.js +150 -74
- package/src/constants.js.map +1 -1
- package/src/core/errors/crypto-error.js +10 -14
- package/src/core/errors/crypto-error.js.map +1 -1
- package/src/core/index.js +2 -5
- package/src/core/index.js.map +1 -1
- package/src/core/types/result.js +1 -5
- package/src/core/types/result.js.map +1 -1
- package/src/email-string.js +8 -13
- package/src/email-string.js.map +1 -1
- package/src/enumerations/disposed-error-type.d.ts +12 -0
- package/src/enumerations/disposed-error-type.d.ts.map +1 -0
- package/src/enumerations/disposed-error-type.js +13 -0
- package/src/enumerations/disposed-error-type.js.map +1 -0
- package/src/enumerations/ecies-encryption-type.js +20 -27
- package/src/enumerations/ecies-encryption-type.js.map +1 -1
- package/src/enumerations/ecies-error-type.js +2 -5
- package/src/enumerations/ecies-error-type.js.map +1 -1
- package/src/enumerations/ecies-string-key.d.ts +19 -1
- package/src/enumerations/ecies-string-key.d.ts.map +1 -1
- package/src/enumerations/ecies-string-key.js +21 -5
- package/src/enumerations/ecies-string-key.js.map +1 -1
- package/src/enumerations/guid-brand-type.d.ts +27 -0
- package/src/enumerations/guid-brand-type.d.ts.map +1 -0
- package/src/enumerations/guid-brand-type.js +28 -0
- package/src/enumerations/guid-brand-type.js.map +1 -0
- package/src/enumerations/guid-error-type.d.ts +7 -0
- package/src/enumerations/guid-error-type.d.ts.map +1 -0
- package/src/enumerations/guid-error-type.js +8 -0
- package/src/enumerations/guid-error-type.js.map +1 -0
- package/src/enumerations/id-provider-error-type.d.ts +43 -0
- package/src/enumerations/id-provider-error-type.d.ts.map +1 -0
- package/src/enumerations/id-provider-error-type.js +44 -0
- package/src/enumerations/id-provider-error-type.js.map +1 -0
- package/src/enumerations/index.d.ts +3 -0
- package/src/enumerations/index.d.ts.map +1 -1
- package/src/enumerations/index.js +15 -15
- package/src/enumerations/index.js.map +1 -1
- package/src/enumerations/invalid-email-type.js +2 -5
- package/src/enumerations/invalid-email-type.js.map +1 -1
- package/src/enumerations/length-encoding-type.js +2 -5
- package/src/enumerations/length-encoding-type.js.map +1 -1
- package/src/enumerations/length-error-type.js +2 -5
- package/src/enumerations/length-error-type.js.map +1 -1
- package/src/enumerations/member-error-type.js +3 -6
- package/src/enumerations/member-error-type.js.map +1 -1
- package/src/enumerations/member-type.js +3 -6
- package/src/enumerations/member-type.js.map +1 -1
- package/src/enumerations/password-login-error-type.js +2 -5
- package/src/enumerations/password-login-error-type.js.map +1 -1
- package/src/enumerations/pbkdf2-error-type.js +2 -5
- package/src/enumerations/pbkdf2-error-type.js.map +1 -1
- package/src/enumerations/pbkdf2-profile.js +2 -5
- package/src/enumerations/pbkdf2-profile.js.map +1 -1
- package/src/enumerations/secure-storage-error-type.js +2 -5
- package/src/enumerations/secure-storage-error-type.js.map +1 -1
- package/src/errors/disposed.d.ts +20 -2
- package/src/errors/disposed.d.ts.map +1 -1
- package/src/errors/disposed.js +24 -17
- package/src/errors/disposed.js.map +1 -1
- package/src/errors/ecies.d.ts +46 -1
- package/src/errors/ecies.d.ts.map +1 -1
- package/src/errors/ecies.js +65 -10
- package/src/errors/ecies.js.map +1 -1
- package/src/errors/guid.d.ts +44 -0
- package/src/errors/guid.d.ts.map +1 -0
- package/src/errors/guid.js +81 -0
- package/src/errors/guid.js.map +1 -0
- package/src/errors/id-provider.d.ts +23 -0
- package/src/errors/id-provider.d.ts.map +1 -0
- package/src/errors/id-provider.js +29 -0
- package/src/errors/id-provider.js.map +1 -0
- package/src/errors/index.d.ts +3 -0
- package/src/errors/index.d.ts.map +1 -1
- package/src/errors/index.js +9 -10
- package/src/errors/index.js.map +1 -1
- package/src/errors/invalid-email.js +5 -9
- package/src/errors/invalid-email.js.map +1 -1
- package/src/errors/length.js +5 -9
- package/src/errors/length.js.map +1 -1
- package/src/errors/member.js +5 -9
- package/src/errors/member.js.map +1 -1
- package/src/errors/pbkdf2.js +5 -9
- package/src/errors/pbkdf2.js.map +1 -1
- package/src/errors/secure-storage.js +6 -10
- package/src/errors/secure-storage.js.map +1 -1
- package/src/errors/simple-ecies.js +6 -10
- package/src/errors/simple-ecies.js.map +1 -1
- package/src/errors/simple-test-error.js +1 -5
- package/src/errors/simple-test-error.js.map +1 -1
- package/src/i18n-setup.js +29 -37
- package/src/i18n-setup.js.map +1 -1
- package/src/index.d.ts +10 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +44 -57
- package/src/index.js.map +1 -1
- package/src/interfaces/checksum-config.js +1 -2
- package/src/interfaces/checksum-consts.js +1 -2
- package/src/interfaces/configuration-provenance.d.ts +51 -0
- package/src/interfaces/configuration-provenance.d.ts.map +1 -0
- package/src/interfaces/configuration-provenance.js +23 -0
- package/src/interfaces/configuration-provenance.js.map +1 -0
- package/src/interfaces/constants.d.ts +27 -1
- package/src/interfaces/constants.d.ts.map +1 -1
- package/src/interfaces/constants.js +1 -2
- package/src/interfaces/ecies-config.js +1 -2
- package/src/interfaces/ecies-consts.js +1 -2
- package/src/interfaces/ecies-file-service.js +1 -2
- package/src/interfaces/encrypted-chunk.js +1 -4
- package/src/interfaces/encrypted-chunk.js.map +1 -1
- package/src/interfaces/encryption-state.js +1 -4
- package/src/interfaces/encryption-state.js.map +1 -1
- package/src/interfaces/frontend-member-operational.js +1 -2
- package/src/interfaces/guid.d.ts +78 -0
- package/src/interfaces/guid.d.ts.map +1 -0
- package/src/interfaces/guid.js +2 -0
- package/src/interfaces/guid.js.map +1 -0
- package/src/interfaces/id-provider.d.ts +83 -0
- package/src/interfaces/id-provider.d.ts.map +1 -0
- package/src/interfaces/id-provider.js +35 -0
- package/src/interfaces/id-provider.js.map +1 -0
- package/src/interfaces/index.d.ts +1 -0
- package/src/interfaces/index.d.ts.map +1 -1
- package/src/interfaces/index.js +13 -15
- package/src/interfaces/index.js.map +1 -1
- package/src/interfaces/invariant.d.ts +46 -0
- package/src/interfaces/invariant.d.ts.map +1 -0
- package/src/interfaces/invariant.js +18 -0
- package/src/interfaces/invariant.js.map +1 -0
- package/src/interfaces/library-error.js +1 -2
- package/src/interfaces/member-storage.js +1 -2
- package/src/interfaces/member-with-mnemonic.js +1 -2
- package/src/interfaces/multi-recipient-chunk.d.ts +36 -12
- package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -1
- package/src/interfaces/multi-recipient-chunk.js +36 -14
- package/src/interfaces/multi-recipient-chunk.js.map +1 -1
- package/src/interfaces/pbkdf2-config.js +1 -2
- package/src/interfaces/pbkdf2-consts.js +1 -2
- package/src/interfaces/pbkdf2-result.js +1 -2
- package/src/interfaces/stream-config.js +1 -4
- package/src/interfaces/stream-config.js.map +1 -1
- package/src/interfaces/stream-header.js +1 -4
- package/src/interfaces/stream-header.js.map +1 -1
- package/src/interfaces/stream-progress.js +1 -2
- package/src/lib/crypto-container.js +9 -13
- package/src/lib/crypto-container.js.map +1 -1
- package/src/lib/guid.d.ts +344 -0
- package/src/lib/guid.d.ts.map +1 -0
- package/src/lib/guid.js +914 -0
- package/src/lib/guid.js.map +1 -0
- package/src/lib/id-providers/custom-provider.d.ts +69 -0
- package/src/lib/id-providers/custom-provider.d.ts.map +1 -0
- package/src/lib/id-providers/custom-provider.js +128 -0
- package/src/lib/id-providers/custom-provider.js.map +1 -0
- package/src/lib/id-providers/guidv4-provider.d.ts +46 -0
- package/src/lib/id-providers/guidv4-provider.d.ts.map +1 -0
- package/src/lib/id-providers/guidv4-provider.js +105 -0
- package/src/lib/id-providers/guidv4-provider.js.map +1 -0
- package/src/lib/id-providers/index.d.ts +30 -0
- package/src/lib/id-providers/index.d.ts.map +1 -0
- package/src/lib/id-providers/index.js +29 -0
- package/src/lib/id-providers/index.js.map +1 -0
- package/src/lib/id-providers/objectid-provider.d.ts +33 -0
- package/src/lib/id-providers/objectid-provider.d.ts.map +1 -0
- package/src/lib/id-providers/objectid-provider.js +79 -0
- package/src/lib/id-providers/objectid-provider.js.map +1 -0
- package/src/lib/id-providers/uuid-provider.d.ts +42 -0
- package/src/lib/id-providers/uuid-provider.d.ts.map +1 -0
- package/src/lib/id-providers/uuid-provider.js +96 -0
- package/src/lib/id-providers/uuid-provider.js.map +1 -0
- package/src/lib/index.d.ts +1 -0
- package/src/lib/index.d.ts.map +1 -1
- package/src/lib/index.js +2 -4
- package/src/lib/index.js.map +1 -1
- package/src/lib/invariant-validator.d.ts +59 -0
- package/src/lib/invariant-validator.d.ts.map +1 -0
- package/src/lib/invariant-validator.js +97 -0
- package/src/lib/invariant-validator.js.map +1 -0
- package/src/lib/invariants/encryption-algorithm-consistency.d.ts +17 -0
- package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +1 -0
- package/src/lib/invariants/encryption-algorithm-consistency.js +49 -0
- package/src/lib/invariants/encryption-algorithm-consistency.js.map +1 -0
- package/src/lib/invariants/index.d.ts +4 -0
- package/src/lib/invariants/index.d.ts.map +1 -0
- package/src/lib/invariants/index.js +4 -0
- package/src/lib/invariants/index.js.map +1 -0
- package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +16 -0
- package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +1 -0
- package/src/lib/invariants/pbkdf2-profiles-validity.js +58 -0
- package/src/lib/invariants/pbkdf2-profiles-validity.js.map +1 -0
- package/src/lib/invariants/recipient-id-consistency.d.ts +18 -0
- package/src/lib/invariants/recipient-id-consistency.d.ts.map +1 -0
- package/src/lib/invariants/recipient-id-consistency.js +31 -0
- package/src/lib/invariants/recipient-id-consistency.js.map +1 -0
- package/src/member.js +43 -48
- package/src/member.js.map +1 -1
- package/src/pbkdf2-profiles.js +1 -2
- package/src/phone-number.js +7 -11
- package/src/phone-number.js.map +1 -1
- package/src/regexes.js +3 -6
- package/src/regexes.js.map +1 -1
- package/src/secure-buffer.d.ts +17 -1
- package/src/secure-buffer.d.ts.map +1 -1
- package/src/secure-buffer.js +40 -22
- package/src/secure-buffer.js.map +1 -1
- package/src/secure-string.js +20 -24
- package/src/secure-string.js.map +1 -1
- package/src/services/aes-gcm.js +21 -25
- package/src/services/aes-gcm.js.map +1 -1
- package/src/services/chunk-processor.js +32 -36
- package/src/services/chunk-processor.js.map +1 -1
- package/src/services/ecies/crypto-core.js +33 -37
- package/src/services/ecies/crypto-core.js.map +1 -1
- package/src/services/ecies/example.js +37 -44
- package/src/services/ecies/example.js.map +1 -1
- package/src/services/ecies/file.js +1 -5
- package/src/services/ecies/file.js.map +1 -1
- package/src/services/ecies/index.js +10 -15
- package/src/services/ecies/index.js.map +1 -1
- package/src/services/ecies/integration.js +23 -28
- package/src/services/ecies/integration.js.map +1 -1
- package/src/services/ecies/interfaces.js +1 -2
- package/src/services/ecies/interfaces.js.map +1 -1
- package/src/services/ecies/manual-test.js +26 -34
- package/src/services/ecies/manual-test.js.map +1 -1
- package/src/services/ecies/multi-recipient.js +47 -51
- package/src/services/ecies/multi-recipient.js.map +1 -1
- package/src/services/ecies/service.js +27 -31
- package/src/services/ecies/service.js.map +1 -1
- package/src/services/ecies/signature.js +9 -13
- package/src/services/ecies/signature.js.map +1 -1
- package/src/services/ecies/single-recipient.js +42 -46
- package/src/services/ecies/single-recipient.js.map +1 -1
- package/src/services/encryption-stream.d.ts +3 -1
- package/src/services/encryption-stream.d.ts.map +1 -1
- package/src/services/encryption-stream.js +46 -48
- package/src/services/encryption-stream.js.map +1 -1
- package/src/services/index.js +5 -8
- package/src/services/index.js.map +1 -1
- package/src/services/multi-recipient-processor.d.ts +12 -2
- package/src/services/multi-recipient-processor.d.ts.map +1 -1
- package/src/services/multi-recipient-processor.js +65 -56
- package/src/services/multi-recipient-processor.js.map +1 -1
- package/src/services/password-login.js +33 -37
- package/src/services/password-login.js.map +1 -1
- package/src/services/pbkdf2.js +8 -12
- package/src/services/pbkdf2.js.map +1 -1
- package/src/services/progress-tracker.js +5 -9
- package/src/services/progress-tracker.js.map +1 -1
- package/src/services/resumable-encryption.js +24 -28
- package/src/services/resumable-encryption.js.map +1 -1
- package/src/services/xor.js +1 -5
- package/src/services/xor.js.map +1 -1
- package/src/test-mocks/index.js +1 -4
- package/src/test-mocks/index.js.map +1 -1
- package/src/test-mocks/mock-frontend-member.js +20 -24
- package/src/test-mocks/mock-frontend-member.js.map +1 -1
- package/src/testing.js +1 -4
- package/src/testing.js.map +1 -1
- package/src/translations/de.d.ts +2 -1
- package/src/translations/de.d.ts.map +1 -1
- package/src/translations/de.js +190 -170
- package/src/translations/de.js.map +1 -1
- package/src/translations/en-US.d.ts +2 -1
- package/src/translations/en-US.d.ts.map +1 -1
- package/src/translations/en-US.js +190 -170
- package/src/translations/en-US.js.map +1 -1
- package/src/translations/es.d.ts +2 -1
- package/src/translations/es.d.ts.map +1 -1
- package/src/translations/es.js +190 -170
- package/src/translations/es.js.map +1 -1
- package/src/translations/fr.d.ts +2 -1
- package/src/translations/fr.d.ts.map +1 -1
- package/src/translations/fr.js +190 -170
- package/src/translations/fr.js.map +1 -1
- package/src/translations/ja.d.ts +2 -1
- package/src/translations/ja.d.ts.map +1 -1
- package/src/translations/ja.js +189 -170
- package/src/translations/ja.js.map +1 -1
- package/src/translations/uk.d.ts +2 -1
- package/src/translations/uk.d.ts.map +1 -1
- package/src/translations/uk.js +192 -170
- package/src/translations/uk.js.map +1 -1
- package/src/translations/zh-cn.d.ts +2 -1
- package/src/translations/zh-cn.d.ts.map +1 -1
- package/src/translations/zh-cn.js +189 -170
- package/src/translations/zh-cn.js.map +1 -1
- package/src/types/deep-partial.js +1 -2
- package/src/types.d.ts +31 -0
- package/src/types.d.ts.map +1 -1
- package/src/types.js +1 -2
- package/src/utils.js +59 -77
- package/src/utils.js.map +1 -1
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const crypto_core_1 = require("./crypto-core");
|
|
8
|
-
const i18n_setup_1 = require("../../i18n-setup");
|
|
9
|
-
const enumerations_1 = require("../../enumerations");
|
|
1
|
+
import { Constants } from '../../constants';
|
|
2
|
+
import { concatUint8Arrays } from '../../utils';
|
|
3
|
+
import { AESGCMService } from '../aes-gcm';
|
|
4
|
+
import { EciesCryptoCore } from './crypto-core';
|
|
5
|
+
import { EciesComponentId, getEciesI18nEngine } from '../../i18n-setup';
|
|
6
|
+
import { EciesStringKey } from '../../enumerations';
|
|
10
7
|
/**
|
|
11
8
|
* Browser-compatible multi-recipient ECIES encryption/decryption
|
|
12
9
|
*/
|
|
13
|
-
class EciesMultiRecipient {
|
|
10
|
+
export class EciesMultiRecipient {
|
|
14
11
|
cryptoCore;
|
|
15
12
|
eciesConsts;
|
|
16
|
-
constructor(config, eciesParams =
|
|
17
|
-
this.cryptoCore = new
|
|
13
|
+
constructor(config, eciesParams = Constants.ECIES) {
|
|
14
|
+
this.cryptoCore = new EciesCryptoCore(config, eciesParams);
|
|
18
15
|
this.eciesConsts = eciesParams;
|
|
19
16
|
}
|
|
20
17
|
/**
|
|
@@ -36,14 +33,14 @@ class EciesMultiRecipient {
|
|
|
36
33
|
const ephemeralKeyPair = await this.cryptoCore.generateEphemeralKeyPair();
|
|
37
34
|
const sharedSecret = await this.cryptoCore.computeSharedSecret(ephemeralKeyPair.privateKey, receiverPublicKey);
|
|
38
35
|
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
39
|
-
const encryptResult = await
|
|
36
|
+
const encryptResult = await AESGCMService.encrypt(messageSymmetricKey, symKey, true, this.eciesConsts);
|
|
40
37
|
const { encrypted, iv } = encryptResult;
|
|
41
38
|
const authTag = encryptResult.tag;
|
|
42
39
|
if (!authTag) {
|
|
43
|
-
const engine =
|
|
44
|
-
throw new Error(engine.translate(
|
|
40
|
+
const engine = getEciesI18nEngine();
|
|
41
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForKeyEncryption));
|
|
45
42
|
}
|
|
46
|
-
return
|
|
43
|
+
return concatUint8Arrays(new Uint8Array(ephemeralKeyPair.publicKey), iv, authTag, encrypted);
|
|
47
44
|
}
|
|
48
45
|
/**
|
|
49
46
|
* Decrypts symmetric key encrypted with ECIES
|
|
@@ -53,8 +50,8 @@ class EciesMultiRecipient {
|
|
|
53
50
|
*/
|
|
54
51
|
async decryptKey(privateKey, encryptedKey) {
|
|
55
52
|
if (encryptedKey.length !== this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE) {
|
|
56
|
-
const engine =
|
|
57
|
-
throw new Error(engine.translate(
|
|
53
|
+
const engine = getEciesI18nEngine();
|
|
54
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidEncryptedKeyLengthTemplate, { keySize: this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE, encryptedKeyLength: encryptedKey.length }));
|
|
58
55
|
}
|
|
59
56
|
const ephemeralPublicKey = encryptedKey.slice(0, this.eciesConsts.PUBLIC_KEY_LENGTH);
|
|
60
57
|
const iv = encryptedKey.slice(this.eciesConsts.PUBLIC_KEY_LENGTH, this.eciesConsts.PUBLIC_KEY_LENGTH + this.eciesConsts.IV_SIZE);
|
|
@@ -62,44 +59,44 @@ class EciesMultiRecipient {
|
|
|
62
59
|
const encrypted = encryptedKey.slice(this.eciesConsts.PUBLIC_KEY_LENGTH + this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE);
|
|
63
60
|
const sharedSecret = await this.cryptoCore.computeSharedSecret(privateKey, ephemeralPublicKey);
|
|
64
61
|
const symKey = sharedSecret.slice(0, this.eciesConsts.SYMMETRIC.KEY_SIZE);
|
|
65
|
-
const encryptedWithTag =
|
|
62
|
+
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
|
|
66
63
|
try {
|
|
67
|
-
const decrypted = await
|
|
64
|
+
const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symKey, true, this.eciesConsts);
|
|
68
65
|
if (decrypted.length !== this.eciesConsts.SYMMETRIC.KEY_SIZE) {
|
|
69
|
-
const engine =
|
|
70
|
-
throw new Error(engine.translate(
|
|
66
|
+
const engine = getEciesI18nEngine();
|
|
67
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
71
68
|
}
|
|
72
69
|
return decrypted;
|
|
73
70
|
}
|
|
74
71
|
catch (error) {
|
|
75
72
|
console.error('Failed to decrypt key:', error);
|
|
76
|
-
const engine =
|
|
77
|
-
throw new Error(engine.translate(
|
|
73
|
+
const engine = getEciesI18nEngine();
|
|
74
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_FailedToDecryptKey));
|
|
78
75
|
}
|
|
79
76
|
}
|
|
80
77
|
/**
|
|
81
78
|
* Encrypt a message for multiple recipients
|
|
82
79
|
*/
|
|
83
80
|
async encryptMultiple(recipients, message, preamble = new Uint8Array(0)) {
|
|
84
|
-
const engine =
|
|
81
|
+
const engine = getEciesI18nEngine();
|
|
85
82
|
if (recipients.length > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
|
|
86
|
-
throw new Error(engine.translate(
|
|
83
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_TooManyRecipientsTemplate, { recipientsCount: recipients.length }));
|
|
87
84
|
}
|
|
88
85
|
if (message.length > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
89
|
-
throw new Error(engine.translate(
|
|
86
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MessageTooLargeTemplate, { length: message.length }));
|
|
90
87
|
}
|
|
91
88
|
// Generate symmetric key
|
|
92
89
|
const symmetricKey = crypto.getRandomValues(new Uint8Array(this.eciesConsts.SYMMETRIC.KEY_SIZE));
|
|
93
90
|
// Encrypt message with symmetric key
|
|
94
|
-
const encryptResult = await
|
|
91
|
+
const encryptResult = await AESGCMService.encrypt(message, symmetricKey, true, this.eciesConsts);
|
|
95
92
|
const { encrypted, iv } = encryptResult;
|
|
96
93
|
const authTag = encryptResult.tag;
|
|
97
94
|
if (!authTag) {
|
|
98
|
-
const engine =
|
|
99
|
-
throw new Error(engine.translate(
|
|
95
|
+
const engine = getEciesI18nEngine();
|
|
96
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForMultiRecipientECIESEncryption));
|
|
100
97
|
}
|
|
101
98
|
// Create stored message: preamble + iv + authTag + encrypted
|
|
102
|
-
const storedMessage =
|
|
99
|
+
const storedMessage = concatUint8Arrays(preamble, iv, authTag, encrypted);
|
|
103
100
|
// Encrypt symmetric key for each recipient
|
|
104
101
|
const recipientIds = [];
|
|
105
102
|
const recipientKeys = [];
|
|
@@ -125,8 +122,8 @@ class EciesMultiRecipient {
|
|
|
125
122
|
// Find recipient's encrypted key
|
|
126
123
|
const recipientIndex = encryptedData.recipientIds.findIndex((id) => this.arraysEqual(id, recipientId));
|
|
127
124
|
if (recipientIndex === -1) {
|
|
128
|
-
const engine =
|
|
129
|
-
throw new Error(engine.translate(
|
|
125
|
+
const engine = getEciesI18nEngine();
|
|
126
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientNotFound));
|
|
130
127
|
}
|
|
131
128
|
const encryptedKey = encryptedData.recipientKeys[recipientIndex];
|
|
132
129
|
// Decrypt the symmetric key
|
|
@@ -140,12 +137,12 @@ class EciesMultiRecipient {
|
|
|
140
137
|
const encrypted = encryptedData.encryptedMessage.slice(offset);
|
|
141
138
|
// AES-GCM provides authentication via auth tag (no separate CRC needed)
|
|
142
139
|
// Decrypt with symmetric key
|
|
143
|
-
const encryptedWithTag =
|
|
144
|
-
const decrypted = await
|
|
140
|
+
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encrypted, authTag);
|
|
141
|
+
const decrypted = await AESGCMService.decrypt(iv, encryptedWithTag, symmetricKey, true, this.eciesConsts);
|
|
145
142
|
// Verify length
|
|
146
143
|
if (decrypted.length !== encryptedData.dataLength) {
|
|
147
|
-
const engine =
|
|
148
|
-
throw new Error(engine.translate(
|
|
144
|
+
const engine = getEciesI18nEngine();
|
|
145
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_DecryptedDataLengthMismatch));
|
|
149
146
|
}
|
|
150
147
|
return decrypted;
|
|
151
148
|
}
|
|
@@ -154,12 +151,12 @@ class EciesMultiRecipient {
|
|
|
154
151
|
*/
|
|
155
152
|
buildHeader(data) {
|
|
156
153
|
if (data.recipientIds.length !== data.recipientKeys.length) {
|
|
157
|
-
const engine =
|
|
158
|
-
throw new Error(engine.translate(
|
|
154
|
+
const engine = getEciesI18nEngine();
|
|
155
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientCountMismatch));
|
|
159
156
|
}
|
|
160
157
|
if (data.dataLength < 0 || data.dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
161
|
-
const engine =
|
|
162
|
-
throw new Error(engine.translate(
|
|
158
|
+
const engine = getEciesI18nEngine();
|
|
159
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
163
160
|
}
|
|
164
161
|
// Data length (8 bytes)
|
|
165
162
|
const dataLengthUint8Array = new Uint8Array(8);
|
|
@@ -168,18 +165,18 @@ class EciesMultiRecipient {
|
|
|
168
165
|
const recipientCountUint8Array = new Uint8Array(2);
|
|
169
166
|
new DataView(recipientCountUint8Array.buffer).setUint16(0, data.recipientIds.length, false);
|
|
170
167
|
// Recipient IDs
|
|
171
|
-
const recipientIdsUint8Array =
|
|
168
|
+
const recipientIdsUint8Array = concatUint8Arrays(...data.recipientIds);
|
|
172
169
|
// Encrypted keys
|
|
173
|
-
const encryptedKeysUint8Array =
|
|
174
|
-
return
|
|
170
|
+
const encryptedKeysUint8Array = concatUint8Arrays(...data.recipientKeys);
|
|
171
|
+
return concatUint8Arrays(dataLengthUint8Array, recipientCountUint8Array, recipientIdsUint8Array, encryptedKeysUint8Array);
|
|
175
172
|
}
|
|
176
173
|
/**
|
|
177
174
|
* Parse multi-recipient header
|
|
178
175
|
*/
|
|
179
176
|
parseHeader(data) {
|
|
180
177
|
if (data.length < 10) {
|
|
181
|
-
const engine =
|
|
182
|
-
throw new Error(engine.translate(
|
|
178
|
+
const engine = getEciesI18nEngine();
|
|
179
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_DataTooShortForMultiRecipientHeader));
|
|
183
180
|
// minimum: 8 + 2
|
|
184
181
|
}
|
|
185
182
|
let offset = 0;
|
|
@@ -188,15 +185,15 @@ class EciesMultiRecipient {
|
|
|
188
185
|
const dataLength = Number(view.getBigUint64(offset, false));
|
|
189
186
|
offset += 8;
|
|
190
187
|
if (dataLength <= 0 || dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
191
|
-
const engine =
|
|
192
|
-
throw new Error(engine.translate(
|
|
188
|
+
const engine = getEciesI18nEngine();
|
|
189
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
193
190
|
}
|
|
194
191
|
// Read recipient count
|
|
195
192
|
const recipientCount = view.getUint16(offset, false);
|
|
196
193
|
offset += 2;
|
|
197
194
|
if (recipientCount <= 0 || recipientCount > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
|
|
198
|
-
const engine =
|
|
199
|
-
throw new Error(engine.translate(
|
|
195
|
+
const engine = getEciesI18nEngine();
|
|
196
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidRecipientCount));
|
|
200
197
|
}
|
|
201
198
|
// Read recipient IDs
|
|
202
199
|
const recipientIds = [];
|
|
@@ -239,5 +236,4 @@ class EciesMultiRecipient {
|
|
|
239
236
|
return true;
|
|
240
237
|
}
|
|
241
238
|
}
|
|
242
|
-
exports.EciesMultiRecipient = EciesMultiRecipient;
|
|
243
239
|
//# sourceMappingURL=multi-recipient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-recipient.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"multi-recipient.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const i18n_setup_1 = require("../../i18n-setup");
|
|
10
|
-
const ecies_string_key_1 = require("../../enumerations/ecies-string-key");
|
|
11
|
-
const multi_recipient_1 = require("./multi-recipient");
|
|
1
|
+
import { Constants } from '../../constants';
|
|
2
|
+
import { EciesEncryptionTypeEnum, } from '../../enumerations/ecies-encryption-type';
|
|
3
|
+
import { EciesCryptoCore } from './crypto-core';
|
|
4
|
+
import { EciesSignature } from './signature';
|
|
5
|
+
import { EciesSingleRecipient } from './single-recipient';
|
|
6
|
+
import { getEciesI18nEngine, EciesComponentId } from '../../i18n-setup';
|
|
7
|
+
import { EciesStringKey } from '../../enumerations/ecies-string-key';
|
|
8
|
+
import { EciesMultiRecipient } from './multi-recipient';
|
|
12
9
|
/**
|
|
13
10
|
* Browser-compatible ECIES service that mirrors the server-side functionality
|
|
14
11
|
* Uses Web Crypto API and @scure/@noble libraries for browser compatibility
|
|
15
12
|
*/
|
|
16
|
-
class ECIESService {
|
|
13
|
+
export class ECIESService {
|
|
17
14
|
_config;
|
|
18
15
|
cryptoCore;
|
|
19
16
|
signature;
|
|
20
17
|
singleRecipient;
|
|
21
18
|
multiRecipient;
|
|
22
19
|
eciesConsts;
|
|
23
|
-
constructor(config, eciesParams =
|
|
20
|
+
constructor(config, eciesParams = Constants.ECIES) {
|
|
24
21
|
this.eciesConsts = eciesParams;
|
|
25
22
|
this._config = {
|
|
26
23
|
curveName: this.eciesConsts.CURVE_NAME,
|
|
@@ -32,10 +29,10 @@ class ECIESService {
|
|
|
32
29
|
...config,
|
|
33
30
|
};
|
|
34
31
|
// Initialize components
|
|
35
|
-
this.cryptoCore = new
|
|
36
|
-
this.signature = new
|
|
37
|
-
this.singleRecipient = new
|
|
38
|
-
this.multiRecipient = new
|
|
32
|
+
this.cryptoCore = new EciesCryptoCore(this._config, this.eciesConsts);
|
|
33
|
+
this.signature = new EciesSignature(this.cryptoCore);
|
|
34
|
+
this.singleRecipient = new EciesSingleRecipient(this._config, this.eciesConsts);
|
|
35
|
+
this.multiRecipient = new EciesMultiRecipient(this._config, this.eciesConsts);
|
|
39
36
|
}
|
|
40
37
|
get core() {
|
|
41
38
|
return this.cryptoCore;
|
|
@@ -96,8 +93,8 @@ class ECIESService {
|
|
|
96
93
|
*/
|
|
97
94
|
async decryptSimpleOrSingleWithHeader(decryptSimple, privateKey, encryptedData, preambleSize = 0, options) {
|
|
98
95
|
return await this.singleRecipient.decryptWithHeader(decryptSimple
|
|
99
|
-
?
|
|
100
|
-
:
|
|
96
|
+
? EciesEncryptionTypeEnum.Simple
|
|
97
|
+
: EciesEncryptionTypeEnum.Single, privateKey, encryptedData, preambleSize, options);
|
|
101
98
|
}
|
|
102
99
|
/**
|
|
103
100
|
* Extended decrypt with header
|
|
@@ -143,8 +140,8 @@ class ECIESService {
|
|
|
143
140
|
*/
|
|
144
141
|
computeEncryptedLengthFromDataLength(dataLength, encryptionMode, recipientCount) {
|
|
145
142
|
if (dataLength < 0) {
|
|
146
|
-
const engine =
|
|
147
|
-
throw new Error(engine.translate(
|
|
143
|
+
const engine = getEciesI18nEngine();
|
|
144
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Service_InvalidDataLength));
|
|
148
145
|
}
|
|
149
146
|
switch (encryptionMode) {
|
|
150
147
|
case 'simple':
|
|
@@ -157,8 +154,8 @@ class ECIESService {
|
|
|
157
154
|
this.eciesConsts.MULTIPLE.FIXED_OVERHEAD_SIZE +
|
|
158
155
|
(recipientCount ?? 1) * this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE);
|
|
159
156
|
default:
|
|
160
|
-
const engine =
|
|
161
|
-
throw new Error(engine.translate(
|
|
157
|
+
const engine = getEciesI18nEngine();
|
|
158
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Service_InvalidEncryptionType));
|
|
162
159
|
}
|
|
163
160
|
}
|
|
164
161
|
/**
|
|
@@ -166,15 +163,15 @@ class ECIESService {
|
|
|
166
163
|
*/
|
|
167
164
|
computeDecryptedLengthFromEncryptedDataLength(encryptedDataLength, padding) {
|
|
168
165
|
if (encryptedDataLength < 0) {
|
|
169
|
-
const engine =
|
|
170
|
-
throw new Error(engine.translate(
|
|
166
|
+
const engine = getEciesI18nEngine();
|
|
167
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Service_InvalidEncryptedDataLength));
|
|
171
168
|
}
|
|
172
169
|
const overhead = this.eciesConsts.SINGLE.FIXED_OVERHEAD_SIZE;
|
|
173
170
|
const actualPadding = padding !== undefined ? padding : 0;
|
|
174
171
|
const decryptedLength = encryptedDataLength - overhead - actualPadding;
|
|
175
172
|
if (decryptedLength < 0) {
|
|
176
|
-
const engine =
|
|
177
|
-
throw new Error(engine.translate(
|
|
173
|
+
const engine = getEciesI18nEngine();
|
|
174
|
+
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Service_ComputedDecryptedLengthNegative));
|
|
178
175
|
}
|
|
179
176
|
return decryptedLength;
|
|
180
177
|
}
|
|
@@ -182,10 +179,10 @@ class ECIESService {
|
|
|
182
179
|
* Generic encrypt method
|
|
183
180
|
*/
|
|
184
181
|
async encrypt(encryptionType, recipientPublicKey, message, preamble) {
|
|
185
|
-
if (encryptionType ===
|
|
186
|
-
throw new Error(
|
|
182
|
+
if (encryptionType === EciesEncryptionTypeEnum.Multiple) {
|
|
183
|
+
throw new Error(getEciesI18nEngine().translate(EciesComponentId, EciesStringKey.Error_ECIESError_MultipleEncryptionTypeNotSupportedInSingleRecipientMode));
|
|
187
184
|
}
|
|
188
|
-
return this.singleRecipient.encrypt(encryptionType ===
|
|
185
|
+
return this.singleRecipient.encrypt(encryptionType === EciesEncryptionTypeEnum.Simple, recipientPublicKey, message, preamble);
|
|
189
186
|
}
|
|
190
187
|
/**
|
|
191
188
|
* Encrypt for multiple recipients
|
|
@@ -198,5 +195,4 @@ class ECIESService {
|
|
|
198
195
|
return this.multiRecipient.encryptMultiple(recipients, message, preamble);
|
|
199
196
|
}
|
|
200
197
|
}
|
|
201
|
-
exports.ECIESService = ECIESService;
|
|
202
198
|
//# sourceMappingURL=service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
|
|
5
|
-
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
6
|
-
const utils_1 = require("../../utils");
|
|
1
|
+
import { secp256k1 } from '@noble/curves/secp256k1.js';
|
|
2
|
+
import { sha256 } from '@noble/hashes/sha2.js';
|
|
3
|
+
import { uint8ArrayToHex } from '../../utils';
|
|
7
4
|
/**
|
|
8
5
|
* Browser-compatible ECDSA signature operations
|
|
9
6
|
*/
|
|
10
|
-
class EciesSignature {
|
|
7
|
+
export class EciesSignature {
|
|
11
8
|
cryptoCore;
|
|
12
9
|
constructor(cryptoCore) {
|
|
13
10
|
this.cryptoCore = cryptoCore;
|
|
@@ -17,9 +14,9 @@ class EciesSignature {
|
|
|
17
14
|
* Returns 64 bytes: [r(32) | s(32)]
|
|
18
15
|
*/
|
|
19
16
|
signMessage(privateKey, data) {
|
|
20
|
-
const hash =
|
|
17
|
+
const hash = sha256(data);
|
|
21
18
|
// Use deterministic signatures (RFC 6979) for consistency
|
|
22
|
-
const signature =
|
|
19
|
+
const signature = secp256k1.sign(hash, privateKey, {
|
|
23
20
|
format: 'compact',
|
|
24
21
|
extraEntropy: false,
|
|
25
22
|
});
|
|
@@ -32,11 +29,11 @@ class EciesSignature {
|
|
|
32
29
|
try {
|
|
33
30
|
if (!signature || signature.length !== 64)
|
|
34
31
|
return false;
|
|
35
|
-
const hash =
|
|
32
|
+
const hash = sha256(data);
|
|
36
33
|
const normalizedPublicKey = this.cryptoCore.normalizePublicKey(publicKey);
|
|
37
34
|
// Try direct verification first
|
|
38
35
|
try {
|
|
39
|
-
const directResult =
|
|
36
|
+
const directResult = secp256k1.verify(signature, hash, normalizedPublicKey);
|
|
40
37
|
if (directResult)
|
|
41
38
|
return true;
|
|
42
39
|
}
|
|
@@ -69,8 +66,7 @@ class EciesSignature {
|
|
|
69
66
|
* Convert signature buffer to signature string
|
|
70
67
|
*/
|
|
71
68
|
signatureUint8ArrayToSignatureString(signatureArray) {
|
|
72
|
-
return
|
|
69
|
+
return uint8ArrayToHex(signatureArray);
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
|
-
exports.EciesSignature = EciesSignature;
|
|
76
72
|
//# sourceMappingURL=signature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/signature.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;GAEG;AACH,MAAM,OAAO,cAAc;IACR,UAAU,CAAkB;IAE7C,YAAY,UAA2B;QACrC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,WAAW,CAChB,UAAsB,EACtB,IAAgB;QAEhB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,0DAA0D;QAC1D,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE;YACjD,MAAM,EAAE,SAAS;YACjB,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QACH,OAAO,SAAgC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACI,aAAa,CAClB,SAAqB,EACrB,IAAgB,EAChB,SAA8B;QAE9B,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YAE1E,gCAAgC;YAChC,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CACnC,SAAS,EACT,IAAI,EACJ,mBAAmB,CACpB,CAAC;gBACF,IAAI,YAAY;oBAAE,OAAO,IAAI,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;YACjD,CAAC;YAED,gFAAgF;YAChF,0EAA0E;YAC1E,4EAA4E;YAC5E,gFAAgF;YAEhF,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACI,oCAAoC,CACzC,eAAgC;QAEhC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAA6B,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,oCAAoC,CACzC,cAAmC;QAEnC,OAAO,eAAe,CAAC,cAAc,CAAoB,CAAC;IAC5D,CAAC;CACF"}
|