@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
package/src/secure-buffer.ts
DELETED
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
/// <reference path="../../../types/global.d.ts" />
|
|
2
|
-
import { SecureStorageErrorType } from './enumerations/secure-storage-error-type';
|
|
3
|
-
import { DisposedError } from './errors/disposed';
|
|
4
|
-
import { SecureStorageError } from './errors/secure-storage';
|
|
5
|
-
import type { IIdProvider } from './interfaces/id-provider';
|
|
6
|
-
import { ObjectIdProvider } from './lib/id-providers/objectid-provider';
|
|
7
|
-
import { XorService } from './services/xor';
|
|
8
|
-
import { uint8ArrayToHex } from './utils';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Default ID provider (singleton, no circular dependency)
|
|
12
|
-
*/
|
|
13
|
-
const DEFAULT_ID_PROVIDER = new ObjectIdProvider();
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
|
|
17
|
-
* The buffer is encrypted with a key derived from a random ID.
|
|
18
|
-
* The ID is stored in the clear, but the buffer is encrypted with a key derived from the ID.
|
|
19
|
-
* This allows the buffer to be decrypted, but only if the ID and salt are known.
|
|
20
|
-
*
|
|
21
|
-
* Supports explicit resource management (TC39 proposal) for automatic disposal:
|
|
22
|
-
* ```typescript
|
|
23
|
-
* using buffer = new SecureBuffer(sensitiveData);
|
|
24
|
-
* // buffer automatically disposed when leaving scope
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export class SecureBuffer implements Disposable {
|
|
28
|
-
private _disposed: boolean = false;
|
|
29
|
-
private readonly _id: Uint8Array;
|
|
30
|
-
private readonly _idProvider: IIdProvider;
|
|
31
|
-
private readonly _length: number;
|
|
32
|
-
private readonly _obfuscatedValue: Uint8Array;
|
|
33
|
-
private readonly _key: Uint8Array;
|
|
34
|
-
private readonly _obfuscatedChecksum: Uint8Array;
|
|
35
|
-
private _disposedAt?: string;
|
|
36
|
-
|
|
37
|
-
constructor(
|
|
38
|
-
data?: Uint8Array,
|
|
39
|
-
idProvider: IIdProvider = DEFAULT_ID_PROVIDER,
|
|
40
|
-
) {
|
|
41
|
-
this._idProvider = idProvider;
|
|
42
|
-
this._id = this._idProvider.generate();
|
|
43
|
-
// don't bother encrypting an empty buffer
|
|
44
|
-
if (data === undefined || data.length === 0) {
|
|
45
|
-
this._length = 0;
|
|
46
|
-
this._obfuscatedValue = new Uint8Array(0);
|
|
47
|
-
this._key = new Uint8Array(0);
|
|
48
|
-
this._obfuscatedChecksum = new Uint8Array(0);
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
this._length = data.length;
|
|
52
|
-
this._key = this._id;
|
|
53
|
-
this._obfuscatedValue = this.obfuscateData(data);
|
|
54
|
-
// Create a simple checksum without crypto for synchronous operation
|
|
55
|
-
this._obfuscatedChecksum = this.createSimpleObfuscatedChecksum(data);
|
|
56
|
-
}
|
|
57
|
-
public dispose(): void {
|
|
58
|
-
const err = new DisposedError();
|
|
59
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
60
|
-
Error.captureStackTrace(err, this.dispose);
|
|
61
|
-
}
|
|
62
|
-
this._disposedAt = err.stack ?? 'stack unavailable';
|
|
63
|
-
this._obfuscatedValue.fill(0);
|
|
64
|
-
this._key.fill(0);
|
|
65
|
-
this._obfuscatedChecksum.fill(0);
|
|
66
|
-
this._disposed = true;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Symbol.dispose implementation for explicit resource management
|
|
71
|
-
* Allows using 'using' keyword (TC39 proposal)
|
|
72
|
-
*/
|
|
73
|
-
[Symbol.dispose](): void {
|
|
74
|
-
this.dispose();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Factory method for backward compatibility that uses Constants.idProvider
|
|
79
|
-
* @param data Optional data to secure
|
|
80
|
-
* @returns A new SecureBuffer instance using the global ID provider
|
|
81
|
-
*/
|
|
82
|
-
static create(data?: Uint8Array): SecureBuffer {
|
|
83
|
-
const { Constants } = require('./constants');
|
|
84
|
-
return new SecureBuffer(data, Constants.idProvider);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Static factory method that creates a SecureBuffer for a symmetric key
|
|
89
|
-
* Useful for managing encryption keys securely
|
|
90
|
-
*/
|
|
91
|
-
static allocateKey(sizeBytes: number = 32): SecureBuffer {
|
|
92
|
-
const keyData = new Uint8Array(sizeBytes);
|
|
93
|
-
// Will be filled by crypto.getRandomValues by caller
|
|
94
|
-
return new SecureBuffer(keyData);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
private assertNotDisposed(): void {
|
|
98
|
-
if (this._disposed) {
|
|
99
|
-
const e = new DisposedError();
|
|
100
|
-
try {
|
|
101
|
-
e.disposedAt = this._disposedAt;
|
|
102
|
-
} catch {
|
|
103
|
-
// ignore if Error object is sealed/frozen
|
|
104
|
-
}
|
|
105
|
-
throw e;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
public static fromString(data: string): SecureBuffer {
|
|
109
|
-
return new SecureBuffer(new TextEncoder().encode(data));
|
|
110
|
-
}
|
|
111
|
-
public get disposedAtStack(): string | undefined {
|
|
112
|
-
return this._disposedAt;
|
|
113
|
-
}
|
|
114
|
-
public get id(): string {
|
|
115
|
-
this.assertNotDisposed();
|
|
116
|
-
return this._idProvider.serialize(this._id);
|
|
117
|
-
}
|
|
118
|
-
public get idUint8Array(): Uint8Array {
|
|
119
|
-
this.assertNotDisposed();
|
|
120
|
-
return this._id;
|
|
121
|
-
}
|
|
122
|
-
public get originalLength(): number {
|
|
123
|
-
this.assertNotDisposed();
|
|
124
|
-
return this._length;
|
|
125
|
-
}
|
|
126
|
-
public get value(): Uint8Array {
|
|
127
|
-
this.assertNotDisposed();
|
|
128
|
-
if (this._length === 0) {
|
|
129
|
-
return new Uint8Array(0);
|
|
130
|
-
}
|
|
131
|
-
try {
|
|
132
|
-
const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
|
|
133
|
-
if (deobfuscatedResult.length !== this._length) {
|
|
134
|
-
throw new SecureStorageError(
|
|
135
|
-
SecureStorageErrorType.DecryptedValueLengthMismatch,
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
if (!this.validateObfuscatedChecksum(deobfuscatedResult)) {
|
|
139
|
-
throw new SecureStorageError(
|
|
140
|
-
SecureStorageErrorType.DecryptedValueChecksumMismatch,
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
return deobfuscatedResult;
|
|
144
|
-
} catch (error) {
|
|
145
|
-
// If it's already a SecureStorageError, re-throw it
|
|
146
|
-
if (error instanceof SecureStorageError) {
|
|
147
|
-
throw error;
|
|
148
|
-
}
|
|
149
|
-
// Convert any other error (including AES-GCM authentication errors) to SecureStorageError
|
|
150
|
-
throw new SecureStorageError(
|
|
151
|
-
SecureStorageErrorType.DecryptedValueChecksumMismatch,
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
public get valueAsString(): string {
|
|
156
|
-
this.assertNotDisposed();
|
|
157
|
-
return new TextDecoder().decode(this.value);
|
|
158
|
-
}
|
|
159
|
-
public get valueAsHexString(): string {
|
|
160
|
-
this.assertNotDisposed();
|
|
161
|
-
return uint8ArrayToHex(this.value);
|
|
162
|
-
}
|
|
163
|
-
public get valueAsBase64String(): string {
|
|
164
|
-
this.assertNotDisposed();
|
|
165
|
-
return btoa(String.fromCharCode(...this.value));
|
|
166
|
-
}
|
|
167
|
-
public get checksum(): string {
|
|
168
|
-
this.assertNotDisposed();
|
|
169
|
-
const deobfuscatedChecksum = new TextDecoder().decode(
|
|
170
|
-
this.deobfuscateData(this._obfuscatedChecksum),
|
|
171
|
-
);
|
|
172
|
-
return deobfuscatedChecksum;
|
|
173
|
-
}
|
|
174
|
-
private generateSimpleChecksum(data: string | Uint8Array): string {
|
|
175
|
-
const dataBytes =
|
|
176
|
-
typeof data === 'string' ? new TextEncoder().encode(data) : data;
|
|
177
|
-
let hash = 0;
|
|
178
|
-
for (let i = 0; i < dataBytes.length; i++) {
|
|
179
|
-
hash = ((hash << 5) - hash + dataBytes[i]) & 0xffffffff;
|
|
180
|
-
}
|
|
181
|
-
return hash.toString(16);
|
|
182
|
-
}
|
|
183
|
-
private createSimpleObfuscatedChecksum(
|
|
184
|
-
data: string | Uint8Array,
|
|
185
|
-
): Uint8Array {
|
|
186
|
-
const checksum = this.generateSimpleChecksum(data);
|
|
187
|
-
const result = this.obfuscateData(new TextEncoder().encode(checksum));
|
|
188
|
-
return result;
|
|
189
|
-
}
|
|
190
|
-
private validateSimpleChecksum(
|
|
191
|
-
data: string | Uint8Array,
|
|
192
|
-
checksum: string,
|
|
193
|
-
): boolean {
|
|
194
|
-
const generatedChecksum = this.generateSimpleChecksum(data);
|
|
195
|
-
const a = new TextEncoder().encode(generatedChecksum);
|
|
196
|
-
const b = new TextEncoder().encode(checksum);
|
|
197
|
-
return this.timingSafeEqual(a, b);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
private timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {
|
|
201
|
-
if (a.length !== b.length) {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
let result = 0;
|
|
205
|
-
for (let i = 0; i < a.length; i++) {
|
|
206
|
-
result |= a[i] ^ b[i];
|
|
207
|
-
}
|
|
208
|
-
return result === 0;
|
|
209
|
-
}
|
|
210
|
-
private validateObfuscatedChecksum(data: string | Uint8Array): boolean {
|
|
211
|
-
const deobfuscatedChecksum = new TextDecoder().decode(
|
|
212
|
-
this.deobfuscateData(this._obfuscatedChecksum),
|
|
213
|
-
);
|
|
214
|
-
return this.validateSimpleChecksum(data, deobfuscatedChecksum);
|
|
215
|
-
}
|
|
216
|
-
private obfuscateData(data: Uint8Array): Uint8Array {
|
|
217
|
-
return XorService.xor(data, this._key);
|
|
218
|
-
}
|
|
219
|
-
private deobfuscateData(data: Uint8Array): Uint8Array {
|
|
220
|
-
return XorService.xor(data, this._key);
|
|
221
|
-
}
|
|
222
|
-
public get length(): number {
|
|
223
|
-
this.assertNotDisposed();
|
|
224
|
-
return this._length;
|
|
225
|
-
}
|
|
226
|
-
}
|
package/src/secure-string.ts
DELETED
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
/// <reference path="../../../types/global.d.ts" />
|
|
2
|
-
import { SecureStorageErrorType } from './enumerations/secure-storage-error-type';
|
|
3
|
-
import { DisposedError } from './errors/disposed';
|
|
4
|
-
import { SecureStorageError } from './errors/secure-storage';
|
|
5
|
-
import type { IIdProvider } from './interfaces/id-provider';
|
|
6
|
-
import { ObjectIdProvider } from './lib/id-providers/objectid-provider';
|
|
7
|
-
import { XorService } from './services/xor';
|
|
8
|
-
import { uint8ArrayToHex } from './utils';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Default ID provider (singleton, no circular dependency)
|
|
12
|
-
*/
|
|
13
|
-
const DEFAULT_ID_PROVIDER = new ObjectIdProvider();
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* A secure string buffer is a buffer whose intent is to prevent the raw password from being stored in memory.
|
|
17
|
-
*/
|
|
18
|
-
export class SecureString {
|
|
19
|
-
private _disposed: boolean = false;
|
|
20
|
-
private readonly _isNull: boolean;
|
|
21
|
-
private readonly _id: Uint8Array;
|
|
22
|
-
private readonly _idProvider: IIdProvider;
|
|
23
|
-
private readonly _length: number;
|
|
24
|
-
private readonly _obfuscatedValue: Uint8Array;
|
|
25
|
-
private readonly _key: Uint8Array;
|
|
26
|
-
private readonly _obfuscatedChecksum: Uint8Array;
|
|
27
|
-
private _disposedAt?: string;
|
|
28
|
-
constructor(
|
|
29
|
-
data?: string | Uint8Array | null,
|
|
30
|
-
idProvider: IIdProvider = DEFAULT_ID_PROVIDER,
|
|
31
|
-
) {
|
|
32
|
-
this._idProvider = idProvider;
|
|
33
|
-
this._id = this._idProvider.generate();
|
|
34
|
-
// only treat null/undefined as null, empty strings/arrays are valid empty data
|
|
35
|
-
if (data === null || data === undefined) {
|
|
36
|
-
this._isNull = true;
|
|
37
|
-
this._length = 0;
|
|
38
|
-
this._obfuscatedValue = new Uint8Array(0);
|
|
39
|
-
this._key = new Uint8Array(0);
|
|
40
|
-
this._obfuscatedChecksum = new Uint8Array(0);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
this._isNull = false;
|
|
44
|
-
this._key = this._id;
|
|
45
|
-
const dataAsUint8Array =
|
|
46
|
-
typeof data === 'string'
|
|
47
|
-
? new TextEncoder().encode(data)
|
|
48
|
-
: (data as Uint8Array);
|
|
49
|
-
// Store the byte length, not the character length
|
|
50
|
-
this._length = dataAsUint8Array.length;
|
|
51
|
-
this._obfuscatedValue = this.obfuscateData(dataAsUint8Array);
|
|
52
|
-
this._obfuscatedChecksum =
|
|
53
|
-
this.createSimpleObfuscatedChecksum(dataAsUint8Array);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Factory method for backward compatibility that uses Constants.idProvider
|
|
58
|
-
* @param data Optional data to secure
|
|
59
|
-
* @returns A new SecureString instance using the global ID provider
|
|
60
|
-
*/
|
|
61
|
-
static create(data?: string | Uint8Array | null): SecureString {
|
|
62
|
-
const { Constants } = require('./constants');
|
|
63
|
-
return new SecureString(data, Constants.idProvider);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
private assertNotDisposed(): void {
|
|
67
|
-
if (this._disposed) {
|
|
68
|
-
const e = new DisposedError();
|
|
69
|
-
try {
|
|
70
|
-
e.disposedAt = this._disposedAt;
|
|
71
|
-
} catch {
|
|
72
|
-
// ignore if Error object is sealed/frozen
|
|
73
|
-
}
|
|
74
|
-
throw e;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
public dispose(): void {
|
|
78
|
-
const err = new DisposedError();
|
|
79
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
80
|
-
Error.captureStackTrace(err, this.dispose);
|
|
81
|
-
}
|
|
82
|
-
this._disposedAt = err.stack ?? 'stack unavailable';
|
|
83
|
-
this._obfuscatedValue.fill(0);
|
|
84
|
-
this._key.fill(0);
|
|
85
|
-
this._obfuscatedChecksum.fill(0);
|
|
86
|
-
this._disposed = true;
|
|
87
|
-
}
|
|
88
|
-
public get disposedAtStack(): string | undefined {
|
|
89
|
-
return this._disposedAt;
|
|
90
|
-
}
|
|
91
|
-
public get id(): string {
|
|
92
|
-
this.assertNotDisposed();
|
|
93
|
-
return this._idProvider.serialize(this._id);
|
|
94
|
-
}
|
|
95
|
-
public get idUint8Array(): Uint8Array {
|
|
96
|
-
this.assertNotDisposed();
|
|
97
|
-
return this._id;
|
|
98
|
-
}
|
|
99
|
-
public get originalLength(): number {
|
|
100
|
-
this.assertNotDisposed();
|
|
101
|
-
return this._length;
|
|
102
|
-
}
|
|
103
|
-
public get valueAsUint8Array(): Uint8Array {
|
|
104
|
-
this.assertNotDisposed();
|
|
105
|
-
if (this._isNull) {
|
|
106
|
-
return new Uint8Array(0);
|
|
107
|
-
}
|
|
108
|
-
try {
|
|
109
|
-
const deobfuscatedResult = this.deobfuscateData(this._obfuscatedValue);
|
|
110
|
-
if (deobfuscatedResult.length !== this._length) {
|
|
111
|
-
throw new SecureStorageError(
|
|
112
|
-
SecureStorageErrorType.DecryptedValueLengthMismatch,
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Validate checksum
|
|
117
|
-
const expectedChecksum = this.createSimpleChecksum(deobfuscatedResult);
|
|
118
|
-
const storedChecksum = new TextDecoder().decode(
|
|
119
|
-
this.deobfuscateData(this._obfuscatedChecksum),
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
const expectedBytes = new TextEncoder().encode(expectedChecksum);
|
|
123
|
-
const storedBytes = new TextEncoder().encode(storedChecksum);
|
|
124
|
-
if (!this.timingSafeEqual(expectedBytes, storedBytes)) {
|
|
125
|
-
throw new SecureStorageError(
|
|
126
|
-
SecureStorageErrorType.DecryptedValueChecksumMismatch,
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return deobfuscatedResult;
|
|
131
|
-
} catch (error) {
|
|
132
|
-
// If it's already a SecureStorageError, re-throw it
|
|
133
|
-
if (error instanceof SecureStorageError) {
|
|
134
|
-
throw error;
|
|
135
|
-
}
|
|
136
|
-
// Convert any other error to SecureStorageError
|
|
137
|
-
throw new SecureStorageError(
|
|
138
|
-
SecureStorageErrorType.DecryptedValueChecksumMismatch,
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
public get value(): string | null {
|
|
143
|
-
this.assertNotDisposed();
|
|
144
|
-
if (this._isNull) {
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
|
-
return new TextDecoder().decode(this.valueAsUint8Array);
|
|
148
|
-
}
|
|
149
|
-
public get notNullValue(): string {
|
|
150
|
-
this.assertNotDisposed();
|
|
151
|
-
if (this._isNull) {
|
|
152
|
-
throw new SecureStorageError(SecureStorageErrorType.ValueIsNull);
|
|
153
|
-
}
|
|
154
|
-
return new TextDecoder().decode(this.valueAsUint8Array);
|
|
155
|
-
}
|
|
156
|
-
public get valueAsHexString(): string {
|
|
157
|
-
this.assertNotDisposed();
|
|
158
|
-
return uint8ArrayToHex(this.valueAsUint8Array);
|
|
159
|
-
}
|
|
160
|
-
public get valueAsBase64String(): string {
|
|
161
|
-
this.assertNotDisposed();
|
|
162
|
-
return btoa(String.fromCharCode(...this.valueAsUint8Array));
|
|
163
|
-
}
|
|
164
|
-
public get hasValue(): boolean {
|
|
165
|
-
this.assertNotDisposed();
|
|
166
|
-
return !this._isNull && this._length > 0;
|
|
167
|
-
}
|
|
168
|
-
public get checksum(): string {
|
|
169
|
-
this.assertNotDisposed();
|
|
170
|
-
const deobfuscatedChecksum = new TextDecoder().decode(
|
|
171
|
-
this.deobfuscateData(this._obfuscatedChecksum),
|
|
172
|
-
);
|
|
173
|
-
return deobfuscatedChecksum;
|
|
174
|
-
}
|
|
175
|
-
public get length(): number {
|
|
176
|
-
this.assertNotDisposed();
|
|
177
|
-
return this._length;
|
|
178
|
-
}
|
|
179
|
-
private async generateChecksum(data: string | Uint8Array): Promise<string> {
|
|
180
|
-
const dataBytes =
|
|
181
|
-
typeof data === 'string' ? new TextEncoder().encode(data) : data;
|
|
182
|
-
const hashArray = await crypto.subtle.digest(
|
|
183
|
-
'SHA-256',
|
|
184
|
-
new Uint8Array(dataBytes),
|
|
185
|
-
);
|
|
186
|
-
return uint8ArrayToHex(new Uint8Array(hashArray));
|
|
187
|
-
}
|
|
188
|
-
private createSimpleChecksum(data: Uint8Array): string {
|
|
189
|
-
let hash = 0;
|
|
190
|
-
for (let i = 0; i < data.length; i++) {
|
|
191
|
-
hash = ((hash << 5) - hash + data[i]) & 0xffffffff;
|
|
192
|
-
}
|
|
193
|
-
return hash.toString(16);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
private createSimpleObfuscatedChecksum(
|
|
197
|
-
data: string | Uint8Array,
|
|
198
|
-
): Uint8Array {
|
|
199
|
-
const dataBytes =
|
|
200
|
-
typeof data === 'string' ? new TextEncoder().encode(data) : data;
|
|
201
|
-
const checksum = this.createSimpleChecksum(dataBytes);
|
|
202
|
-
return this.obfuscateData(new TextEncoder().encode(checksum));
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
private async createObfuscatedChecksum(
|
|
206
|
-
data: string | Uint8Array,
|
|
207
|
-
): Promise<Uint8Array> {
|
|
208
|
-
const checksum = await this.generateChecksum(data);
|
|
209
|
-
const result = this.obfuscateData(new TextEncoder().encode(checksum));
|
|
210
|
-
return result;
|
|
211
|
-
}
|
|
212
|
-
private async validateChecksum(
|
|
213
|
-
data: string | Uint8Array,
|
|
214
|
-
checksum: string,
|
|
215
|
-
): Promise<boolean> {
|
|
216
|
-
const generatedChecksum = await this.generateChecksum(data);
|
|
217
|
-
return generatedChecksum === checksum;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
private timingSafeEqual(a: Uint8Array, b: Uint8Array): boolean {
|
|
221
|
-
if (a.length !== b.length) {
|
|
222
|
-
return false;
|
|
223
|
-
}
|
|
224
|
-
let result = 0;
|
|
225
|
-
for (let i = 0; i < a.length; i++) {
|
|
226
|
-
result |= a[i] ^ b[i];
|
|
227
|
-
}
|
|
228
|
-
return result === 0;
|
|
229
|
-
}
|
|
230
|
-
private async validateObfuscatedChecksum(
|
|
231
|
-
data: string | Uint8Array,
|
|
232
|
-
): Promise<boolean> {
|
|
233
|
-
const deobfuscatedChecksum = new TextDecoder().decode(
|
|
234
|
-
this.deobfuscateData(this._obfuscatedChecksum),
|
|
235
|
-
);
|
|
236
|
-
return this.validateChecksum(data, deobfuscatedChecksum);
|
|
237
|
-
}
|
|
238
|
-
private obfuscateData(data: Uint8Array): Uint8Array {
|
|
239
|
-
return XorService.xor(data, this._key);
|
|
240
|
-
}
|
|
241
|
-
private deobfuscateData(data: Uint8Array): Uint8Array {
|
|
242
|
-
return XorService.xor(data, this._key);
|
|
243
|
-
}
|
|
244
|
-
}
|
package/src/services/aes-gcm.ts
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { IECIESConstants } from '../interfaces/ecies-consts';
|
|
2
|
-
import { Constants } from '../constants';
|
|
3
|
-
import { EciesComponentId, getEciesI18nEngine } from '../i18n-setup';
|
|
4
|
-
import { EciesStringKey } from '../enumerations';
|
|
5
|
-
|
|
6
|
-
export abstract class AESGCMService {
|
|
7
|
-
public static readonly ALGORITHM_NAME = 'AES-GCM';
|
|
8
|
-
/**
|
|
9
|
-
* Encrypt data using AES-GCM
|
|
10
|
-
* @param data Data to encrypt
|
|
11
|
-
* @param key Key to use for encryption (must be 16, 24 or 32 bytes for AES)
|
|
12
|
-
* @returns Encrypted data
|
|
13
|
-
*/
|
|
14
|
-
public static async encrypt(
|
|
15
|
-
data: Uint8Array,
|
|
16
|
-
key: Uint8Array,
|
|
17
|
-
authTag: boolean = false,
|
|
18
|
-
eciesParams: IECIESConstants = Constants.ECIES,
|
|
19
|
-
aad?: Uint8Array,
|
|
20
|
-
): Promise<{ encrypted: Uint8Array; iv: Uint8Array; tag?: Uint8Array }> {
|
|
21
|
-
// Validate key length (AES supports 16, 24, or 32 bytes)
|
|
22
|
-
if (!key || (key.length !== 16 && key.length !== 24 && key.length !== 32)) {
|
|
23
|
-
const engine = getEciesI18nEngine();
|
|
24
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidAESKeyLength));
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Validate data exists (empty data is allowed for AES-GCM)
|
|
28
|
-
if (!data) {
|
|
29
|
-
const engine = getEciesI18nEngine();
|
|
30
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_CannotEncryptEmptyData));
|
|
31
|
-
}
|
|
32
|
-
if (data.length > eciesParams.MAX_RAW_DATA_SIZE) {
|
|
33
|
-
const engine = getEciesI18nEngine();
|
|
34
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_MessageLengthExceedsMaximumAllowedSizeTemplate, { messageLength: data.length }));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const cryptoKey = await crypto.subtle.importKey(
|
|
38
|
-
'raw',
|
|
39
|
-
new Uint8Array(key),
|
|
40
|
-
{ name: AESGCMService.ALGORITHM_NAME },
|
|
41
|
-
false,
|
|
42
|
-
['encrypt'],
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
const eciesConsts = eciesParams;
|
|
46
|
-
const iv = crypto.getRandomValues(new Uint8Array(eciesConsts.IV_SIZE));
|
|
47
|
-
const encryptedResult = await crypto.subtle.encrypt(
|
|
48
|
-
{
|
|
49
|
-
name: AESGCMService.ALGORITHM_NAME,
|
|
50
|
-
iv,
|
|
51
|
-
additionalData: aad,
|
|
52
|
-
...(authTag && { tagLength: eciesConsts.AUTH_TAG_SIZE * 8 }),
|
|
53
|
-
},
|
|
54
|
-
cryptoKey,
|
|
55
|
-
new Uint8Array(data),
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
const encryptedArray = new Uint8Array(encryptedResult);
|
|
59
|
-
if (!authTag) {
|
|
60
|
-
return { encrypted: encryptedArray, iv };
|
|
61
|
-
}
|
|
62
|
-
const authTagLengthBytes = eciesConsts.AUTH_TAG_SIZE;
|
|
63
|
-
const encryptedBytes = encryptedArray.slice(0, -authTagLengthBytes); // Remove auth tag
|
|
64
|
-
const authTagBytes = encryptedArray.slice(-authTagLengthBytes); // Last 16 bytes are auth tag
|
|
65
|
-
|
|
66
|
-
return { encrypted: encryptedBytes, iv, tag: authTagBytes };
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Combine encrypted data and auth tag into a single Uint8Array
|
|
71
|
-
* @param encryptedData The encrypted data
|
|
72
|
-
* @param authTag The authentication tag
|
|
73
|
-
* @returns The combined Uint8Array
|
|
74
|
-
*/
|
|
75
|
-
public static combineEncryptedDataAndTag(
|
|
76
|
-
encryptedData: Uint8Array,
|
|
77
|
-
authTag: Uint8Array,
|
|
78
|
-
): Uint8Array {
|
|
79
|
-
const combined = new Uint8Array(encryptedData.length + authTag.length);
|
|
80
|
-
combined.set(encryptedData);
|
|
81
|
-
combined.set(authTag, encryptedData.length);
|
|
82
|
-
return combined;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Combine IV and encrypted data (with optional auth tag) into a single Uint8Array
|
|
87
|
-
* @param iv The initialization vector
|
|
88
|
-
* @param encryptedDataWithTag The encrypted data with auth tag already appended (if applicable)
|
|
89
|
-
* @returns The combined Uint8Array
|
|
90
|
-
*/
|
|
91
|
-
public static combineIvAndEncryptedData(
|
|
92
|
-
iv: Uint8Array,
|
|
93
|
-
encryptedDataWithTag: Uint8Array,
|
|
94
|
-
): Uint8Array {
|
|
95
|
-
const combined = new Uint8Array(iv.length + encryptedDataWithTag.length);
|
|
96
|
-
combined.set(iv);
|
|
97
|
-
combined.set(encryptedDataWithTag, iv.length);
|
|
98
|
-
return combined;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Combine IV, encrypted data and auth tag into a single Uint8Array
|
|
103
|
-
* @param iv The initialization vector
|
|
104
|
-
* @param encryptedData The encrypted data
|
|
105
|
-
* @param authTag The authentication tag
|
|
106
|
-
* @returns The combined Uint8Array
|
|
107
|
-
*/
|
|
108
|
-
public static combineIvTagAndEncryptedData(
|
|
109
|
-
iv: Uint8Array,
|
|
110
|
-
encryptedData: Uint8Array,
|
|
111
|
-
authTag: Uint8Array,
|
|
112
|
-
): Uint8Array {
|
|
113
|
-
const encryptedWithTag = AESGCMService.combineEncryptedDataAndTag(
|
|
114
|
-
encryptedData,
|
|
115
|
-
authTag,
|
|
116
|
-
);
|
|
117
|
-
return AESGCMService.combineIvAndEncryptedData(iv, encryptedWithTag);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Split combined encrypted data back into its components
|
|
122
|
-
* @param combinedData The combined data containing IV, encrypted data, and optionally auth tag
|
|
123
|
-
* @param hasAuthTag Whether the combined data includes an authentication tag
|
|
124
|
-
* @returns Object containing the split components
|
|
125
|
-
*/
|
|
126
|
-
public static splitEncryptedData(
|
|
127
|
-
combinedData: Uint8Array,
|
|
128
|
-
hasAuthTag: boolean = true,
|
|
129
|
-
eciesParams: IECIESConstants = Constants.ECIES,
|
|
130
|
-
): { iv: Uint8Array; encryptedDataWithTag: Uint8Array } {
|
|
131
|
-
const eciesConsts = eciesParams;
|
|
132
|
-
const ivLength = eciesConsts.IV_SIZE;
|
|
133
|
-
const tagLength = hasAuthTag ? eciesConsts.AUTH_TAG_SIZE : 0;
|
|
134
|
-
|
|
135
|
-
if (combinedData.length < ivLength + tagLength) {
|
|
136
|
-
const engine = getEciesI18nEngine();
|
|
137
|
-
throw new Error(
|
|
138
|
-
engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_CombinedDataTooShortForComponents),
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
const iv = combinedData.slice(0, ivLength);
|
|
143
|
-
const encryptedDataWithTag = combinedData.slice(ivLength);
|
|
144
|
-
|
|
145
|
-
return { iv, encryptedDataWithTag };
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Decrypt data using AES-GCM
|
|
150
|
-
* @param iv The initialization vector
|
|
151
|
-
* @param encryptedData Data to decrypt (with auth tag appended if authTag is true)
|
|
152
|
-
* @param key Key to use for decryption (must be 16, 24 or 32 bytes for AES)
|
|
153
|
-
* @param authTag Whether the encrypted data includes an authentication tag
|
|
154
|
-
* @returns Decrypted data
|
|
155
|
-
*/
|
|
156
|
-
public static async decrypt(
|
|
157
|
-
iv: Uint8Array,
|
|
158
|
-
encryptedData: Uint8Array,
|
|
159
|
-
key: Uint8Array,
|
|
160
|
-
authTag: boolean = false,
|
|
161
|
-
eciesParams: IECIESConstants = Constants.ECIES,
|
|
162
|
-
aad?: Uint8Array,
|
|
163
|
-
): Promise<Uint8Array> {
|
|
164
|
-
const eciesConsts = eciesParams;
|
|
165
|
-
|
|
166
|
-
// Validate key length
|
|
167
|
-
if (!key || (key.length !== 16 && key.length !== 24 && key.length !== 32)) {
|
|
168
|
-
const engine = getEciesI18nEngine();
|
|
169
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidAESKeyLength));
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// Validate IV
|
|
173
|
-
if (!iv || iv.length !== eciesConsts.IV_SIZE) {
|
|
174
|
-
const engine = getEciesI18nEngine();
|
|
175
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_InvalidIV));
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// Validate encrypted data exists (empty encrypted data is allowed)
|
|
179
|
-
if (!encryptedData) {
|
|
180
|
-
const engine = getEciesI18nEngine();
|
|
181
|
-
throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_ECIESError_CannotDecryptEmptyData));
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const cryptoKey = await crypto.subtle.importKey(
|
|
185
|
-
'raw',
|
|
186
|
-
new Uint8Array(key),
|
|
187
|
-
{ name: AESGCMService.ALGORITHM_NAME },
|
|
188
|
-
false,
|
|
189
|
-
['decrypt'],
|
|
190
|
-
);
|
|
191
|
-
|
|
192
|
-
if (!authTag) {
|
|
193
|
-
const decrypted = await crypto.subtle.decrypt(
|
|
194
|
-
{
|
|
195
|
-
name: AESGCMService.ALGORITHM_NAME,
|
|
196
|
-
iv: new Uint8Array(iv),
|
|
197
|
-
additionalData: aad,
|
|
198
|
-
},
|
|
199
|
-
cryptoKey,
|
|
200
|
-
new Uint8Array(encryptedData),
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
return new Uint8Array(decrypted);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
// Decrypt with auth tag (already appended to encryptedData)
|
|
207
|
-
const decryptedResult = await crypto.subtle.decrypt(
|
|
208
|
-
{
|
|
209
|
-
name: AESGCMService.ALGORITHM_NAME,
|
|
210
|
-
iv: new Uint8Array(iv),
|
|
211
|
-
tagLength: eciesConsts.AUTH_TAG_SIZE * 8,
|
|
212
|
-
additionalData: aad,
|
|
213
|
-
},
|
|
214
|
-
cryptoKey,
|
|
215
|
-
new Uint8Array(encryptedData),
|
|
216
|
-
);
|
|
217
|
-
|
|
218
|
-
return new Uint8Array(decryptedResult);
|
|
219
|
-
}
|
|
220
|
-
}
|