@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,52 @@
|
|
|
1
|
+
import { BaseIdProvider } from '../../interfaces/id-provider';
|
|
2
|
+
/**
|
|
3
|
+
* ID provider for standard RFC 4122 UUIDs (16 bytes).
|
|
4
|
+
*
|
|
5
|
+
* Uses the 'uuid' npm package for UUID generation and validation.
|
|
6
|
+
* Serialization uses the standard UUID format with dashes (36 characters).
|
|
7
|
+
*
|
|
8
|
+
* This is functionally similar to GuidV4Provider but uses standard UUID
|
|
9
|
+
* string formatting (with dashes) instead of base64.
|
|
10
|
+
*/
|
|
11
|
+
export declare class UuidProvider extends BaseIdProvider {
|
|
12
|
+
readonly byteLength = 16;
|
|
13
|
+
readonly name = "UUID";
|
|
14
|
+
/**
|
|
15
|
+
* Generate a new random UUIDv4.
|
|
16
|
+
*/
|
|
17
|
+
generate(): Uint8Array;
|
|
18
|
+
/**
|
|
19
|
+
* Validate a UUID buffer.
|
|
20
|
+
* Checks length and RFC 4122 compliance.
|
|
21
|
+
*/
|
|
22
|
+
validate(id: Uint8Array): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Serialize UUID to standard format with dashes (36 characters).
|
|
25
|
+
* Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
26
|
+
*/
|
|
27
|
+
serialize(id: Uint8Array): string;
|
|
28
|
+
/**
|
|
29
|
+
* Deserialize a UUID string (with or without dashes) to buffer.
|
|
30
|
+
*/
|
|
31
|
+
deserialize(str: string): Uint8Array;
|
|
32
|
+
/**
|
|
33
|
+
* Extract the version from a UUID buffer.
|
|
34
|
+
* Should return 4 for v4 UUIDs.
|
|
35
|
+
*/
|
|
36
|
+
getVersion(id: Uint8Array): number | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a UUID is the nil UUID (all zeros).
|
|
39
|
+
*/
|
|
40
|
+
isNil(id: Uint8Array): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Convert an ID of unknown type to a string representation.
|
|
43
|
+
* Delegates to base implementation.
|
|
44
|
+
*/
|
|
45
|
+
idToString(id: unknown): string;
|
|
46
|
+
/**
|
|
47
|
+
* Convert a string representation of an ID back to an ID buffer.
|
|
48
|
+
* Delegates to deserialize.
|
|
49
|
+
*/
|
|
50
|
+
idFromString(str: string): Uint8Array;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=uuid-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-provider.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/id-providers/uuid-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAK9D;;;;;;;;GAQG;AACH,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,UAAU,MAAM;IACzB,QAAQ,CAAC,IAAI,UAAU;IAEvB;;OAEG;IACH,QAAQ,IAAI,UAAU;IAMtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAcjC;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM;IAWjC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IA4BpC;;;OAGG;IACH,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS;IAQ9C;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO;IAW9B;;;OAGG;IACM,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAIxC;;;OAGG;IACM,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;CAG/C"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UuidProvider = void 0;
|
|
4
|
+
const id_provider_1 = require("../../interfaces/id-provider");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
const id_provider_2 = require("../../errors/id-provider");
|
|
7
|
+
const id_provider_error_type_1 = require("../../enumerations/id-provider-error-type");
|
|
8
|
+
/**
|
|
9
|
+
* ID provider for standard RFC 4122 UUIDs (16 bytes).
|
|
10
|
+
*
|
|
11
|
+
* Uses the 'uuid' npm package for UUID generation and validation.
|
|
12
|
+
* Serialization uses the standard UUID format with dashes (36 characters).
|
|
13
|
+
*
|
|
14
|
+
* This is functionally similar to GuidV4Provider but uses standard UUID
|
|
15
|
+
* string formatting (with dashes) instead of base64.
|
|
16
|
+
*/
|
|
17
|
+
class UuidProvider extends id_provider_1.BaseIdProvider {
|
|
18
|
+
byteLength = 16;
|
|
19
|
+
name = 'UUID';
|
|
20
|
+
/**
|
|
21
|
+
* Generate a new random UUIDv4.
|
|
22
|
+
*/
|
|
23
|
+
generate() {
|
|
24
|
+
const buffer = new Uint8Array(16);
|
|
25
|
+
(0, uuid_1.v4)(undefined, buffer);
|
|
26
|
+
return buffer;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate a UUID buffer.
|
|
30
|
+
* Checks length and RFC 4122 compliance.
|
|
31
|
+
*/
|
|
32
|
+
validate(id) {
|
|
33
|
+
if (id.length !== this.byteLength) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
// Convert to string and validate
|
|
38
|
+
const str = this.serialize(id);
|
|
39
|
+
return (0, uuid_1.validate)(str);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Serialize UUID to standard format with dashes (36 characters).
|
|
47
|
+
* Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
48
|
+
*/
|
|
49
|
+
serialize(id) {
|
|
50
|
+
this.validateLength(id, 'UuidProvider.serialize');
|
|
51
|
+
const hex = Array.from(id)
|
|
52
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
53
|
+
.join('');
|
|
54
|
+
// Insert dashes at proper positions
|
|
55
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Deserialize a UUID string (with or without dashes) to buffer.
|
|
59
|
+
*/
|
|
60
|
+
deserialize(str) {
|
|
61
|
+
if (typeof str !== 'string') {
|
|
62
|
+
throw new id_provider_2.IdProviderError(id_provider_error_type_1.IdProviderErrorType.InputMustBeString);
|
|
63
|
+
}
|
|
64
|
+
// Validate format
|
|
65
|
+
if (!(0, uuid_1.validate)(str)) {
|
|
66
|
+
throw new id_provider_2.IdProviderError(id_provider_error_type_1.IdProviderErrorType.InvalidUuidFormat, undefined, undefined, { input: str });
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const buffer = (0, uuid_1.parse)(str);
|
|
70
|
+
return buffer;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new id_provider_2.IdProviderError(id_provider_error_type_1.IdProviderErrorType.ParseFailed, { cause: error instanceof Error ? error : undefined }, undefined, { input: str, message: error instanceof Error ? error.message : String(error) });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extract the version from a UUID buffer.
|
|
78
|
+
* Should return 4 for v4 UUIDs.
|
|
79
|
+
*/
|
|
80
|
+
getVersion(id) {
|
|
81
|
+
this.validateLength(id, 'UuidProvider.getVersion');
|
|
82
|
+
// Version is in the most significant 4 bits of byte 6
|
|
83
|
+
const versionByte = id[6];
|
|
84
|
+
return (versionByte >> 4) & 0x0F;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if a UUID is the nil UUID (all zeros).
|
|
88
|
+
*/
|
|
89
|
+
isNil(id) {
|
|
90
|
+
this.validateLength(id, 'UuidProvider.isNil');
|
|
91
|
+
for (let i = 0; i < id.length; i++) {
|
|
92
|
+
if (id[i] !== 0) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Convert an ID of unknown type to a string representation.
|
|
100
|
+
* Delegates to base implementation.
|
|
101
|
+
*/
|
|
102
|
+
idToString(id) {
|
|
103
|
+
return super.idToString(id);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Convert a string representation of an ID back to an ID buffer.
|
|
107
|
+
* Delegates to deserialize.
|
|
108
|
+
*/
|
|
109
|
+
idFromString(str) {
|
|
110
|
+
return this.deserialize(str);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.UuidProvider = UuidProvider;
|
|
114
|
+
//# sourceMappingURL=uuid-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uuid-provider.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/id-providers/uuid-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/lib/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,QAAQ,CAAC"}
|
package/src/lib/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Library exports for v2 architecture
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
tslib_1.__exportStar(require("./crypto-container"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./guid"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/lib/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6DAAmC;AACnC,iDAAuB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { IConstants } from '../interfaces/constants';
|
|
2
|
+
import { IInvariant } from '../interfaces/invariant';
|
|
3
|
+
/**
|
|
4
|
+
* Validates all configuration invariants.
|
|
5
|
+
*
|
|
6
|
+
* This class maintains a registry of all invariants and validates them
|
|
7
|
+
* whenever a configuration is created or modified.
|
|
8
|
+
*
|
|
9
|
+
* Adding new invariants is easy - just:
|
|
10
|
+
* 1. Create a class implementing IInvariant
|
|
11
|
+
* 2. Add it to the DEFAULT_INVARIANTS array
|
|
12
|
+
* 3. Tests will automatically validate it
|
|
13
|
+
*/
|
|
14
|
+
export declare class InvariantValidator {
|
|
15
|
+
/**
|
|
16
|
+
* Default invariants that are always checked
|
|
17
|
+
*/
|
|
18
|
+
private static readonly DEFAULT_INVARIANTS;
|
|
19
|
+
/**
|
|
20
|
+
* Custom invariants registered at runtime
|
|
21
|
+
*/
|
|
22
|
+
private static customInvariants;
|
|
23
|
+
/**
|
|
24
|
+
* Register a custom invariant to be checked alongside default invariants
|
|
25
|
+
*/
|
|
26
|
+
static registerInvariant(invariant: IInvariant): void;
|
|
27
|
+
/**
|
|
28
|
+
* Clear all custom invariants (useful for testing)
|
|
29
|
+
*/
|
|
30
|
+
static clearCustomInvariants(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Get all invariants (default + custom)
|
|
33
|
+
*/
|
|
34
|
+
static getAllInvariants(): readonly IInvariant[];
|
|
35
|
+
/**
|
|
36
|
+
* Validate all invariants for a given configuration
|
|
37
|
+
*
|
|
38
|
+
* @param config The configuration to validate
|
|
39
|
+
* @throws Error if any invariant fails
|
|
40
|
+
*/
|
|
41
|
+
static validateAll(config: IConstants): void;
|
|
42
|
+
/**
|
|
43
|
+
* Check a single invariant
|
|
44
|
+
*
|
|
45
|
+
* @param config The configuration to validate
|
|
46
|
+
* @param invariantName Name of the invariant to check
|
|
47
|
+
* @returns true if invariant passes, false otherwise
|
|
48
|
+
*/
|
|
49
|
+
static checkInvariant(config: IConstants, invariantName: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Get failure details for a specific invariant
|
|
52
|
+
*
|
|
53
|
+
* @param config The configuration to validate
|
|
54
|
+
* @param invariantName Name of the invariant to check
|
|
55
|
+
* @returns Error message if invariant fails, null if it passes
|
|
56
|
+
*/
|
|
57
|
+
static getFailureDetails(config: IConstants, invariantName: string): string | null;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=invariant-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant-validator.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariant-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;;;;;;;GAUG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAIxC;IAEF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAoB;IAEnD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAIrD;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,IAAI;IAIpC;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,SAAS,UAAU,EAAE;IAIhD;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAuB5C;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAgBzE;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAenF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvariantValidator = void 0;
|
|
4
|
+
const invariants_1 = require("./invariants");
|
|
5
|
+
const i18n_setup_1 = require("../i18n-setup");
|
|
6
|
+
const ecies_string_key_1 = require("../enumerations/ecies-string-key");
|
|
7
|
+
const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
|
|
8
|
+
/**
|
|
9
|
+
* Validates all configuration invariants.
|
|
10
|
+
*
|
|
11
|
+
* This class maintains a registry of all invariants and validates them
|
|
12
|
+
* whenever a configuration is created or modified.
|
|
13
|
+
*
|
|
14
|
+
* Adding new invariants is easy - just:
|
|
15
|
+
* 1. Create a class implementing IInvariant
|
|
16
|
+
* 2. Add it to the DEFAULT_INVARIANTS array
|
|
17
|
+
* 3. Tests will automatically validate it
|
|
18
|
+
*/
|
|
19
|
+
class InvariantValidator {
|
|
20
|
+
/**
|
|
21
|
+
* Default invariants that are always checked
|
|
22
|
+
*/
|
|
23
|
+
static DEFAULT_INVARIANTS = [
|
|
24
|
+
new invariants_1.RecipientIdConsistencyInvariant(),
|
|
25
|
+
new invariants_1.Pbkdf2ProfilesValidityInvariant(),
|
|
26
|
+
new invariants_1.EncryptionAlgorithmConsistencyInvariant(),
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Custom invariants registered at runtime
|
|
30
|
+
*/
|
|
31
|
+
static customInvariants = [];
|
|
32
|
+
/**
|
|
33
|
+
* Register a custom invariant to be checked alongside default invariants
|
|
34
|
+
*/
|
|
35
|
+
static registerInvariant(invariant) {
|
|
36
|
+
this.customInvariants.push(invariant);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Clear all custom invariants (useful for testing)
|
|
40
|
+
*/
|
|
41
|
+
static clearCustomInvariants() {
|
|
42
|
+
this.customInvariants = [];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get all invariants (default + custom)
|
|
46
|
+
*/
|
|
47
|
+
static getAllInvariants() {
|
|
48
|
+
return [...this.DEFAULT_INVARIANTS, ...this.customInvariants];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validate all invariants for a given configuration
|
|
52
|
+
*
|
|
53
|
+
* @param config The configuration to validate
|
|
54
|
+
* @throws Error if any invariant fails
|
|
55
|
+
*/
|
|
56
|
+
static validateAll(config) {
|
|
57
|
+
const allInvariants = this.getAllInvariants();
|
|
58
|
+
const failures = [];
|
|
59
|
+
for (const invariant of allInvariants) {
|
|
60
|
+
if (!invariant.check(config)) {
|
|
61
|
+
failures.push(invariant.errorMessage(config));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (failures.length > 0) {
|
|
65
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
66
|
+
throw i18n_lib_1.TranslatableGenericError.withEngine(engine, i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Invariant_ConfigurationValidationFailedMultipleTemplate, { count: failures.length, failures: failures.join('\n\n') }, undefined, { invariantCount: failures.length });
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check a single invariant
|
|
71
|
+
*
|
|
72
|
+
* @param config The configuration to validate
|
|
73
|
+
* @param invariantName Name of the invariant to check
|
|
74
|
+
* @returns true if invariant passes, false otherwise
|
|
75
|
+
*/
|
|
76
|
+
static checkInvariant(config, invariantName) {
|
|
77
|
+
const invariant = this.getAllInvariants().find(i => i.name === invariantName);
|
|
78
|
+
if (!invariant) {
|
|
79
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
80
|
+
throw i18n_lib_1.TranslatableGenericError.withEngine(engine, i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Invariant_UnknownInvariantTemplate, { name: invariantName }, undefined, { invariantName });
|
|
81
|
+
}
|
|
82
|
+
return invariant.check(config);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get failure details for a specific invariant
|
|
86
|
+
*
|
|
87
|
+
* @param config The configuration to validate
|
|
88
|
+
* @param invariantName Name of the invariant to check
|
|
89
|
+
* @returns Error message if invariant fails, null if it passes
|
|
90
|
+
*/
|
|
91
|
+
static getFailureDetails(config, invariantName) {
|
|
92
|
+
const invariant = this.getAllInvariants().find(i => i.name === invariantName);
|
|
93
|
+
if (!invariant) {
|
|
94
|
+
const engine = (0, i18n_setup_1.getEciesI18nEngine)();
|
|
95
|
+
throw i18n_lib_1.TranslatableGenericError.withEngine(engine, i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Invariant_UnknownInvariantTemplate, { name: invariantName }, undefined, { invariantName });
|
|
96
|
+
}
|
|
97
|
+
return invariant.check(config) ? null : invariant.errorMessage(config);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.InvariantValidator = InvariantValidator;
|
|
101
|
+
//# sourceMappingURL=invariant-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariant-validator.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariant-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IConstants } from '../../interfaces/constants';
|
|
2
|
+
import { BaseInvariant } from '../../interfaces/invariant';
|
|
3
|
+
/**
|
|
4
|
+
* Validates that encryption algorithm parameters are consistent.
|
|
5
|
+
*
|
|
6
|
+
* Checks:
|
|
7
|
+
* - Symmetric key size matches the algorithm (AES-256 = 32 bytes)
|
|
8
|
+
* - Curve name is supported
|
|
9
|
+
* - Key derivation path is valid
|
|
10
|
+
*/
|
|
11
|
+
export declare class EncryptionAlgorithmConsistencyInvariant extends BaseInvariant {
|
|
12
|
+
private static readonly SUPPORTED_CURVES;
|
|
13
|
+
constructor();
|
|
14
|
+
check(config: IConstants): boolean;
|
|
15
|
+
errorMessage(config: IConstants): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=encryption-algorithm-consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption-algorithm-consistency.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/encryption-algorithm-consistency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;;;;;;GAOG;AACH,qBAAa,uCAAwC,SAAQ,aAAa;IACxE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAKtC;;IASF,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAqBlC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CAyBzC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EncryptionAlgorithmConsistencyInvariant = void 0;
|
|
4
|
+
const invariant_1 = require("../../interfaces/invariant");
|
|
5
|
+
/**
|
|
6
|
+
* Validates that encryption algorithm parameters are consistent.
|
|
7
|
+
*
|
|
8
|
+
* Checks:
|
|
9
|
+
* - Symmetric key size matches the algorithm (AES-256 = 32 bytes)
|
|
10
|
+
* - Curve name is supported
|
|
11
|
+
* - Key derivation path is valid
|
|
12
|
+
*/
|
|
13
|
+
class EncryptionAlgorithmConsistencyInvariant extends invariant_1.BaseInvariant {
|
|
14
|
+
static SUPPORTED_CURVES = [
|
|
15
|
+
'secp256k1',
|
|
16
|
+
'p256',
|
|
17
|
+
'p384',
|
|
18
|
+
'p521',
|
|
19
|
+
];
|
|
20
|
+
constructor() {
|
|
21
|
+
super('EncryptionAlgorithmConsistency', 'Encryption algorithm parameters must be consistent');
|
|
22
|
+
}
|
|
23
|
+
check(config) {
|
|
24
|
+
// AES-256 requires 32-byte keys
|
|
25
|
+
if (config.ECIES.SYMMETRIC.KEY_SIZE !== 32) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
// Check curve is supported
|
|
29
|
+
if (!EncryptionAlgorithmConsistencyInvariant.SUPPORTED_CURVES.includes(config.ECIES.CURVE_NAME)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// Key derivation path should be valid BIP32 path
|
|
33
|
+
if (!config.ECIES.PRIMARY_KEY_DERIVATION_PATH.startsWith('m/')) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
errorMessage(config) {
|
|
39
|
+
const issues = [];
|
|
40
|
+
if (config.ECIES.SYMMETRIC.KEY_SIZE !== 32) {
|
|
41
|
+
issues.push(`SYMMETRIC.KEY_SIZE (${config.ECIES.SYMMETRIC.KEY_SIZE}) must be 32 for AES-256`);
|
|
42
|
+
}
|
|
43
|
+
if (!EncryptionAlgorithmConsistencyInvariant.SUPPORTED_CURVES.includes(config.ECIES.CURVE_NAME)) {
|
|
44
|
+
issues.push(`CURVE_NAME (${config.ECIES.CURVE_NAME}) must be one of: ${EncryptionAlgorithmConsistencyInvariant.SUPPORTED_CURVES.join(', ')}`);
|
|
45
|
+
}
|
|
46
|
+
if (!config.ECIES.PRIMARY_KEY_DERIVATION_PATH.startsWith('m/')) {
|
|
47
|
+
issues.push(`PRIMARY_KEY_DERIVATION_PATH (${config.ECIES.PRIMARY_KEY_DERIVATION_PATH}) must be a valid BIP32 path starting with 'm/'`);
|
|
48
|
+
}
|
|
49
|
+
return `Invariant '${this.name}' failed:\n ${issues.join('\n ')}`;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.EncryptionAlgorithmConsistencyInvariant = EncryptionAlgorithmConsistencyInvariant;
|
|
53
|
+
//# sourceMappingURL=encryption-algorithm-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption-algorithm-consistency.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/encryption-algorithm-consistency.ts"],"names":[],"mappings":";;;AACA,0DAA2D;AAE3D;;;;;;;GAOG;AACH,MAAa,uCAAwC,SAAQ,yBAAa;IAChE,MAAM,CAAU,gBAAgB,GAAG;QACzC,WAAW;QACX,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC;IAEF;QACE,KAAK,CACH,gCAAgC,EAChC,oDAAoD,CACrD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAkB;QACtB,gCAAgC;QAChC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,uCAAuC,CAAC,gBAAgB,CAAC,QAAQ,CACpE,MAAM,CAAC,KAAK,CAAC,UAAU,CACxB,EAAE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,iDAAiD;QACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,MAAkB;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,IAAI,CACT,uBAAuB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,0BAA0B,CACjF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,uCAAuC,CAAC,gBAAgB,CAAC,QAAQ,CACpE,MAAM,CAAC,KAAK,CAAC,UAAU,CACxB,EAAE,CAAC;YACF,MAAM,CAAC,IAAI,CACT,eAAe,MAAM,CAAC,KAAK,CAAC,UAAU,qBAAqB,uCAAuC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjI,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CACT,gCAAgC,MAAM,CAAC,KAAK,CAAC,2BAA2B,iDAAiD,CAC1H,CAAC;QACJ,CAAC;QAED,OAAO,cAAc,IAAI,CAAC,IAAI,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACtE,CAAC;;AA5DH,0FA6DC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./recipient-id-consistency"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./pbkdf2-profiles-validity"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./encryption-algorithm-consistency"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,qEAA2C;AAC3C,6EAAmD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { IConstants } from '../../interfaces/constants';
|
|
2
|
+
import { BaseInvariant } from '../../interfaces/invariant';
|
|
3
|
+
/**
|
|
4
|
+
* Validates that PBKDF2 profiles have sensible parameters.
|
|
5
|
+
*
|
|
6
|
+
* Checks:
|
|
7
|
+
* - iterations > 0 and not too low (security risk)
|
|
8
|
+
* - saltBytes > 0 and reasonable
|
|
9
|
+
* - hashBytes > 0 and matches expected hash output
|
|
10
|
+
*/
|
|
11
|
+
export declare class Pbkdf2ProfilesValidityInvariant extends BaseInvariant {
|
|
12
|
+
constructor();
|
|
13
|
+
check(config: IConstants): boolean;
|
|
14
|
+
errorMessage(config: IConstants): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=pbkdf2-profiles-validity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbkdf2-profiles-validity.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/pbkdf2-profiles-validity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D;;;;;;;GAOG;AACH,qBAAa,+BAAgC,SAAQ,aAAa;;IAQhE,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IA2BlC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CA8BzC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Pbkdf2ProfilesValidityInvariant = void 0;
|
|
4
|
+
const invariant_1 = require("../../interfaces/invariant");
|
|
5
|
+
const pbkdf2_profile_1 = require("../../enumerations/pbkdf2-profile");
|
|
6
|
+
/**
|
|
7
|
+
* Validates that PBKDF2 profiles have sensible parameters.
|
|
8
|
+
*
|
|
9
|
+
* Checks:
|
|
10
|
+
* - iterations > 0 and not too low (security risk)
|
|
11
|
+
* - saltBytes > 0 and reasonable
|
|
12
|
+
* - hashBytes > 0 and matches expected hash output
|
|
13
|
+
*/
|
|
14
|
+
class Pbkdf2ProfilesValidityInvariant extends invariant_1.BaseInvariant {
|
|
15
|
+
constructor() {
|
|
16
|
+
super('Pbkdf2ProfilesValidity', 'PBKDF2 profiles must have valid cryptographic parameters');
|
|
17
|
+
}
|
|
18
|
+
check(config) {
|
|
19
|
+
const profiles = [
|
|
20
|
+
config.PBKDF2_PROFILES[pbkdf2_profile_1.Pbkdf2ProfileEnum.BROWSER_PASSWORD],
|
|
21
|
+
config.PBKDF2_PROFILES[pbkdf2_profile_1.Pbkdf2ProfileEnum.HIGH_SECURITY],
|
|
22
|
+
config.PBKDF2_PROFILES[pbkdf2_profile_1.Pbkdf2ProfileEnum.TEST_FAST],
|
|
23
|
+
];
|
|
24
|
+
for (const profile of profiles) {
|
|
25
|
+
// iterations must be positive and reasonable
|
|
26
|
+
if (profile.iterations < 1000 || profile.iterations > 10_000_000) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
// saltBytes must be at least 16 bytes (128 bits)
|
|
30
|
+
if (profile.saltBytes < 16 || profile.saltBytes > 256) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// hashBytes must be positive and reasonable for sha256
|
|
34
|
+
if (profile.hashBytes < 16 || profile.hashBytes > 64) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
errorMessage(config) {
|
|
41
|
+
const issues = [];
|
|
42
|
+
const profileTests = [
|
|
43
|
+
{ name: 'BROWSER_PASSWORD', profile: config.PBKDF2_PROFILES[pbkdf2_profile_1.Pbkdf2ProfileEnum.BROWSER_PASSWORD] },
|
|
44
|
+
{ name: 'HIGH_SECURITY', profile: config.PBKDF2_PROFILES[pbkdf2_profile_1.Pbkdf2ProfileEnum.HIGH_SECURITY] },
|
|
45
|
+
{ name: 'TEST_FAST', profile: config.PBKDF2_PROFILES[pbkdf2_profile_1.Pbkdf2ProfileEnum.TEST_FAST] },
|
|
46
|
+
];
|
|
47
|
+
for (const { name, profile } of profileTests) {
|
|
48
|
+
if (profile.iterations < 1000 || profile.iterations > 10_000_000) {
|
|
49
|
+
issues.push(`${name}.iterations (${profile.iterations}) must be between 1000 and 10,000,000`);
|
|
50
|
+
}
|
|
51
|
+
if (profile.saltBytes < 16 || profile.saltBytes > 256) {
|
|
52
|
+
issues.push(`${name}.saltBytes (${profile.saltBytes}) must be between 16 and 256`);
|
|
53
|
+
}
|
|
54
|
+
if (profile.hashBytes < 16 || profile.hashBytes > 64) {
|
|
55
|
+
issues.push(`${name}.hashBytes (${profile.hashBytes}) must be between 16 and 64`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return `Invariant '${this.name}' failed:\n ${issues.join('\n ')}`;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.Pbkdf2ProfilesValidityInvariant = Pbkdf2ProfilesValidityInvariant;
|
|
62
|
+
//# sourceMappingURL=pbkdf2-profiles-validity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbkdf2-profiles-validity.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/pbkdf2-profiles-validity.ts"],"names":[],"mappings":";;;AACA,0DAA2D;AAC3D,sEAAsE;AAEtE;;;;;;;GAOG;AACH,MAAa,+BAAgC,SAAQ,yBAAa;IAChE;QACE,KAAK,CACH,wBAAwB,EACxB,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAkB;QACtB,MAAM,QAAQ,GAAG;YACf,MAAM,CAAC,eAAe,CAAC,kCAAiB,CAAC,gBAAgB,CAAC;YAC1D,MAAM,CAAC,eAAe,CAAC,kCAAiB,CAAC,aAAa,CAAC;YACvD,MAAM,CAAC,eAAe,CAAC,kCAAiB,CAAC,SAAS,CAAC;SACpD,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,6CAA6C;YAC7C,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,iDAAiD;YACjD,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,IAAI,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBACtD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,uDAAuD;YACvD,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;gBACrD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,MAAkB;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG;YACnB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,kCAAiB,CAAC,gBAAgB,CAAC,EAAE;YACjG,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,kCAAiB,CAAC,aAAa,CAAC,EAAE;YAC3F,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,kCAAiB,CAAC,SAAS,CAAC,EAAE;SACpF,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,YAAY,EAAE,CAAC;YAC7C,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;gBACjE,MAAM,CAAC,IAAI,CACT,GAAG,IAAI,gBAAgB,OAAO,CAAC,UAAU,uCAAuC,CACjF,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,IAAI,OAAO,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,CACT,GAAG,IAAI,eAAe,OAAO,CAAC,SAAS,8BAA8B,CACtE,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,IAAI,OAAO,CAAC,SAAS,GAAG,EAAE,EAAE,CAAC;gBACrD,MAAM,CAAC,IAAI,CACT,GAAG,IAAI,eAAe,OAAO,CAAC,SAAS,6BAA6B,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,cAAc,IAAI,CAAC,IAAI,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACtE,CAAC;CACF;AAjED,0EAiEC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IConstants } from '../../interfaces/constants';
|
|
2
|
+
import { BaseInvariant } from '../../interfaces/invariant';
|
|
3
|
+
/**
|
|
4
|
+
* Validates that all recipient ID size configurations are consistent.
|
|
5
|
+
*
|
|
6
|
+
* This invariant would have caught the 12 vs 32 byte discrepancy.
|
|
7
|
+
*
|
|
8
|
+
* Checks:
|
|
9
|
+
* - MEMBER_ID_LENGTH === idProvider.byteLength
|
|
10
|
+
* - ECIES.MULTIPLE.RECIPIENT_ID_SIZE === idProvider.byteLength
|
|
11
|
+
* - All three values must be in sync
|
|
12
|
+
*/
|
|
13
|
+
export declare class RecipientIdConsistencyInvariant extends BaseInvariant {
|
|
14
|
+
constructor();
|
|
15
|
+
check(config: IConstants): boolean;
|
|
16
|
+
errorMessage(config: IConstants): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=recipient-id-consistency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipient-id-consistency.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/recipient-id-consistency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;;;;;;;;GASG;AACH,qBAAa,+BAAgC,SAAQ,aAAa;;IAQhE,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAOlC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CAiBzC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RecipientIdConsistencyInvariant = void 0;
|
|
4
|
+
const invariant_1 = require("../../interfaces/invariant");
|
|
5
|
+
/**
|
|
6
|
+
* Validates that all recipient ID size configurations are consistent.
|
|
7
|
+
*
|
|
8
|
+
* This invariant would have caught the 12 vs 32 byte discrepancy.
|
|
9
|
+
*
|
|
10
|
+
* Checks:
|
|
11
|
+
* - MEMBER_ID_LENGTH === idProvider.byteLength
|
|
12
|
+
* - ECIES.MULTIPLE.RECIPIENT_ID_SIZE === idProvider.byteLength
|
|
13
|
+
* - All three values must be in sync
|
|
14
|
+
*/
|
|
15
|
+
class RecipientIdConsistencyInvariant extends invariant_1.BaseInvariant {
|
|
16
|
+
constructor() {
|
|
17
|
+
super('RecipientIdConsistency', 'All recipient ID size configurations must match the ID provider byte length');
|
|
18
|
+
}
|
|
19
|
+
check(config) {
|
|
20
|
+
return (config.MEMBER_ID_LENGTH === config.idProvider.byteLength &&
|
|
21
|
+
config.ECIES.MULTIPLE.RECIPIENT_ID_SIZE === config.idProvider.byteLength);
|
|
22
|
+
}
|
|
23
|
+
errorMessage(config) {
|
|
24
|
+
const issues = [];
|
|
25
|
+
if (config.MEMBER_ID_LENGTH !== config.idProvider.byteLength) {
|
|
26
|
+
issues.push(`MEMBER_ID_LENGTH (${config.MEMBER_ID_LENGTH}) !== idProvider.byteLength (${config.idProvider.byteLength})`);
|
|
27
|
+
}
|
|
28
|
+
if (config.ECIES.MULTIPLE.RECIPIENT_ID_SIZE !== config.idProvider.byteLength) {
|
|
29
|
+
issues.push(`ECIES.MULTIPLE.RECIPIENT_ID_SIZE (${config.ECIES.MULTIPLE.RECIPIENT_ID_SIZE}) !== idProvider.byteLength (${config.idProvider.byteLength})`);
|
|
30
|
+
}
|
|
31
|
+
return `Invariant '${this.name}' failed:\n ${issues.join('\n ')}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.RecipientIdConsistencyInvariant = RecipientIdConsistencyInvariant;
|
|
35
|
+
//# sourceMappingURL=recipient-id-consistency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipient-id-consistency.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-ecies-lib/src/lib/invariants/recipient-id-consistency.ts"],"names":[],"mappings":";;;AACA,0DAA2D;AAE3D;;;;;;;;;GASG;AACH,MAAa,+BAAgC,SAAQ,yBAAa;IAChE;QACE,KAAK,CACH,wBAAwB,EACxB,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAkB;QACtB,OAAO,CACL,MAAM,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU;YACxD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,CACzE,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAkB;QAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,MAAM,CAAC,gBAAgB,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CACT,qBAAqB,MAAM,CAAC,gBAAgB,gCAAgC,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,CAC5G,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,KAAK,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YAC7E,MAAM,CAAC,IAAI,CACT,qCAAqC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,iBAAiB,gCAAgC,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,CAC5I,CAAC;QACJ,CAAC;QAED,OAAO,cAAc,IAAI,CAAC,IAAI,gBAAgB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACtE,CAAC;CACF;AAhCD,0EAgCC"}
|