@digitaldefiance/ecies-lib 4.4.11 → 4.4.14
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/package.json +6 -4
- package/src/builders/ecies-builder.d.ts +18 -0
- package/src/builders/ecies-builder.d.ts.map +1 -0
- package/src/builders/ecies-builder.js +30 -0
- package/src/builders/ecies-builder.js.map +1 -0
- package/src/builders/index.d.ts +6 -0
- package/src/builders/index.d.ts.map +1 -0
- package/src/builders/{index.ts → index.js} +1 -1
- package/src/builders/index.js.map +1 -0
- package/src/builders/member-builder.d.ts +51 -0
- package/src/builders/member-builder.d.ts.map +1 -0
- package/src/builders/member-builder.js +97 -0
- package/src/builders/member-builder.js.map +1 -0
- package/src/constants.d.ts +60 -0
- package/src/constants.d.ts.map +1 -0
- package/src/constants.js +446 -0
- package/src/constants.js.map +1 -0
- package/src/core/errors/crypto-error.d.ts +34 -0
- package/src/core/errors/crypto-error.d.ts.map +1 -0
- package/src/core/errors/crypto-error.js +56 -0
- package/src/core/errors/crypto-error.js.map +1 -0
- package/src/core/index.d.ts +6 -0
- package/src/core/index.d.ts.map +1 -0
- package/src/core/{index.ts → index.js} +1 -1
- package/src/core/index.js.map +1 -0
- package/src/core/types/result.d.ts +16 -0
- package/src/core/types/result.d.ts.map +1 -0
- package/src/core/types/result.js +12 -0
- package/src/core/types/result.js.map +1 -0
- package/src/email-string.d.ts +42 -0
- package/src/email-string.d.ts.map +1 -0
- package/src/email-string.js +67 -0
- package/src/email-string.js.map +1 -0
- 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-cipher-suite.d.ts +4 -0
- package/src/enumerations/ecies-cipher-suite.d.ts.map +1 -0
- package/src/enumerations/ecies-cipher-suite.js +6 -0
- package/src/enumerations/ecies-cipher-suite.js.map +1 -0
- package/src/enumerations/ecies-encryption-type.d.ts +11 -0
- package/src/enumerations/ecies-encryption-type.d.ts.map +1 -0
- package/src/enumerations/ecies-encryption-type.js +27 -0
- package/src/enumerations/ecies-encryption-type.js.map +1 -0
- package/src/enumerations/ecies-error-type.d.ts +44 -0
- package/src/enumerations/ecies-error-type.d.ts.map +1 -0
- package/src/enumerations/ecies-error-type.js +45 -0
- package/src/enumerations/ecies-error-type.js.map +1 -0
- package/src/enumerations/ecies-string-key.d.ts +192 -0
- package/src/enumerations/ecies-string-key.d.ts.map +1 -0
- package/src/enumerations/ecies-string-key.js +199 -0
- package/src/enumerations/ecies-string-key.js.map +1 -0
- package/src/enumerations/ecies-version.d.ts +4 -0
- package/src/enumerations/ecies-version.d.ts.map +1 -0
- package/src/enumerations/ecies-version.js +5 -0
- package/src/enumerations/ecies-version.js.map +1 -0
- 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 +18 -0
- package/src/enumerations/index.d.ts.map +1 -0
- package/src/enumerations/{index.ts → index.js} +1 -0
- package/src/enumerations/index.js.map +1 -0
- package/src/enumerations/invalid-email-type.d.ts +6 -0
- package/src/enumerations/invalid-email-type.d.ts.map +1 -0
- package/src/enumerations/invalid-email-type.js +7 -0
- package/src/enumerations/invalid-email-type.js.map +1 -0
- package/src/enumerations/length-encoding-type.d.ts +7 -0
- package/src/enumerations/length-encoding-type.d.ts.map +1 -0
- package/src/enumerations/length-encoding-type.js +8 -0
- package/src/enumerations/length-encoding-type.js.map +1 -0
- package/src/enumerations/length-error-type.d.ts +6 -0
- package/src/enumerations/length-error-type.d.ts.map +1 -0
- package/src/enumerations/length-error-type.js +7 -0
- package/src/enumerations/length-error-type.js.map +1 -0
- package/src/enumerations/member-error-type.d.ts +87 -0
- package/src/enumerations/member-error-type.d.ts.map +1 -0
- package/src/enumerations/member-error-type.js +88 -0
- package/src/enumerations/member-error-type.js.map +1 -0
- package/src/enumerations/{member-type.ts → member-type.d.ts} +6 -7
- package/src/enumerations/member-type.d.ts.map +1 -0
- package/src/enumerations/member-type.js +16 -0
- package/src/enumerations/member-type.js.map +1 -0
- package/src/enumerations/password-login-error-type.d.ts +5 -0
- package/src/enumerations/password-login-error-type.d.ts.map +1 -0
- package/src/enumerations/password-login-error-type.js +6 -0
- package/src/enumerations/password-login-error-type.js.map +1 -0
- package/src/enumerations/pbkdf2-error-type.d.ts +6 -0
- package/src/enumerations/pbkdf2-error-type.d.ts.map +1 -0
- package/src/enumerations/pbkdf2-error-type.js +7 -0
- package/src/enumerations/pbkdf2-error-type.js.map +1 -0
- package/src/enumerations/pbkdf2-profile.d.ts +6 -0
- package/src/enumerations/pbkdf2-profile.d.ts.map +1 -0
- package/src/enumerations/pbkdf2-profile.js +7 -0
- package/src/enumerations/pbkdf2-profile.js.map +1 -0
- package/src/enumerations/secure-storage-error-type.d.ts +6 -0
- package/src/enumerations/secure-storage-error-type.d.ts.map +1 -0
- package/src/enumerations/secure-storage-error-type.js +7 -0
- package/src/enumerations/secure-storage-error-type.js.map +1 -0
- package/src/errors/disposed.d.ts +22 -0
- package/src/errors/disposed.d.ts.map +1 -0
- package/src/errors/disposed.js +28 -0
- package/src/errors/disposed.js.map +1 -0
- package/src/errors/ecies.d.ts +52 -0
- package/src/errors/ecies.d.ts.map +1 -0
- package/src/errors/ecies.js +78 -0
- package/src/errors/ecies.js.map +1 -0
- package/src/errors/guid.d.ts +49 -0
- package/src/errors/guid.d.ts.map +1 -0
- package/src/errors/guid.js +96 -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.ts → index.d.ts} +1 -0
- package/src/errors/index.d.ts.map +1 -0
- package/src/errors/index.js +10 -0
- package/src/errors/index.js.map +1 -0
- package/src/errors/invalid-email.d.ts +8 -0
- package/src/errors/invalid-email.d.ts.map +1 -0
- package/src/errors/invalid-email.js +15 -0
- package/src/errors/invalid-email.js.map +1 -0
- package/src/errors/length.d.ts +7 -0
- package/src/errors/length.d.ts.map +1 -0
- package/src/errors/length.js +11 -0
- package/src/errors/length.js.map +1 -0
- package/src/errors/member.d.ts +7 -0
- package/src/errors/member.d.ts.map +1 -0
- package/src/errors/member.js +11 -0
- package/src/errors/member.js.map +1 -0
- package/src/errors/pbkdf2.d.ts +7 -0
- package/src/errors/pbkdf2.d.ts.map +1 -0
- package/src/errors/pbkdf2.js +11 -0
- package/src/errors/pbkdf2.js.map +1 -0
- package/src/errors/secure-storage.d.ts +7 -0
- package/src/errors/secure-storage.d.ts.map +1 -0
- package/src/errors/secure-storage.js +12 -0
- package/src/errors/secure-storage.js.map +1 -0
- package/src/errors/simple-ecies.d.ts +6 -0
- package/src/errors/simple-ecies.d.ts.map +1 -0
- package/src/errors/simple-ecies.js +12 -0
- package/src/errors/simple-ecies.js.map +1 -0
- package/src/errors/simple-test-error.d.ts +4 -0
- package/src/errors/simple-test-error.d.ts.map +1 -0
- package/src/errors/simple-test-error.js +7 -0
- package/src/errors/simple-test-error.js.map +1 -0
- package/src/i18n-setup.d.ts +32 -0
- package/src/i18n-setup.d.ts.map +1 -0
- package/src/i18n-setup.js +101 -0
- package/src/i18n-setup.js.map +1 -0
- package/src/index.d.ts +80 -0
- package/src/index.d.ts.map +1 -0
- package/src/{index.ts → index.js} +7 -64
- package/src/index.js.map +1 -0
- package/src/interfaces/checksum-config.d.ts +5 -0
- package/src/interfaces/checksum-config.d.ts.map +1 -0
- package/src/interfaces/checksum-config.js +2 -0
- package/src/interfaces/checksum-config.js.map +1 -0
- package/src/interfaces/checksum-consts.d.ts +11 -0
- package/src/interfaces/checksum-consts.d.ts.map +1 -0
- package/src/interfaces/checksum-consts.js +2 -0
- package/src/interfaces/checksum-consts.js.map +1 -0
- package/src/interfaces/configuration-provenance.d.ts +43 -0
- package/src/interfaces/configuration-provenance.d.ts.map +1 -0
- package/src/interfaces/configuration-provenance.js +3 -0
- package/src/interfaces/configuration-provenance.js.map +1 -0
- package/src/interfaces/constants.d.ts +70 -0
- package/src/interfaces/constants.d.ts.map +1 -0
- package/src/interfaces/constants.js +2 -0
- package/src/interfaces/constants.js.map +1 -0
- package/src/interfaces/ecies-config.d.ts +9 -0
- package/src/interfaces/ecies-config.d.ts.map +1 -0
- package/src/interfaces/ecies-config.js +2 -0
- package/src/interfaces/ecies-config.js.map +1 -0
- package/src/interfaces/ecies-consts.d.ts +61 -0
- package/src/interfaces/ecies-consts.d.ts.map +1 -0
- package/src/interfaces/ecies-consts.js +2 -0
- package/src/interfaces/ecies-consts.js.map +1 -0
- package/src/interfaces/ecies-file-service.d.ts +7 -0
- package/src/interfaces/ecies-file-service.d.ts.map +1 -0
- package/src/interfaces/ecies-file-service.js +2 -0
- package/src/interfaces/ecies-file-service.js.map +1 -0
- package/src/interfaces/encrypted-chunk.d.ts +55 -0
- package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
- package/src/interfaces/encrypted-chunk.js +12 -0
- package/src/interfaces/encrypted-chunk.js.map +1 -0
- package/src/interfaces/encryption-state.d.ts +18 -0
- package/src/interfaces/encryption-state.d.ts.map +1 -0
- package/src/interfaces/encryption-state.js +2 -0
- package/src/interfaces/encryption-state.js.map +1 -0
- package/src/interfaces/frontend-member-operational.d.ts +51 -0
- package/src/interfaces/frontend-member-operational.d.ts.map +1 -0
- package/src/interfaces/frontend-member-operational.js +2 -0
- package/src/interfaces/frontend-member-operational.js.map +1 -0
- 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 +107 -0
- package/src/interfaces/id-provider.d.ts.map +1 -0
- package/src/interfaces/id-provider.js +52 -0
- package/src/interfaces/id-provider.js.map +1 -0
- package/src/interfaces/{index.ts → index.d.ts} +1 -0
- package/src/interfaces/index.d.ts.map +1 -0
- package/src/interfaces/index.js +13 -0
- package/src/interfaces/index.js.map +1 -0
- 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.d.ts +23 -0
- package/src/interfaces/library-error.d.ts.map +1 -0
- package/src/interfaces/library-error.js +2 -0
- package/src/interfaces/library-error.js.map +1 -0
- package/src/interfaces/{member-storage.ts → member-storage.d.ts} +10 -11
- package/src/interfaces/member-storage.d.ts.map +1 -0
- package/src/interfaces/member-storage.js +2 -0
- package/src/interfaces/member-storage.js.map +1 -0
- package/src/interfaces/{member-with-mnemonic.ts → member-with-mnemonic.d.ts} +3 -3
- package/src/interfaces/member-with-mnemonic.d.ts.map +1 -0
- package/src/interfaces/member-with-mnemonic.js +2 -0
- package/src/interfaces/member-with-mnemonic.js.map +1 -0
- package/src/interfaces/member.d.ts +55 -0
- package/src/interfaces/member.d.ts.map +1 -0
- package/src/interfaces/member.js +2 -0
- package/src/interfaces/member.js.map +1 -0
- package/src/interfaces/multi-recipient-chunk.d.ts +54 -0
- package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
- package/src/interfaces/multi-recipient-chunk.js +11 -0
- package/src/interfaces/multi-recipient-chunk.js.map +1 -0
- package/src/interfaces/pbkdf2-config.d.ts +7 -0
- package/src/interfaces/pbkdf2-config.d.ts.map +1 -0
- package/src/interfaces/pbkdf2-config.js +2 -0
- package/src/interfaces/pbkdf2-config.js.map +1 -0
- package/src/interfaces/pbkdf2-consts.d.ts +9 -0
- package/src/interfaces/pbkdf2-consts.d.ts.map +1 -0
- package/src/interfaces/pbkdf2-consts.js +2 -0
- package/src/interfaces/pbkdf2-consts.js.map +1 -0
- package/src/interfaces/pbkdf2-result.d.ts +6 -0
- package/src/interfaces/pbkdf2-result.d.ts.map +1 -0
- package/src/interfaces/pbkdf2-result.js +2 -0
- package/src/interfaces/pbkdf2-result.js.map +1 -0
- package/src/interfaces/stream-config.d.ts +14 -0
- package/src/interfaces/stream-config.d.ts.map +1 -0
- package/src/interfaces/stream-config.js +8 -0
- package/src/interfaces/stream-config.js.map +1 -0
- package/src/interfaces/stream-header.d.ts +29 -0
- package/src/interfaces/stream-header.d.ts.map +1 -0
- package/src/interfaces/stream-header.js +9 -0
- package/src/interfaces/stream-header.js.map +1 -0
- package/src/interfaces/stream-progress.d.ts +33 -0
- package/src/interfaces/stream-progress.d.ts.map +1 -0
- package/src/interfaces/stream-progress.js +2 -0
- package/src/interfaces/stream-progress.js.map +1 -0
- package/src/lib/configuration-provenance-utils.d.ts +11 -0
- package/src/lib/configuration-provenance-utils.d.ts.map +1 -0
- package/src/lib/configuration-provenance-utils.js +26 -0
- package/src/lib/configuration-provenance-utils.js.map +1 -0
- package/src/lib/crypto-container.d.ts +25 -0
- package/src/lib/crypto-container.d.ts.map +1 -0
- package/src/lib/crypto-container.js +46 -0
- package/src/lib/crypto-container.js.map +1 -0
- 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 +46 -0
- package/src/lib/id-providers/custom-provider.d.ts.map +1 -0
- package/src/lib/id-providers/custom-provider.js +85 -0
- package/src/lib/id-providers/custom-provider.js.map +1 -0
- package/src/lib/id-providers/guidv4-provider.d.ts +56 -0
- package/src/lib/id-providers/guidv4-provider.d.ts.map +1 -0
- package/src/lib/id-providers/guidv4-provider.js +122 -0
- package/src/lib/id-providers/guidv4-provider.js.map +1 -0
- package/src/lib/id-providers/{index.ts → index.d.ts} +5 -6
- 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 +43 -0
- package/src/lib/id-providers/objectid-provider.d.ts.map +1 -0
- package/src/lib/id-providers/objectid-provider.js +104 -0
- package/src/lib/id-providers/objectid-provider.js.map +1 -0
- package/src/lib/id-providers/uuid-provider.d.ts +52 -0
- package/src/lib/id-providers/uuid-provider.d.ts.map +1 -0
- package/src/lib/id-providers/uuid-provider.js +110 -0
- package/src/lib/id-providers/uuid-provider.js.map +1 -0
- package/src/lib/index.d.ts +6 -0
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/{index.ts → index.js} +2 -2
- package/src/lib/index.js.map +1 -0
- 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.ts → index.js} +1 -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/lib/multi-recipient-chunk-utils.d.ts +38 -0
- package/src/lib/multi-recipient-chunk-utils.d.ts.map +1 -0
- package/src/lib/multi-recipient-chunk-utils.js +41 -0
- package/src/lib/multi-recipient-chunk-utils.js.map +1 -0
- package/src/member.d.ts +92 -0
- package/src/member.d.ts.map +1 -0
- package/src/member.js +322 -0
- package/src/member.js.map +1 -0
- package/src/{pbkdf2-profiles.ts → pbkdf2-profiles.d.ts} +2 -2
- package/src/pbkdf2-profiles.d.ts.map +1 -0
- package/src/pbkdf2-profiles.js +2 -0
- package/src/pbkdf2-profiles.js.map +1 -0
- package/src/phone-number.d.ts +6 -0
- package/src/phone-number.d.ts.map +1 -0
- package/src/phone-number.js +18 -0
- package/src/phone-number.js.map +1 -0
- package/src/regexes.d.ts +7 -0
- package/src/regexes.d.ts.map +1 -0
- package/src/regexes.js +7 -0
- package/src/regexes.js.map +1 -0
- package/src/secure-buffer.d.ts +61 -0
- package/src/secure-buffer.d.ts.map +1 -0
- package/src/secure-buffer.js +201 -0
- package/src/secure-buffer.js.map +1 -0
- package/src/secure-string.d.ts +46 -0
- package/src/secure-string.d.ts.map +1 -0
- package/src/secure-string.js +206 -0
- package/src/secure-string.js.map +1 -0
- package/src/services/aes-gcm.d.ts +57 -0
- package/src/services/aes-gcm.d.ts.map +1 -0
- package/src/services/aes-gcm.js +142 -0
- package/src/services/aes-gcm.js.map +1 -0
- package/src/services/chunk-processor.d.ts +31 -0
- package/src/services/chunk-processor.d.ts.map +1 -0
- package/src/services/chunk-processor.js +145 -0
- package/src/services/chunk-processor.js.map +1 -0
- package/src/services/ecies/crypto-core.d.ts +72 -0
- package/src/services/ecies/crypto-core.d.ts.map +1 -0
- package/src/services/ecies/crypto-core.js +205 -0
- package/src/services/ecies/crypto-core.js.map +1 -0
- package/src/services/ecies/example.d.ts +25 -0
- package/src/services/ecies/example.d.ts.map +1 -0
- package/src/services/ecies/example.js +121 -0
- package/src/services/ecies/example.js.map +1 -0
- package/src/services/ecies/file.d.ts +18 -0
- package/src/services/ecies/file.d.ts.map +1 -0
- package/src/services/ecies/file.js +106 -0
- package/src/services/ecies/file.js.map +1 -0
- package/src/services/ecies/index.d.ts +38 -0
- package/src/services/ecies/index.d.ts.map +1 -0
- package/src/services/ecies/{index.ts → index.js} +1 -2
- package/src/services/ecies/index.js.map +1 -0
- package/src/services/ecies/integration.d.ts +59 -0
- package/src/services/ecies/integration.d.ts.map +1 -0
- package/src/services/ecies/integration.js +167 -0
- package/src/services/ecies/integration.js.map +1 -0
- package/src/services/ecies/interfaces.d.ts +54 -0
- package/src/services/ecies/interfaces.d.ts.map +1 -0
- package/src/services/ecies/interfaces.js +5 -0
- package/src/services/ecies/interfaces.js.map +1 -0
- package/src/services/ecies/manual-test.d.ts +29 -0
- package/src/services/ecies/manual-test.d.ts.map +1 -0
- package/src/services/ecies/manual-test.js +163 -0
- package/src/services/ecies/manual-test.js.map +1 -0
- package/src/services/ecies/multi-recipient.d.ts +56 -0
- package/src/services/ecies/multi-recipient.d.ts.map +1 -0
- package/src/services/ecies/multi-recipient.js +344 -0
- package/src/services/ecies/multi-recipient.js.map +1 -0
- package/src/services/ecies/service.d.ts +120 -0
- package/src/services/ecies/service.d.ts.map +1 -0
- package/src/services/ecies/service.js +210 -0
- package/src/services/ecies/service.js.map +1 -0
- package/src/services/ecies/signature.d.ts +27 -0
- package/src/services/ecies/signature.d.ts.map +1 -0
- package/src/services/ecies/signature.js +72 -0
- package/src/services/ecies/signature.js.map +1 -0
- package/src/services/ecies/single-recipient.d.ts +46 -0
- package/src/services/ecies/single-recipient.d.ts.map +1 -0
- package/src/services/ecies/single-recipient.js +322 -0
- package/src/services/ecies/single-recipient.js.map +1 -0
- package/src/services/encryption-stream.d.ts +71 -0
- package/src/services/encryption-stream.d.ts.map +1 -0
- package/src/services/encryption-stream.js +295 -0
- package/src/services/encryption-stream.js.map +1 -0
- package/src/services/index.d.ts +11 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/{index.ts → index.js} +1 -0
- package/src/services/index.js.map +1 -0
- package/src/services/multi-recipient-processor.d.ts +35 -0
- package/src/services/multi-recipient-processor.d.ts.map +1 -0
- package/src/services/multi-recipient-processor.js +289 -0
- package/src/services/multi-recipient-processor.js.map +1 -0
- package/src/services/password-login.d.ts +47 -0
- package/src/services/password-login.d.ts.map +1 -0
- package/src/services/password-login.js +115 -0
- package/src/services/password-login.js.map +1 -0
- package/src/services/pbkdf2.d.ts +54 -0
- package/src/services/pbkdf2.d.ts.map +1 -0
- package/src/services/pbkdf2.js +108 -0
- package/src/services/pbkdf2.js.map +1 -0
- package/src/services/progress-tracker.d.ts +23 -0
- package/src/services/progress-tracker.d.ts.map +1 -0
- package/src/services/progress-tracker.js +103 -0
- package/src/services/progress-tracker.js.map +1 -0
- package/src/services/resumable-encryption.d.ts +19 -0
- package/src/services/resumable-encryption.d.ts.map +1 -0
- package/src/services/resumable-encryption.js +105 -0
- package/src/services/resumable-encryption.js.map +1 -0
- package/src/services/xor.d.ts +37 -0
- package/src/services/xor.d.ts.map +1 -0
- package/src/services/xor.js +63 -0
- package/src/services/xor.js.map +1 -0
- package/src/test-mocks/index.d.ts +2 -0
- package/src/test-mocks/index.d.ts.map +1 -0
- package/src/test-mocks/index.js +2 -0
- package/src/test-mocks/index.js.map +1 -0
- package/src/test-mocks/mock-frontend-member.d.ts +85 -0
- package/src/test-mocks/mock-frontend-member.d.ts.map +1 -0
- package/src/test-mocks/mock-frontend-member.js +190 -0
- package/src/test-mocks/mock-frontend-member.js.map +1 -0
- package/src/testing.d.ts +2 -0
- package/src/testing.d.ts.map +1 -0
- package/src/{testing.ts → testing.js} +1 -0
- package/src/testing.js.map +1 -0
- package/src/translations/de.d.ts +4 -0
- package/src/translations/de.d.ts.map +1 -0
- package/src/translations/{de.ts → de.js} +56 -112
- package/src/translations/de.js.map +1 -0
- package/src/translations/en-US.d.ts +4 -0
- package/src/translations/en-US.d.ts.map +1 -0
- package/src/translations/{en-US.ts → en-US.js} +58 -116
- package/src/translations/en-US.js.map +1 -0
- package/src/translations/es.d.ts +4 -0
- package/src/translations/es.d.ts.map +1 -0
- package/src/translations/{es.ts → es.js} +67 -134
- package/src/translations/es.js.map +1 -0
- package/src/translations/fr.d.ts +4 -0
- package/src/translations/fr.d.ts.map +1 -0
- package/src/translations/{fr.ts → fr.js} +64 -129
- package/src/translations/fr.js.map +1 -0
- package/src/translations/ja.d.ts +4 -0
- package/src/translations/ja.d.ts.map +1 -0
- package/src/translations/{ja.ts → ja.js} +55 -111
- package/src/translations/ja.js.map +1 -0
- package/src/translations/uk.d.ts +4 -0
- package/src/translations/uk.d.ts.map +1 -0
- package/src/translations/{uk.ts → uk.js} +67 -132
- package/src/translations/uk.js.map +1 -0
- package/src/translations/zh-cn.d.ts +4 -0
- package/src/translations/zh-cn.d.ts.map +1 -0
- package/src/translations/{zh-cn.ts → zh-cn.js} +29 -60
- package/src/translations/zh-cn.js.map +1 -0
- package/src/types/deep-partial.d.ts +4 -0
- package/src/types/deep-partial.d.ts.map +1 -0
- package/src/types/deep-partial.js +2 -0
- package/src/types/deep-partial.js.map +1 -0
- package/src/{types.ts → types.d.ts} +7 -15
- package/src/types.d.ts.map +1 -0
- package/src/types.js +2 -0
- package/src/types.js.map +1 -0
- package/src/utils/encryption-type-utils.d.ts +29 -0
- package/src/utils/encryption-type-utils.d.ts.map +1 -0
- package/src/utils/encryption-type-utils.js +61 -0
- package/src/utils/encryption-type-utils.js.map +1 -0
- package/src/utils.d.ts +68 -0
- package/src/utils.d.ts.map +1 -0
- package/src/utils.js +273 -0
- package/src/utils.js.map +1 -0
- package/LICENSE +0 -21
- package/src/builders/ecies-builder.ts +0 -39
- package/src/builders/member-builder.ts +0 -155
- package/src/constants.ts +0 -609
- package/src/core/errors/crypto-error.ts +0 -78
- package/src/core/types/result.ts +0 -19
- package/src/email-string.ts +0 -82
- package/src/enumerations/disposed-error-type.ts +0 -11
- package/src/enumerations/ecies-cipher-suite.ts +0 -4
- package/src/enumerations/ecies-encryption-type.ts +0 -41
- package/src/enumerations/ecies-error-type.ts +0 -43
- package/src/enumerations/ecies-string-key.ts +0 -205
- package/src/enumerations/ecies-version.ts +0 -3
- package/src/enumerations/guid-brand-type.ts +0 -26
- package/src/enumerations/guid-error-type.ts +0 -6
- package/src/enumerations/id-provider-error-type.ts +0 -50
- package/src/enumerations/invalid-email-type.ts +0 -5
- package/src/enumerations/length-encoding-type.ts +0 -6
- package/src/enumerations/length-error-type.ts +0 -5
- package/src/enumerations/member-error-type.ts +0 -106
- package/src/enumerations/password-login-error-type.ts +0 -4
- package/src/enumerations/pbkdf2-error-type.ts +0 -5
- package/src/enumerations/pbkdf2-profile.ts +0 -5
- package/src/enumerations/secure-storage-error-type.ts +0 -5
- package/src/errors/disposed.ts +0 -36
- package/src/errors/ecies.ts +0 -153
- package/src/errors/guid.ts +0 -130
- package/src/errors/id-provider.ts +0 -40
- package/src/errors/invalid-email.ts +0 -23
- package/src/errors/length.ts +0 -19
- package/src/errors/member.ts +0 -20
- package/src/errors/pbkdf2.ts +0 -20
- package/src/errors/secure-storage.ts +0 -17
- package/src/errors/simple-ecies.ts +0 -21
- package/src/errors/simple-test-error.ts +0 -6
- package/src/i18n-setup.ts +0 -130
- package/src/interfaces/checksum-config.ts +0 -4
- package/src/interfaces/checksum-consts.ts +0 -13
- package/src/interfaces/configuration-provenance.ts +0 -54
- package/src/interfaces/constants.ts +0 -75
- package/src/interfaces/ecies-config.ts +0 -8
- package/src/interfaces/ecies-consts.ts +0 -74
- package/src/interfaces/ecies-file-service.ts +0 -6
- package/src/interfaces/encrypted-chunk.ts +0 -64
- package/src/interfaces/encryption-state.ts +0 -19
- package/src/interfaces/frontend-member-operational.ts +0 -77
- package/src/interfaces/guid.ts +0 -86
- package/src/interfaces/id-provider.ts +0 -152
- package/src/interfaces/invariant.ts +0 -60
- package/src/interfaces/library-error.ts +0 -23
- package/src/interfaces/member.ts +0 -84
- package/src/interfaces/multi-recipient-chunk.ts +0 -61
- package/src/interfaces/pbkdf2-config.ts +0 -6
- package/src/interfaces/pbkdf2-consts.ts +0 -10
- package/src/interfaces/pbkdf2-result.ts +0 -5
- package/src/interfaces/stream-config.ts +0 -17
- package/src/interfaces/stream-header.ts +0 -34
- package/src/interfaces/stream-progress.ts +0 -31
- package/src/lib/configuration-provenance-utils.ts +0 -29
- package/src/lib/crypto-container.ts +0 -64
- package/src/lib/guid.ts +0 -1097
- package/src/lib/id-providers/custom-provider.ts +0 -109
- package/src/lib/id-providers/guidv4-provider.ts +0 -141
- package/src/lib/id-providers/objectid-provider.ts +0 -125
- package/src/lib/id-providers/uuid-provider.ts +0 -133
- package/src/lib/invariant-validator.ts +0 -133
- package/src/lib/invariants/encryption-algorithm-consistency.ts +0 -73
- package/src/lib/invariants/pbkdf2-profiles-validity.ts +0 -78
- package/src/lib/invariants/recipient-id-consistency.ts +0 -46
- package/src/lib/multi-recipient-chunk-utils.ts +0 -63
- package/src/member.ts +0 -495
- package/src/phone-number.ts +0 -18
- package/src/regexes.ts +0 -10
- package/src/secure-buffer.ts +0 -226
- package/src/secure-string.ts +0 -244
- package/src/services/aes-gcm.ts +0 -220
- package/src/services/chunk-processor.ts +0 -188
- package/src/services/ecies/README.md +0 -147
- package/src/services/ecies/crypto-core.ts +0 -292
- package/src/services/ecies/example.ts +0 -185
- package/src/services/ecies/file.ts +0 -167
- package/src/services/ecies/integration.ts +0 -241
- package/src/services/ecies/interfaces.ts +0 -62
- package/src/services/ecies/manual-test.ts +0 -219
- package/src/services/ecies/multi-recipient.ts +0 -545
- package/src/services/ecies/service.ts +0 -370
- package/src/services/ecies/signature.ts +0 -93
- package/src/services/ecies/single-recipient.ts +0 -476
- package/src/services/encryption-stream.ts +0 -435
- package/src/services/multi-recipient-processor.ts +0 -377
- package/src/services/password-login.ts +0 -226
- package/src/services/pbkdf2.ts +0 -169
- package/src/services/progress-tracker.ts +0 -128
- package/src/services/resumable-encryption.ts +0 -135
- package/src/services/xor.ts +0 -65
- package/src/test-mocks/index.ts +0 -1
- package/src/test-mocks/mock-frontend-member.ts +0 -276
- package/src/types/deep-partial.ts +0 -11
- package/src/utils/encryption-type-utils.ts +0 -76
- package/src/utils.ts +0 -329
|
@@ -1,545 +0,0 @@
|
|
|
1
|
-
import { IECIESConstants } from '../../interfaces/ecies-consts';
|
|
2
|
-
import { Constants } from '../../constants';
|
|
3
|
-
import { IECIESConfig } from '../../interfaces/ecies-config';
|
|
4
|
-
import { concatUint8Arrays } from '../../utils';
|
|
5
|
-
import { AESGCMService } from '../aes-gcm';
|
|
6
|
-
import { EciesCryptoCore } from './crypto-core';
|
|
7
|
-
import {
|
|
8
|
-
IMultiEncryptedMessage,
|
|
9
|
-
IMultiEncryptedParsedHeader,
|
|
10
|
-
IMultiRecipient,
|
|
11
|
-
} from './interfaces';
|
|
12
|
-
import { EciesComponentId, getEciesI18nEngine } from '../../i18n-setup';
|
|
13
|
-
import { EciesStringKey } from '../../enumerations';
|
|
14
|
-
import { EciesVersionEnum } from '../../enumerations/ecies-version';
|
|
15
|
-
import { EciesCipherSuiteEnum } from '../../enumerations/ecies-cipher-suite';
|
|
16
|
-
import { EciesEncryptionTypeEnum } from '../../enumerations/ecies-encryption-type';
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Browser-compatible multi-recipient ECIES encryption/decryption
|
|
20
|
-
*/
|
|
21
|
-
export class EciesMultiRecipient {
|
|
22
|
-
protected readonly cryptoCore: EciesCryptoCore;
|
|
23
|
-
protected readonly eciesConsts: IECIESConstants;
|
|
24
|
-
|
|
25
|
-
constructor(config: IECIESConfig, eciesParams: IECIESConstants = Constants.ECIES) {
|
|
26
|
-
this.cryptoCore = new EciesCryptoCore(config, eciesParams);
|
|
27
|
-
this.eciesConsts = eciesParams;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Get the header size for multi-recipient encryption
|
|
32
|
-
*/
|
|
33
|
-
public getHeaderSize(recipientCount: number): number {
|
|
34
|
-
return (
|
|
35
|
-
this.eciesConsts.VERSION_SIZE +
|
|
36
|
-
this.eciesConsts.CIPHER_SUITE_SIZE +
|
|
37
|
-
this.eciesConsts.ENCRYPTION_TYPE_SIZE +
|
|
38
|
-
this.eciesConsts.PUBLIC_KEY_LENGTH + // Shared ephemeral public key
|
|
39
|
-
this.eciesConsts.MULTIPLE.DATA_LENGTH_SIZE +
|
|
40
|
-
this.eciesConsts.MULTIPLE.RECIPIENT_COUNT_SIZE +
|
|
41
|
-
recipientCount * this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE +
|
|
42
|
-
recipientCount * this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Encrypt a message symmetric key with a public key
|
|
48
|
-
* @param receiverPublicKey The public key of the receiver
|
|
49
|
-
* @param messageSymmetricKey The message to encrypt
|
|
50
|
-
* @param ephemeralPrivateKey The ephemeral private key to use for encryption
|
|
51
|
-
* @param aad Additional Authenticated Data (optional)
|
|
52
|
-
* @returns The encrypted message (IV + Tag + EncryptedKey)
|
|
53
|
-
*/
|
|
54
|
-
public async encryptKey(
|
|
55
|
-
receiverPublicKey: Uint8Array,
|
|
56
|
-
messageSymmetricKey: Uint8Array,
|
|
57
|
-
ephemeralPrivateKey: Uint8Array,
|
|
58
|
-
aad?: Uint8Array,
|
|
59
|
-
): Promise<Uint8Array> {
|
|
60
|
-
const sharedSecret = await this.cryptoCore.computeSharedSecret(
|
|
61
|
-
ephemeralPrivateKey,
|
|
62
|
-
receiverPublicKey,
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
// Use HKDF to derive the key
|
|
66
|
-
const symKey = this.cryptoCore.deriveSharedKey(
|
|
67
|
-
sharedSecret,
|
|
68
|
-
new Uint8Array(0), // No salt
|
|
69
|
-
new TextEncoder().encode('ecies-v2-key-derivation'), // Info
|
|
70
|
-
this.eciesConsts.SYMMETRIC.KEY_SIZE
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
const encryptResult = await AESGCMService.encrypt(
|
|
74
|
-
messageSymmetricKey,
|
|
75
|
-
symKey,
|
|
76
|
-
true,
|
|
77
|
-
this.eciesConsts,
|
|
78
|
-
aad
|
|
79
|
-
);
|
|
80
|
-
const { encrypted, iv } = encryptResult;
|
|
81
|
-
const authTag = encryptResult.tag;
|
|
82
|
-
|
|
83
|
-
if (!authTag) {
|
|
84
|
-
const engine = getEciesI18nEngine();
|
|
85
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForKeyEncryption));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return concatUint8Arrays(
|
|
89
|
-
iv,
|
|
90
|
-
authTag,
|
|
91
|
-
encrypted,
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Decrypts symmetric key encrypted with ECIES
|
|
97
|
-
* @param privateKey The private key to decrypt the data
|
|
98
|
-
* @param encryptedKey The data to decrypt
|
|
99
|
-
* @param ephemeralPublicKey The ephemeral public key from the header
|
|
100
|
-
* @param aad Additional Authenticated Data (optional)
|
|
101
|
-
* @returns The decrypted data buffer
|
|
102
|
-
*/
|
|
103
|
-
public async decryptKey(
|
|
104
|
-
privateKey: Uint8Array,
|
|
105
|
-
encryptedKey: Uint8Array,
|
|
106
|
-
ephemeralPublicKey: Uint8Array,
|
|
107
|
-
aad?: Uint8Array,
|
|
108
|
-
): Promise<Uint8Array> {
|
|
109
|
-
if (encryptedKey.length !== this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE) {
|
|
110
|
-
const engine = getEciesI18nEngine();
|
|
111
|
-
throw new Error(engine.translate(
|
|
112
|
-
EciesComponentId,
|
|
113
|
-
EciesStringKey.Error_ECIESError_InvalidEncryptedKeyLengthTemplate, {keySize: this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE, encryptedKeyLength: encryptedKey.length}));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
const iv = encryptedKey.slice(
|
|
117
|
-
0,
|
|
118
|
-
this.eciesConsts.IV_SIZE,
|
|
119
|
-
);
|
|
120
|
-
const authTag = encryptedKey.slice(
|
|
121
|
-
this.eciesConsts.IV_SIZE,
|
|
122
|
-
this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE,
|
|
123
|
-
);
|
|
124
|
-
const encrypted = encryptedKey.slice(
|
|
125
|
-
this.eciesConsts.IV_SIZE + this.eciesConsts.AUTH_TAG_SIZE,
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
const sharedSecret = await this.cryptoCore.computeSharedSecret(
|
|
129
|
-
privateKey,
|
|
130
|
-
ephemeralPublicKey,
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
// Use HKDF to derive the key
|
|
134
|
-
const symKey = this.cryptoCore.deriveSharedKey(
|
|
135
|
-
sharedSecret,
|
|
136
|
-
new Uint8Array(0), // No salt
|
|
137
|
-
new TextEncoder().encode('ecies-v2-key-derivation'), // Info
|
|
138
|
-
this.eciesConsts.SYMMETRIC.KEY_SIZE
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(
|
|
142
|
-
encrypted,
|
|
143
|
-
authTag,
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
try {
|
|
147
|
-
const decrypted = await AESGCMService.decrypt(
|
|
148
|
-
iv,
|
|
149
|
-
encryptedWithTag,
|
|
150
|
-
symKey,
|
|
151
|
-
true,
|
|
152
|
-
this.eciesConsts,
|
|
153
|
-
aad
|
|
154
|
-
);
|
|
155
|
-
if (decrypted.length !== this.eciesConsts.SYMMETRIC.KEY_SIZE) {
|
|
156
|
-
const engine = getEciesI18nEngine();
|
|
157
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
158
|
-
}
|
|
159
|
-
return decrypted;
|
|
160
|
-
} catch (error) {
|
|
161
|
-
console.error('Failed to decrypt key:', error);
|
|
162
|
-
const engine = getEciesI18nEngine();
|
|
163
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_FailedToDecryptKey));
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Encrypt a message for multiple recipients
|
|
169
|
-
*/
|
|
170
|
-
public async encryptMultiple(
|
|
171
|
-
recipients: IMultiRecipient[],
|
|
172
|
-
message: Uint8Array,
|
|
173
|
-
preamble: Uint8Array = new Uint8Array(0),
|
|
174
|
-
senderPrivateKey?: Uint8Array,
|
|
175
|
-
): Promise<IMultiEncryptedMessage> {
|
|
176
|
-
const engine = getEciesI18nEngine();
|
|
177
|
-
if (recipients.length > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
|
|
178
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_TooManyRecipientsTemplate, { recipientsCount: recipients.length }));
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
// Sign-then-Encrypt: If sender key provided, sign the message and prepend signature
|
|
182
|
-
let messageToEncrypt = message;
|
|
183
|
-
if (senderPrivateKey) {
|
|
184
|
-
const signature = this.cryptoCore.sign(senderPrivateKey, message);
|
|
185
|
-
messageToEncrypt = concatUint8Arrays(signature, message);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (messageToEncrypt.length > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
189
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MessageTooLargeTemplate, { length: messageToEncrypt.length }));
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Generate symmetric key
|
|
193
|
-
const symmetricKey = crypto.getRandomValues(
|
|
194
|
-
new Uint8Array(this.eciesConsts.SYMMETRIC.KEY_SIZE),
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
// Generate ONE ephemeral key pair for all recipients
|
|
198
|
-
const ephemeralKeyPair = await this.cryptoCore.generateEphemeralKeyPair();
|
|
199
|
-
|
|
200
|
-
// Encrypt symmetric key for each recipient
|
|
201
|
-
const recipientIds: Uint8Array[] = [];
|
|
202
|
-
const recipientKeys: Uint8Array[] = [];
|
|
203
|
-
|
|
204
|
-
for (const recipient of recipients) {
|
|
205
|
-
// Use Recipient ID as AAD for key encryption to bind key to recipient
|
|
206
|
-
const encryptedKey = await this.encryptKey(
|
|
207
|
-
recipient.publicKey,
|
|
208
|
-
symmetricKey,
|
|
209
|
-
ephemeralKeyPair.privateKey,
|
|
210
|
-
recipient.id
|
|
211
|
-
);
|
|
212
|
-
|
|
213
|
-
recipientIds.push(recipient.id);
|
|
214
|
-
recipientKeys.push(encryptedKey);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
const headerSize = this.getHeaderSize(recipients.length);
|
|
218
|
-
|
|
219
|
-
// Build the header to use as AAD for message encryption
|
|
220
|
-
// We need to construct a temporary object to build the header
|
|
221
|
-
const tempHeaderData: IMultiEncryptedMessage = {
|
|
222
|
-
dataLength: messageToEncrypt.length,
|
|
223
|
-
recipientCount: recipients.length,
|
|
224
|
-
recipientIds,
|
|
225
|
-
recipientKeys,
|
|
226
|
-
encryptedMessage: new Uint8Array(0), // Placeholder
|
|
227
|
-
headerSize,
|
|
228
|
-
ephemeralPublicKey: ephemeralKeyPair.publicKey,
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
const headerBytes = this.buildHeader(tempHeaderData);
|
|
232
|
-
|
|
233
|
-
// Encrypt message with symmetric key, using Header as AAD
|
|
234
|
-
const encryptResult = await AESGCMService.encrypt(
|
|
235
|
-
messageToEncrypt,
|
|
236
|
-
symmetricKey,
|
|
237
|
-
true,
|
|
238
|
-
this.eciesConsts,
|
|
239
|
-
headerBytes // Bind header to ciphertext
|
|
240
|
-
);
|
|
241
|
-
const { encrypted, iv } = encryptResult;
|
|
242
|
-
const authTag = encryptResult.tag;
|
|
243
|
-
|
|
244
|
-
if (!authTag) {
|
|
245
|
-
const engine = getEciesI18nEngine();
|
|
246
|
-
throw new Error(
|
|
247
|
-
engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_AuthenticationTagIsRequiredForMultiRecipientECIESEncryption),
|
|
248
|
-
);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Create stored message: preamble + iv + authTag + encrypted
|
|
252
|
-
const storedMessage = concatUint8Arrays(preamble, iv, authTag, encrypted);
|
|
253
|
-
|
|
254
|
-
return {
|
|
255
|
-
dataLength: messageToEncrypt.length,
|
|
256
|
-
recipientCount: recipients.length,
|
|
257
|
-
recipientIds,
|
|
258
|
-
recipientKeys,
|
|
259
|
-
encryptedMessage: storedMessage,
|
|
260
|
-
headerSize,
|
|
261
|
-
ephemeralPublicKey: ephemeralKeyPair.publicKey,
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Decrypt a multi-recipient message for a specific recipient
|
|
267
|
-
*/
|
|
268
|
-
public async decryptMultipleForRecipient(
|
|
269
|
-
encryptedData: IMultiEncryptedMessage,
|
|
270
|
-
recipientId: Uint8Array,
|
|
271
|
-
privateKey: Uint8Array,
|
|
272
|
-
senderPublicKey?: Uint8Array,
|
|
273
|
-
): Promise<Uint8Array> {
|
|
274
|
-
// Find recipient's encrypted key
|
|
275
|
-
const recipientIndex = encryptedData.recipientIds.findIndex((id) =>
|
|
276
|
-
this.arraysEqual(id, recipientId),
|
|
277
|
-
);
|
|
278
|
-
|
|
279
|
-
if (recipientIndex === -1) {
|
|
280
|
-
const engine = getEciesI18nEngine();
|
|
281
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientNotFound));
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
const encryptedKey = encryptedData.recipientKeys[recipientIndex];
|
|
285
|
-
|
|
286
|
-
// Decrypt the symmetric key using the shared ephemeral public key
|
|
287
|
-
if (!encryptedData.ephemeralPublicKey) {
|
|
288
|
-
const engine = getEciesI18nEngine();
|
|
289
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MissingEphemeralPublicKey));
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Use Recipient ID as AAD for key decryption
|
|
293
|
-
const symmetricKey = await this.decryptKey(
|
|
294
|
-
privateKey,
|
|
295
|
-
encryptedKey,
|
|
296
|
-
encryptedData.ephemeralPublicKey,
|
|
297
|
-
recipientId
|
|
298
|
-
);
|
|
299
|
-
|
|
300
|
-
// Rebuild header to use as AAD
|
|
301
|
-
const headerBytes = this.buildHeader(encryptedData);
|
|
302
|
-
|
|
303
|
-
// Extract components from encrypted message
|
|
304
|
-
let offset = 0;
|
|
305
|
-
const iv = encryptedData.encryptedMessage.slice(
|
|
306
|
-
offset,
|
|
307
|
-
offset + this.eciesConsts.IV_SIZE,
|
|
308
|
-
);
|
|
309
|
-
offset += this.eciesConsts.IV_SIZE;
|
|
310
|
-
|
|
311
|
-
const authTag = encryptedData.encryptedMessage.slice(
|
|
312
|
-
offset,
|
|
313
|
-
offset + this.eciesConsts.AUTH_TAG_SIZE,
|
|
314
|
-
);
|
|
315
|
-
offset += this.eciesConsts.AUTH_TAG_SIZE;
|
|
316
|
-
|
|
317
|
-
const encrypted = encryptedData.encryptedMessage.slice(offset);
|
|
318
|
-
|
|
319
|
-
// AES-GCM provides authentication via auth tag (no separate CRC needed)
|
|
320
|
-
|
|
321
|
-
// Decrypt with symmetric key and Header as AAD
|
|
322
|
-
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(
|
|
323
|
-
encrypted,
|
|
324
|
-
authTag,
|
|
325
|
-
);
|
|
326
|
-
|
|
327
|
-
const decrypted = await AESGCMService.decrypt(
|
|
328
|
-
iv,
|
|
329
|
-
encryptedWithTag,
|
|
330
|
-
symmetricKey,
|
|
331
|
-
true,
|
|
332
|
-
this.eciesConsts,
|
|
333
|
-
headerBytes
|
|
334
|
-
);
|
|
335
|
-
|
|
336
|
-
// Verify length
|
|
337
|
-
if (decrypted.length !== encryptedData.dataLength) {
|
|
338
|
-
const engine = getEciesI18nEngine();
|
|
339
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_DecryptedDataLengthMismatch));
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// If sender public key is provided, verify signature
|
|
343
|
-
if (senderPublicKey) {
|
|
344
|
-
// Expect [Signature (64)][Message]
|
|
345
|
-
if (decrypted.length < 64) {
|
|
346
|
-
throw new Error('Decrypted data too short to contain signature');
|
|
347
|
-
}
|
|
348
|
-
const signature = decrypted.slice(0, 64);
|
|
349
|
-
const message = decrypted.slice(64);
|
|
350
|
-
|
|
351
|
-
const isValid = this.cryptoCore.verify(senderPublicKey, message, signature);
|
|
352
|
-
if (!isValid) {
|
|
353
|
-
throw new Error('Invalid sender signature');
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
return message;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
return decrypted;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/**
|
|
363
|
-
* Build header for multi-recipient message
|
|
364
|
-
*/
|
|
365
|
-
public buildHeader(data: IMultiEncryptedMessage): Uint8Array {
|
|
366
|
-
if (data.recipientIds.length !== data.recipientKeys.length) {
|
|
367
|
-
const engine = getEciesI18nEngine();
|
|
368
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientCountMismatch));
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
if (data.dataLength < 0 || data.dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
372
|
-
const engine = getEciesI18nEngine();
|
|
373
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
const versionArray = new Uint8Array([EciesVersionEnum.V1]);
|
|
377
|
-
const cipherSuiteArray = new Uint8Array([EciesCipherSuiteEnum.Secp256k1_Aes256Gcm_Sha256]);
|
|
378
|
-
const encryptionTypeArray = new Uint8Array([EciesEncryptionTypeEnum.Multiple]);
|
|
379
|
-
|
|
380
|
-
if (!data.ephemeralPublicKey) {
|
|
381
|
-
const engine = getEciesI18nEngine();
|
|
382
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MissingEphemeralPublicKey));
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// Data length (8 bytes)
|
|
386
|
-
// We use the most significant byte (MSB) to store the recipient ID size
|
|
387
|
-
// This allows parsing the header without knowing the configured ID provider
|
|
388
|
-
// Max data size is 2^53-1, so the top byte is always 0 for valid data lengths
|
|
389
|
-
const recipientIdSize = this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE;
|
|
390
|
-
if (recipientIdSize > 255) {
|
|
391
|
-
const engine = getEciesI18nEngine();
|
|
392
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_RecipientIdSizeTooLargeTemplate, { size: recipientIdSize }));
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
const dataLengthBigInt = BigInt(data.dataLength);
|
|
396
|
-
const recipientIdSizeBigInt = BigInt(recipientIdSize);
|
|
397
|
-
const combinedLength = (recipientIdSizeBigInt << 56n) | dataLengthBigInt;
|
|
398
|
-
|
|
399
|
-
const dataLengthUint8Array = new Uint8Array(8);
|
|
400
|
-
new DataView(dataLengthUint8Array.buffer).setBigUint64(
|
|
401
|
-
0,
|
|
402
|
-
combinedLength,
|
|
403
|
-
false,
|
|
404
|
-
);
|
|
405
|
-
|
|
406
|
-
// Recipient count (2 bytes)
|
|
407
|
-
const recipientCountUint8Array = new Uint8Array(2);
|
|
408
|
-
new DataView(recipientCountUint8Array.buffer).setUint16(
|
|
409
|
-
0,
|
|
410
|
-
data.recipientIds.length,
|
|
411
|
-
false,
|
|
412
|
-
);
|
|
413
|
-
|
|
414
|
-
// Recipient IDs
|
|
415
|
-
const recipientIdsUint8Array = concatUint8Arrays(...data.recipientIds);
|
|
416
|
-
|
|
417
|
-
// Encrypted keys
|
|
418
|
-
const encryptedKeysUint8Array = concatUint8Arrays(...data.recipientKeys);
|
|
419
|
-
|
|
420
|
-
return concatUint8Arrays(
|
|
421
|
-
versionArray,
|
|
422
|
-
cipherSuiteArray,
|
|
423
|
-
encryptionTypeArray,
|
|
424
|
-
data.ephemeralPublicKey,
|
|
425
|
-
dataLengthUint8Array,
|
|
426
|
-
recipientCountUint8Array,
|
|
427
|
-
recipientIdsUint8Array,
|
|
428
|
-
encryptedKeysUint8Array,
|
|
429
|
-
);
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* Parse multi-recipient header
|
|
434
|
-
*/
|
|
435
|
-
public parseHeader(data: Uint8Array): IMultiEncryptedParsedHeader {
|
|
436
|
-
const engine = getEciesI18nEngine();
|
|
437
|
-
// minimum: 1 (ver) + 1 (suite) + 1 (type) + 33 (pubkey) + 8 (len) + 2 (count) = 46
|
|
438
|
-
if (data.length < 46) {
|
|
439
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_DataTooShortForMultiRecipientHeader));
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
let offset = 0;
|
|
443
|
-
const view = new DataView(data.buffer, data.byteOffset);
|
|
444
|
-
|
|
445
|
-
// Read Version
|
|
446
|
-
const version = data[offset];
|
|
447
|
-
offset += this.eciesConsts.VERSION_SIZE;
|
|
448
|
-
if (version !== EciesVersionEnum.V1) {
|
|
449
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidVersionTemplate, { version }));
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
// Read CipherSuite
|
|
453
|
-
const cipherSuite = data[offset];
|
|
454
|
-
offset += this.eciesConsts.CIPHER_SUITE_SIZE;
|
|
455
|
-
if (cipherSuite !== EciesCipherSuiteEnum.Secp256k1_Aes256Gcm_Sha256) {
|
|
456
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidCipherSuiteTemplate, { cipherSuite }));
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
// Read Encryption Type
|
|
460
|
-
const encryptionType = data[offset];
|
|
461
|
-
offset += this.eciesConsts.ENCRYPTION_TYPE_SIZE;
|
|
462
|
-
if (encryptionType !== EciesEncryptionTypeEnum.Multiple) {
|
|
463
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidEncryptionTypeTemplate, { encryptionType: encryptionType.toString(16) }));
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// Read Ephemeral Public Key
|
|
467
|
-
const ephemeralPublicKey = data.slice(offset, offset + this.eciesConsts.PUBLIC_KEY_LENGTH);
|
|
468
|
-
offset += this.eciesConsts.PUBLIC_KEY_LENGTH;
|
|
469
|
-
|
|
470
|
-
// Read data length and recipient ID size
|
|
471
|
-
const combinedLength = view.getBigUint64(offset, false);
|
|
472
|
-
offset += 8;
|
|
473
|
-
|
|
474
|
-
// Extract recipient ID size from MSB (top 8 bits)
|
|
475
|
-
const storedRecipientIdSize = Number(combinedLength >> 56n);
|
|
476
|
-
|
|
477
|
-
// Extract data length from lower 56 bits
|
|
478
|
-
const dataLength = Number(combinedLength & 0x00FFFFFFFFFFFFFFn);
|
|
479
|
-
|
|
480
|
-
if (dataLength <= 0 || dataLength > this.eciesConsts.MAX_RAW_DATA_SIZE) {
|
|
481
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidDataLength));
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
// Use stored recipient ID size if available (non-legacy), otherwise fallback to config
|
|
485
|
-
const recipientIdSize = storedRecipientIdSize > 0
|
|
486
|
-
? storedRecipientIdSize
|
|
487
|
-
: this.eciesConsts.MULTIPLE.RECIPIENT_ID_SIZE;
|
|
488
|
-
|
|
489
|
-
// Read recipient count
|
|
490
|
-
const recipientCount = view.getUint16(offset, false);
|
|
491
|
-
offset += 2;
|
|
492
|
-
|
|
493
|
-
if (recipientCount <= 0 || recipientCount > this.eciesConsts.MULTIPLE.MAX_RECIPIENTS) {
|
|
494
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidRecipientCount));
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
// Read recipient IDs
|
|
498
|
-
const recipientIds: Uint8Array[] = [];
|
|
499
|
-
for (let i = 0; i < recipientCount; i++) {
|
|
500
|
-
recipientIds.push(
|
|
501
|
-
data.slice(offset, offset + recipientIdSize),
|
|
502
|
-
);
|
|
503
|
-
offset += recipientIdSize;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
// Read encrypted keys
|
|
507
|
-
const recipientKeys: Uint8Array[] = [];
|
|
508
|
-
for (let i = 0; i < recipientCount; i++) {
|
|
509
|
-
recipientKeys.push(
|
|
510
|
-
data.slice(offset, offset + this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE),
|
|
511
|
-
);
|
|
512
|
-
offset += this.eciesConsts.MULTIPLE.ENCRYPTED_KEY_SIZE;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
return {
|
|
516
|
-
dataLength,
|
|
517
|
-
recipientCount,
|
|
518
|
-
recipientIds,
|
|
519
|
-
recipientKeys,
|
|
520
|
-
headerSize: offset,
|
|
521
|
-
ephemeralPublicKey,
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
/**
|
|
526
|
-
* Parse complete multi-recipient message
|
|
527
|
-
*/
|
|
528
|
-
public parseMessage(data: Uint8Array): IMultiEncryptedMessage {
|
|
529
|
-
const header = this.parseHeader(data);
|
|
530
|
-
const encryptedMessage = data.slice(header.headerSize);
|
|
531
|
-
|
|
532
|
-
return {
|
|
533
|
-
...header,
|
|
534
|
-
encryptedMessage,
|
|
535
|
-
};
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
private arraysEqual(a: Uint8Array, b: Uint8Array): boolean {
|
|
539
|
-
if (a.length !== b.length) return false;
|
|
540
|
-
for (let i = 0; i < a.length; i++) {
|
|
541
|
-
if (a[i] !== b[i]) return false;
|
|
542
|
-
}
|
|
543
|
-
return true;
|
|
544
|
-
}
|
|
545
|
-
}
|