@digitaldefiance/node-ecies-lib 4.4.9 → 4.4.10
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 -5
- package/src/builders/ecies-builder.d.ts +11 -0
- package/src/builders/ecies-builder.d.ts.map +1 -0
- package/src/builders/ecies-builder.js +26 -0
- package/src/builders/ecies-builder.js.map +1 -0
- package/src/builders/{index.ts → index.d.ts} +1 -0
- package/src/builders/index.d.ts.map +1 -0
- package/src/builders/index.js +6 -0
- package/src/builders/index.js.map +1 -0
- package/src/builders/member-builder.d.ts +47 -0
- package/src/builders/member-builder.d.ts.map +1 -0
- package/src/builders/member-builder.js +99 -0
- package/src/builders/member-builder.js.map +1 -0
- package/src/constants.d.ts +38 -0
- package/src/constants.d.ts.map +1 -0
- package/src/constants.js +183 -0
- package/src/constants.js.map +1 -0
- package/src/core/errors/crypto-error.d.ts +6 -0
- package/src/core/errors/crypto-error.d.ts.map +1 -0
- package/src/core/errors/crypto-error.js +15 -0
- package/src/core/errors/crypto-error.js.map +1 -0
- package/src/core/{index.ts → index.d.ts} +1 -0
- package/src/core/index.d.ts.map +1 -0
- package/src/core/index.js +6 -0
- package/src/core/index.js.map +1 -0
- package/src/core/types/result.d.ts +8 -0
- package/src/core/types/result.d.ts.map +1 -0
- package/src/core/types/result.js +3 -0
- package/src/core/types/result.js.map +1 -0
- package/src/enumerations/index.d.ts +2 -0
- package/src/enumerations/index.d.ts.map +1 -0
- package/src/enumerations/index.js +5 -0
- package/src/enumerations/index.js.map +1 -0
- package/src/enumerations/pbkdf2-profile.d.ts +9 -0
- package/src/enumerations/pbkdf2-profile.d.ts.map +1 -0
- package/src/enumerations/pbkdf2-profile.js +13 -0
- package/src/enumerations/pbkdf2-profile.js.map +1 -0
- package/src/i18n/ecies-i18n-factory.d.ts +28 -0
- package/src/i18n/ecies-i18n-factory.d.ts.map +1 -0
- package/src/i18n/ecies-i18n-factory.js +89 -0
- package/src/i18n/ecies-i18n-factory.js.map +1 -0
- package/src/i18n/{index.ts → index.d.ts} +1 -3
- package/src/i18n/index.d.ts.map +1 -0
- package/src/i18n/index.js +8 -0
- package/src/i18n/index.js.map +1 -0
- package/src/i18n/node-ecies-i18n-setup.d.ts +5 -0
- package/src/i18n/node-ecies-i18n-setup.d.ts.map +1 -0
- package/src/i18n/node-ecies-i18n-setup.js +46 -0
- package/src/i18n/node-ecies-i18n-setup.js.map +1 -0
- package/src/i18n/node-keys.d.ts +57 -0
- package/src/i18n/node-keys.d.ts.map +1 -0
- package/src/i18n/node-keys.js +67 -0
- package/src/i18n/node-keys.js.map +1 -0
- package/src/i18n/translations/de.d.ts +3 -0
- package/src/i18n/translations/de.d.ts.map +1 -0
- package/src/i18n/translations/de.js +57 -0
- package/src/i18n/translations/de.js.map +1 -0
- package/src/i18n/translations/en-GB.d.ts +3 -0
- package/src/i18n/translations/en-GB.d.ts.map +1 -0
- package/src/i18n/translations/en-GB.js +61 -0
- package/src/i18n/translations/en-GB.js.map +1 -0
- package/src/i18n/translations/en-US.d.ts +6 -0
- package/src/i18n/translations/en-US.d.ts.map +1 -0
- package/src/i18n/translations/en-US.js +65 -0
- package/src/i18n/translations/en-US.js.map +1 -0
- package/src/i18n/translations/es.d.ts +3 -0
- package/src/i18n/translations/es.d.ts.map +1 -0
- package/src/i18n/translations/es.js +57 -0
- package/src/i18n/translations/es.js.map +1 -0
- package/src/i18n/translations/fr.d.ts +3 -0
- package/src/i18n/translations/fr.d.ts.map +1 -0
- package/src/i18n/translations/fr.js +57 -0
- package/src/i18n/translations/fr.js.map +1 -0
- package/src/i18n/translations/{index.ts → index.d.ts} +1 -0
- package/src/i18n/translations/index.d.ts.map +1 -0
- package/src/i18n/translations/index.js +20 -0
- package/src/i18n/translations/index.js.map +1 -0
- package/src/i18n/translations/ja.d.ts +3 -0
- package/src/i18n/translations/ja.d.ts.map +1 -0
- package/src/i18n/translations/ja.js +57 -0
- package/src/i18n/translations/ja.js.map +1 -0
- package/src/i18n/translations/uk.d.ts +3 -0
- package/src/i18n/translations/uk.d.ts.map +1 -0
- package/src/i18n/translations/uk.js +57 -0
- package/src/i18n/translations/uk.js.map +1 -0
- package/src/i18n/translations/zh-cn.d.ts +3 -0
- package/src/i18n/translations/zh-cn.d.ts.map +1 -0
- package/src/i18n/translations/zh-cn.js +57 -0
- package/src/i18n/translations/zh-cn.js.map +1 -0
- package/src/{index.ts → index.d.ts} +1 -5
- package/src/index.d.ts.map +1 -0
- package/src/index.js +31 -0
- package/src/index.js.map +1 -0
- package/src/interfaces/authenticated-cipher.d.ts +12 -0
- package/src/interfaces/authenticated-cipher.d.ts.map +1 -0
- package/src/interfaces/authenticated-cipher.js +3 -0
- package/src/interfaces/authenticated-cipher.js.map +1 -0
- package/src/interfaces/authenticated-decipher.d.ts +11 -0
- package/src/interfaces/authenticated-decipher.d.ts.map +1 -0
- package/src/interfaces/authenticated-decipher.js +3 -0
- package/src/interfaces/authenticated-decipher.js.map +1 -0
- package/src/interfaces/backend-member-operational.d.ts +48 -0
- package/src/interfaces/backend-member-operational.d.ts.map +1 -0
- package/src/interfaces/backend-member-operational.js +3 -0
- package/src/interfaces/backend-member-operational.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/constants.d.ts +52 -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-consts.d.ts +88 -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/encrypted-chunk.d.ts +12 -0
- package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
- package/src/interfaces/encrypted-chunk.js +3 -0
- package/src/interfaces/encrypted-chunk.js.map +1 -0
- package/src/interfaces/encryption-consts.d.ts +11 -0
- package/src/interfaces/encryption-consts.d.ts.map +1 -0
- package/src/interfaces/encryption-consts.js +3 -0
- package/src/interfaces/encryption-consts.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 +30 -0
- package/src/interfaces/index.js.map +1 -0
- package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.d.ts +6 -0
- package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.d.ts.map +1 -0
- package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.js +3 -0
- package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.js.map +1 -0
- package/src/interfaces/keyring-consts.d.ts +6 -0
- package/src/interfaces/keyring-consts.d.ts.map +1 -0
- package/src/interfaces/keyring-consts.js +3 -0
- package/src/interfaces/keyring-consts.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 +47 -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-encrypted-message.ts → multi-encrypted-message.d.ts} +5 -5
- package/src/interfaces/multi-encrypted-message.d.ts.map +1 -0
- package/src/interfaces/multi-encrypted-message.js +3 -0
- package/src/interfaces/multi-encrypted-message.js.map +1 -0
- package/src/interfaces/multi-encrypted-parsed-header.d.ts +27 -0
- package/src/interfaces/multi-encrypted-parsed-header.d.ts.map +1 -0
- package/src/interfaces/multi-encrypted-parsed-header.js +3 -0
- package/src/interfaces/multi-encrypted-parsed-header.js.map +1 -0
- package/src/interfaces/multi-recipient-chunk.d.ts +26 -0
- package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
- package/src/interfaces/multi-recipient-chunk.js +13 -0
- package/src/interfaces/multi-recipient-chunk.js.map +1 -0
- package/src/interfaces/{pbkdf-profiles.ts → pbkdf-profiles.d.ts} +2 -2
- package/src/interfaces/pbkdf-profiles.d.ts.map +1 -0
- package/src/interfaces/pbkdf-profiles.js +3 -0
- package/src/interfaces/pbkdf-profiles.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/signing-key-private-key-info.d.ts +11 -0
- package/src/interfaces/signing-key-private-key-info.d.ts.map +1 -0
- package/src/interfaces/signing-key-private-key-info.js +3 -0
- package/src/interfaces/signing-key-private-key-info.js.map +1 -0
- package/src/interfaces/{simple-keypair-buffer.ts → simple-keypair-buffer.d.ts} +3 -3
- package/src/interfaces/simple-keypair-buffer.d.ts.map +1 -0
- package/src/interfaces/simple-keypair-buffer.js +3 -0
- package/src/interfaces/simple-keypair-buffer.js.map +1 -0
- package/src/interfaces/{simple-keypair.ts → simple-keypair.d.ts} +3 -3
- package/src/interfaces/simple-keypair.d.ts.map +1 -0
- package/src/interfaces/simple-keypair.js +3 -0
- package/src/interfaces/simple-keypair.js.map +1 -0
- package/src/interfaces/simple-public-key-only-buffer.d.ts +4 -0
- package/src/interfaces/simple-public-key-only-buffer.d.ts.map +1 -0
- package/src/interfaces/simple-public-key-only-buffer.js +3 -0
- package/src/interfaces/simple-public-key-only-buffer.js.map +1 -0
- package/src/interfaces/simple-public-key-only.d.ts +4 -0
- package/src/interfaces/simple-public-key-only.d.ts.map +1 -0
- package/src/interfaces/simple-public-key-only.js +3 -0
- package/src/interfaces/simple-public-key-only.js.map +1 -0
- package/src/interfaces/single-encrypted-parsed-header.d.ts +35 -0
- package/src/interfaces/single-encrypted-parsed-header.d.ts.map +1 -0
- package/src/interfaces/single-encrypted-parsed-header.js +3 -0
- package/src/interfaces/single-encrypted-parsed-header.js.map +1 -0
- package/src/interfaces/stream-config.d.ts +6 -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-progress.d.ts +8 -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/interfaces/{wallet-seed.ts → wallet-seed.d.ts} +3 -3
- package/src/interfaces/wallet-seed.d.ts.map +1 -0
- package/src/interfaces/wallet-seed.js +3 -0
- package/src/interfaces/wallet-seed.js.map +1 -0
- package/src/interfaces/wrapped-key-consts.d.ts +7 -0
- package/src/interfaces/wrapped-key-consts.d.ts.map +1 -0
- package/src/interfaces/wrapped-key-consts.js +3 -0
- package/src/interfaces/wrapped-key-consts.js.map +1 -0
- package/src/lib/crypto-container.d.ts +13 -0
- package/src/lib/crypto-container.d.ts.map +1 -0
- package/src/lib/crypto-container.js +29 -0
- package/src/lib/crypto-container.js.map +1 -0
- package/src/lib/{index.ts → index.d.ts} +1 -0
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/index.js +7 -0
- package/src/lib/index.js.map +1 -0
- package/src/lib/invariant-validator.d.ts +62 -0
- package/src/lib/invariant-validator.d.ts.map +1 -0
- package/src/lib/invariant-validator.js +108 -0
- package/src/lib/invariant-validator.js.map +1 -0
- package/src/lib/invariants/{index.ts → index.d.ts} +2 -2
- package/src/lib/invariants/index.d.ts.map +1 -0
- package/src/lib/invariants/index.js +12 -0
- package/src/lib/invariants/index.js.map +1 -0
- package/src/lib/invariants/recipient-id-consistency.d.ts +22 -0
- package/src/lib/invariants/recipient-id-consistency.d.ts.map +1 -0
- package/src/lib/invariants/recipient-id-consistency.js +62 -0
- package/src/lib/invariants/recipient-id-consistency.js.map +1 -0
- package/src/member.d.ts +81 -0
- package/src/member.d.ts.map +1 -0
- package/src/member.js +285 -0
- package/src/member.js.map +1 -0
- package/src/services/aes-gcm.d.ts +66 -0
- package/src/services/aes-gcm.d.ts.map +1 -0
- package/src/services/aes-gcm.js +158 -0
- package/src/services/aes-gcm.js.map +1 -0
- package/src/services/chunk-processor.d.ts +15 -0
- package/src/services/chunk-processor.d.ts.map +1 -0
- package/src/services/chunk-processor.js +36 -0
- package/src/services/chunk-processor.js.map +1 -0
- package/src/services/ecies/crypto-core.d.ts +104 -0
- package/src/services/ecies/crypto-core.d.ts.map +1 -0
- package/src/services/ecies/crypto-core.js +237 -0
- package/src/services/ecies/crypto-core.js.map +1 -0
- package/src/services/ecies/file.d.ts +30 -0
- package/src/services/ecies/file.d.ts.map +1 -0
- package/src/services/ecies/file.js +112 -0
- package/src/services/ecies/file.js.map +1 -0
- package/src/services/ecies/{index.ts → index.d.ts} +1 -0
- package/src/services/ecies/index.d.ts.map +1 -0
- package/src/services/ecies/index.js +11 -0
- package/src/services/ecies/index.js.map +1 -0
- package/src/services/ecies/multi-recipient.d.ts +84 -0
- package/src/services/ecies/multi-recipient.d.ts.map +1 -0
- package/src/services/ecies/multi-recipient.js +496 -0
- package/src/services/ecies/multi-recipient.js.map +1 -0
- package/src/services/ecies/service.d.ts +69 -0
- package/src/services/ecies/service.d.ts.map +1 -0
- package/src/services/ecies/service.js +144 -0
- package/src/services/ecies/service.js.map +1 -0
- package/src/services/ecies/signature.d.ts +38 -0
- package/src/services/ecies/signature.d.ts.map +1 -0
- package/src/services/ecies/signature.js +69 -0
- package/src/services/ecies/signature.js.map +1 -0
- package/src/services/ecies/single-recipient.d.ts +83 -0
- package/src/services/ecies/single-recipient.d.ts.map +1 -0
- package/src/services/ecies/single-recipient.js +447 -0
- package/src/services/ecies/single-recipient.js.map +1 -0
- package/src/services/ecies/utilities.d.ts +33 -0
- package/src/services/ecies/utilities.d.ts.map +1 -0
- package/src/services/ecies/utilities.js +91 -0
- package/src/services/ecies/utilities.js.map +1 -0
- package/src/services/encryption-stream.d.ts +33 -0
- package/src/services/encryption-stream.d.ts.map +1 -0
- package/src/services/encryption-stream.js +207 -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 +11 -0
- package/src/services/index.js.map +1 -0
- package/src/services/multi-recipient-processor.d.ts +72 -0
- package/src/services/multi-recipient-processor.d.ts.map +1 -0
- package/src/services/multi-recipient-processor.js +322 -0
- package/src/services/multi-recipient-processor.js.map +1 -0
- package/src/services/pbkdf2.d.ts +105 -0
- package/src/services/pbkdf2.d.ts.map +1 -0
- package/src/services/pbkdf2.js +189 -0
- package/src/services/pbkdf2.js.map +1 -0
- package/src/services/progress-tracker.d.ts +9 -0
- package/src/services/progress-tracker.d.ts.map +1 -0
- package/src/services/progress-tracker.js +41 -0
- package/src/services/progress-tracker.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-backend-member.d.ts +71 -0
- package/src/test-mocks/mock-backend-member.d.ts.map +1 -0
- package/src/test-mocks/mock-backend-member.js +133 -0
- package/src/test-mocks/mock-backend-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/types/id-guards.d.ts +39 -0
- package/src/types/id-guards.d.ts.map +1 -0
- package/src/types/id-guards.js +91 -0
- package/src/types/id-guards.js.map +1 -0
- package/src/types/index.d.ts +2 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +5 -0
- package/src/types/index.js.map +1 -0
- package/src/{types.ts → types.d.ts} +9 -28
- package/src/types.d.ts.map +1 -0
- package/src/types.js +6 -0
- package/src/types.js.map +1 -0
- package/src/utils.d.ts +11 -0
- package/src/utils.d.ts.map +1 -0
- package/src/utils.js +82 -0
- package/src/utils.js.map +1 -0
- package/LICENSE +0 -21
- package/src/builders/ecies-builder.ts +0 -27
- package/src/builders/member-builder.ts +0 -158
- package/src/constants.ts +0 -251
- package/src/core/errors/crypto-error.ts +0 -10
- package/src/core/types/result.ts +0 -3
- package/src/enumerations/index.ts +0 -2
- package/src/enumerations/pbkdf2-profile.ts +0 -8
- package/src/i18n/ecies-i18n-factory.ts +0 -111
- package/src/i18n/node-ecies-i18n-setup.ts +0 -56
- package/src/i18n/node-keys.ts +0 -69
- package/src/i18n/translations/de.ts +0 -54
- package/src/i18n/translations/en-GB.ts +0 -83
- package/src/i18n/translations/en-US.ts +0 -88
- package/src/i18n/translations/es.ts +0 -54
- package/src/i18n/translations/fr.ts +0 -54
- package/src/i18n/translations/ja.ts +0 -54
- package/src/i18n/translations/uk.ts +0 -54
- package/src/i18n/translations/zh-cn.ts +0 -54
- package/src/interfaces/authenticated-cipher.ts +0 -10
- package/src/interfaces/authenticated-decipher.ts +0 -9
- package/src/interfaces/backend-member-operational.ts +0 -75
- package/src/interfaces/checksum-config.ts +0 -4
- package/src/interfaces/checksum-consts.ts +0 -13
- package/src/interfaces/constants.ts +0 -54
- package/src/interfaces/ecies-consts.ts +0 -99
- package/src/interfaces/encrypted-chunk.ts +0 -12
- package/src/interfaces/encryption-consts.ts +0 -10
- package/src/interfaces/keypair-buffer-with-un-encrypted-private-key.ts +0 -7
- package/src/interfaces/keyring-consts.ts +0 -5
- package/src/interfaces/member.ts +0 -76
- package/src/interfaces/multi-encrypted-parsed-header.ts +0 -28
- package/src/interfaces/multi-recipient-chunk.ts +0 -35
- package/src/interfaces/pbkdf2-result.ts +0 -5
- package/src/interfaces/signing-key-private-key-info.ts +0 -12
- package/src/interfaces/simple-public-key-only-buffer.ts +0 -3
- package/src/interfaces/simple-public-key-only.ts +0 -3
- package/src/interfaces/single-encrypted-parsed-header.ts +0 -35
- package/src/interfaces/stream-config.ts +0 -9
- package/src/interfaces/stream-progress.ts +0 -7
- package/src/interfaces/wrapped-key-consts.ts +0 -6
- package/src/lib/crypto-container.ts +0 -32
- package/src/lib/invariant-validator.ts +0 -124
- package/src/lib/invariants/recipient-id-consistency.ts +0 -77
- package/src/member.ts +0 -511
- package/src/services/aes-gcm.ts +0 -260
- package/src/services/chunk-processor.ts +0 -47
- package/src/services/ecies/crypto-core.ts +0 -319
- package/src/services/ecies/file.ts +0 -171
- package/src/services/ecies/multi-recipient.ts +0 -782
- package/src/services/ecies/service.ts +0 -316
- package/src/services/ecies/signature.ts +0 -91
- package/src/services/ecies/single-recipient.ts +0 -743
- package/src/services/ecies/utilities.ts +0 -128
- package/src/services/encryption-stream.ts +0 -432
- package/src/services/multi-recipient-processor.ts +0 -505
- package/src/services/pbkdf2.ts +0 -304
- package/src/services/progress-tracker.ts +0 -43
- package/src/test-mocks/index.ts +0 -1
- package/src/test-mocks/mock-backend-member.ts +0 -195
- package/src/testing.ts +0 -2
- package/src/types/id-guards.ts +0 -91
- package/src/types/index.ts +0 -1
- package/src/utils.ts +0 -124
|
@@ -1,505 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ECIESError,
|
|
3
|
-
ECIESErrorTypeEnum,
|
|
4
|
-
IECIESConstants,
|
|
5
|
-
} from '@digitaldefiance/ecies-lib';
|
|
6
|
-
import {
|
|
7
|
-
createCipheriv,
|
|
8
|
-
createDecipheriv,
|
|
9
|
-
createECDH,
|
|
10
|
-
randomBytes,
|
|
11
|
-
} from 'crypto';
|
|
12
|
-
import { Constants } from '../constants';
|
|
13
|
-
import { AuthenticatedCipher } from '../interfaces/authenticated-cipher';
|
|
14
|
-
import { AuthenticatedDecipher } from '../interfaces/authenticated-decipher';
|
|
15
|
-
import type { IMember } from '../interfaces/member';
|
|
16
|
-
import {
|
|
17
|
-
getMultiRecipientConstants,
|
|
18
|
-
IMultiRecipientChunk,
|
|
19
|
-
IMultiRecipientChunkHeader,
|
|
20
|
-
IMultiRecipientConstants,
|
|
21
|
-
} from '../interfaces/multi-recipient-chunk';
|
|
22
|
-
import { AESGCMService } from './aes-gcm';
|
|
23
|
-
import { EciesCryptoCore } from './ecies/crypto-core';
|
|
24
|
-
import { EciesMultiRecipient } from './ecies/multi-recipient';
|
|
25
|
-
|
|
26
|
-
export interface IMultiRecipient {
|
|
27
|
-
id: Buffer;
|
|
28
|
-
publicKey: Buffer;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface IMultiEncryptedMessage {
|
|
32
|
-
dataLength: number;
|
|
33
|
-
recipientCount: number;
|
|
34
|
-
recipientIds: Buffer[];
|
|
35
|
-
recipientKeys: Buffer[];
|
|
36
|
-
encryptedMessage: Buffer;
|
|
37
|
-
headerSize: number;
|
|
38
|
-
ephemeralPublicKey?: Buffer;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class MultiRecipientProcessor {
|
|
42
|
-
private readonly aesGcm: AESGCMService;
|
|
43
|
-
private readonly cryptoCore: EciesCryptoCore;
|
|
44
|
-
private readonly consts: IECIESConstants;
|
|
45
|
-
private readonly eciesMultiRecipient: EciesMultiRecipient;
|
|
46
|
-
private readonly constants: IMultiRecipientConstants;
|
|
47
|
-
private readonly recipientIdSize: number;
|
|
48
|
-
|
|
49
|
-
constructor(
|
|
50
|
-
cryptoCore: EciesCryptoCore,
|
|
51
|
-
consts: IECIESConstants = Constants.ECIES,
|
|
52
|
-
aesGcm?: AESGCMService,
|
|
53
|
-
eciesMultiRecipient?: EciesMultiRecipient
|
|
54
|
-
) {
|
|
55
|
-
this.cryptoCore = cryptoCore;
|
|
56
|
-
this.consts = consts;
|
|
57
|
-
// Use injected dependencies or create defaults
|
|
58
|
-
this.aesGcm = aesGcm ?? new AESGCMService();
|
|
59
|
-
this.eciesMultiRecipient =
|
|
60
|
-
eciesMultiRecipient ?? new EciesMultiRecipient(cryptoCore);
|
|
61
|
-
this.recipientIdSize = consts.MULTIPLE.RECIPIENT_ID_SIZE;
|
|
62
|
-
this.constants = getMultiRecipientConstants(this.recipientIdSize);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Encrypts a message for multiple recipients.
|
|
67
|
-
* Wrapper around EciesMultiRecipient.encryptMultiple for backward compatibility.
|
|
68
|
-
*/
|
|
69
|
-
public async encryptMultiple(
|
|
70
|
-
recipients: IMultiRecipient[],
|
|
71
|
-
message: Buffer,
|
|
72
|
-
preamble: Buffer = Buffer.alloc(0)
|
|
73
|
-
): Promise<IMultiEncryptedMessage> {
|
|
74
|
-
// Convert IMultiRecipient to IMember-like objects
|
|
75
|
-
// EciesMultiRecipient expects IMember[] which has id: Buffer and publicKey: Buffer
|
|
76
|
-
// IMultiRecipient already matches this structure, so we can safely cast
|
|
77
|
-
const members = recipients as IMember[];
|
|
78
|
-
|
|
79
|
-
const result = this.eciesMultiRecipient.encryptMultiple(
|
|
80
|
-
members,
|
|
81
|
-
message,
|
|
82
|
-
preamble
|
|
83
|
-
);
|
|
84
|
-
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Builds the header for a message encrypted for multiple recipients.
|
|
90
|
-
* Wrapper around EciesMultiRecipient.buildECIESMultipleRecipientHeader for backward compatibility.
|
|
91
|
-
*/
|
|
92
|
-
public buildHeader(data: IMultiEncryptedMessage): Buffer {
|
|
93
|
-
return this.eciesMultiRecipient.buildECIESMultipleRecipientHeader(data);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
public async encryptChunk(
|
|
97
|
-
data: Buffer,
|
|
98
|
-
recipients: IMultiRecipient[],
|
|
99
|
-
chunkIndex: number,
|
|
100
|
-
isLast: boolean,
|
|
101
|
-
symmetricKey: Buffer,
|
|
102
|
-
senderPrivateKey?: Buffer
|
|
103
|
-
): Promise<IMultiRecipientChunk> {
|
|
104
|
-
if (chunkIndex < 0 || chunkIndex > 0xffffffff) {
|
|
105
|
-
throw new ECIESError(ECIESErrorTypeEnum.InvalidDataLength);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// Sign-then-Encrypt
|
|
109
|
-
let dataToEncrypt = data;
|
|
110
|
-
if (senderPrivateKey) {
|
|
111
|
-
const signature = this.cryptoCore.sign(senderPrivateKey, data);
|
|
112
|
-
dataToEncrypt = Buffer.concat([signature, data]);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
if (dataToEncrypt.length > this.consts.MAX_RAW_DATA_SIZE) {
|
|
116
|
-
throw new ECIESError(ECIESErrorTypeEnum.FileSizeTooLarge);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// Generate ONE ephemeral key pair for all recipients
|
|
120
|
-
const ecdh = createECDH(this.cryptoCore.config.curveName);
|
|
121
|
-
ecdh.generateKeys();
|
|
122
|
-
const ephemeralPrivateKey = ecdh.getPrivateKey();
|
|
123
|
-
let ephemeralPublicKey = ecdh.getPublicKey(null, 'compressed');
|
|
124
|
-
|
|
125
|
-
// Ensure public key has 0x04 prefix
|
|
126
|
-
if (
|
|
127
|
-
ephemeralPublicKey.length === this.cryptoCore.consts.RAW_PUBLIC_KEY_LENGTH
|
|
128
|
-
) {
|
|
129
|
-
ephemeralPublicKey = Buffer.concat([
|
|
130
|
-
Buffer.from([this.cryptoCore.consts.PUBLIC_KEY_MAGIC]),
|
|
131
|
-
ephemeralPublicKey,
|
|
132
|
-
]);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Build recipient headers
|
|
136
|
-
const recipientHeaders: Array<{
|
|
137
|
-
id: Buffer;
|
|
138
|
-
keySize: number;
|
|
139
|
-
encryptedKey: Buffer;
|
|
140
|
-
}> = [];
|
|
141
|
-
for (const recipient of recipients) {
|
|
142
|
-
// Use Recipient ID as AAD for key encryption
|
|
143
|
-
const encryptedKey = this.eciesMultiRecipient.encryptKey(
|
|
144
|
-
recipient.publicKey,
|
|
145
|
-
symmetricKey,
|
|
146
|
-
ephemeralPrivateKey,
|
|
147
|
-
recipient.id
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
recipientHeaders.push({
|
|
151
|
-
id: recipient.id,
|
|
152
|
-
keySize: encryptedKey.length,
|
|
153
|
-
encryptedKey,
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Calculate encrypted size (Data + Tag)
|
|
158
|
-
// AES-GCM tag is 16 bytes
|
|
159
|
-
const encryptedSize = dataToEncrypt.length + 16;
|
|
160
|
-
|
|
161
|
-
// Calculate total size
|
|
162
|
-
let recipientHeadersSize = 0;
|
|
163
|
-
for (const h of recipientHeaders) {
|
|
164
|
-
recipientHeadersSize +=
|
|
165
|
-
this.recipientIdSize + this.constants.KEY_SIZE_BYTES + h.keySize;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
const totalSize =
|
|
169
|
-
this.constants.HEADER_SIZE +
|
|
170
|
-
recipientHeadersSize +
|
|
171
|
-
12 + // IV
|
|
172
|
-
encryptedSize;
|
|
173
|
-
|
|
174
|
-
// Build chunk buffer
|
|
175
|
-
const chunk = Buffer.alloc(totalSize);
|
|
176
|
-
let offset = 0;
|
|
177
|
-
|
|
178
|
-
// Write header
|
|
179
|
-
chunk.writeUInt32BE(this.constants.MAGIC, offset);
|
|
180
|
-
offset += 4;
|
|
181
|
-
chunk.writeUInt16BE(this.constants.VERSION, offset);
|
|
182
|
-
offset += 2;
|
|
183
|
-
chunk.writeUInt16BE(recipients.length, offset);
|
|
184
|
-
offset += 2;
|
|
185
|
-
chunk.writeUInt32BE(chunkIndex, offset);
|
|
186
|
-
offset += 4;
|
|
187
|
-
chunk.writeUInt32BE(dataToEncrypt.length, offset); // Original Size
|
|
188
|
-
offset += 4;
|
|
189
|
-
chunk.writeUInt32BE(encryptedSize, offset);
|
|
190
|
-
offset += 4;
|
|
191
|
-
chunk.writeUInt8(isLast ? this.constants.FLAG_IS_LAST : 0, offset);
|
|
192
|
-
offset += 1;
|
|
193
|
-
|
|
194
|
-
// Write Ephemeral Public Key (33 bytes)
|
|
195
|
-
ephemeralPublicKey.copy(chunk, offset);
|
|
196
|
-
offset += 33;
|
|
197
|
-
|
|
198
|
-
// Padding to HEADER_SIZE (64 bytes)
|
|
199
|
-
offset = this.constants.HEADER_SIZE;
|
|
200
|
-
|
|
201
|
-
// Write recipient headers
|
|
202
|
-
for (const header of recipientHeaders) {
|
|
203
|
-
header.id.copy(chunk, offset);
|
|
204
|
-
offset += this.recipientIdSize;
|
|
205
|
-
chunk.writeUInt16BE(header.keySize, offset);
|
|
206
|
-
offset += this.constants.KEY_SIZE_BYTES;
|
|
207
|
-
header.encryptedKey.copy(chunk, offset);
|
|
208
|
-
offset += header.keySize;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Extract the full header (including recipient headers) to use as AAD
|
|
212
|
-
const headerBytes = chunk.subarray(0, offset);
|
|
213
|
-
|
|
214
|
-
// Encrypt data with AES-256-GCM using Header as AAD
|
|
215
|
-
const iv = randomBytes(this.consts.IV_SIZE);
|
|
216
|
-
const cipher = createCipheriv(
|
|
217
|
-
this.consts.SYMMETRIC_ALGORITHM_CONFIGURATION,
|
|
218
|
-
symmetricKey,
|
|
219
|
-
iv
|
|
220
|
-
) as AuthenticatedCipher;
|
|
221
|
-
|
|
222
|
-
cipher.setAAD(headerBytes);
|
|
223
|
-
|
|
224
|
-
const encrypted = cipher.update(dataToEncrypt);
|
|
225
|
-
const final = cipher.final();
|
|
226
|
-
const authTag = cipher.getAuthTag();
|
|
227
|
-
|
|
228
|
-
// Write IV
|
|
229
|
-
iv.copy(chunk, offset);
|
|
230
|
-
offset += 12;
|
|
231
|
-
|
|
232
|
-
// Write encrypted data
|
|
233
|
-
encrypted.copy(chunk, offset);
|
|
234
|
-
offset += encrypted.length;
|
|
235
|
-
final.copy(chunk, offset); // Should be empty usually
|
|
236
|
-
offset += final.length;
|
|
237
|
-
|
|
238
|
-
// Write auth tag
|
|
239
|
-
authTag.copy(chunk, offset);
|
|
240
|
-
|
|
241
|
-
const header: IMultiRecipientChunkHeader = {
|
|
242
|
-
chunkIndex,
|
|
243
|
-
flags: isLast ? 1 : 0,
|
|
244
|
-
recipientCount: recipients.length,
|
|
245
|
-
magic: this.constants.MAGIC,
|
|
246
|
-
version: this.constants.VERSION,
|
|
247
|
-
originalSize: dataToEncrypt.length,
|
|
248
|
-
encryptedSize,
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
return {
|
|
252
|
-
header,
|
|
253
|
-
data: chunk,
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
public async decryptChunk(
|
|
258
|
-
chunkData: Buffer,
|
|
259
|
-
recipientId: Buffer,
|
|
260
|
-
privateKey: Buffer,
|
|
261
|
-
senderPublicKey?: Buffer
|
|
262
|
-
): Promise<{ data: Buffer; header: IMultiRecipientChunkHeader }> {
|
|
263
|
-
if (chunkData.length < this.constants.HEADER_SIZE) {
|
|
264
|
-
throw new ECIESError(ECIESErrorTypeEnum.InvalidDataLength);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
let offset = 0;
|
|
268
|
-
|
|
269
|
-
// Parse header
|
|
270
|
-
const magic = chunkData.readUInt32BE(offset);
|
|
271
|
-
offset += 4;
|
|
272
|
-
if (magic !== this.constants.MAGIC) {
|
|
273
|
-
throw new ECIESError(ECIESErrorTypeEnum.InvalidDataLength); // Invalid Magic
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
const version = chunkData.readUInt16BE(offset);
|
|
277
|
-
offset += 2;
|
|
278
|
-
if (version !== this.constants.VERSION) {
|
|
279
|
-
throw new ECIESError(ECIESErrorTypeEnum.InvalidVersion);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
const recipientCount = chunkData.readUInt16BE(offset);
|
|
283
|
-
offset += 2;
|
|
284
|
-
|
|
285
|
-
const chunkIndex = chunkData.readUInt32BE(offset);
|
|
286
|
-
offset += 4;
|
|
287
|
-
const originalSize = chunkData.readUInt32BE(offset);
|
|
288
|
-
offset += 4;
|
|
289
|
-
const encryptedSize = chunkData.readUInt32BE(offset);
|
|
290
|
-
offset += 4;
|
|
291
|
-
const flags = chunkData.readUInt8(offset);
|
|
292
|
-
offset += 1;
|
|
293
|
-
|
|
294
|
-
// Read Ephemeral Public Key (33 bytes)
|
|
295
|
-
const ephemeralPublicKey = chunkData.subarray(offset, offset + 33);
|
|
296
|
-
offset += 33;
|
|
297
|
-
|
|
298
|
-
offset = this.constants.HEADER_SIZE;
|
|
299
|
-
|
|
300
|
-
// Find recipient header and decrypt symmetric key
|
|
301
|
-
let symmetricKey: Buffer | null = null;
|
|
302
|
-
let tempOffset = offset;
|
|
303
|
-
|
|
304
|
-
for (let i = 0; i < recipientCount; i++) {
|
|
305
|
-
const id = chunkData.subarray(
|
|
306
|
-
tempOffset,
|
|
307
|
-
tempOffset + this.recipientIdSize
|
|
308
|
-
);
|
|
309
|
-
tempOffset += this.recipientIdSize;
|
|
310
|
-
|
|
311
|
-
const keySize = chunkData.readUInt16BE(tempOffset);
|
|
312
|
-
tempOffset += this.constants.KEY_SIZE_BYTES;
|
|
313
|
-
|
|
314
|
-
const encryptedKey = chunkData.subarray(tempOffset, tempOffset + keySize);
|
|
315
|
-
tempOffset += keySize;
|
|
316
|
-
|
|
317
|
-
// Check if this is our recipient
|
|
318
|
-
if (id.equals(recipientId)) {
|
|
319
|
-
// Use Recipient ID as AAD for key decryption
|
|
320
|
-
symmetricKey = this.eciesMultiRecipient.decryptKey(
|
|
321
|
-
privateKey,
|
|
322
|
-
encryptedKey,
|
|
323
|
-
ephemeralPublicKey,
|
|
324
|
-
id
|
|
325
|
-
);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
if (!symmetricKey) {
|
|
330
|
-
throw new ECIESError(ECIESErrorTypeEnum.RecipientNotFound);
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Update offset to after all recipient headers
|
|
334
|
-
offset = tempOffset;
|
|
335
|
-
|
|
336
|
-
// Extract header bytes for AAD
|
|
337
|
-
const headerBytes = chunkData.subarray(0, offset);
|
|
338
|
-
|
|
339
|
-
// Read IV
|
|
340
|
-
const iv = chunkData.subarray(offset, offset + 12);
|
|
341
|
-
offset += 12;
|
|
342
|
-
|
|
343
|
-
// Read encrypted data (includes tag)
|
|
344
|
-
const encryptedWithTag = chunkData.subarray(offset, offset + encryptedSize);
|
|
345
|
-
offset += encryptedSize;
|
|
346
|
-
|
|
347
|
-
// Extract tag from end of encrypted data
|
|
348
|
-
const authTag = encryptedWithTag.subarray(encryptedWithTag.length - 16);
|
|
349
|
-
const encrypted = encryptedWithTag.subarray(
|
|
350
|
-
0,
|
|
351
|
-
encryptedWithTag.length - 16
|
|
352
|
-
);
|
|
353
|
-
|
|
354
|
-
// Decrypt with AAD
|
|
355
|
-
const decipher = createDecipheriv(
|
|
356
|
-
this.consts.SYMMETRIC_ALGORITHM_CONFIGURATION,
|
|
357
|
-
symmetricKey,
|
|
358
|
-
iv
|
|
359
|
-
) as AuthenticatedDecipher;
|
|
360
|
-
|
|
361
|
-
decipher.setAuthTag(authTag);
|
|
362
|
-
decipher.setAAD(headerBytes);
|
|
363
|
-
|
|
364
|
-
const decrypted = decipher.update(encrypted);
|
|
365
|
-
const final = decipher.final();
|
|
366
|
-
const decryptedMessage = Buffer.concat([decrypted, final]);
|
|
367
|
-
|
|
368
|
-
// Verify signature if sender public key provided
|
|
369
|
-
let finalData = decryptedMessage;
|
|
370
|
-
if (senderPublicKey) {
|
|
371
|
-
if (decryptedMessage.length < 64) {
|
|
372
|
-
throw new ECIESError(ECIESErrorTypeEnum.InvalidSignature);
|
|
373
|
-
}
|
|
374
|
-
const signature = decryptedMessage.subarray(0, 64);
|
|
375
|
-
const message = decryptedMessage.subarray(64);
|
|
376
|
-
|
|
377
|
-
const isValid = this.cryptoCore.verify(
|
|
378
|
-
senderPublicKey,
|
|
379
|
-
message,
|
|
380
|
-
signature
|
|
381
|
-
);
|
|
382
|
-
if (!isValid) {
|
|
383
|
-
throw new ECIESError(ECIESErrorTypeEnum.InvalidSignature);
|
|
384
|
-
}
|
|
385
|
-
finalData = message;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
return {
|
|
389
|
-
data: finalData,
|
|
390
|
-
header: {
|
|
391
|
-
chunkIndex,
|
|
392
|
-
flags,
|
|
393
|
-
recipientCount,
|
|
394
|
-
magic,
|
|
395
|
-
version,
|
|
396
|
-
originalSize,
|
|
397
|
-
encryptedSize,
|
|
398
|
-
},
|
|
399
|
-
};
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
/**
|
|
403
|
-
* Decrypts a message encrypted with multiple ECIE for a recipient.
|
|
404
|
-
* Wrapper around EciesMultiRecipient.decryptMultipleECIEForRecipient for backward compatibility.
|
|
405
|
-
*/
|
|
406
|
-
public async decryptMultipleForRecipient(
|
|
407
|
-
encryptedData: IMultiEncryptedMessage,
|
|
408
|
-
recipientId: Buffer,
|
|
409
|
-
privateKey: Buffer,
|
|
410
|
-
senderPublicKey?: Buffer
|
|
411
|
-
): Promise<Buffer> {
|
|
412
|
-
// Create a mock IMember with minimal required properties
|
|
413
|
-
const member = {
|
|
414
|
-
id: recipientId,
|
|
415
|
-
privateKey: { value: privateKey },
|
|
416
|
-
} as IMember;
|
|
417
|
-
|
|
418
|
-
return this.eciesMultiRecipient.decryptMultipleECIEForRecipient(
|
|
419
|
-
encryptedData,
|
|
420
|
-
member,
|
|
421
|
-
senderPublicKey
|
|
422
|
-
);
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
/**
|
|
426
|
-
* Parses a multi-encrypted header.
|
|
427
|
-
* Wrapper around EciesMultiRecipient.parseMultiEncryptedHeader for backward compatibility.
|
|
428
|
-
*/
|
|
429
|
-
public parseHeader(
|
|
430
|
-
data: Buffer
|
|
431
|
-
): Omit<IMultiEncryptedMessage, 'encryptedMessage'> & { headerSize: number } {
|
|
432
|
-
const result = this.eciesMultiRecipient.parseMultiEncryptedHeader(data);
|
|
433
|
-
return result;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
/**
|
|
437
|
-
* Parses a multi-encrypted buffer into its components.
|
|
438
|
-
* Wrapper around EciesMultiRecipient.parseMultiEncryptedBuffer for backward compatibility.
|
|
439
|
-
*/
|
|
440
|
-
public parseMessage(data: Buffer): IMultiEncryptedMessage {
|
|
441
|
-
const result = this.eciesMultiRecipient.parseMultiEncryptedBuffer(data);
|
|
442
|
-
return result;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* Encrypts a symmetric key for a recipient.
|
|
447
|
-
* Generates a new ephemeral key pair.
|
|
448
|
-
* Returns [EphemeralPublicKey][EncryptedKey]
|
|
449
|
-
*/
|
|
450
|
-
public async encryptKey(
|
|
451
|
-
recipientPublicKey: Buffer,
|
|
452
|
-
symmetricKey: Buffer
|
|
453
|
-
): Promise<Buffer> {
|
|
454
|
-
// Generate ephemeral key pair
|
|
455
|
-
const ecdh = createECDH(this.cryptoCore.config.curveName);
|
|
456
|
-
ecdh.generateKeys();
|
|
457
|
-
const ephemeralPrivateKey = ecdh.getPrivateKey();
|
|
458
|
-
let ephemeralPublicKey = ecdh.getPublicKey(null, 'compressed');
|
|
459
|
-
|
|
460
|
-
// Ensure public key has 0x04 prefix
|
|
461
|
-
if (
|
|
462
|
-
ephemeralPublicKey.length === this.cryptoCore.consts.RAW_PUBLIC_KEY_LENGTH
|
|
463
|
-
) {
|
|
464
|
-
ephemeralPublicKey = Buffer.concat([
|
|
465
|
-
Buffer.from([this.cryptoCore.consts.PUBLIC_KEY_MAGIC]),
|
|
466
|
-
ephemeralPublicKey,
|
|
467
|
-
]);
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
const encryptedKey = this.eciesMultiRecipient.encryptKey(
|
|
471
|
-
recipientPublicKey,
|
|
472
|
-
symmetricKey,
|
|
473
|
-
ephemeralPrivateKey,
|
|
474
|
-
Buffer.alloc(0) // No AAD for simple key encryption? Or use recipient ID?
|
|
475
|
-
);
|
|
476
|
-
|
|
477
|
-
return Buffer.concat([ephemeralPublicKey, encryptedKey]);
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
/**
|
|
481
|
-
* Decrypts a symmetric key.
|
|
482
|
-
* Expects [EphemeralPublicKey][EncryptedKey]
|
|
483
|
-
*/
|
|
484
|
-
public async decryptKey(
|
|
485
|
-
privateKey: Buffer,
|
|
486
|
-
encryptedData: Buffer
|
|
487
|
-
): Promise<Buffer> {
|
|
488
|
-
// Extract ephemeral public key
|
|
489
|
-
const pubKeyLength = this.cryptoCore.consts.PUBLIC_KEY_LENGTH; // 33
|
|
490
|
-
|
|
491
|
-
const ephemeralPublicKey = encryptedData.subarray(0, 33);
|
|
492
|
-
const encryptedKey = encryptedData.subarray(33);
|
|
493
|
-
|
|
494
|
-
return this.eciesMultiRecipient.decryptKey(
|
|
495
|
-
privateKey,
|
|
496
|
-
encryptedKey,
|
|
497
|
-
ephemeralPublicKey,
|
|
498
|
-
Buffer.alloc(0)
|
|
499
|
-
);
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
public getHeaderSize(recipientCount: number): number {
|
|
503
|
-
return this.eciesMultiRecipient.getHeaderSize(recipientCount);
|
|
504
|
-
}
|
|
505
|
-
}
|