@shapeshiftoss/hdwallet-native 1.55.4-alpha.1 → 1.55.5
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 +61 -22
- package/dist/adapter.js.map +1 -1
- package/dist/arkeo.js +123 -54
- package/dist/arkeo.js.map +1 -1
- package/dist/binance.js +194 -123
- package/dist/binance.js.map +1 -1
- package/dist/bitcoin.js +284 -219
- package/dist/bitcoin.js.map +1 -1
- package/dist/cosmos.js +123 -54
- package/dist/cosmos.js.map +1 -1
- package/dist/crypto/CryptoHelper.js +172 -106
- package/dist/crypto/CryptoHelper.js.map +1 -1
- package/dist/crypto/EncryptedWallet.js +123 -64
- package/dist/crypto/EncryptedWallet.js.map +1 -1
- package/dist/crypto/classes/cipherString.js +19 -18
- 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 +5 -2
- package/dist/crypto/classes/encryptionType.js.map +1 -1
- package/dist/crypto/classes/index.js +11 -4
- package/dist/crypto/classes/index.js.map +1 -1
- package/dist/crypto/classes/symmetricCryptoKey.js +11 -13
- package/dist/crypto/classes/symmetricCryptoKey.js.map +1 -1
- package/dist/crypto/engines/index.js +18 -2
- package/dist/crypto/engines/index.js.map +1 -1
- package/dist/crypto/engines/types.js +5 -2
- package/dist/crypto/engines/types.js.map +1 -1
- package/dist/crypto/engines/web-crypto.js +84 -39
- package/dist/crypto/engines/web-crypto.js.map +1 -1
- package/dist/crypto/index.js +32 -3
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/isolation/adapters/binance.js +51 -12
- package/dist/crypto/isolation/adapters/binance.js.map +1 -1
- package/dist/crypto/isolation/adapters/bip32.js +108 -65
- package/dist/crypto/isolation/adapters/bip32.js.map +1 -1
- package/dist/crypto/isolation/adapters/bitcoin.js +84 -41
- package/dist/crypto/isolation/adapters/bitcoin.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmos.js +24 -9
- package/dist/crypto/isolation/adapters/cosmos.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmosDirect.js +77 -35
- package/dist/crypto/isolation/adapters/cosmosDirect.js.map +1 -1
- package/dist/crypto/isolation/adapters/ethereum.js +90 -49
- package/dist/crypto/isolation/adapters/ethereum.js.map +1 -1
- package/dist/crypto/isolation/adapters/fio.js +67 -24
- package/dist/crypto/isolation/adapters/fio.js.map +1 -1
- package/dist/crypto/isolation/adapters/index.js +20 -7
- package/dist/crypto/isolation/adapters/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/index.js +50 -22
- package/dist/crypto/isolation/core/bip32/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/interfaces.js +28 -2
- package/dist/crypto/isolation/core/bip32/interfaces.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/types.js +8 -5
- package/dist/crypto/isolation/core/bip32/types.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/index.js +17 -1
- package/dist/crypto/isolation/core/bip39/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/interfaces.js +2 -1
- package/dist/crypto/isolation/core/digest/algorithms.js +32 -23
- package/dist/crypto/isolation/core/digest/algorithms.js.map +1 -1
- package/dist/crypto/isolation/core/digest/index.js +18 -2
- package/dist/crypto/isolation/core/digest/index.js.map +1 -1
- package/dist/crypto/isolation/core/digest/types.js +26 -23
- package/dist/crypto/isolation/core/digest/types.js.map +1 -1
- package/dist/crypto/isolation/core/index.js +32 -5
- package/dist/crypto/isolation/core/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/index.js +18 -2
- package/dist/crypto/isolation/core/secp256k1/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/interfaces.js +2 -1
- package/dist/crypto/isolation/core/secp256k1/types.js +157 -119
- package/dist/crypto/isolation/core/secp256k1/types.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip32.js +176 -102
- package/dist/crypto/isolation/engines/default/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip39.js +68 -24
- package/dist/crypto/isolation/engines/default/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/default/index.js +32 -3
- package/dist/crypto/isolation/engines/default/index.js.map +1 -1
- package/dist/crypto/isolation/engines/default/revocable.js +51 -30
- package/dist/crypto/isolation/engines/default/revocable.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip32.js +121 -63
- package/dist/crypto/isolation/engines/dummy/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip39.js +97 -55
- package/dist/crypto/isolation/engines/dummy/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/index.js +30 -3
- package/dist/crypto/isolation/engines/dummy/index.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/types.js +5 -1
- package/dist/crypto/isolation/engines/dummy/types.js.map +1 -1
- package/dist/crypto/isolation/engines/index.js +28 -2
- package/dist/crypto/isolation/engines/index.js.map +1 -1
- package/dist/crypto/isolation/index.js +29 -3
- package/dist/crypto/isolation/index.js.map +1 -1
- package/dist/crypto/isolation/types.js +49 -43
- package/dist/crypto/isolation/types.js.map +1 -1
- package/dist/crypto/utils.js +13 -7
- package/dist/crypto/utils.js.map +1 -1
- package/dist/ethereum.js +160 -92
- package/dist/ethereum.js.map +1 -1
- package/dist/fio.js +282 -204
- package/dist/fio.js.map +1 -1
- package/dist/index.js +32 -3
- package/dist/index.js.map +1 -1
- package/dist/kava.js +119 -50
- package/dist/kava.js.map +1 -1
- package/dist/native.js +304 -176
- package/dist/native.js.map +1 -1
- package/dist/networks.js +33 -16
- package/dist/networks.js.map +1 -1
- package/dist/osmosis.js +123 -54
- package/dist/osmosis.js.map +1 -1
- package/dist/secret.js +119 -50
- package/dist/secret.js.map +1 -1
- package/dist/terra.js +119 -50
- package/dist/terra.js.map +1 -1
- package/dist/thorchain.js +123 -54
- package/dist/thorchain.js.map +1 -1
- package/dist/util.js +54 -16
- package/dist/util.js.map +1 -1
- package/package.json +3 -3
package/dist/cosmos.js
CHANGED
|
@@ -1,20 +1,77 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
+
};
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.MixinNativeCosmosWalletInfo = MixinNativeCosmosWalletInfo;
|
|
50
|
+
exports.MixinNativeCosmosWallet = MixinNativeCosmosWallet;
|
|
51
|
+
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
52
|
+
const bech32 = __importStar(require("bech32"));
|
|
53
|
+
const crypto_js_1 = __importDefault(require("crypto-js"));
|
|
54
|
+
const p_lazy_1 = __importDefault(require("p-lazy"));
|
|
55
|
+
const Isolation = __importStar(require("./crypto/isolation"));
|
|
56
|
+
const util = __importStar(require("./util"));
|
|
7
57
|
const ATOM_CHAIN = "cosmoshub-4";
|
|
8
|
-
const protoTxBuilder =
|
|
9
|
-
|
|
58
|
+
const protoTxBuilder = p_lazy_1.default.from(() => Promise.resolve().then(() => __importStar(require("@shapeshiftoss/proto-tx-builder"))));
|
|
59
|
+
function MixinNativeCosmosWalletInfo(Base) {
|
|
10
60
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
11
61
|
return class MixinNativeCosmosWalletInfo extends Base {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
this._supportsCosmosInfo = true;
|
|
15
65
|
}
|
|
16
|
-
|
|
17
|
-
return
|
|
66
|
+
cosmosSupportsNetwork() {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
return true;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
cosmosSupportsSecureTransfer() {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
return false;
|
|
74
|
+
});
|
|
18
75
|
}
|
|
19
76
|
cosmosSupportsNativeShapeShift() {
|
|
20
77
|
return false;
|
|
@@ -34,47 +91,59 @@ export function MixinNativeCosmosWalletInfo(Base) {
|
|
|
34
91
|
}
|
|
35
92
|
};
|
|
36
93
|
}
|
|
37
|
-
|
|
94
|
+
function MixinNativeCosmosWallet(Base) {
|
|
95
|
+
var _MixinNativeCosmosWallet_masterKey, _a;
|
|
38
96
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
39
|
-
return class MixinNativeCosmosWallet extends Base {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
97
|
+
return _a = class MixinNativeCosmosWallet extends Base {
|
|
98
|
+
constructor() {
|
|
99
|
+
super(...arguments);
|
|
100
|
+
this._supportsCosmos = true;
|
|
101
|
+
_MixinNativeCosmosWallet_masterKey.set(this, void 0);
|
|
102
|
+
}
|
|
103
|
+
cosmosInitializeWallet(masterKey) {
|
|
104
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
__classPrivateFieldSet(this, _MixinNativeCosmosWallet_masterKey, masterKey, "f");
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
cosmosWipe() {
|
|
109
|
+
__classPrivateFieldSet(this, _MixinNativeCosmosWallet_masterKey, undefined, "f");
|
|
110
|
+
}
|
|
111
|
+
cosmosBech32ify(address, prefix) {
|
|
112
|
+
const words = bech32.toWords(address);
|
|
113
|
+
return bech32.encode(prefix, words);
|
|
114
|
+
}
|
|
115
|
+
createCosmosAddress(publicKey) {
|
|
116
|
+
const message = crypto_js_1.default.SHA256(crypto_js_1.default.enc.Hex.parse(publicKey));
|
|
117
|
+
const hash = crypto_js_1.default.RIPEMD160(message).toString();
|
|
118
|
+
const address = Buffer.from(hash, `hex`);
|
|
119
|
+
return this.cosmosBech32ify(address, `cosmos`);
|
|
120
|
+
}
|
|
121
|
+
cosmosGetAddress(msg) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
return this.needsMnemonic(!!__classPrivateFieldGet(this, _MixinNativeCosmosWallet_masterKey, "f"), () => __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
125
|
+
const keyPair = yield util.getKeyPair(__classPrivateFieldGet(this, _MixinNativeCosmosWallet_masterKey, "f"), msg.addressNList, "cosmos");
|
|
126
|
+
return this.createCosmosAddress(keyPair.publicKey.toString("hex"));
|
|
127
|
+
}));
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
cosmosSignTx(msg) {
|
|
131
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
return this.needsMnemonic(!!__classPrivateFieldGet(this, _MixinNativeCosmosWallet_masterKey, "f"), () => __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
134
|
+
const keyPair = yield util.getKeyPair(__classPrivateFieldGet(this, _MixinNativeCosmosWallet_masterKey, "f"), msg.addressNList, "cosmos");
|
|
135
|
+
const adapter = yield Isolation.Adapters.CosmosDirect.create(keyPair.node, "cosmos");
|
|
136
|
+
const signerData = {
|
|
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;
|
|
79
148
|
}
|
|
80
149
|
//# 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,137 +1,203 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
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"));
|
|
6
52
|
/**
|
|
7
53
|
* This class is only intended to be used by the EncryptedWallet class
|
|
8
54
|
*/
|
|
9
|
-
|
|
10
|
-
#engine;
|
|
55
|
+
class CryptoHelper {
|
|
11
56
|
constructor(engine) {
|
|
57
|
+
_CryptoHelper_engine.set(this, void 0);
|
|
12
58
|
if (!engine) {
|
|
13
59
|
throw new Error("Missing cryptography engine");
|
|
14
60
|
}
|
|
15
|
-
this
|
|
61
|
+
__classPrivateFieldSet(this, _CryptoHelper_engine, engine, "f");
|
|
16
62
|
}
|
|
17
63
|
// Safely compare two values in a way that protects against timing attacks (Double HMAC Verification).
|
|
18
64
|
// ref: https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2011/february/double-hmac-verification/
|
|
19
65
|
// ref: https://paragonie.com/blog/2015/11/preventing-timing-attacks-on-string-comparison-with-double-hmac-strategy
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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]) {
|
|
66
|
+
compare(a, b) {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
const macKey = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").randomBytes(32);
|
|
69
|
+
const mac1 = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").hmac(a, macKey);
|
|
70
|
+
const mac2 = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").hmac(b, macKey);
|
|
71
|
+
if (mac1.byteLength !== mac2.byteLength) {
|
|
31
72
|
return false;
|
|
32
73
|
}
|
|
33
|
-
|
|
34
|
-
|
|
74
|
+
const arr1 = new Uint8Array(mac1);
|
|
75
|
+
const arr2 = new Uint8Array(mac2);
|
|
76
|
+
for (let i = 0; i < arr2.length; i++) {
|
|
77
|
+
if (arr1[i] !== arr2[i]) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
});
|
|
35
83
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
data
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
84
|
+
aesEncrypt(data, key) {
|
|
85
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
+
if (data == null || !(data instanceof ArrayBuffer || data instanceof Uint8Array))
|
|
87
|
+
throw new Error("Required parameter [data] is not of type ArrayBuffer or Uint8Array");
|
|
88
|
+
if (data instanceof Uint8Array)
|
|
89
|
+
data = core.toArrayBuffer(data);
|
|
90
|
+
if (key == null || key.encKey == null || key.macKey == null)
|
|
91
|
+
throw new Error("Required parameter [key] is not of type SymmetricCryptoKey");
|
|
92
|
+
const iv = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").randomBytes(16);
|
|
93
|
+
const encData = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").encrypt(data, key.encKey, iv);
|
|
94
|
+
const macData = new Uint8Array(iv.byteLength + encData.byteLength);
|
|
95
|
+
macData.set(new Uint8Array(iv), 0);
|
|
96
|
+
macData.set(new Uint8Array(encData), iv.byteLength);
|
|
97
|
+
const mac = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").hmac(macData.buffer.slice(macData.byteOffset, macData.byteOffset + macData.byteLength), key.macKey);
|
|
98
|
+
return new classes_1.EncryptedObject({ key, iv, data: encData, mac });
|
|
99
|
+
});
|
|
50
100
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
data
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
iv
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
mac
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
101
|
+
aesDecrypt(data, iv, mac, key) {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
103
|
+
if (data == null || !(data instanceof ArrayBuffer || data instanceof Uint8Array))
|
|
104
|
+
throw new Error("Required parameter [data] is not of type ArrayBuffer or Uint8Array");
|
|
105
|
+
if (data instanceof Uint8Array)
|
|
106
|
+
data = core.toArrayBuffer(data);
|
|
107
|
+
if (iv == null || !(iv instanceof ArrayBuffer || iv instanceof Uint8Array))
|
|
108
|
+
throw new Error("Required parameter [iv] is not of type ArrayBuffer or Uint8Array");
|
|
109
|
+
if (iv instanceof Uint8Array)
|
|
110
|
+
iv = core.toArrayBuffer(iv);
|
|
111
|
+
if (mac == null || !(mac instanceof ArrayBuffer || mac instanceof Uint8Array))
|
|
112
|
+
throw new Error("Required parameter [mac] is not of type ArrayBuffer or Uint8Array");
|
|
113
|
+
if (mac instanceof Uint8Array)
|
|
114
|
+
mac = core.toArrayBuffer(mac);
|
|
115
|
+
if (key == null || key.encKey == null || key.macKey == null)
|
|
116
|
+
throw new Error("Required parameter [key] is not of type SymmetricCryptoKey");
|
|
117
|
+
const macData = new Uint8Array(iv.byteLength + data.byteLength);
|
|
118
|
+
macData.set(new Uint8Array(iv), 0);
|
|
119
|
+
macData.set(new Uint8Array(data), iv.byteLength);
|
|
120
|
+
const computedMac = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").hmac(core.toArrayBuffer(macData), key.macKey);
|
|
121
|
+
const macsMatch = yield this.compare(mac, computedMac);
|
|
122
|
+
if (!macsMatch)
|
|
123
|
+
throw new Error("HMAC signature is not valid or data has been tampered with");
|
|
124
|
+
return __classPrivateFieldGet(this, _CryptoHelper_engine, "f").decrypt(data, key.encKey, iv);
|
|
125
|
+
});
|
|
74
126
|
}
|
|
75
127
|
// @see: https://tools.ietf.org/html/rfc5869
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
128
|
+
hkdfExpand(prk, info, size) {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
const hashLen = 32; // sha256
|
|
131
|
+
const okm = new Uint8Array(size);
|
|
132
|
+
let previousT = new Uint8Array(0);
|
|
133
|
+
const n = Math.ceil(size / hashLen);
|
|
134
|
+
for (let i = 0; i < n; i++) {
|
|
135
|
+
const t = new Uint8Array(previousT.length + info.length + 1);
|
|
136
|
+
t.set(previousT);
|
|
137
|
+
t.set(info, previousT.length);
|
|
138
|
+
t.set([i + 1], t.length - 1);
|
|
139
|
+
previousT = new Uint8Array(yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").hmac(core.toArrayBuffer(t), prk));
|
|
140
|
+
okm.set(previousT, i * hashLen);
|
|
141
|
+
}
|
|
142
|
+
return okm;
|
|
143
|
+
});
|
|
90
144
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
145
|
+
pbkdf2(password, salt, iterations) {
|
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
147
|
+
password = typeof password !== "string" ? password : core.toArrayBuffer(utils.fromUtf8ToArray(password));
|
|
148
|
+
salt = typeof salt !== "string" ? salt : core.toArrayBuffer(utils.fromUtf8ToArray(salt));
|
|
149
|
+
return __classPrivateFieldGet(this, _CryptoHelper_engine, "f").pbkdf2(password, salt, { iterations, keyLen: 32 });
|
|
150
|
+
});
|
|
95
151
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
152
|
+
makeKey(password, email) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
if (!(password && email && typeof password === "string" && typeof email === "string")) {
|
|
155
|
+
throw new Error("A password and email are required to make a symmetric crypto key.");
|
|
156
|
+
}
|
|
157
|
+
const salt = core.toArrayBuffer(utils.fromUtf8ToArray(email));
|
|
158
|
+
// The same email/password MUST always generate the same encryption key, so
|
|
159
|
+
// scrypt parameters are hard-coded to ensure compatibility across implementations
|
|
160
|
+
const key = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").scrypt(core.toArrayBuffer(utils.fromUtf8ToArray(password)), salt, {
|
|
161
|
+
iterations: 16384,
|
|
162
|
+
blockSize: 8,
|
|
163
|
+
parallelism: 1,
|
|
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);
|
|
108
170
|
});
|
|
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);
|
|
113
171
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
172
|
+
decrypt(cipherString, key) {
|
|
173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
const data = utils.fromB64ToArray(cipherString.data);
|
|
175
|
+
const iv = utils.fromB64ToArray(cipherString.iv);
|
|
176
|
+
const mac = utils.fromB64ToArray(cipherString.mac);
|
|
177
|
+
const decipher = yield this.aesDecrypt(data, iv, mac, key);
|
|
178
|
+
return utils.fromBufferToUtf8(decipher);
|
|
179
|
+
});
|
|
120
180
|
}
|
|
121
181
|
// use entropyToMnemonic to generate mnemonic so we can utilize provided randomBytes function
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
182
|
+
generateMnemonic() {
|
|
183
|
+
return __awaiter(this, arguments, void 0, function* (strength = 128) {
|
|
184
|
+
const entropy = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").randomBytes(strength / 8);
|
|
185
|
+
return bip39.entropyToMnemonic(Buffer.from(entropy));
|
|
186
|
+
});
|
|
125
187
|
}
|
|
126
188
|
/**
|
|
127
189
|
* Generates a base64 hash based on the provided data
|
|
128
190
|
* Should be used to calculate a device ID for the wallet based on the mnemonic
|
|
129
191
|
*/
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
192
|
+
getDeviceId(data) {
|
|
193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
if (!(typeof data === "string" && data.length > 0))
|
|
195
|
+
throw new Error("Invalid data to hash");
|
|
196
|
+
const digest = yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").digest(engines_1.DigestAlgorithm.SHA256, yield __classPrivateFieldGet(this, _CryptoHelper_engine, "f").digest(engines_1.DigestAlgorithm.SHA512, Buffer.from(data)));
|
|
197
|
+
return utils.fromBufferToB64(digest);
|
|
198
|
+
});
|
|
135
199
|
}
|
|
136
200
|
}
|
|
201
|
+
_CryptoHelper_engine = new WeakMap();
|
|
202
|
+
exports.default = CryptoHelper;
|
|
137
203
|
//# sourceMappingURL=CryptoHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CryptoHelper.js","sourceRoot":"","sources":["../../src/crypto/CryptoHelper.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"CryptoHelper.js","sourceRoot":"","sources":["../../src/crypto/CryptoHelper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAAqD;AACrD,6CAA+B;AAE/B,uCAA8E;AAC9E,uCAA0D;AAC1D,+CAAiC;AAEjC;;GAEG;AACH,MAAqB,YAAY;IAG/B,YAAY,MAAoB;QAFvB,uCAAsB;QAG7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,uBAAA,IAAI,wBAAW,MAAM,MAAA,CAAC;IACxB,CAAC;IAED,sGAAsG;IACtG,+GAA+G;IAC/G,mHAAmH;IAC7G,OAAO,CAAC,CAAc,EAAE,CAAc;;YAC1C,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAElD,MAAM,IAAI,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxB,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAEK,UAAU,CAAC,IAA8B,EAAE,GAAuB;;YACtE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,UAAU,CAAC;gBAC9E,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACxF,IAAI,IAAI,YAAY,UAAU;gBAAE,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;gBACzD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,MAAM,EAAE,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAE9C,MAAM,OAAO,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAEjE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;YACpD,MAAM,GAAG,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,EACjF,GAAG,CAAC,MAAM,CACX,CAAC;YAEF,OAAO,IAAI,yBAAe,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;KAAA;IAEK,UAAU,CACd,IAA8B,EAC9B,EAA4B,EAC5B,GAA6B,EAC7B,GAAuB;;YAEvB,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,UAAU,CAAC;gBAC9E,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACxF,IAAI,IAAI,YAAY,UAAU;gBAAE,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,YAAY,WAAW,IAAI,EAAE,YAAY,UAAU,CAAC;gBACxE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;YACtF,IAAI,EAAE,YAAY,UAAU;gBAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,YAAY,WAAW,IAAI,GAAG,YAAY,UAAU,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF,IAAI,GAAG,YAAY,UAAU;gBAAE,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI;gBACzD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAEhF,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;YACjD,MAAM,WAAW,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACrF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAEvD,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAE9F,OAAO,uBAAA,IAAI,4BAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC;KAAA;IAED,4CAA4C;IACtC,UAAU,CAAC,GAAgB,EAAE,IAAgB,EAAE,IAAY;;YAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,SAAS;YAC7B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAEjC,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAElC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE7D,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjB,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE7B,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,uBAAA,IAAI,4BAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAEhF,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC;KAAA;IAEK,MAAM,CAAC,QAA8B,EAAE,IAA0B,EAAE,UAAkB;;YACzF,QAAQ,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzG,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzF,OAAO,uBAAA,IAAI,4BAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;KAAA;IAEK,OAAO,CAAC,QAAgB,EAAE,KAAa;;YAC3C,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACtF,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,2EAA2E;YAC3E,kFAAkF;YAClF,MAAM,GAAG,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE;gBAC/F,UAAU,EAAE,KAAK;gBACjB,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,CAAC;gBACd,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAE5E,OAAO,IAAI,4BAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAC/D,CAAC;KAAA;IAEK,OAAO,CAAC,YAA0B,EAAE,GAAuB;;YAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAE3D,OAAO,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;KAAA;IAED,6FAA6F;IACvF,gBAAgB;6DAAC,QAAQ,GAAG,GAAG;YACnC,MAAM,OAAO,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,CAAC;KAAA;IAED;;;OAGG;IACG,WAAW,CAAC,IAAY;;YAC5B,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,4BAAQ,CAAC,MAAM,CACtC,yBAAe,CAAC,MAAM,EACtB,MAAM,uBAAA,IAAI,4BAAQ,CAAC,MAAM,CAAC,yBAAe,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACrE,CAAC;YAEF,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;KAAA;CACF;;kBAnKoB,YAAY"}
|