@digitaldefiance/ecies-lib 4.4.13 → 4.4.15
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 +5 -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 +34 -0
- package/src/builders/ecies-builder.js.map +1 -0
- package/src/builders/{index.ts → index.d.ts} +1 -1
- package/src/builders/index.d.ts.map +1 -0
- package/src/builders/index.js +9 -0
- 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 +101 -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 +457 -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 +60 -0
- package/src/core/errors/crypto-error.js.map +1 -0
- package/src/core/{index.ts → index.d.ts} +1 -1
- package/src/core/index.d.ts.map +1 -0
- package/src/core/index.js +9 -0
- 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 +16 -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 +72 -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 +16 -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 +9 -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 +30 -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 +48 -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 +202 -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 +8 -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 +31 -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 +11 -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 +47 -0
- package/src/enumerations/id-provider-error-type.js.map +1 -0
- package/src/enumerations/{index.ts → index.d.ts} +1 -0
- package/src/enumerations/index.d.ts.map +1 -0
- package/src/enumerations/index.js +21 -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 +10 -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 +11 -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 +10 -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 +91 -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 +19 -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 +9 -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 +10 -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 +10 -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 +10 -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 +32 -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 +82 -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 +100 -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 +33 -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 +13 -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 +19 -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 +15 -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 +15 -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 +15 -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 +16 -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 +16 -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 +11 -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 +109 -0
- package/src/i18n-setup.js.map +1 -0
- package/src/{index.ts → index.d.ts} +12 -72
- package/src/index.d.ts.map +1 -0
- package/src/index.js +146 -0
- 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 +3 -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 +3 -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 +8 -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 +3 -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 +3 -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 +3 -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 +3 -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 +15 -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 +5 -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 +3 -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 +3 -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 +56 -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 +16 -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 +22 -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 +3 -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 +3 -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 +3 -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 +3 -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 +16 -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 +3 -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 +3 -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 +3 -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 +11 -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 +12 -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 +3 -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 +30 -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 +50 -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 +919 -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 +89 -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 +126 -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 +37 -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 +108 -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 +114 -0
- package/src/lib/id-providers/uuid-provider.js.map +1 -0
- package/src/lib/{index.ts → index.d.ts} +2 -2
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/index.js +9 -0
- 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 +101 -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 +53 -0
- package/src/lib/invariants/encryption-algorithm-consistency.js.map +1 -0
- package/src/lib/invariants/{index.ts → index.d.ts} +1 -0
- package/src/lib/invariants/index.d.ts.map +1 -0
- package/src/lib/invariants/index.js +7 -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 +62 -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 +35 -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 +45 -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 +327 -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 +3 -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 +22 -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 +10 -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 +205 -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 +210 -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 +146 -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 +149 -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 +209 -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 +128 -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 +110 -0
- package/src/services/ecies/file.js.map +1 -0
- package/src/services/ecies/{index.ts → index.d.ts} +1 -3
- package/src/services/ecies/index.d.ts.map +1 -0
- package/src/services/ecies/index.js +44 -0
- 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 +172 -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 +6 -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 +171 -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 +348 -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 +214 -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 +76 -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 +326 -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 +299 -0
- package/src/services/encryption-stream.js.map +1 -0
- package/src/services/{index.ts → index.d.ts} +1 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.js +14 -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 +293 -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 +119 -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 +112 -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 +107 -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 +109 -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 +67 -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 +5 -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 +194 -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.js +6 -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.js +207 -0
- 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.js +207 -0
- 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.js +207 -0
- 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.js +207 -0
- 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.js +206 -0
- 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.js +209 -0
- 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.js +206 -0
- 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 +3 -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 +3 -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 +67 -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 +291 -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/testing.ts +0 -2
- package/src/translations/de.ts +0 -260
- package/src/translations/en-US.ts +0 -262
- package/src/translations/es.ts +0 -271
- package/src/translations/fr.ts +0 -269
- package/src/translations/ja.ts +0 -259
- package/src/translations/uk.ts +0 -271
- package/src/translations/zh-cn.ts +0 -234
- package/src/types/deep-partial.ts +0 -11
- package/src/utils/encryption-type-utils.ts +0 -76
- package/src/utils.ts +0 -329
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AESGCMService = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const i18n_setup_1 = require("../i18n-setup");
|
|
6
|
+
const enumerations_1 = require("../enumerations");
|
|
7
|
+
class AESGCMService {
|
|
8
|
+
static ALGORITHM_NAME = 'AES-GCM';
|
|
9
|
+
/**
|
|
10
|
+
* Encrypt data using AES-GCM
|
|
11
|
+
* @param data Data to encrypt
|
|
12
|
+
* @param key Key to use for encryption (must be 16, 24 or 32 bytes for AES)
|
|
13
|
+
* @returns Encrypted data
|
|
14
|
+
*/
|
|
15
|
+
static async encrypt(data, key, authTag = false, eciesParams = constants_1.Constants.ECIES, aad) {
|
|
16
|
+
// Validate key length (AES supports 16, 24, or 32 bytes)
|
|
17
|
+
if (!key || (key.length !== 16 && key.length !== 24 && key.length !== 32)) {
|
|
18
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
19
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidAESKeyLength));
|
|
20
|
+
}
|
|
21
|
+
// Validate data exists (empty data is allowed for AES-GCM)
|
|
22
|
+
if (!data) {
|
|
23
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
24
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_CannotEncryptEmptyData));
|
|
25
|
+
}
|
|
26
|
+
if (data.length > eciesParams.MAX_RAW_DATA_SIZE) {
|
|
27
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
28
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_MessageLengthExceedsMaximumAllowedSizeTemplate, { messageLength: data.length }));
|
|
29
|
+
}
|
|
30
|
+
const cryptoKey = await crypto.subtle.importKey('raw', new Uint8Array(key), { name: AESGCMService.ALGORITHM_NAME }, false, ['encrypt']);
|
|
31
|
+
const eciesConsts = eciesParams;
|
|
32
|
+
const iv = crypto.getRandomValues(new Uint8Array(eciesConsts.IV_SIZE));
|
|
33
|
+
const encryptedResult = await crypto.subtle.encrypt({
|
|
34
|
+
name: AESGCMService.ALGORITHM_NAME,
|
|
35
|
+
iv,
|
|
36
|
+
additionalData: aad,
|
|
37
|
+
...(authTag && { tagLength: eciesConsts.AUTH_TAG_SIZE * 8 }),
|
|
38
|
+
}, cryptoKey, new Uint8Array(data));
|
|
39
|
+
const encryptedArray = new Uint8Array(encryptedResult);
|
|
40
|
+
if (!authTag) {
|
|
41
|
+
return { encrypted: encryptedArray, iv };
|
|
42
|
+
}
|
|
43
|
+
const authTagLengthBytes = eciesConsts.AUTH_TAG_SIZE;
|
|
44
|
+
const encryptedBytes = encryptedArray.slice(0, -authTagLengthBytes); // Remove auth tag
|
|
45
|
+
const authTagBytes = encryptedArray.slice(-authTagLengthBytes); // Last 16 bytes are auth tag
|
|
46
|
+
return { encrypted: encryptedBytes, iv, tag: authTagBytes };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Combine encrypted data and auth tag into a single Uint8Array
|
|
50
|
+
* @param encryptedData The encrypted data
|
|
51
|
+
* @param authTag The authentication tag
|
|
52
|
+
* @returns The combined Uint8Array
|
|
53
|
+
*/
|
|
54
|
+
static combineEncryptedDataAndTag(encryptedData, authTag) {
|
|
55
|
+
const combined = new Uint8Array(encryptedData.length + authTag.length);
|
|
56
|
+
combined.set(encryptedData);
|
|
57
|
+
combined.set(authTag, encryptedData.length);
|
|
58
|
+
return combined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Combine IV and encrypted data (with optional auth tag) into a single Uint8Array
|
|
62
|
+
* @param iv The initialization vector
|
|
63
|
+
* @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
|
|
64
|
+
* @returns The combined Uint8Array
|
|
65
|
+
*/
|
|
66
|
+
static combineIvAndEncryptedData(iv, encryptedDataWithTag) {
|
|
67
|
+
const combined = new Uint8Array(iv.length + encryptedDataWithTag.length);
|
|
68
|
+
combined.set(iv);
|
|
69
|
+
combined.set(encryptedDataWithTag, iv.length);
|
|
70
|
+
return combined;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Combine IV, encrypted data and auth tag into a single Uint8Array
|
|
74
|
+
* @param iv The initialization vector
|
|
75
|
+
* @param encryptedData The encrypted data
|
|
76
|
+
* @param authTag The authentication tag
|
|
77
|
+
* @returns The combined Uint8Array
|
|
78
|
+
*/
|
|
79
|
+
static combineIvTagAndEncryptedData(iv, encryptedData, authTag) {
|
|
80
|
+
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(encryptedData, authTag);
|
|
81
|
+
return AESGCMService.combineIvAndEncryptedData(iv, encryptedWithTag);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Split combined encrypted data back into its components
|
|
85
|
+
* @param combinedData The combined data containing IV, encrypted data, and optionally auth tag
|
|
86
|
+
* @param hasAuthTag Whether the combined data includes an authentication tag
|
|
87
|
+
* @returns Object containing the split components
|
|
88
|
+
*/
|
|
89
|
+
static splitEncryptedData(combinedData, hasAuthTag = true, eciesParams = constants_1.Constants.ECIES) {
|
|
90
|
+
const eciesConsts = eciesParams;
|
|
91
|
+
const ivLength = eciesConsts.IV_SIZE;
|
|
92
|
+
const tagLength = hasAuthTag ? eciesConsts.AUTH_TAG_SIZE : 0;
|
|
93
|
+
if (combinedData.length < ivLength + tagLength) {
|
|
94
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
95
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_CombinedDataTooShortForComponents));
|
|
96
|
+
}
|
|
97
|
+
const iv = combinedData.slice(0, ivLength);
|
|
98
|
+
const encryptedDataWithTag = combinedData.slice(ivLength);
|
|
99
|
+
return { iv, encryptedDataWithTag };
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Decrypt data using AES-GCM
|
|
103
|
+
* @param iv The initialization vector
|
|
104
|
+
* @param encryptedData Data to decrypt (with auth tag appended if authTag is true)
|
|
105
|
+
* @param key Key to use for decryption (must be 16, 24 or 32 bytes for AES)
|
|
106
|
+
* @param authTag Whether the encrypted data includes an authentication tag
|
|
107
|
+
* @returns Decrypted data
|
|
108
|
+
*/
|
|
109
|
+
static async decrypt(iv, encryptedData, key, authTag = false, eciesParams = constants_1.Constants.ECIES, aad) {
|
|
110
|
+
const eciesConsts = eciesParams;
|
|
111
|
+
// Validate key length
|
|
112
|
+
if (!key || (key.length !== 16 && key.length !== 24 && key.length !== 32)) {
|
|
113
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
114
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidAESKeyLength));
|
|
115
|
+
}
|
|
116
|
+
// Validate IV
|
|
117
|
+
if (!iv || iv.length !== eciesConsts.IV_SIZE) {
|
|
118
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
119
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidIV));
|
|
120
|
+
}
|
|
121
|
+
// Validate encrypted data exists (empty encrypted data is allowed)
|
|
122
|
+
if (!encryptedData) {
|
|
123
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
124
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_CannotDecryptEmptyData));
|
|
125
|
+
}
|
|
126
|
+
const cryptoKey = await crypto.subtle.importKey('raw', new Uint8Array(key), { name: AESGCMService.ALGORITHM_NAME }, false, ['decrypt']);
|
|
127
|
+
if (!authTag) {
|
|
128
|
+
const decrypted = await crypto.subtle.decrypt({
|
|
129
|
+
name: AESGCMService.ALGORITHM_NAME,
|
|
130
|
+
iv: new Uint8Array(iv),
|
|
131
|
+
additionalData: aad,
|
|
132
|
+
}, cryptoKey, new Uint8Array(encryptedData));
|
|
133
|
+
return new Uint8Array(decrypted);
|
|
134
|
+
}
|
|
135
|
+
// Decrypt with auth tag (already appended to encryptedData)
|
|
136
|
+
const decryptedResult = await crypto.subtle.decrypt({
|
|
137
|
+
name: AESGCMService.ALGORITHM_NAME,
|
|
138
|
+
iv: new Uint8Array(iv),
|
|
139
|
+
tagLength: eciesConsts.AUTH_TAG_SIZE * 8,
|
|
140
|
+
additionalData: aad,
|
|
141
|
+
}, cryptoKey, new Uint8Array(encryptedData));
|
|
142
|
+
return new Uint8Array(decryptedResult);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.AESGCMService = AESGCMService;
|
|
146
|
+
//# sourceMappingURL=aes-gcm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes-gcm.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/services/aes-gcm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { IECIESConstants } from '../interfaces/ecies-consts';
|
|
2
|
+
import { IChunkHeader, IEncryptedChunk } from '../interfaces/encrypted-chunk';
|
|
3
|
+
import { ECIESService } from './ecies/service';
|
|
4
|
+
/**
|
|
5
|
+
* Processes chunks for streaming encryption/decryption
|
|
6
|
+
*/
|
|
7
|
+
export declare class ChunkProcessor {
|
|
8
|
+
private readonly ecies;
|
|
9
|
+
private readonly eciesConsts;
|
|
10
|
+
constructor(ecies: ECIESService, eciesConsts?: IECIESConstants);
|
|
11
|
+
/**
|
|
12
|
+
* Build chunk header
|
|
13
|
+
*/
|
|
14
|
+
buildChunkHeader(header: IChunkHeader): Uint8Array;
|
|
15
|
+
/**
|
|
16
|
+
* Parse chunk header
|
|
17
|
+
*/
|
|
18
|
+
parseChunkHeader(data: Uint8Array): IChunkHeader;
|
|
19
|
+
/**
|
|
20
|
+
* Encrypt a single chunk
|
|
21
|
+
*/
|
|
22
|
+
encryptChunk(data: Uint8Array, publicKey: Uint8Array, index: number, isLast: boolean, includeChecksum: boolean): Promise<IEncryptedChunk>;
|
|
23
|
+
/**
|
|
24
|
+
* Decrypt a single chunk
|
|
25
|
+
*/
|
|
26
|
+
decryptChunk(chunkData: Uint8Array, privateKey: Uint8Array): Promise<{
|
|
27
|
+
data: Uint8Array;
|
|
28
|
+
header: IChunkHeader;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=chunk-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-processor.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/services/chunk-processor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EACL,YAAY,EACZ,eAAe,EAEhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C;;GAEG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,KAAK,EAAE,YAAY,EACnB,WAAW,GAAE,eAAiC;IAGjE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU;IAelD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY;IA4BhD;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,EACrB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,eAAe,EAAE,OAAO,GACvB,OAAO,CAAC,eAAe,CAAC;IAoD3B;;OAEG;IACG,YAAY,CAChB,SAAS,EAAE,UAAU,EACrB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC;CAkDvD"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChunkProcessor = void 0;
|
|
4
|
+
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const encrypted_chunk_1 = require("../interfaces/encrypted-chunk");
|
|
7
|
+
const i18n_setup_1 = require("../i18n-setup");
|
|
8
|
+
const ecies_string_key_1 = require("../enumerations/ecies-string-key");
|
|
9
|
+
/**
|
|
10
|
+
* Processes chunks for streaming encryption/decryption
|
|
11
|
+
*/
|
|
12
|
+
class ChunkProcessor {
|
|
13
|
+
ecies;
|
|
14
|
+
eciesConsts;
|
|
15
|
+
constructor(ecies, eciesConsts = constants_1.Constants.ECIES) {
|
|
16
|
+
this.ecies = ecies;
|
|
17
|
+
this.eciesConsts = eciesConsts;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build chunk header
|
|
21
|
+
*/
|
|
22
|
+
buildChunkHeader(header) {
|
|
23
|
+
const buffer = new Uint8Array(encrypted_chunk_1.CHUNK_CONSTANTS.HEADER_SIZE);
|
|
24
|
+
const view = new DataView(buffer.buffer);
|
|
25
|
+
view.setUint32(0, header.magic, false);
|
|
26
|
+
view.setUint16(4, header.version, false);
|
|
27
|
+
view.setUint32(6, header.index, false);
|
|
28
|
+
view.setUint32(10, header.originalSize, false);
|
|
29
|
+
view.setUint32(14, header.encryptedSize, false);
|
|
30
|
+
view.setUint16(18, header.flags, false);
|
|
31
|
+
// Bytes 20-31: reserved (zeros)
|
|
32
|
+
return buffer;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse chunk header
|
|
36
|
+
*/
|
|
37
|
+
parseChunkHeader(data) {
|
|
38
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
39
|
+
if (data.length < encrypted_chunk_1.CHUNK_CONSTANTS.HEADER_SIZE) {
|
|
40
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Chunk_DataTooShortForHeader));
|
|
41
|
+
}
|
|
42
|
+
const view = new DataView(data.buffer, data.byteOffset);
|
|
43
|
+
const magic = view.getUint32(0, false);
|
|
44
|
+
if (magic !== encrypted_chunk_1.CHUNK_CONSTANTS.MAGIC) {
|
|
45
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Chunk_InvalidMagicBytes));
|
|
46
|
+
}
|
|
47
|
+
const version = view.getUint16(4, false);
|
|
48
|
+
if (version !== encrypted_chunk_1.CHUNK_CONSTANTS.VERSION) {
|
|
49
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Chunk_UnsupportedVersion));
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
magic,
|
|
53
|
+
version,
|
|
54
|
+
index: view.getUint32(6, false),
|
|
55
|
+
originalSize: view.getUint32(10, false),
|
|
56
|
+
encryptedSize: view.getUint32(14, false),
|
|
57
|
+
flags: view.getUint16(18, false),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Encrypt a single chunk
|
|
62
|
+
*/
|
|
63
|
+
async encryptChunk(data, publicKey, index, isLast, includeChecksum) {
|
|
64
|
+
// Encrypt data
|
|
65
|
+
const encrypted = await this.ecies.encryptSimpleOrSingle(false, publicKey, data);
|
|
66
|
+
// Calculate checksum if requested
|
|
67
|
+
const checksum = includeChecksum ? (0, sha2_js_1.sha256)(data) : undefined;
|
|
68
|
+
// Build header
|
|
69
|
+
let flags = 0;
|
|
70
|
+
if (isLast)
|
|
71
|
+
flags |= encrypted_chunk_1.CHUNK_CONSTANTS.FLAG_IS_LAST;
|
|
72
|
+
if (includeChecksum)
|
|
73
|
+
flags |= encrypted_chunk_1.CHUNK_CONSTANTS.FLAG_HAS_CHECKSUM;
|
|
74
|
+
const header = this.buildChunkHeader({
|
|
75
|
+
magic: encrypted_chunk_1.CHUNK_CONSTANTS.MAGIC,
|
|
76
|
+
version: encrypted_chunk_1.CHUNK_CONSTANTS.VERSION,
|
|
77
|
+
index,
|
|
78
|
+
originalSize: data.length,
|
|
79
|
+
encryptedSize: encrypted.length,
|
|
80
|
+
flags,
|
|
81
|
+
});
|
|
82
|
+
// Combine: header + encrypted + optional checksum
|
|
83
|
+
const parts = [header, encrypted];
|
|
84
|
+
if (checksum) {
|
|
85
|
+
parts.push(checksum);
|
|
86
|
+
}
|
|
87
|
+
const totalLength = parts.reduce((sum, part) => sum + part.length, 0);
|
|
88
|
+
const result = new Uint8Array(totalLength);
|
|
89
|
+
let offset = 0;
|
|
90
|
+
for (const part of parts) {
|
|
91
|
+
result.set(part, offset);
|
|
92
|
+
offset += part.length;
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
index,
|
|
96
|
+
data: result,
|
|
97
|
+
isLast,
|
|
98
|
+
metadata: {
|
|
99
|
+
originalSize: data.length,
|
|
100
|
+
encryptedSize: encrypted.length,
|
|
101
|
+
timestamp: Date.now(),
|
|
102
|
+
checksum,
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Decrypt a single chunk
|
|
108
|
+
*/
|
|
109
|
+
async decryptChunk(chunkData, privateKey) {
|
|
110
|
+
// Parse header
|
|
111
|
+
const header = this.parseChunkHeader(chunkData);
|
|
112
|
+
// Extract encrypted data
|
|
113
|
+
const hasChecksum = (header.flags & encrypted_chunk_1.CHUNK_CONSTANTS.FLAG_HAS_CHECKSUM) !== 0;
|
|
114
|
+
const encryptedStart = encrypted_chunk_1.CHUNK_CONSTANTS.HEADER_SIZE;
|
|
115
|
+
const encryptedEnd = hasChecksum
|
|
116
|
+
? chunkData.length - encrypted_chunk_1.CHUNK_CONSTANTS.CHECKSUM_SIZE
|
|
117
|
+
: chunkData.length;
|
|
118
|
+
const encrypted = chunkData.slice(encryptedStart, encryptedEnd);
|
|
119
|
+
// Validate encrypted size matches header
|
|
120
|
+
if (encrypted.length !== header.encryptedSize) {
|
|
121
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
122
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Chunk_EncryptedSizeMismatchTemplate, { expectedSize: header.encryptedSize, actualSize: encrypted.length }));
|
|
123
|
+
}
|
|
124
|
+
// Decrypt
|
|
125
|
+
const decrypted = await this.ecies.decryptSimpleOrSingleWithHeader(false, privateKey, encrypted);
|
|
126
|
+
// Verify checksum if present
|
|
127
|
+
if (hasChecksum) {
|
|
128
|
+
const storedChecksum = chunkData.slice(-encrypted_chunk_1.CHUNK_CONSTANTS.CHECKSUM_SIZE);
|
|
129
|
+
const computedChecksum = (0, sha2_js_1.sha256)(decrypted);
|
|
130
|
+
// Constant-time comparison to prevent timing attacks
|
|
131
|
+
let diff = 0;
|
|
132
|
+
for (let i = 0; i < encrypted_chunk_1.CHUNK_CONSTANTS.CHECKSUM_SIZE; i++) {
|
|
133
|
+
diff |= storedChecksum[i] ^ computedChecksum[i];
|
|
134
|
+
}
|
|
135
|
+
if (diff !== 0) {
|
|
136
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
137
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Chunk_ChecksumMismatch));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Verify size
|
|
141
|
+
if (decrypted.length !== header.originalSize) {
|
|
142
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
143
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Chunk_DecryptedSizeMismatch));
|
|
144
|
+
}
|
|
145
|
+
return { data: decrypted, header };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.ChunkProcessor = ChunkProcessor;
|
|
149
|
+
//# sourceMappingURL=chunk-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk-processor.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/services/chunk-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { IECIESConfig } from '../../interfaces/ecies-config';
|
|
2
|
+
import { SecureString } from '../../secure-string';
|
|
3
|
+
import { ISimpleKeyPair, IWalletSeed } from './interfaces';
|
|
4
|
+
import { IECIESConstants } from '../../interfaces/ecies-consts';
|
|
5
|
+
/**
|
|
6
|
+
* Browser-compatible crypto core for ECIES operations
|
|
7
|
+
* Uses @scure libraries for browser compatibility
|
|
8
|
+
*/
|
|
9
|
+
export declare class EciesCryptoCore {
|
|
10
|
+
protected readonly _config: IECIESConfig;
|
|
11
|
+
protected readonly _eciesConsts: IECIESConstants;
|
|
12
|
+
constructor(config: IECIESConfig, eciesParams?: IECIESConstants);
|
|
13
|
+
get config(): IECIESConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Validates and normalizes a public key for ECIES operations
|
|
16
|
+
*/
|
|
17
|
+
normalizePublicKey(publicKey: Uint8Array): Uint8Array;
|
|
18
|
+
/**
|
|
19
|
+
* Generate a new mnemonic
|
|
20
|
+
*/
|
|
21
|
+
generateNewMnemonic(): SecureString;
|
|
22
|
+
/**
|
|
23
|
+
* Generate wallet and seed from mnemonic
|
|
24
|
+
*/
|
|
25
|
+
walletAndSeedFromMnemonic(mnemonic: SecureString): IWalletSeed;
|
|
26
|
+
/**
|
|
27
|
+
* Create a simple key pair from a seed
|
|
28
|
+
*/
|
|
29
|
+
seedToSimpleKeyPair(seed: Uint8Array): ISimpleKeyPair;
|
|
30
|
+
/**
|
|
31
|
+
* Create a simple key pair from a mnemonic
|
|
32
|
+
*/
|
|
33
|
+
mnemonicToSimpleKeyPair(mnemonic: SecureString): ISimpleKeyPair;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a random private key
|
|
36
|
+
*/
|
|
37
|
+
generatePrivateKey(): Uint8Array;
|
|
38
|
+
/**
|
|
39
|
+
* Get public key from private key
|
|
40
|
+
*/
|
|
41
|
+
getPublicKey(privateKey: Uint8Array): Uint8Array;
|
|
42
|
+
/**
|
|
43
|
+
* Generate ephemeral key pair for ECIES
|
|
44
|
+
*/
|
|
45
|
+
generateEphemeralKeyPair(): Promise<ISimpleKeyPair>;
|
|
46
|
+
/**
|
|
47
|
+
* Compute ECDH shared secret
|
|
48
|
+
*/
|
|
49
|
+
computeSharedSecret(privateKey: Uint8Array, publicKey: Uint8Array): Uint8Array;
|
|
50
|
+
/**
|
|
51
|
+
* Derive a symmetric key from a shared secret using HKDF
|
|
52
|
+
* @param sharedSecret The shared secret (ECDH output)
|
|
53
|
+
* @param salt Optional salt
|
|
54
|
+
* @param info Optional context info
|
|
55
|
+
* @param length Length of the output key (default 32 for AES-256)
|
|
56
|
+
*/
|
|
57
|
+
deriveSharedKey(sharedSecret: Uint8Array, salt?: Uint8Array, info?: Uint8Array, length?: number): Uint8Array;
|
|
58
|
+
/**
|
|
59
|
+
* Sign a message using ECDSA
|
|
60
|
+
* @param privateKey The private key to sign with
|
|
61
|
+
* @param message The message to sign
|
|
62
|
+
*/
|
|
63
|
+
sign(privateKey: Uint8Array, message: Uint8Array): Uint8Array;
|
|
64
|
+
/**
|
|
65
|
+
* Verify a signature using ECDSA
|
|
66
|
+
* @param publicKey The public key to verify with
|
|
67
|
+
* @param message The message that was signed
|
|
68
|
+
* @param signature The signature to verify
|
|
69
|
+
*/
|
|
70
|
+
verify(publicKey: Uint8Array, message: Uint8Array, signature: Uint8Array): boolean;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=crypto-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-core.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/crypto-core.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE;;;GAGG;AACH,qBAAa,eAAe;IAC1B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;gBAG/C,MAAM,EAAE,YAAY,EACpB,WAAW,GAAE,eAAiC;IAMhD,IAAW,MAAM,IAAI,YAAY,CAEhC;IAED;;OAEG;IACI,kBAAkB,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU;IA8D5D;;OAEG;IACI,mBAAmB,IAAI,YAAY;IAM1C;;OAEG;IACI,yBAAyB,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW;IAmCrE;;OAEG;IACI,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc;IAuB5D;;OAEG;IACI,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,cAAc;IAKtE;;OAEG;IACI,kBAAkB,IAAI,UAAU;IAIvC;;OAEG;IACI,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU;IAKvD;;OAEG;IACU,wBAAwB,IAAI,OAAO,CAAC,cAAc,CAAC;IAMhE;;OAEG;IACI,mBAAmB,CACxB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,UAAU,GACpB,UAAU;IAeb;;;;;;OAMG;IACI,eAAe,CACpB,YAAY,EAAE,UAAU,EACxB,IAAI,GAAE,UAA8B,EACpC,IAAI,GAAE,UAA8B,EACpC,MAAM,GAAE,MAAW,GAClB,UAAU;IAIb;;;;OAIG;IACI,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU;IAqBpE;;;;;OAKG;IACI,MAAM,CACX,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,GACpB,OAAO;CAQX"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EciesCryptoCore = void 0;
|
|
4
|
+
const wallet_1 = require("@ethereumjs/wallet");
|
|
5
|
+
const bip32_1 = require("@scure/bip32");
|
|
6
|
+
const bip39_1 = require("@scure/bip39");
|
|
7
|
+
const english_1 = require("@scure/bip39/wordlists/english");
|
|
8
|
+
const constants_1 = require("../../constants");
|
|
9
|
+
const secure_string_1 = require("../../secure-string");
|
|
10
|
+
const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
|
|
11
|
+
const hkdf_js_1 = require("@noble/hashes/hkdf.js");
|
|
12
|
+
const sha2_js_1 = require("@noble/hashes/sha2.js");
|
|
13
|
+
const enumerations_1 = require("../../enumerations");
|
|
14
|
+
const i18n_setup_1 = require("../../i18n-setup");
|
|
15
|
+
/**
|
|
16
|
+
* Browser-compatible crypto core for ECIES operations
|
|
17
|
+
* Uses @scure libraries for browser compatibility
|
|
18
|
+
*/
|
|
19
|
+
class EciesCryptoCore {
|
|
20
|
+
_config;
|
|
21
|
+
_eciesConsts;
|
|
22
|
+
constructor(config, eciesParams = constants_1.Constants.ECIES) {
|
|
23
|
+
this._config = config;
|
|
24
|
+
this._eciesConsts = eciesParams;
|
|
25
|
+
}
|
|
26
|
+
get config() {
|
|
27
|
+
return this._config;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validates and normalizes a public key for ECIES operations
|
|
31
|
+
*/
|
|
32
|
+
normalizePublicKey(publicKey) {
|
|
33
|
+
if (!publicKey) {
|
|
34
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
35
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_ReceivedNullOrUndefinedPublicKey));
|
|
36
|
+
}
|
|
37
|
+
const keyLength = publicKey.length;
|
|
38
|
+
let normalizedKey;
|
|
39
|
+
// Compressed key (33 bytes) - 0x02 or 0x03 prefix
|
|
40
|
+
if (keyLength === 33 && (publicKey[0] === 0x02 || publicKey[0] === 0x03)) {
|
|
41
|
+
normalizedKey = publicKey;
|
|
42
|
+
}
|
|
43
|
+
// Uncompressed key (65 bytes) - 0x04 prefix
|
|
44
|
+
// We accept this for backward compatibility with existing keys
|
|
45
|
+
else if (keyLength === 65 && publicKey[0] === 0x04) {
|
|
46
|
+
normalizedKey = publicKey;
|
|
47
|
+
}
|
|
48
|
+
// Raw key without prefix (64 bytes) - add the 0x04 prefix
|
|
49
|
+
// Legacy support
|
|
50
|
+
else if (keyLength === 64) {
|
|
51
|
+
normalizedKey = new Uint8Array(65);
|
|
52
|
+
normalizedKey[0] = 0x04;
|
|
53
|
+
normalizedKey.set(publicKey, 1);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
57
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidPublicKeyFormatOrLengthTemplate, { keyLength }));
|
|
58
|
+
}
|
|
59
|
+
// Basic validation: check it's not all zeros
|
|
60
|
+
let allZeros = true;
|
|
61
|
+
for (let i = 1; i < normalizedKey.length; i++) {
|
|
62
|
+
// Skip first byte (prefix)
|
|
63
|
+
if (normalizedKey[i] !== 0) {
|
|
64
|
+
allZeros = false;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (allZeros) {
|
|
69
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
70
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidPublicKeyNotOnCurve));
|
|
71
|
+
}
|
|
72
|
+
return normalizedKey;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Generate a new mnemonic
|
|
76
|
+
*/
|
|
77
|
+
generateNewMnemonic() {
|
|
78
|
+
return new secure_string_1.SecureString((0, bip39_1.generateMnemonic)(english_1.wordlist, this._config.mnemonicStrength));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Generate wallet and seed from mnemonic
|
|
82
|
+
*/
|
|
83
|
+
walletAndSeedFromMnemonic(mnemonic) {
|
|
84
|
+
if (!mnemonic || !(0, bip39_1.validateMnemonic)(mnemonic.value ?? '', english_1.wordlist)) {
|
|
85
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
86
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_InvalidMnemonic));
|
|
87
|
+
}
|
|
88
|
+
const seed = (0, bip39_1.mnemonicToSeedSync)(mnemonic.value ?? '');
|
|
89
|
+
const hdKey = bip32_1.HDKey.fromMasterSeed(seed);
|
|
90
|
+
const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
|
|
91
|
+
if (!derivedKey.privateKey) {
|
|
92
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
93
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey));
|
|
94
|
+
}
|
|
95
|
+
const privateKey = derivedKey.privateKey;
|
|
96
|
+
const wallet = new wallet_1.Wallet(privateKey);
|
|
97
|
+
return {
|
|
98
|
+
wallet,
|
|
99
|
+
seed,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a simple key pair from a seed
|
|
104
|
+
*/
|
|
105
|
+
seedToSimpleKeyPair(seed) {
|
|
106
|
+
const hdKey = bip32_1.HDKey.fromMasterSeed(seed);
|
|
107
|
+
const derivedKey = hdKey.derive(this._config.primaryKeyDerivationPath);
|
|
108
|
+
if (!derivedKey.privateKey) {
|
|
109
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
110
|
+
throw new Error(engine.translate(i18n_setup_1.EciesComponentId, enumerations_1.EciesStringKey.Error_ECIESError_FailedToDervivePrivateKey));
|
|
111
|
+
}
|
|
112
|
+
const privateKey = derivedKey.privateKey;
|
|
113
|
+
const publicKey = secp256k1_js_1.secp256k1.getPublicKey(privateKey, true); // compressed
|
|
114
|
+
return {
|
|
115
|
+
privateKey,
|
|
116
|
+
publicKey,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Create a simple key pair from a mnemonic
|
|
121
|
+
*/
|
|
122
|
+
mnemonicToSimpleKeyPair(mnemonic) {
|
|
123
|
+
const { seed } = this.walletAndSeedFromMnemonic(mnemonic);
|
|
124
|
+
return this.seedToSimpleKeyPair(seed);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Generate a random private key
|
|
128
|
+
*/
|
|
129
|
+
generatePrivateKey() {
|
|
130
|
+
return secp256k1_js_1.secp256k1.utils.randomSecretKey();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get public key from private key
|
|
134
|
+
*/
|
|
135
|
+
getPublicKey(privateKey) {
|
|
136
|
+
const publicKeyPoint = secp256k1_js_1.secp256k1.getPublicKey(privateKey, true); // compressed
|
|
137
|
+
return publicKeyPoint;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Generate ephemeral key pair for ECIES
|
|
141
|
+
*/
|
|
142
|
+
async generateEphemeralKeyPair() {
|
|
143
|
+
const privateKey = this.generatePrivateKey();
|
|
144
|
+
const publicKey = this.getPublicKey(privateKey);
|
|
145
|
+
return { privateKey, publicKey };
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Compute ECDH shared secret
|
|
149
|
+
*/
|
|
150
|
+
computeSharedSecret(privateKey, publicKey) {
|
|
151
|
+
// Normalize the public key to ensure it has the correct format
|
|
152
|
+
const normalizedPublicKey = this.normalizePublicKey(publicKey);
|
|
153
|
+
// Use uncompressed shared secret to match Node.js ECDH behavior
|
|
154
|
+
// Node.js ECDH.computeSecret() returns the x-coordinate of the shared point
|
|
155
|
+
const sharedSecret = secp256k1_js_1.secp256k1.getSharedSecret(privateKey, normalizedPublicKey, false);
|
|
156
|
+
// Return only the x-coordinate (first 32 bytes after the 0x04 prefix)
|
|
157
|
+
return sharedSecret.slice(1, 33);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Derive a symmetric key from a shared secret using HKDF
|
|
161
|
+
* @param sharedSecret The shared secret (ECDH output)
|
|
162
|
+
* @param salt Optional salt
|
|
163
|
+
* @param info Optional context info
|
|
164
|
+
* @param length Length of the output key (default 32 for AES-256)
|
|
165
|
+
*/
|
|
166
|
+
deriveSharedKey(sharedSecret, salt = new Uint8Array(0), info = new Uint8Array(0), length = 32) {
|
|
167
|
+
return (0, hkdf_js_1.hkdf)(sha2_js_1.sha256, sharedSecret, salt, info, length);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Sign a message using ECDSA
|
|
171
|
+
* @param privateKey The private key to sign with
|
|
172
|
+
* @param message The message to sign
|
|
173
|
+
*/
|
|
174
|
+
sign(privateKey, message) {
|
|
175
|
+
const hash = (0, sha2_js_1.sha256)(message);
|
|
176
|
+
const signature = secp256k1_js_1.secp256k1.sign(hash, privateKey);
|
|
177
|
+
if (signature instanceof Uint8Array) {
|
|
178
|
+
return signature;
|
|
179
|
+
}
|
|
180
|
+
// Check if signature has toCompactRawBytes method
|
|
181
|
+
if (signature &&
|
|
182
|
+
typeof signature === 'object' &&
|
|
183
|
+
'toCompactRawBytes' in signature) {
|
|
184
|
+
const sig = signature;
|
|
185
|
+
if (typeof sig.toCompactRawBytes === 'function') {
|
|
186
|
+
return sig.toCompactRawBytes();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Fallback or error
|
|
190
|
+
throw new Error('Unknown signature format');
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Verify a signature using ECDSA
|
|
194
|
+
* @param publicKey The public key to verify with
|
|
195
|
+
* @param message The message that was signed
|
|
196
|
+
* @param signature The signature to verify
|
|
197
|
+
*/
|
|
198
|
+
verify(publicKey, message, signature) {
|
|
199
|
+
const hash = (0, sha2_js_1.sha256)(message);
|
|
200
|
+
try {
|
|
201
|
+
return secp256k1_js_1.secp256k1.verify(signature, hash, publicKey);
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.EciesCryptoCore = EciesCryptoCore;
|
|
209
|
+
//# sourceMappingURL=crypto-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-core.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/services/ecies/crypto-core.ts"],"names":[],"mappings":"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"}
|