@digitaldefiance/node-ecies-lib 1.1.22 → 1.1.23
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/README.md +4 -0
- package/package.json +6 -5
- package/src/constants.d.ts +32 -0
- package/src/constants.d.ts.map +1 -0
- package/src/constants.js +137 -0
- package/src/constants.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 +54 -0
- package/src/i18n/ecies-i18n-factory.d.ts.map +1 -0
- package/src/i18n/ecies-i18n-factory.js +333 -0
- package/src/i18n/ecies-i18n-factory.js.map +1 -0
- package/src/i18n/{index.ts → index.d.ts} +1 -0
- package/src/i18n/index.d.ts.map +1 -0
- package/src/i18n/index.js +5 -0
- package/src/i18n/index.js.map +1 -0
- package/src/{index.ts → index.d.ts} +1 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +11 -0
- package/src/index.js.map +1 -0
- package/src/interfaces/authenticated-cipher.d.ts +10 -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 +9 -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/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 +43 -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/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 +21 -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-operational.d.ts +36 -0
- package/src/interfaces/member-operational.d.ts.map +1 -0
- package/src/interfaces/member-operational.js +3 -0
- package/src/interfaces/member-operational.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/{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 +24 -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/{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/{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/member.d.ts +74 -0
- package/src/member.d.ts.map +1 -0
- package/src/member.js +273 -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 +115 -0
- package/src/services/aes-gcm.js.map +1 -0
- package/src/services/ecies/crypto-core.d.ts +83 -0
- package/src/services/ecies/crypto-core.d.ts.map +1 -0
- package/src/services/ecies/crypto-core.js +166 -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 +82 -0
- package/src/services/ecies/multi-recipient.d.ts.map +1 -0
- package/src/services/ecies/multi-recipient.js +360 -0
- package/src/services/ecies/multi-recipient.js.map +1 -0
- package/src/services/ecies/service.d.ts +70 -0
- package/src/services/ecies/service.d.ts.map +1 -0
- package/src/services/ecies/service.js +167 -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 +85 -0
- package/src/services/ecies/single-recipient.d.ts.map +1 -0
- package/src/services/ecies/single-recipient.js +399 -0
- package/src/services/ecies/single-recipient.js.map +1 -0
- package/src/services/ecies/utilities.d.ts +22 -0
- package/src/services/ecies/utilities.d.ts.map +1 -0
- package/src/services/ecies/utilities.js +75 -0
- package/src/services/ecies/utilities.js.map +1 -0
- package/src/services/index.d.ts +4 -0
- package/src/services/index.d.ts.map +1 -0
- package/src/services/index.js +7 -0
- package/src/services/index.js.map +1 -0
- package/src/services/pbkdf2.d.ts +106 -0
- package/src/services/pbkdf2.d.ts.map +1 -0
- package/src/services/pbkdf2.js +195 -0
- package/src/services/pbkdf2.js.map +1 -0
- package/src/{types.ts → types.d.ts} +9 -26
- package/src/types.d.ts.map +1 -0
- package/src/types.js +3 -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/constants.ts +0 -182
- package/src/enumerations/index.ts +0 -1
- package/src/enumerations/pbkdf2-profile.ts +0 -8
- package/src/i18n/ecies-i18n-factory.ts +0 -435
- package/src/interfaces/authenticated-cipher.ts +0 -9
- package/src/interfaces/authenticated-decipher.ts +0 -8
- package/src/interfaces/checksum-config.ts +0 -4
- package/src/interfaces/checksum-consts.ts +0 -13
- package/src/interfaces/constants.ts +0 -43
- package/src/interfaces/ecies-consts.ts +0 -99
- 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-operational.ts +0 -52
- package/src/interfaces/multi-encrypted-parsed-header.ts +0 -24
- 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/wrapped-key-consts.ts +0 -6
- package/src/member.ts +0 -463
- package/src/services/aes-gcm.ts +0 -160
- package/src/services/ecies/crypto-core.ts +0 -213
- package/src/services/ecies/file.ts +0 -174
- package/src/services/ecies/multi-recipient.ts +0 -583
- package/src/services/ecies/service.ts +0 -351
- package/src/services/ecies/signature.ts +0 -91
- package/src/services/ecies/single-recipient.ts +0 -676
- package/src/services/ecies/utilities.ts +0 -111
- package/src/services/index.ts +0 -3
- package/src/services/pbkdf2.ts +0 -307
- package/src/utils.ts +0 -104
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EciesCryptoCore = void 0;
|
|
4
|
+
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
5
|
+
const wallet_1 = require("@ethereumjs/wallet");
|
|
6
|
+
const bip39_1 = require("bip39");
|
|
7
|
+
const secp256k1_js_1 = require("ethereum-cryptography/secp256k1.js");
|
|
8
|
+
const ecies_i18n_factory_1 = require("../../i18n/ecies-i18n-factory");
|
|
9
|
+
const constants_1 = require("../../constants");
|
|
10
|
+
/**
|
|
11
|
+
* Core encryption and decryption functions for ECIES
|
|
12
|
+
* Includes coverage for simple and single modes, does not cover multiple mode which is in a separate module
|
|
13
|
+
*/
|
|
14
|
+
class EciesCryptoCore {
|
|
15
|
+
_config;
|
|
16
|
+
_consts;
|
|
17
|
+
get config() {
|
|
18
|
+
return this._config;
|
|
19
|
+
}
|
|
20
|
+
get consts() {
|
|
21
|
+
return this._consts;
|
|
22
|
+
}
|
|
23
|
+
constructor(config, eciesParams = constants_1.Constants.ECIES) {
|
|
24
|
+
this._config = config;
|
|
25
|
+
this._consts = eciesParams;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validates and normalizes a public key for ECIES operations
|
|
29
|
+
* @param publicKey The public key to normalize
|
|
30
|
+
* @returns Properly formatted public key
|
|
31
|
+
*/
|
|
32
|
+
normalizePublicKey(publicKey) {
|
|
33
|
+
if (!publicKey) {
|
|
34
|
+
const engine = (0, ecies_i18n_factory_1.createEciesTranslationEngine)();
|
|
35
|
+
const pluginEngine = (0, ecies_i18n_factory_1.getEciesPluginI18nEngine)();
|
|
36
|
+
throw new ecies_lib_1.ECIESError(ecies_lib_1.ECIESErrorTypeEnum.InvalidEphemeralPublicKey, engine, undefined, undefined, {
|
|
37
|
+
error: pluginEngine.translate(ecies_i18n_factory_1.NodeEciesComponentId, ecies_i18n_factory_1.NodeEciesStringKey.Error_InvalidPublicKey),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const keyLength = publicKey.length;
|
|
41
|
+
// Already in correct format (65 bytes with 0x04 prefix)
|
|
42
|
+
if (keyLength === this._consts.PUBLIC_KEY_LENGTH &&
|
|
43
|
+
publicKey[0] === this._consts.PUBLIC_KEY_MAGIC) {
|
|
44
|
+
return publicKey;
|
|
45
|
+
}
|
|
46
|
+
// Raw key without prefix (64 bytes) - add the 0x04 prefix
|
|
47
|
+
if (keyLength === this._consts.RAW_PUBLIC_KEY_LENGTH) {
|
|
48
|
+
return Buffer.concat([Buffer.from([this._consts.PUBLIC_KEY_MAGIC]), publicKey]);
|
|
49
|
+
}
|
|
50
|
+
const engine = (0, ecies_i18n_factory_1.createEciesTranslationEngine)();
|
|
51
|
+
const pluginEngine = (0, ecies_i18n_factory_1.getEciesPluginI18nEngine)();
|
|
52
|
+
// Invalid format
|
|
53
|
+
throw new ecies_lib_1.ECIESError(ecies_lib_1.ECIESErrorTypeEnum.InvalidEphemeralPublicKey, engine, undefined, undefined, {
|
|
54
|
+
error: pluginEngine.translate(ecies_i18n_factory_1.NodeEciesComponentId, ecies_i18n_factory_1.NodeEciesStringKey.Error_InvalidPublicKeyFormat),
|
|
55
|
+
keyLength: String(keyLength),
|
|
56
|
+
expectedLength64: String(this._consts.RAW_PUBLIC_KEY_LENGTH),
|
|
57
|
+
expectedLength65: String(this._consts.PUBLIC_KEY_LENGTH),
|
|
58
|
+
keyPrefix: keyLength > 0 ? String(publicKey[0]) : 'N/A',
|
|
59
|
+
expectedPrefix: String(this._consts.PUBLIC_KEY_MAGIC),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate a new mnemonic
|
|
64
|
+
* @returns {SecureString} The new mnemonic
|
|
65
|
+
*/
|
|
66
|
+
generateNewMnemonic() {
|
|
67
|
+
return new ecies_lib_1.SecureString((0, bip39_1.generateMnemonic)(this._config.mnemonicStrength));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Generate a new wallet from a seed
|
|
71
|
+
* @param seed {Buffer} The seed to generate the wallet from
|
|
72
|
+
* @returns {Wallet} The new wallet
|
|
73
|
+
*/
|
|
74
|
+
walletFromSeed(seed) {
|
|
75
|
+
const hdWallet = wallet_1.hdkey.EthereumHDKey.fromMasterSeed(seed);
|
|
76
|
+
return hdWallet
|
|
77
|
+
.derivePath(this._config.primaryKeyDerivationPath)
|
|
78
|
+
.getWallet();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Generate a new wallet and seed from a mnemonic
|
|
82
|
+
* @param mnemonic {SecureString} The mnemonic to generate the wallet and seed from
|
|
83
|
+
* @returns {IWalletSeed} The new wallet and seed
|
|
84
|
+
*/
|
|
85
|
+
walletAndSeedFromMnemonic(mnemonic) {
|
|
86
|
+
if (!mnemonic.value || !(0, bip39_1.validateMnemonic)(mnemonic.value)) {
|
|
87
|
+
throw new ecies_lib_1.ECIESError(ecies_lib_1.ECIESErrorTypeEnum.InvalidMnemonic, (0, ecies_i18n_factory_1.createEciesTranslationEngine)());
|
|
88
|
+
}
|
|
89
|
+
const seed = (0, bip39_1.mnemonicToSeedSync)(mnemonic.value);
|
|
90
|
+
const wallet = this.walletFromSeed(seed);
|
|
91
|
+
return {
|
|
92
|
+
seed: new ecies_lib_1.SecureBuffer(seed),
|
|
93
|
+
wallet,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate a new wallet and seed from a mnemonic
|
|
98
|
+
* @param wallet {Wallet} The wallet to generate the key pair from
|
|
99
|
+
* @returns {ISimpleKeyPairBuffer} The new key pair
|
|
100
|
+
*/
|
|
101
|
+
walletToSimpleKeyPairBuffer(wallet) {
|
|
102
|
+
const privateKey = Buffer.from(wallet.getPrivateKey());
|
|
103
|
+
const buf04 = new Uint8Array(1);
|
|
104
|
+
buf04[0] = this._consts.PUBLIC_KEY_MAGIC;
|
|
105
|
+
const publicKey = Buffer.concat([buf04, wallet.getPublicKey()]);
|
|
106
|
+
return {
|
|
107
|
+
privateKey,
|
|
108
|
+
publicKey,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a simple key pair from a seed
|
|
113
|
+
* @param seed {Buffer} The seed to generate the key pair from
|
|
114
|
+
* @returns {ISimpleKeyPairBuffer} The new key pair
|
|
115
|
+
*/
|
|
116
|
+
seedToSimpleKeyPairBuffer(seed) {
|
|
117
|
+
const wallet = this.walletFromSeed(seed);
|
|
118
|
+
return this.walletToSimpleKeyPairBuffer(wallet);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Create a simple key pair from a mnemonic
|
|
122
|
+
* @param mnemonic {SecureString} The mnemonic to generate the key pair from
|
|
123
|
+
* @returns {ISimpleKeyPairBuffer} The new key pair
|
|
124
|
+
*/
|
|
125
|
+
mnemonicToSimpleKeyPairBuffer(mnemonic) {
|
|
126
|
+
const { seed } = this.walletAndSeedFromMnemonic(mnemonic);
|
|
127
|
+
return this.seedToSimpleKeyPairBuffer(Buffer.from(seed.value));
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Generate a random private key
|
|
131
|
+
* @returns {Buffer} The new private key
|
|
132
|
+
*/
|
|
133
|
+
generatePrivateKey() {
|
|
134
|
+
return Buffer.from(secp256k1_js_1.secp256k1.utils.randomPrivateKey());
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get public key from private key
|
|
138
|
+
* @param privateKey {Buffer} The private key
|
|
139
|
+
* @returns {Buffer} The public key
|
|
140
|
+
*/
|
|
141
|
+
getPublicKey(privateKey) {
|
|
142
|
+
const publicKey = secp256k1_js_1.secp256k1.getPublicKey(privateKey, false);
|
|
143
|
+
return Buffer.from(publicKey);
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Generate ephemeral key pair for ECIES
|
|
147
|
+
* @returns {Promise<ISimpleKeyPairBuffer>} The key pair
|
|
148
|
+
*/
|
|
149
|
+
async generateEphemeralKeyPair() {
|
|
150
|
+
const privateKey = this.generatePrivateKey();
|
|
151
|
+
const publicKey = this.getPublicKey(privateKey);
|
|
152
|
+
return { privateKey, publicKey };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Compute ECDH shared secret
|
|
156
|
+
* @param privateKey {Buffer} The private key
|
|
157
|
+
* @param publicKey {Buffer} The public key
|
|
158
|
+
* @returns {Buffer} The shared secret
|
|
159
|
+
*/
|
|
160
|
+
computeSharedSecret(privateKey, publicKey) {
|
|
161
|
+
const sharedSecret = secp256k1_js_1.secp256k1.getSharedSecret(privateKey, publicKey, true);
|
|
162
|
+
return Buffer.from(sharedSecret.slice(1)); // Remove the 0x02/0x03 prefix
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.EciesCryptoCore = EciesCryptoCore;
|
|
166
|
+
//# sourceMappingURL=crypto-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto-core.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/services/ecies/crypto-core.ts"],"names":[],"mappings":";;;AAAA,0DAOoC;AACpC,+CAAmD;AACnD,iCAA+E;AAC/E,qEAA+D;AAC/D,sEAAiJ;AAGjJ,+CAA4C;AAE5C;;;GAGG;AACH,MAAa,eAAe;IACP,OAAO,CAAe;IACtB,OAAO,CAAkB;IAC5C,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY,MAAoB,EAAE,cAA+B,qBAAS,CAAC,KAAK;QAC9E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,SAAiB;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAA,iDAA4B,GAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,IAAA,6CAAwB,GAAE,CAAC;YAChD,MAAM,IAAI,sBAAU,CAClB,8BAAkB,CAAC,yBAAyB,EAC5C,MAAM,EACN,SAAS,EACT,SAAS,EACT;gBACE,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,yCAAoB,EAAE,uCAAkB,CAAC,sBAAsB,CAAC;aAC/F,CACF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;QAEnC,wDAAwD;QACxD,IACE,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,iBAAiB;YAC5C,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAC9C,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,0DAA0D;QAC1D,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,iDAA4B,GAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,IAAA,6CAAwB,GAAE,CAAC;QAChD,iBAAiB;QACjB,MAAM,IAAI,sBAAU,CAClB,8BAAkB,CAAC,yBAAyB,EAC5C,MAAM,EACN,SAAS,EACT,SAAS,EACT;YACE,KAAK,EAAE,YAAY,CAAC,SAAS,CAAC,yCAAoB,EAAE,uCAAkB,CAAC,4BAA4B,CAAC;YACpG,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;YAC5B,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAC5D,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACxD,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;YACvD,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;SACtD,CACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,mBAAmB;QACxB,OAAO,IAAI,wBAAY,CAAC,IAAA,wBAAgB,EAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,IAAY;QAChC,MAAM,QAAQ,GAAG,cAAK,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,QAAQ;aACZ,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC;aACjD,SAAS,EAAE,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,QAAsB;QACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,IAAA,wBAAgB,EAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,sBAAU,CAClB,8BAAkB,CAAC,eAAe,EAClC,IAAA,iDAA4B,GAAE,CAC/B,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,IAAA,0BAAkB,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzC,OAAO;YACL,IAAI,EAAE,IAAI,wBAAY,CAAC,IAAI,CAAC;YAC5B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,2BAA2B,CAAC,MAAc;QAC/C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEhE,OAAO;YACL,UAAU;YACV,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,IAAY;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACI,6BAA6B,CAClC,QAAsB;QAEtB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,wBAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,UAAkB;QACpC,MAAM,SAAS,GAAG,wBAAS,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,wBAAwB;QAInC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACI,mBAAmB,CAAC,UAAkB,EAAE,SAAiB;QAC9D,MAAM,YAAY,GAAG,wBAAS,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;IAC3E,CAAC;CACF;AAhMD,0CAgMC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ECIESService } from './service';
|
|
2
|
+
interface ChunkedFileHeader {
|
|
3
|
+
version: number;
|
|
4
|
+
chunkSize: number;
|
|
5
|
+
totalChunks: number;
|
|
6
|
+
originalSize: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class EciesFileService {
|
|
9
|
+
protected readonly eciesService: ECIESService;
|
|
10
|
+
protected readonly userPrivateKey: Buffer;
|
|
11
|
+
protected readonly config: {
|
|
12
|
+
chunkSize: number;
|
|
13
|
+
headerSize: number;
|
|
14
|
+
};
|
|
15
|
+
constructor(eciesService: ECIESService, userPrivateKey: Buffer, config?: {
|
|
16
|
+
chunkSize: number;
|
|
17
|
+
headerSize: number;
|
|
18
|
+
});
|
|
19
|
+
decryptFile(encryptedData: Buffer): Buffer;
|
|
20
|
+
encryptFileFromPath(filePath: string, recipientPublicKey: Buffer): Buffer;
|
|
21
|
+
decryptFileToPath(encryptedData: Buffer, outputPath: string): void;
|
|
22
|
+
protected serializeHeader(header: ChunkedFileHeader): Buffer;
|
|
23
|
+
protected deserializeHeader(data: Buffer): ChunkedFileHeader;
|
|
24
|
+
protected parseEncryptedFile(encryptedData: Buffer): {
|
|
25
|
+
header: ChunkedFileHeader;
|
|
26
|
+
chunks: Buffer[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/services/ecies/file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,gBAAgB;IAC3B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;gBAGnE,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,MAAM,EACtB,MAAM,GAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAG9C;IAOH,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAuB1C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM;IA4CzE,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAwBlE,SAAS,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAS5D,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB;IAS5D,SAAS,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG;QACnD,MAAM,EAAE,iBAAiB,CAAC;QAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;CAiCF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EciesFileService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const fs = tslib_1.__importStar(require("fs"));
|
|
6
|
+
class EciesFileService {
|
|
7
|
+
eciesService;
|
|
8
|
+
userPrivateKey;
|
|
9
|
+
config;
|
|
10
|
+
constructor(eciesService, userPrivateKey, config = {
|
|
11
|
+
chunkSize: 1024 * 1024, // 1MB chunks
|
|
12
|
+
headerSize: 20,
|
|
13
|
+
}) {
|
|
14
|
+
this.eciesService = eciesService;
|
|
15
|
+
this.userPrivateKey = userPrivateKey;
|
|
16
|
+
this.config = Object.freeze(config);
|
|
17
|
+
}
|
|
18
|
+
decryptFile(encryptedData) {
|
|
19
|
+
const { header, chunks } = this.parseEncryptedFile(encryptedData);
|
|
20
|
+
const decryptedChunks = [];
|
|
21
|
+
for (const chunk of chunks) {
|
|
22
|
+
const decrypted = this.eciesService.decryptSimpleOrSingleWithHeader(false, this.userPrivateKey, chunk);
|
|
23
|
+
decryptedChunks.push(decrypted);
|
|
24
|
+
}
|
|
25
|
+
const result = Buffer.alloc(header.originalSize);
|
|
26
|
+
let offset = 0;
|
|
27
|
+
for (const chunk of decryptedChunks) {
|
|
28
|
+
const copyLength = Math.min(chunk.length, header.originalSize - offset);
|
|
29
|
+
chunk.copy(result, offset, 0, copyLength);
|
|
30
|
+
offset += copyLength;
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
encryptFileFromPath(filePath, recipientPublicKey) {
|
|
35
|
+
const stats = fs.statSync(filePath);
|
|
36
|
+
const totalChunks = Math.ceil(stats.size / this.config.chunkSize);
|
|
37
|
+
const header = {
|
|
38
|
+
version: 1,
|
|
39
|
+
chunkSize: this.config.chunkSize,
|
|
40
|
+
totalChunks,
|
|
41
|
+
originalSize: stats.size,
|
|
42
|
+
};
|
|
43
|
+
const headerBytes = this.serializeHeader(header);
|
|
44
|
+
const encryptedHeader = this.eciesService.encryptSimpleOrSingle(false, recipientPublicKey, headerBytes);
|
|
45
|
+
const chunks = [encryptedHeader];
|
|
46
|
+
const fd = fs.openSync(filePath, 'r');
|
|
47
|
+
try {
|
|
48
|
+
for (let i = 0; i < totalChunks; i++) {
|
|
49
|
+
const offset = i * this.config.chunkSize;
|
|
50
|
+
const chunkSize = Math.min(this.config.chunkSize, stats.size - offset);
|
|
51
|
+
const chunkData = Buffer.alloc(chunkSize);
|
|
52
|
+
fs.readSync(fd, chunkData, 0, chunkSize, offset);
|
|
53
|
+
const encryptedChunk = this.eciesService.encryptSimpleOrSingle(false, recipientPublicKey, chunkData);
|
|
54
|
+
chunks.push(encryptedChunk);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
fs.closeSync(fd);
|
|
59
|
+
}
|
|
60
|
+
return Buffer.concat(chunks);
|
|
61
|
+
}
|
|
62
|
+
decryptFileToPath(encryptedData, outputPath) {
|
|
63
|
+
const { header, chunks } = this.parseEncryptedFile(encryptedData);
|
|
64
|
+
const fd = fs.openSync(outputPath, 'w');
|
|
65
|
+
let offset = 0;
|
|
66
|
+
try {
|
|
67
|
+
for (const chunk of chunks) {
|
|
68
|
+
const decrypted = this.eciesService.decryptSimpleOrSingleWithHeader(false, this.userPrivateKey, chunk);
|
|
69
|
+
const writeLength = Math.min(decrypted.length, header.originalSize - offset);
|
|
70
|
+
fs.writeSync(fd, decrypted, 0, writeLength, offset);
|
|
71
|
+
offset += writeLength;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
fs.closeSync(fd);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
serializeHeader(header) {
|
|
79
|
+
const buffer = Buffer.alloc(this.config.headerSize);
|
|
80
|
+
buffer.writeUInt32BE(header.version, 0);
|
|
81
|
+
buffer.writeUInt32BE(header.chunkSize, 4);
|
|
82
|
+
buffer.writeUInt32BE(header.totalChunks, 8);
|
|
83
|
+
buffer.writeUInt32BE(header.originalSize, 12);
|
|
84
|
+
return buffer;
|
|
85
|
+
}
|
|
86
|
+
deserializeHeader(data) {
|
|
87
|
+
return {
|
|
88
|
+
version: data.readUInt32BE(0),
|
|
89
|
+
chunkSize: data.readUInt32BE(4),
|
|
90
|
+
totalChunks: data.readUInt32BE(8),
|
|
91
|
+
originalSize: data.readUInt32BE(12),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
parseEncryptedFile(encryptedData) {
|
|
95
|
+
const headerLength = this.eciesService.computeEncryptedLengthFromDataLength(this.config.headerSize, 'single');
|
|
96
|
+
const encryptedHeader = encryptedData.subarray(0, headerLength);
|
|
97
|
+
const decryptedHeaderBytes = this.eciesService.decryptSimpleOrSingleWithHeader(false, this.userPrivateKey, encryptedHeader);
|
|
98
|
+
const header = this.deserializeHeader(decryptedHeaderBytes);
|
|
99
|
+
const chunks = [];
|
|
100
|
+
let offset = headerLength;
|
|
101
|
+
for (let i = 0; i < header.totalChunks; i++) {
|
|
102
|
+
const chunkLength = this.eciesService.computeEncryptedLengthFromDataLength(i === header.totalChunks - 1
|
|
103
|
+
? header.originalSize % header.chunkSize || header.chunkSize
|
|
104
|
+
: header.chunkSize, 'single');
|
|
105
|
+
chunks.push(encryptedData.subarray(offset, offset + chunkLength));
|
|
106
|
+
offset += chunkLength;
|
|
107
|
+
}
|
|
108
|
+
return { header, chunks };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.EciesFileService = EciesFileService;
|
|
112
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/services/ecies/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/services/ecies/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./crypto-core"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./file"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./multi-recipient"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./service"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./signature"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./single-recipient"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./utilities"), exports);
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/services/ecies/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,iDAAuB;AACvB,4DAAkC;AAClC,oDAA0B;AAC1B,sDAA4B;AAC5B,6DAAmC;AACnC,sDAA4B"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { PluginI18nEngine, CoreLanguageCode } from '@digitaldefiance/i18n-lib';
|
|
2
|
+
import { IMultiEncryptedMessage } from '../../interfaces/multi-encrypted-message';
|
|
3
|
+
import { IMultiEncryptedParsedHeader } from '../../interfaces/multi-encrypted-parsed-header';
|
|
4
|
+
import { Member } from '../../member';
|
|
5
|
+
import { EciesCryptoCore } from './crypto-core';
|
|
6
|
+
import { EciesSingleRecipientCore } from './single-recipient';
|
|
7
|
+
/**
|
|
8
|
+
* Multiple recipient encryption/decryption functions for ECIES
|
|
9
|
+
*/
|
|
10
|
+
export declare class EciesMultiRecipient {
|
|
11
|
+
protected readonly cryptoCore: EciesCryptoCore;
|
|
12
|
+
protected readonly singleRecipientCore: EciesSingleRecipientCore;
|
|
13
|
+
protected readonly engine: PluginI18nEngine<CoreLanguageCode>;
|
|
14
|
+
constructor(cryptoCore: EciesCryptoCore, engine?: PluginI18nEngine<CoreLanguageCode>);
|
|
15
|
+
/**
|
|
16
|
+
* Get the size of the header for a given encryption type
|
|
17
|
+
* @param encryptionType The encryption type (single, simple, etc.)
|
|
18
|
+
* @param options Optional encryption options
|
|
19
|
+
* @param options.recipientCount The number of recipients
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
getHeaderSize(recipientCount: number): number;
|
|
23
|
+
/**
|
|
24
|
+
* Encrypt a message symmetric key with a public key
|
|
25
|
+
* @param receiverPublicKey The public key of the receiver
|
|
26
|
+
* @param messageSymmetricKey The message to encrypt
|
|
27
|
+
* @returns The encrypted message
|
|
28
|
+
*/
|
|
29
|
+
encryptKey(receiverPublicKey: Buffer, messageSymmetricKey: Buffer): Buffer;
|
|
30
|
+
/**
|
|
31
|
+
* Decrypts symmetric key encrypted with ECIES using a header
|
|
32
|
+
* @param privateKey The private key to decrypt the data
|
|
33
|
+
* @param encryptedKey The data to decrypt
|
|
34
|
+
* @returns The decrypted data buffer
|
|
35
|
+
*/
|
|
36
|
+
decryptKey(privateKey: Buffer, encryptedKey: Buffer): Buffer;
|
|
37
|
+
/**
|
|
38
|
+
* Encrypts a message for multiple recipients.
|
|
39
|
+
* @param recipients The recipients to encrypt the message for.
|
|
40
|
+
* @param message The message to encrypt.
|
|
41
|
+
* @param preamble Optional preamble to include in the encrypted message.
|
|
42
|
+
* @returns The encrypted message.
|
|
43
|
+
* @throws EciesError if the number of recipients is greater than 65535.
|
|
44
|
+
*/
|
|
45
|
+
encryptMultiple(recipients: Member[], message: Buffer, preamble?: Buffer): IMultiEncryptedMessage;
|
|
46
|
+
/**
|
|
47
|
+
* Decrypts a message encrypted with multiple ECIE for a recipient.
|
|
48
|
+
* @param encryptedData The encrypted data.
|
|
49
|
+
* @param recipient The recipient.
|
|
50
|
+
* @returns The decrypted message.
|
|
51
|
+
*/
|
|
52
|
+
decryptMultipleECIEForRecipient(encryptedData: IMultiEncryptedMessage, recipient: Member): Buffer;
|
|
53
|
+
/**
|
|
54
|
+
* Calculate the overhead for a message encrypted for multiple recipients
|
|
55
|
+
* @param recipientCount number of recipients
|
|
56
|
+
* @param includeMessageOverhead whether to include the overhead for the encrypted message
|
|
57
|
+
* @param encryptedKeys optional array of encrypted keys to calculate actual size
|
|
58
|
+
* @returns the overhead size in bytes
|
|
59
|
+
*/
|
|
60
|
+
calculateECIESMultipleRecipientOverhead(recipientCount: number, includeMessageOverhead: boolean, encryptedKeys?: Buffer[]): number;
|
|
61
|
+
/**
|
|
62
|
+
* Builds the header for a message encrypted for multiple recipients
|
|
63
|
+
* @param data The encrypted message data including recipients and encrypted keys
|
|
64
|
+
* @returns The header buffer for the message
|
|
65
|
+
* @throws EciesError if the number of recipients is greater than the maximum allowed
|
|
66
|
+
* @throws EciesError if the number of encrypted keys does not match the number of recipients
|
|
67
|
+
*/
|
|
68
|
+
buildECIESMultipleRecipientHeader(data: IMultiEncryptedMessage): Buffer;
|
|
69
|
+
/**
|
|
70
|
+
* Parses a multi-encrypted header.
|
|
71
|
+
* @param data - The data to parse.
|
|
72
|
+
* @returns The parsed header.
|
|
73
|
+
*/
|
|
74
|
+
parseMultiEncryptedHeader(data: Buffer): IMultiEncryptedParsedHeader;
|
|
75
|
+
/**
|
|
76
|
+
* Parses a multi-encrypted buffer into its components.
|
|
77
|
+
* @param data - The multi-encrypted buffer to parse.
|
|
78
|
+
* @returns The parsed multi-encrypted buffer.
|
|
79
|
+
*/
|
|
80
|
+
parseMultiEncryptedBuffer(data: Buffer): IMultiEncryptedMessage;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=multi-recipient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-recipient.d.ts","sourceRoot":"","sources":["../../../../../../packages/digitaldefiance-node-ecies-lib/src/services/ecies/multi-recipient.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAa/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gDAAgD,CAAC;AAC7F,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;gBAG5D,UAAU,EAAE,eAAe,EAC3B,MAAM,CAAC,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;IAU7C;;;;;;OAMG;IACI,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAOpD;;;;;OAKG;IACI,UAAU,CACf,iBAAiB,EAAE,MAAM,EACzB,mBAAmB,EAAE,MAAM,GAC1B,MAAM;IAmFT;;;;;OAKG;IACI,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IA2DnE;;;;;;;OAOG;IACI,eAAe,CACpB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,sBAAsB;IAkEzB;;;;;OAKG;IACI,+BAA+B,CACpC,aAAa,EAAE,sBAAsB,EACrC,SAAS,EAAE,MAAM,GAChB,MAAM;IAuDT;;;;;;OAMG;IACI,uCAAuC,CAC5C,cAAc,EAAE,MAAM,EACtB,sBAAsB,EAAE,OAAO,EAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,MAAM;IA+BT;;;;;;OAMG;IACI,iCAAiC,CACtC,IAAI,EAAE,sBAAsB,GAC3B,MAAM;IAuET;;;;OAIG;IACI,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,2BAA2B;IAkF3E;;;;OAIG;IACI,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB;CASvE"}
|