@shapeshiftoss/hdwallet-native 1.55.2 → 1.55.4-alpha.1
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/dist/adapter.js +22 -61
- package/dist/adapter.js.map +1 -1
- package/dist/arkeo.d.ts +1 -1
- package/dist/arkeo.d.ts.map +1 -1
- package/dist/arkeo.js +54 -124
- package/dist/arkeo.js.map +1 -1
- package/dist/binance.d.ts +1 -1
- package/dist/binance.d.ts.map +1 -1
- package/dist/binance.js +123 -195
- package/dist/binance.js.map +1 -1
- package/dist/bitcoin.d.ts +1 -2
- package/dist/bitcoin.d.ts.map +1 -1
- package/dist/bitcoin.js +219 -285
- package/dist/bitcoin.js.map +1 -1
- package/dist/cosmos.d.ts +1 -1
- package/dist/cosmos.d.ts.map +1 -1
- package/dist/cosmos.js +54 -124
- package/dist/cosmos.js.map +1 -1
- package/dist/crypto/CryptoHelper.js +106 -172
- package/dist/crypto/CryptoHelper.js.map +1 -1
- package/dist/crypto/EncryptedWallet.js +64 -123
- package/dist/crypto/EncryptedWallet.js.map +1 -1
- package/dist/crypto/classes/cipherString.js +18 -19
- package/dist/crypto/classes/cipherString.js.map +1 -1
- package/dist/crypto/classes/encryptedObject.js +7 -7
- package/dist/crypto/classes/encryptedObject.js.map +1 -1
- package/dist/crypto/classes/encryptionType.js +2 -5
- package/dist/crypto/classes/encryptionType.js.map +1 -1
- package/dist/crypto/classes/index.js +4 -11
- package/dist/crypto/classes/index.js.map +1 -1
- package/dist/crypto/classes/symmetricCryptoKey.js +13 -11
- package/dist/crypto/classes/symmetricCryptoKey.js.map +1 -1
- package/dist/crypto/engines/index.js +2 -18
- package/dist/crypto/engines/index.js.map +1 -1
- package/dist/crypto/engines/types.js +2 -5
- package/dist/crypto/engines/types.js.map +1 -1
- package/dist/crypto/engines/web-crypto.js +39 -84
- package/dist/crypto/engines/web-crypto.js.map +1 -1
- package/dist/crypto/index.js +3 -32
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/isolation/adapters/binance.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/binance.js +12 -51
- package/dist/crypto/isolation/adapters/binance.js.map +1 -1
- package/dist/crypto/isolation/adapters/bip32.d.ts +2 -9
- package/dist/crypto/isolation/adapters/bip32.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/bip32.js +65 -108
- package/dist/crypto/isolation/adapters/bip32.js.map +1 -1
- package/dist/crypto/isolation/adapters/bitcoin.d.ts +4 -13
- package/dist/crypto/isolation/adapters/bitcoin.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/bitcoin.js +41 -84
- package/dist/crypto/isolation/adapters/bitcoin.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmos.d.ts +0 -1
- package/dist/crypto/isolation/adapters/cosmos.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/cosmos.js +9 -24
- package/dist/crypto/isolation/adapters/cosmos.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmosDirect.js +35 -77
- package/dist/crypto/isolation/adapters/cosmosDirect.js.map +1 -1
- package/dist/crypto/isolation/adapters/ethereum.js +49 -90
- package/dist/crypto/isolation/adapters/ethereum.js.map +1 -1
- package/dist/crypto/isolation/adapters/fio.d.ts +0 -1
- package/dist/crypto/isolation/adapters/fio.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/fio.js +24 -67
- package/dist/crypto/isolation/adapters/fio.js.map +1 -1
- package/dist/crypto/isolation/adapters/index.js +7 -20
- package/dist/crypto/isolation/adapters/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/index.js +22 -51
- package/dist/crypto/isolation/core/bip32/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/interfaces.js +2 -29
- package/dist/crypto/isolation/core/bip32/interfaces.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/types.d.ts +2 -2
- package/dist/crypto/isolation/core/bip32/types.js +5 -8
- package/dist/crypto/isolation/core/bip32/types.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/index.js +1 -17
- package/dist/crypto/isolation/core/bip39/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/interfaces.js +1 -2
- package/dist/crypto/isolation/core/digest/algorithms.d.ts.map +1 -1
- package/dist/crypto/isolation/core/digest/algorithms.js +17 -26
- package/dist/crypto/isolation/core/digest/algorithms.js.map +1 -1
- package/dist/crypto/isolation/core/digest/index.js +2 -18
- package/dist/crypto/isolation/core/digest/index.js.map +1 -1
- package/dist/crypto/isolation/core/digest/types.d.ts +20 -20
- package/dist/crypto/isolation/core/digest/types.d.ts.map +1 -1
- package/dist/crypto/isolation/core/digest/types.js +23 -26
- package/dist/crypto/isolation/core/digest/types.js.map +1 -1
- package/dist/crypto/isolation/core/index.js +5 -32
- package/dist/crypto/isolation/core/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/index.js +2 -18
- package/dist/crypto/isolation/core/secp256k1/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/interfaces.js +1 -2
- package/dist/crypto/isolation/core/secp256k1/types.d.ts +81 -81
- package/dist/crypto/isolation/core/secp256k1/types.d.ts.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/types.js +119 -157
- package/dist/crypto/isolation/core/secp256k1/types.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip32.d.ts +0 -1
- package/dist/crypto/isolation/engines/default/bip32.d.ts.map +1 -1
- package/dist/crypto/isolation/engines/default/bip32.js +102 -176
- package/dist/crypto/isolation/engines/default/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip39.js +24 -68
- package/dist/crypto/isolation/engines/default/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/default/index.js +3 -32
- package/dist/crypto/isolation/engines/default/index.js.map +1 -1
- package/dist/crypto/isolation/engines/default/revocable.d.ts +1 -1
- package/dist/crypto/isolation/engines/default/revocable.d.ts.map +1 -1
- package/dist/crypto/isolation/engines/default/revocable.js +30 -51
- package/dist/crypto/isolation/engines/default/revocable.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip32.js +63 -121
- package/dist/crypto/isolation/engines/dummy/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip39.js +55 -97
- package/dist/crypto/isolation/engines/dummy/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/index.js +3 -30
- package/dist/crypto/isolation/engines/dummy/index.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/types.js +1 -5
- package/dist/crypto/isolation/engines/dummy/types.js.map +1 -1
- package/dist/crypto/isolation/engines/index.js +2 -28
- package/dist/crypto/isolation/engines/index.js.map +1 -1
- package/dist/crypto/isolation/index.js +3 -29
- package/dist/crypto/isolation/index.js.map +1 -1
- package/dist/crypto/isolation/types.d.ts +1 -2
- package/dist/crypto/isolation/types.d.ts.map +1 -1
- package/dist/crypto/isolation/types.js +43 -49
- package/dist/crypto/isolation/types.js.map +1 -1
- package/dist/crypto/utils.js +7 -14
- package/dist/crypto/utils.js.map +1 -1
- package/dist/ethereum.d.ts +1 -1
- package/dist/ethereum.d.ts.map +1 -1
- package/dist/ethereum.js +92 -161
- package/dist/ethereum.js.map +1 -1
- package/dist/fio.d.ts +3 -3
- package/dist/fio.d.ts.map +1 -1
- package/dist/fio.js +204 -283
- package/dist/fio.js.map +1 -1
- package/dist/index.js +3 -32
- package/dist/index.js.map +1 -1
- package/dist/kava.d.ts +1 -1
- package/dist/kava.d.ts.map +1 -1
- package/dist/kava.js +50 -120
- package/dist/kava.js.map +1 -1
- package/dist/native.d.ts +40 -41
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +176 -304
- package/dist/native.js.map +1 -1
- package/dist/networks.js +16 -34
- package/dist/networks.js.map +1 -1
- package/dist/osmosis.d.ts +1 -1
- package/dist/osmosis.d.ts.map +1 -1
- package/dist/osmosis.js +54 -124
- package/dist/osmosis.js.map +1 -1
- package/dist/secret.d.ts +1 -1
- package/dist/secret.d.ts.map +1 -1
- package/dist/secret.js +50 -120
- package/dist/secret.js.map +1 -1
- package/dist/terra.d.ts +1 -1
- package/dist/terra.d.ts.map +1 -1
- package/dist/terra.js +50 -120
- package/dist/terra.js.map +1 -1
- package/dist/thorchain.d.ts +1 -1
- package/dist/thorchain.d.ts.map +1 -1
- package/dist/thorchain.js +54 -124
- package/dist/thorchain.js.map +1 -1
- package/dist/util.js +16 -55
- package/dist/util.js.map +1 -1
- package/package.json +3 -3
package/dist/cosmos.js
CHANGED
|
@@ -1,76 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
35
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
36
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
37
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
38
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
39
|
-
};
|
|
40
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
41
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
42
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
43
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
44
|
-
};
|
|
45
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
-
};
|
|
48
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
-
exports.MixinNativeCosmosWallet = exports.MixinNativeCosmosWalletInfo = void 0;
|
|
50
|
-
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
51
|
-
const bech32 = __importStar(require("bech32"));
|
|
52
|
-
const crypto_js_1 = __importDefault(require("crypto-js"));
|
|
53
|
-
const p_lazy_1 = __importDefault(require("p-lazy"));
|
|
54
|
-
const Isolation = __importStar(require("./crypto/isolation"));
|
|
55
|
-
const util = __importStar(require("./util"));
|
|
1
|
+
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
2
|
+
import * as bech32 from "bech32";
|
|
3
|
+
import CryptoJS from "crypto-js";
|
|
4
|
+
import PLazy from "p-lazy";
|
|
5
|
+
import * as Isolation from "./crypto/isolation";
|
|
6
|
+
import * as util from "./util";
|
|
56
7
|
const ATOM_CHAIN = "cosmoshub-4";
|
|
57
|
-
const protoTxBuilder =
|
|
58
|
-
function MixinNativeCosmosWalletInfo(Base) {
|
|
8
|
+
const protoTxBuilder = PLazy.from(() => import("@shapeshiftoss/proto-tx-builder"));
|
|
9
|
+
export function MixinNativeCosmosWalletInfo(Base) {
|
|
59
10
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
60
11
|
return class MixinNativeCosmosWalletInfo extends Base {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
12
|
+
_supportsCosmosInfo = true;
|
|
13
|
+
async cosmosSupportsNetwork() {
|
|
14
|
+
return true;
|
|
64
15
|
}
|
|
65
|
-
|
|
66
|
-
return
|
|
67
|
-
return true;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
cosmosSupportsSecureTransfer() {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
return false;
|
|
73
|
-
});
|
|
16
|
+
async cosmosSupportsSecureTransfer() {
|
|
17
|
+
return false;
|
|
74
18
|
}
|
|
75
19
|
cosmosSupportsNativeShapeShift() {
|
|
76
20
|
return false;
|
|
@@ -90,61 +34,47 @@ function MixinNativeCosmosWalletInfo(Base) {
|
|
|
90
34
|
}
|
|
91
35
|
};
|
|
92
36
|
}
|
|
93
|
-
|
|
94
|
-
function MixinNativeCosmosWallet(Base) {
|
|
95
|
-
var _MixinNativeCosmosWallet_masterKey, _a;
|
|
37
|
+
export function MixinNativeCosmosWallet(Base) {
|
|
96
38
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
97
|
-
return
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
sequence: Number(msg.sequence),
|
|
138
|
-
accountNumber: Number(msg.account_number),
|
|
139
|
-
chainId: ATOM_CHAIN,
|
|
140
|
-
};
|
|
141
|
-
return (yield protoTxBuilder).sign(adapter.address, msg.tx, adapter, signerData);
|
|
142
|
-
}));
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
_MixinNativeCosmosWallet_masterKey = new WeakMap(),
|
|
147
|
-
_a;
|
|
39
|
+
return class MixinNativeCosmosWallet extends Base {
|
|
40
|
+
_supportsCosmos = true;
|
|
41
|
+
#masterKey;
|
|
42
|
+
async cosmosInitializeWallet(masterKey) {
|
|
43
|
+
this.#masterKey = masterKey;
|
|
44
|
+
}
|
|
45
|
+
cosmosWipe() {
|
|
46
|
+
this.#masterKey = undefined;
|
|
47
|
+
}
|
|
48
|
+
cosmosBech32ify(address, prefix) {
|
|
49
|
+
const words = bech32.toWords(address);
|
|
50
|
+
return bech32.encode(prefix, words);
|
|
51
|
+
}
|
|
52
|
+
createCosmosAddress(publicKey) {
|
|
53
|
+
const message = CryptoJS.SHA256(CryptoJS.enc.Hex.parse(publicKey));
|
|
54
|
+
const hash = CryptoJS.RIPEMD160(message).toString();
|
|
55
|
+
const address = Buffer.from(hash, `hex`);
|
|
56
|
+
return this.cosmosBech32ify(address, `cosmos`);
|
|
57
|
+
}
|
|
58
|
+
async cosmosGetAddress(msg) {
|
|
59
|
+
return this.needsMnemonic(!!this.#masterKey, async () => {
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
61
|
+
const keyPair = await util.getKeyPair(this.#masterKey, msg.addressNList, "cosmos");
|
|
62
|
+
return this.createCosmosAddress(keyPair.publicKey.toString("hex"));
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async cosmosSignTx(msg) {
|
|
66
|
+
return this.needsMnemonic(!!this.#masterKey, async () => {
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
68
|
+
const keyPair = await util.getKeyPair(this.#masterKey, msg.addressNList, "cosmos");
|
|
69
|
+
const adapter = await Isolation.Adapters.CosmosDirect.create(keyPair.node, "cosmos");
|
|
70
|
+
const signerData = {
|
|
71
|
+
sequence: Number(msg.sequence),
|
|
72
|
+
accountNumber: Number(msg.account_number),
|
|
73
|
+
chainId: ATOM_CHAIN,
|
|
74
|
+
};
|
|
75
|
+
return (await protoTxBuilder).sign(adapter.address, msg.tx, adapter, signerData);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
148
79
|
}
|
|
149
|
-
exports.MixinNativeCosmosWallet = MixinNativeCosmosWallet;
|
|
150
80
|
//# sourceMappingURL=cosmos.js.map
|
package/dist/cosmos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../src/cosmos.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cosmos.js","sourceRoot":"","sources":["../src/cosmos.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,203 +1,137 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
35
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
36
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
37
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
38
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
39
|
-
};
|
|
40
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
41
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
42
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
43
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
44
|
-
};
|
|
45
|
-
var _CryptoHelper_engine;
|
|
46
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
-
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
48
|
-
const bip39 = __importStar(require("bip39"));
|
|
49
|
-
const classes_1 = require("./classes");
|
|
50
|
-
const engines_1 = require("./engines");
|
|
51
|
-
const utils = __importStar(require("./utils"));
|
|
1
|
+
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
2
|
+
import * as bip39 from "bip39";
|
|
3
|
+
import { EncryptedObject, SymmetricCryptoKey } from "./classes";
|
|
4
|
+
import { DigestAlgorithm } from "./engines";
|
|
5
|
+
import * as utils from "./utils";
|
|
52
6
|
/**
|
|
53
7
|
* This class is only intended to be used by the EncryptedWallet class
|
|
54
8
|
*/
|
|
55
|
-
class CryptoHelper {
|
|
9
|
+
export default class CryptoHelper {
|
|
10
|
+
#engine;
|
|
56
11
|
constructor(engine) {
|
|
57
|
-
_CryptoHelper_engine.set(this, void 0);
|
|
58
12
|
if (!engine) {
|
|
59
13
|
throw new Error("Missing cryptography engine");
|
|
60
14
|
}
|
|
61
|
-
|
|
15
|
+
this.#engine = engine;
|
|
62
16
|
}
|
|
63
17
|
// Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).
|
|
64
18
|
// ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/
|
|
65
19
|
// ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy
|
|
66
|
-
compare(a, b) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
20
|
+
async compare(a, b) {
|
|
21
|
+
const macKey = await this.#engine.randomBytes(32);
|
|
22
|
+
const mac1 = await this.#engine.hmac(a, macKey);
|
|
23
|
+
const mac2 = await this.#engine.hmac(b, macKey);
|
|
24
|
+
if (mac1.byteLength !== mac2.byteLength) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const arr1 = new Uint8Array(mac1);
|
|
28
|
+
const arr2 = new Uint8Array(mac2);
|
|
29
|
+
for (let i = 0; i < arr2.length; i++) {
|
|
30
|
+
if (arr1[i] !== arr2[i]) {
|
|
72
31
|
return false;
|
|
73
32
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
for (let i = 0; i < arr2.length; i++) {
|
|
77
|
-
if (arr1[i] !== arr2[i]) {
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
return true;
|
|
82
|
-
});
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
83
35
|
}
|
|
84
|
-
aesEncrypt(data, key) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return new classes_1.EncryptedObject({ key, iv, data: encData, mac });
|
|
99
|
-
});
|
|
36
|
+
async aesEncrypt(data, key) {
|
|
37
|
+
if (data == null || !(data instanceof ArrayBuffer || data instanceof Uint8Array))
|
|
38
|
+
throw new Error("Required parameter [data] is not of type ArrayBuffer or Uint8Array");
|
|
39
|
+
if (data instanceof Uint8Array)
|
|
40
|
+
data = core.toArrayBuffer(data);
|
|
41
|
+
if (key == null || key.encKey == null || key.macKey == null)
|
|
42
|
+
throw new Error("Required parameter [key] is not of type SymmetricCryptoKey");
|
|
43
|
+
const iv = await this.#engine.randomBytes(16);
|
|
44
|
+
const encData = await this.#engine.encrypt(data, key.encKey, iv);
|
|
45
|
+
const macData = new Uint8Array(iv.byteLength + encData.byteLength);
|
|
46
|
+
macData.set(new Uint8Array(iv), 0);
|
|
47
|
+
macData.set(new Uint8Array(encData), iv.byteLength);
|
|
48
|
+
const mac = await this.#engine.hmac(macData.buffer.slice(macData.byteOffset, macData.byteOffset + macData.byteLength), key.macKey);
|
|
49
|
+
return new EncryptedObject({ key, iv, data: encData, mac });
|
|
100
50
|
}
|
|
101
|
-
aesDecrypt(data, iv, mac, key) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return __classPrivateFieldGet(this, _CryptoHelper_engine, "f").decrypt(data, key.encKey, iv);
|
|
125
|
-
});
|
|
51
|
+
async aesDecrypt(data, iv, mac, key) {
|
|
52
|
+
if (data == null || !(data instanceof ArrayBuffer || data instanceof Uint8Array))
|
|
53
|
+
throw new Error("Required parameter [data] is not of type ArrayBuffer or Uint8Array");
|
|
54
|
+
if (data instanceof Uint8Array)
|
|
55
|
+
data = core.toArrayBuffer(data);
|
|
56
|
+
if (iv == null || !(iv instanceof ArrayBuffer || iv instanceof Uint8Array))
|
|
57
|
+
throw new Error("Required parameter [iv] is not of type ArrayBuffer or Uint8Array");
|
|
58
|
+
if (iv instanceof Uint8Array)
|
|
59
|
+
iv = core.toArrayBuffer(iv);
|
|
60
|
+
if (mac == null || !(mac instanceof ArrayBuffer || mac instanceof Uint8Array))
|
|
61
|
+
throw new Error("Required parameter [mac] is not of type ArrayBuffer or Uint8Array");
|
|
62
|
+
if (mac instanceof Uint8Array)
|
|
63
|
+
mac = core.toArrayBuffer(mac);
|
|
64
|
+
if (key == null || key.encKey == null || key.macKey == null)
|
|
65
|
+
throw new Error("Required parameter [key] is not of type SymmetricCryptoKey");
|
|
66
|
+
const macData = new Uint8Array(iv.byteLength + data.byteLength);
|
|
67
|
+
macData.set(new Uint8Array(iv), 0);
|
|
68
|
+
macData.set(new Uint8Array(data), iv.byteLength);
|
|
69
|
+
const computedMac = await this.#engine.hmac(core.toArrayBuffer(macData), key.macKey);
|
|
70
|
+
const macsMatch = await this.compare(mac, computedMac);
|
|
71
|
+
if (!macsMatch)
|
|
72
|
+
throw new Error("HMAC signature is not valid or data has been tampered with");
|
|
73
|
+
return this.#engine.decrypt(data, key.encKey, iv);
|
|
126
74
|
}
|
|
127
75
|
// @see: https://tools.ietf.org/html/rfc5869
|
|
128
|
-
hkdfExpand(prk, info, size) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return okm;
|
|
143
|
-
});
|
|
76
|
+
async hkdfExpand(prk, info, size) {
|
|
77
|
+
const hashLen = 32; // sha256
|
|
78
|
+
const okm = new Uint8Array(size);
|
|
79
|
+
let previousT = new Uint8Array(0);
|
|
80
|
+
const n = Math.ceil(size / hashLen);
|
|
81
|
+
for (let i = 0; i < n; i++) {
|
|
82
|
+
const t = new Uint8Array(previousT.length + info.length + 1);
|
|
83
|
+
t.set(previousT);
|
|
84
|
+
t.set(info, previousT.length);
|
|
85
|
+
t.set([i + 1], t.length - 1);
|
|
86
|
+
previousT = new Uint8Array(await this.#engine.hmac(core.toArrayBuffer(t), prk));
|
|
87
|
+
okm.set(previousT, i * hashLen);
|
|
88
|
+
}
|
|
89
|
+
return okm;
|
|
144
90
|
}
|
|
145
|
-
pbkdf2(password, salt, iterations) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return __classPrivateFieldGet(this, _CryptoHelper_engine, "f").pbkdf2(password, salt, { iterations, keyLen: 32 });
|
|
150
|
-
});
|
|
91
|
+
async pbkdf2(password, salt, iterations) {
|
|
92
|
+
password = typeof password !== "string" ? password : core.toArrayBuffer(utils.fromUtf8ToArray(password));
|
|
93
|
+
salt = typeof salt !== "string" ? salt : core.toArrayBuffer(utils.fromUtf8ToArray(salt));
|
|
94
|
+
return this.#engine.pbkdf2(password, salt, { iterations, keyLen: 32 });
|
|
151
95
|
}
|
|
152
|
-
makeKey(password, email) {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
keyLength: 32,
|
|
165
|
-
});
|
|
166
|
-
const hashKey = yield this.pbkdf2(key, password, 1);
|
|
167
|
-
const stretchedKey = yield this.hkdfExpand(key, utils.fromUtf8ToArray("enc"), 32);
|
|
168
|
-
const macKey = yield this.hkdfExpand(key, utils.fromUtf8ToArray("mac"), 32);
|
|
169
|
-
return new classes_1.SymmetricCryptoKey(hashKey, stretchedKey, macKey);
|
|
96
|
+
async makeKey(password, email) {
|
|
97
|
+
if (!(password && email && typeof password === "string" && typeof email === "string")) {
|
|
98
|
+
throw new Error("A password and email are required to make a symmetric crypto key.");
|
|
99
|
+
}
|
|
100
|
+
const salt = core.toArrayBuffer(utils.fromUtf8ToArray(email));
|
|
101
|
+
// The same email/password MUST always generate the same encryption key, so
|
|
102
|
+
// scrypt parameters are hard-coded to ensure compatibility across implementations
|
|
103
|
+
const key = await this.#engine.scrypt(core.toArrayBuffer(utils.fromUtf8ToArray(password)), salt, {
|
|
104
|
+
iterations: 16384,
|
|
105
|
+
blockSize: 8,
|
|
106
|
+
parallelism: 1,
|
|
107
|
+
keyLength: 32,
|
|
170
108
|
});
|
|
109
|
+
const hashKey = await this.pbkdf2(key, password, 1);
|
|
110
|
+
const stretchedKey = await this.hkdfExpand(key, utils.fromUtf8ToArray("enc"), 32);
|
|
111
|
+
const macKey = await this.hkdfExpand(key, utils.fromUtf8ToArray("mac"), 32);
|
|
112
|
+
return new SymmetricCryptoKey(hashKey, stretchedKey, macKey);
|
|
171
113
|
}
|
|
172
|
-
decrypt(cipherString, key) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
return utils.fromBufferToUtf8(decipher);
|
|
179
|
-
});
|
|
114
|
+
async decrypt(cipherString, key) {
|
|
115
|
+
const data = utils.fromB64ToArray(cipherString.data);
|
|
116
|
+
const iv = utils.fromB64ToArray(cipherString.iv);
|
|
117
|
+
const mac = utils.fromB64ToArray(cipherString.mac);
|
|
118
|
+
const decipher = await this.aesDecrypt(data, iv, mac, key);
|
|
119
|
+
return utils.fromBufferToUtf8(decipher);
|
|
180
120
|
}
|
|
181
121
|
// use entropyToMnemonic to generate mnemonic so we can utilize provided randomBytes function
|
|
182
|
-
generateMnemonic(strength = 128) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
return bip39.entropyToMnemonic(Buffer.from(entropy));
|
|
186
|
-
});
|
|
122
|
+
async generateMnemonic(strength = 128) {
|
|
123
|
+
const entropy = await this.#engine.randomBytes(strength / 8);
|
|
124
|
+
return bip39.entropyToMnemonic(Buffer.from(entropy));
|
|
187
125
|
}
|
|
188
126
|
/**
|
|
189
127
|
* Generates a base64 hash based on the provided data
|
|
190
128
|
* Should be used to calculate a device ID for the wallet based on the mnemonic
|
|
191
129
|
*/
|
|
192
|
-
getDeviceId(data) {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return utils.fromBufferToB64(digest);
|
|
198
|
-
});
|
|
130
|
+
async getDeviceId(data) {
|
|
131
|
+
if (!(typeof data === "string" && data.length > 0))
|
|
132
|
+
throw new Error("Invalid data to hash");
|
|
133
|
+
const digest = await this.#engine.digest(DigestAlgorithm.SHA256, await this.#engine.digest(DigestAlgorithm.SHA512, Buffer.from(data)));
|
|
134
|
+
return utils.fromBufferToB64(digest);
|
|
199
135
|
}
|
|
200
136
|
}
|
|
201
|
-
_CryptoHelper_engine = new WeakMap();
|
|
202
|
-
exports.default = CryptoHelper;
|
|
203
137
|
//# sourceMappingURL=CryptoHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptoHelper.js","sourceRoot":"","sources":["../../src/crypto/CryptoHelper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CryptoHelper.js","sourceRoot":"","sources":["../../src/crypto/CryptoHelper.ts"],"names":[],"mappings":"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"}
|