@digitaldefiance/ecies-lib 4.4.13 → 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 -76
- 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,188 +0,0 @@
|
|
|
1
|
-
import { sha256 } from '@noble/hashes/sha2.js';
|
|
2
|
-
import { IECIESConstants } from '../interfaces/ecies-consts';
|
|
3
|
-
import { Constants } from '../constants';
|
|
4
|
-
import {
|
|
5
|
-
IChunkHeader,
|
|
6
|
-
IEncryptedChunk,
|
|
7
|
-
CHUNK_CONSTANTS,
|
|
8
|
-
} from '../interfaces/encrypted-chunk';
|
|
9
|
-
import { ECIESService } from './ecies/service';
|
|
10
|
-
import { getEciesI18nEngine, EciesComponentId } from '../i18n-setup';
|
|
11
|
-
import { EciesStringKey } from '../enumerations/ecies-string-key';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Processes chunks for streaming encryption/decryption
|
|
15
|
-
*/
|
|
16
|
-
export class ChunkProcessor {
|
|
17
|
-
constructor(
|
|
18
|
-
private readonly ecies: ECIESService,
|
|
19
|
-
private readonly eciesConsts: IECIESConstants = Constants.ECIES
|
|
20
|
-
) {}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Build chunk header
|
|
24
|
-
*/
|
|
25
|
-
buildChunkHeader(header: IChunkHeader): Uint8Array {
|
|
26
|
-
const buffer = new Uint8Array(CHUNK_CONSTANTS.HEADER_SIZE);
|
|
27
|
-
const view = new DataView(buffer.buffer);
|
|
28
|
-
|
|
29
|
-
view.setUint32(0, header.magic, false);
|
|
30
|
-
view.setUint16(4, header.version, false);
|
|
31
|
-
view.setUint32(6, header.index, false);
|
|
32
|
-
view.setUint32(10, header.originalSize, false);
|
|
33
|
-
view.setUint32(14, header.encryptedSize, false);
|
|
34
|
-
view.setUint16(18, header.flags, false);
|
|
35
|
-
// Bytes 20-31: reserved (zeros)
|
|
36
|
-
|
|
37
|
-
return buffer;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Parse chunk header
|
|
42
|
-
*/
|
|
43
|
-
parseChunkHeader(data: Uint8Array): IChunkHeader {
|
|
44
|
-
const engine = getEciesI18nEngine();
|
|
45
|
-
if (data.length < CHUNK_CONSTANTS.HEADER_SIZE) {
|
|
46
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_DataTooShortForHeader));
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const view = new DataView(data.buffer, data.byteOffset);
|
|
50
|
-
|
|
51
|
-
const magic = view.getUint32(0, false);
|
|
52
|
-
if (magic !== CHUNK_CONSTANTS.MAGIC) {
|
|
53
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_InvalidMagicBytes));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const version = view.getUint16(4, false);
|
|
57
|
-
if (version !== CHUNK_CONSTANTS.VERSION) {
|
|
58
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_UnsupportedVersion));
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
magic,
|
|
63
|
-
version,
|
|
64
|
-
index: view.getUint32(6, false),
|
|
65
|
-
originalSize: view.getUint32(10, false),
|
|
66
|
-
encryptedSize: view.getUint32(14, false),
|
|
67
|
-
flags: view.getUint16(18, false),
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Encrypt a single chunk
|
|
73
|
-
*/
|
|
74
|
-
async encryptChunk(
|
|
75
|
-
data: Uint8Array,
|
|
76
|
-
publicKey: Uint8Array,
|
|
77
|
-
index: number,
|
|
78
|
-
isLast: boolean,
|
|
79
|
-
includeChecksum: boolean
|
|
80
|
-
): Promise<IEncryptedChunk> {
|
|
81
|
-
// Encrypt data
|
|
82
|
-
const encrypted = await this.ecies.encryptSimpleOrSingle(
|
|
83
|
-
false,
|
|
84
|
-
publicKey,
|
|
85
|
-
data
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
// Calculate checksum if requested
|
|
89
|
-
const checksum = includeChecksum ? sha256(data) : undefined;
|
|
90
|
-
|
|
91
|
-
// Build header
|
|
92
|
-
let flags = 0;
|
|
93
|
-
if (isLast) flags |= CHUNK_CONSTANTS.FLAG_IS_LAST;
|
|
94
|
-
if (includeChecksum) flags |= CHUNK_CONSTANTS.FLAG_HAS_CHECKSUM;
|
|
95
|
-
|
|
96
|
-
const header = this.buildChunkHeader({
|
|
97
|
-
magic: CHUNK_CONSTANTS.MAGIC,
|
|
98
|
-
version: CHUNK_CONSTANTS.VERSION,
|
|
99
|
-
index,
|
|
100
|
-
originalSize: data.length,
|
|
101
|
-
encryptedSize: encrypted.length,
|
|
102
|
-
flags,
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// Combine: header + encrypted + optional checksum
|
|
106
|
-
const parts = [header, encrypted];
|
|
107
|
-
if (checksum) {
|
|
108
|
-
parts.push(checksum);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const totalLength = parts.reduce((sum, part) => sum + part.length, 0);
|
|
112
|
-
const result = new Uint8Array(totalLength);
|
|
113
|
-
let offset = 0;
|
|
114
|
-
for (const part of parts) {
|
|
115
|
-
result.set(part, offset);
|
|
116
|
-
offset += part.length;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
index,
|
|
121
|
-
data: result,
|
|
122
|
-
isLast,
|
|
123
|
-
metadata: {
|
|
124
|
-
originalSize: data.length,
|
|
125
|
-
encryptedSize: encrypted.length,
|
|
126
|
-
timestamp: Date.now(),
|
|
127
|
-
checksum,
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Decrypt a single chunk
|
|
134
|
-
*/
|
|
135
|
-
async decryptChunk(
|
|
136
|
-
chunkData: Uint8Array,
|
|
137
|
-
privateKey: Uint8Array
|
|
138
|
-
): Promise<{ data: Uint8Array; header: IChunkHeader }> {
|
|
139
|
-
// Parse header
|
|
140
|
-
const header = this.parseChunkHeader(chunkData);
|
|
141
|
-
|
|
142
|
-
// Extract encrypted data
|
|
143
|
-
const hasChecksum = (header.flags & CHUNK_CONSTANTS.FLAG_HAS_CHECKSUM) !== 0;
|
|
144
|
-
const encryptedStart = CHUNK_CONSTANTS.HEADER_SIZE;
|
|
145
|
-
const encryptedEnd = hasChecksum
|
|
146
|
-
? chunkData.length - CHUNK_CONSTANTS.CHECKSUM_SIZE
|
|
147
|
-
: chunkData.length;
|
|
148
|
-
|
|
149
|
-
const encrypted = chunkData.slice(encryptedStart, encryptedEnd);
|
|
150
|
-
|
|
151
|
-
// Validate encrypted size matches header
|
|
152
|
-
if (encrypted.length !== header.encryptedSize) {
|
|
153
|
-
const engine = getEciesI18nEngine();
|
|
154
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_EncryptedSizeMismatchTemplate, { expectedSize: header.encryptedSize, actualSize: encrypted.length }));
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Decrypt
|
|
158
|
-
const decrypted = await this.ecies.decryptSimpleOrSingleWithHeader(
|
|
159
|
-
false,
|
|
160
|
-
privateKey,
|
|
161
|
-
encrypted
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
// Verify checksum if present
|
|
165
|
-
if (hasChecksum) {
|
|
166
|
-
const storedChecksum = chunkData.slice(-CHUNK_CONSTANTS.CHECKSUM_SIZE);
|
|
167
|
-
const computedChecksum = sha256(decrypted);
|
|
168
|
-
|
|
169
|
-
// Constant-time comparison to prevent timing attacks
|
|
170
|
-
let diff = 0;
|
|
171
|
-
for (let i = 0; i < CHUNK_CONSTANTS.CHECKSUM_SIZE; i++) {
|
|
172
|
-
diff |= storedChecksum[i] ^ computedChecksum[i];
|
|
173
|
-
}
|
|
174
|
-
if (diff !== 0) {
|
|
175
|
-
const engine = getEciesI18nEngine();
|
|
176
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_ChecksumMismatch));
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Verify size
|
|
181
|
-
if (decrypted.length !== header.originalSize) {
|
|
182
|
-
const engine = getEciesI18nEngine();
|
|
183
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_Chunk_DecryptedSizeMismatch));
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
return { data: decrypted, header };
|
|
187
|
-
}
|
|
188
|
-
}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
# Browser-Compatible ECIES Service
|
|
2
|
-
|
|
3
|
-
This directory contains a web-based implementation of the ECIES (Elliptic Curve Integrated Encryption Scheme) service that mirrors the functionality of the server-side implementation but uses browser-compatible libraries.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
The browser ECIES service provides the same cryptographic functionality as the server-side version, including:
|
|
8
|
-
|
|
9
|
-
- **Mnemonic generation and wallet derivation** using BIP39/BIP32
|
|
10
|
-
- **ECDH key exchange** using secp256k1 curve
|
|
11
|
-
- **AES-GCM encryption** using Web Crypto API
|
|
12
|
-
- **ECDSA signatures** using secp256k1
|
|
13
|
-
- **Single and simple recipient encryption modes**
|
|
14
|
-
- **CRC16 validation** for data integrity
|
|
15
|
-
|
|
16
|
-
## Dependencies
|
|
17
|
-
|
|
18
|
-
The service uses the following browser-compatible libraries:
|
|
19
|
-
|
|
20
|
-
- `@scure/bip39` - BIP39 mnemonic generation and validation
|
|
21
|
-
- `@scure/bip32` - BIP32 hierarchical deterministic key derivation
|
|
22
|
-
- `@noble/curves` - Elliptic curve cryptography (secp256k1)
|
|
23
|
-
- `@noble/hashes` - Cryptographic hash functions
|
|
24
|
-
- Web Crypto API - Native browser AES-GCM encryption
|
|
25
|
-
|
|
26
|
-
## Architecture
|
|
27
|
-
|
|
28
|
-
### Core Components
|
|
29
|
-
|
|
30
|
-
1. **`crypto-core.ts`** - Core cryptographic operations (key generation, ECDH)
|
|
31
|
-
2. **`single-recipient.ts`** - Single recipient encryption/decryption
|
|
32
|
-
3. **`signature.ts`** - ECDSA signature operations
|
|
33
|
-
4. **`service.ts`** - Main service that integrates all components
|
|
34
|
-
5. **`utils.ts`** - Utility functions (CRC16, hex conversion, etc.)
|
|
35
|
-
6. **`constants.ts`** - Cryptographic constants matching server-side
|
|
36
|
-
7. **`interfaces.ts`** - TypeScript interfaces
|
|
37
|
-
|
|
38
|
-
### Encryption Modes
|
|
39
|
-
|
|
40
|
-
- **Simple Mode**: Basic encryption without CRC or length prefix
|
|
41
|
-
- **Single Mode**: Encryption with data length and CRC16 validation
|
|
42
|
-
- **Multiple Mode**: Multi-recipient encryption (planned for future implementation)
|
|
43
|
-
|
|
44
|
-
## Usage
|
|
45
|
-
|
|
46
|
-
### Basic Example
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
|
-
import { ECIESService } from './services/ecies';
|
|
50
|
-
|
|
51
|
-
// Create service instance
|
|
52
|
-
const ecies = new ECIESService();
|
|
53
|
-
|
|
54
|
-
// Generate mnemonic and derive keys
|
|
55
|
-
const mnemonic = ecies.generateNewMnemonic();
|
|
56
|
-
const { privateKey, publicKey } = ecies.mnemonicToSimpleKeyPair(mnemonic);
|
|
57
|
-
|
|
58
|
-
// Encrypt a message
|
|
59
|
-
const message = new TextEncoder().encode('Hello, World!');
|
|
60
|
-
const encrypted = await ecies.encryptSimpleOrSingle(false, publicKey, message);
|
|
61
|
-
|
|
62
|
-
// Decrypt the message
|
|
63
|
-
const decrypted = await ecies.decryptSimpleOrSingleWithHeader(false, privateKey, encrypted);
|
|
64
|
-
const result = new TextDecoder().decode(decrypted);
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Wallet Derivation
|
|
68
|
-
|
|
69
|
-
```typescript
|
|
70
|
-
// Generate new mnemonic
|
|
71
|
-
const mnemonic = ecies.generateNewMnemonic();
|
|
72
|
-
|
|
73
|
-
// Derive wallet from mnemonic
|
|
74
|
-
const wallet = ecies.walletAndSeedFromMnemonic(mnemonic);
|
|
75
|
-
console.log('Seed:', wallet.seed);
|
|
76
|
-
console.log('Private Key:', wallet.privateKey);
|
|
77
|
-
console.log('Public Key:', wallet.publicKey);
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Digital Signatures
|
|
81
|
-
|
|
82
|
-
```typescript
|
|
83
|
-
// Sign a message
|
|
84
|
-
const message = new TextEncoder().encode('Message to sign');
|
|
85
|
-
const signature = ecies.signMessage(privateKey, message);
|
|
86
|
-
|
|
87
|
-
// Verify signature
|
|
88
|
-
const isValid = ecies.verifyMessage(publicKey, message, signature);
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Simple vs Single Mode
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
// Simple mode (no CRC, smaller overhead)
|
|
95
|
-
const simpleEncrypted = await ecies.encryptSimpleOrSingle(true, publicKey, message);
|
|
96
|
-
const simpleDecrypted = await ecies.decryptSimpleOrSingleWithHeader(true, privateKey, simpleEncrypted);
|
|
97
|
-
|
|
98
|
-
// Single mode (with CRC and length validation)
|
|
99
|
-
const singleEncrypted = await ecies.encryptSimpleOrSingle(false, publicKey, message);
|
|
100
|
-
const singleDecrypted = await ecies.decryptSimpleOrSingleWithHeader(false, privateKey, singleEncrypted);
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Compatibility
|
|
104
|
-
|
|
105
|
-
This implementation is designed to be fully compatible with the server-side ECIES service:
|
|
106
|
-
|
|
107
|
-
- Uses the same cryptographic constants and algorithms
|
|
108
|
-
- Produces identical encrypted output format
|
|
109
|
-
- Supports the same key derivation paths
|
|
110
|
-
- Implements the same CRC16 algorithm for data integrity
|
|
111
|
-
|
|
112
|
-
## Security Considerations
|
|
113
|
-
|
|
114
|
-
- All cryptographic operations use well-established, audited libraries
|
|
115
|
-
- Private keys are handled as Uint8Array and should be properly secured
|
|
116
|
-
- The Web Crypto API provides secure random number generation
|
|
117
|
-
- ECDH shared secrets are properly derived using secp256k1
|
|
118
|
-
|
|
119
|
-
## Testing
|
|
120
|
-
|
|
121
|
-
Run the examples to test the functionality:
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
import { runAllExamples } from './services/ecies/example';
|
|
125
|
-
|
|
126
|
-
// Run all examples in browser console
|
|
127
|
-
runAllExamples();
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
## Future Enhancements
|
|
131
|
-
|
|
132
|
-
- Multi-recipient encryption support
|
|
133
|
-
- Key caching and management
|
|
134
|
-
- Integration with browser storage APIs
|
|
135
|
-
- Performance optimizations for large messages
|
|
136
|
-
|
|
137
|
-
## Error Handling
|
|
138
|
-
|
|
139
|
-
The service throws descriptive errors for:
|
|
140
|
-
|
|
141
|
-
- Invalid mnemonics
|
|
142
|
-
- Malformed public/private keys
|
|
143
|
-
- Encryption/decryption failures
|
|
144
|
-
- CRC validation errors
|
|
145
|
-
- Invalid encryption types
|
|
146
|
-
|
|
147
|
-
Always wrap cryptographic operations in try-catch blocks for proper error handling.
|
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { Wallet } from '@ethereumjs/wallet';
|
|
2
|
-
import { HDKey } from '@scure/bip32';
|
|
3
|
-
import {
|
|
4
|
-
generateMnemonic,
|
|
5
|
-
mnemonicToSeedSync,
|
|
6
|
-
validateMnemonic,
|
|
7
|
-
} from '@scure/bip39';
|
|
8
|
-
import { wordlist } from '@scure/bip39/wordlists/english';
|
|
9
|
-
import { Constants } from '../../constants';
|
|
10
|
-
import { IECIESConfig } from '../../interfaces/ecies-config';
|
|
11
|
-
import { SecureString } from '../../secure-string';
|
|
12
|
-
import { ISimpleKeyPair, IWalletSeed } from './interfaces';
|
|
13
|
-
|
|
14
|
-
import { secp256k1 } from '@noble/curves/secp256k1.js';
|
|
15
|
-
import { hkdf } from '@noble/hashes/hkdf.js';
|
|
16
|
-
import { sha256 } from '@noble/hashes/sha2.js';
|
|
17
|
-
import { EciesStringKey } from '../../enumerations';
|
|
18
|
-
import { EciesComponentId, getEciesI18nEngine } from '../../i18n-setup';
|
|
19
|
-
import { IECIESConstants } from '../../interfaces/ecies-consts';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Browser-compatible crypto core for ECIES operations
|
|
23
|
-
* Uses @scure libraries for browser compatibility
|
|
24
|
-
*/
|
|
25
|
-
export class EciesCryptoCore {
|
|
26
|
-
protected readonly _config: IECIESConfig;
|
|
27
|
-
protected readonly _eciesConsts: IECIESConstants;
|
|
28
|
-
|
|
29
|
-
constructor(
|
|
30
|
-
config: IECIESConfig,
|
|
31
|
-
eciesParams: IECIESConstants = Constants.ECIES,
|
|
32
|
-
) {
|
|
33
|
-
this._config = config;
|
|
34
|
-
this._eciesConsts = eciesParams;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
public get config(): IECIESConfig {
|
|
38
|
-
return this._config;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Validates and normalizes a public key for ECIES operations
|
|
43
|
-
*/
|
|
44
|
-
public normalizePublicKey(publicKey: Uint8Array): Uint8Array {
|
|
45
|
-
if (!publicKey) {
|
|
46
|
-
const engine = getEciesI18nEngine();
|
|
47
|
-
throw new Error(
|
|
48
|
-
engine.translate(
|
|
49
|
-
EciesComponentId,
|
|
50
|
-
EciesStringKey.Error_ECIESError_ReceivedNullOrUndefinedPublicKey,
|
|
51
|
-
),
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const keyLength = publicKey.length;
|
|
56
|
-
let normalizedKey: Uint8Array;
|
|
57
|
-
|
|
58
|
-
// Compressed key (33 bytes) - 0x02 or 0x03 prefix
|
|
59
|
-
if (keyLength === 33 && (publicKey[0] === 0x02 || publicKey[0] === 0x03)) {
|
|
60
|
-
normalizedKey = publicKey;
|
|
61
|
-
}
|
|
62
|
-
// Uncompressed key (65 bytes) - 0x04 prefix
|
|
63
|
-
// We accept this for backward compatibility with existing keys
|
|
64
|
-
else if (keyLength === 65 && publicKey[0] === 0x04) {
|
|
65
|
-
normalizedKey = publicKey;
|
|
66
|
-
}
|
|
67
|
-
// Raw key without prefix (64 bytes) - add the 0x04 prefix
|
|
68
|
-
// Legacy support
|
|
69
|
-
else if (keyLength === 64) {
|
|
70
|
-
normalizedKey = new Uint8Array(65);
|
|
71
|
-
normalizedKey[0] = 0x04;
|
|
72
|
-
normalizedKey.set(publicKey, 1);
|
|
73
|
-
} else {
|
|
74
|
-
const engine = getEciesI18nEngine();
|
|
75
|
-
throw new Error(
|
|
76
|
-
engine.translate(
|
|
77
|
-
EciesComponentId,
|
|
78
|
-
EciesStringKey.Error_ECIESError_InvalidPublicKeyFormatOrLengthTemplate,
|
|
79
|
-
{ keyLength },
|
|
80
|
-
),
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Basic validation: check it's not all zeros
|
|
85
|
-
let allZeros = true;
|
|
86
|
-
for (let i = 1; i < normalizedKey.length; i++) {
|
|
87
|
-
// Skip first byte (prefix)
|
|
88
|
-
if (normalizedKey[i] !== 0) {
|
|
89
|
-
allZeros = false;
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (allZeros) {
|
|
94
|
-
const engine = getEciesI18nEngine();
|
|
95
|
-
throw new Error(
|
|
96
|
-
engine.translate(
|
|
97
|
-
EciesComponentId,
|
|
98
|
-
EciesStringKey.Error_ECIESError_InvalidPublicKeyNotOnCurve,
|
|
99
|
-
),
|
|
100
|
-
);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return normalizedKey;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Generate a new mnemonic
|
|
108
|
-
*/
|
|
109
|
-
public generateNewMnemonic(): SecureString {
|
|
110
|
-
return new SecureString(
|
|
111
|
-
generateMnemonic(wordlist, this._config.mnemonicStrength),
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Generate wallet and seed from mnemonic
|
|
117
|
-
*/
|
|
118
|
-
public walletAndSeedFromMnemonic(mnemonic: SecureString): IWalletSeed {
|
|
119
|
-
if (!mnemonic || !validateMnemonic(mnemonic.value ?? '', wordlist)) {
|
|
120
|
-
const engine = getEciesI18nEngine();
|
|
121
|
-
throw new Error(
|
|
122
|
-
engine.translate(
|
|
123
|
-
EciesComponentId,
|
|
124
|
-
EciesStringKey.Error_ECIESError_InvalidMnemonic,
|
|
125
|
-
),
|
|
126
|
-
);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const seed = mnemonicToSeedSync(mnemonic.value ?? '');
|
|
130
|
-
const hdKey = HDKey.fromMasterSeed(seed);
|
|
131
|
-
const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
|
|
132
|
-
|
|
133
|
-
if (!derivedKey.privateKey) {
|
|
134
|
-
const engine = getEciesI18nEngine();
|
|
135
|
-
throw new Error(
|
|
136
|
-
engine.translate(
|
|
137
|
-
EciesComponentId,
|
|
138
|
-
EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey,
|
|
139
|
-
),
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const privateKey = derivedKey.privateKey;
|
|
144
|
-
|
|
145
|
-
const wallet = new Wallet(privateKey);
|
|
146
|
-
|
|
147
|
-
return {
|
|
148
|
-
wallet,
|
|
149
|
-
seed,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Create a simple key pair from a seed
|
|
155
|
-
*/
|
|
156
|
-
public seedToSimpleKeyPair(seed: Uint8Array): ISimpleKeyPair {
|
|
157
|
-
const hdKey = HDKey.fromMasterSeed(seed);
|
|
158
|
-
const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
|
|
159
|
-
|
|
160
|
-
if (!derivedKey.privateKey) {
|
|
161
|
-
const engine = getEciesI18nEngine();
|
|
162
|
-
throw new Error(
|
|
163
|
-
engine.translate(
|
|
164
|
-
EciesComponentId,
|
|
165
|
-
EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey,
|
|
166
|
-
),
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const privateKey = derivedKey.privateKey;
|
|
171
|
-
const publicKey = secp256k1.getPublicKey(privateKey, true); // compressed
|
|
172
|
-
|
|
173
|
-
return {
|
|
174
|
-
privateKey,
|
|
175
|
-
publicKey,
|
|
176
|
-
};
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Create a simple key pair from a mnemonic
|
|
181
|
-
*/
|
|
182
|
-
public mnemonicToSimpleKeyPair(mnemonic: SecureString): ISimpleKeyPair {
|
|
183
|
-
const { seed } = this.walletAndSeedFromMnemonic(mnemonic);
|
|
184
|
-
return this.seedToSimpleKeyPair(seed);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Generate a random private key
|
|
189
|
-
*/
|
|
190
|
-
public generatePrivateKey(): Uint8Array {
|
|
191
|
-
return secp256k1.utils.randomSecretKey();
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
/**
|
|
195
|
-
* Get public key from private key
|
|
196
|
-
*/
|
|
197
|
-
public getPublicKey(privateKey: Uint8Array): Uint8Array {
|
|
198
|
-
const publicKeyPoint = secp256k1.getPublicKey(privateKey, true); // compressed
|
|
199
|
-
return publicKeyPoint;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Generate ephemeral key pair for ECIES
|
|
204
|
-
*/
|
|
205
|
-
public async generateEphemeralKeyPair(): Promise<ISimpleKeyPair> {
|
|
206
|
-
const privateKey = this.generatePrivateKey();
|
|
207
|
-
const publicKey = this.getPublicKey(privateKey);
|
|
208
|
-
return { privateKey, publicKey };
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Compute ECDH shared secret
|
|
213
|
-
*/
|
|
214
|
-
public computeSharedSecret(
|
|
215
|
-
privateKey: Uint8Array,
|
|
216
|
-
publicKey: Uint8Array,
|
|
217
|
-
): Uint8Array {
|
|
218
|
-
// Normalize the public key to ensure it has the correct format
|
|
219
|
-
const normalizedPublicKey = this.normalizePublicKey(publicKey);
|
|
220
|
-
|
|
221
|
-
// Use uncompressed shared secret to match Node.js ECDH behavior
|
|
222
|
-
// Node.js ECDH.computeSecret() returns the x-coordinate of the shared point
|
|
223
|
-
const sharedSecret = secp256k1.getSharedSecret(
|
|
224
|
-
privateKey,
|
|
225
|
-
normalizedPublicKey,
|
|
226
|
-
false,
|
|
227
|
-
);
|
|
228
|
-
// Return only the x-coordinate (first 32 bytes after the 0x04 prefix)
|
|
229
|
-
return sharedSecret.slice(1, 33);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
/**
|
|
233
|
-
* Derive a symmetric key from a shared secret using HKDF
|
|
234
|
-
* @param sharedSecret The shared secret (ECDH output)
|
|
235
|
-
* @param salt Optional salt
|
|
236
|
-
* @param info Optional context info
|
|
237
|
-
* @param length Length of the output key (default 32 for AES-256)
|
|
238
|
-
*/
|
|
239
|
-
public deriveSharedKey(
|
|
240
|
-
sharedSecret: Uint8Array,
|
|
241
|
-
salt: Uint8Array = new Uint8Array(0),
|
|
242
|
-
info: Uint8Array = new Uint8Array(0),
|
|
243
|
-
length: number = 32,
|
|
244
|
-
): Uint8Array {
|
|
245
|
-
return hkdf(sha256, sharedSecret, salt, info, length);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Sign a message using ECDSA
|
|
250
|
-
* @param privateKey The private key to sign with
|
|
251
|
-
* @param message The message to sign
|
|
252
|
-
*/
|
|
253
|
-
public sign(privateKey: Uint8Array, message: Uint8Array): Uint8Array {
|
|
254
|
-
const hash = sha256(message);
|
|
255
|
-
const signature = secp256k1.sign(hash, privateKey);
|
|
256
|
-
if (signature instanceof Uint8Array) {
|
|
257
|
-
return signature;
|
|
258
|
-
}
|
|
259
|
-
// Check if signature has toCompactRawBytes method
|
|
260
|
-
if (
|
|
261
|
-
signature &&
|
|
262
|
-
typeof signature === 'object' &&
|
|
263
|
-
'toCompactRawBytes' in signature
|
|
264
|
-
) {
|
|
265
|
-
const sig = signature as { toCompactRawBytes: () => Uint8Array };
|
|
266
|
-
if (typeof sig.toCompactRawBytes === 'function') {
|
|
267
|
-
return sig.toCompactRawBytes();
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
// Fallback or error
|
|
271
|
-
throw new Error('Unknown signature format');
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Verify a signature using ECDSA
|
|
276
|
-
* @param publicKey The public key to verify with
|
|
277
|
-
* @param message The message that was signed
|
|
278
|
-
* @param signature The signature to verify
|
|
279
|
-
*/
|
|
280
|
-
public verify(
|
|
281
|
-
publicKey: Uint8Array,
|
|
282
|
-
message: Uint8Array,
|
|
283
|
-
signature: Uint8Array,
|
|
284
|
-
): boolean {
|
|
285
|
-
const hash = sha256(message);
|
|
286
|
-
try {
|
|
287
|
-
return secp256k1.verify(signature, hash, publicKey);
|
|
288
|
-
} catch (e) {
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|