@bitgo/sdk-core 1.0.1 → 1.1.0-rc.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.
Files changed (53) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/src/account-lib/baseCoin/baseKeyPair.d.ts +27 -0
  3. package/dist/src/account-lib/baseCoin/baseKeyPair.d.ts.map +1 -0
  4. package/dist/src/account-lib/baseCoin/baseKeyPair.js +3 -0
  5. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts +71 -0
  6. package/dist/src/account-lib/baseCoin/baseTransaction.d.ts.map +1 -0
  7. package/dist/src/account-lib/baseCoin/baseTransaction.js +69 -0
  8. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts +128 -0
  9. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.d.ts.map +1 -0
  10. package/dist/src/account-lib/baseCoin/baseTransactionBuilder.js +138 -0
  11. package/dist/src/account-lib/baseCoin/baseTransactionBuilderFactory.d.ts +29 -0
  12. package/dist/src/account-lib/baseCoin/baseTransactionBuilderFactory.d.ts.map +1 -0
  13. package/dist/src/account-lib/baseCoin/baseTransactionBuilderFactory.js +19 -0
  14. package/dist/src/account-lib/baseCoin/baseUtils.d.ts +45 -0
  15. package/dist/src/account-lib/baseCoin/baseUtils.d.ts.map +1 -0
  16. package/dist/src/account-lib/baseCoin/baseUtils.js +3 -0
  17. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts +75 -0
  18. package/dist/src/account-lib/baseCoin/blsKeyPair.d.ts.map +1 -0
  19. package/dist/src/account-lib/baseCoin/blsKeyPair.js +179 -0
  20. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts +50 -0
  21. package/dist/src/account-lib/baseCoin/ed25519KeyPair.d.ts.map +1 -0
  22. package/dist/src/account-lib/baseCoin/ed25519KeyPair.js +145 -0
  23. package/dist/src/account-lib/baseCoin/enum.d.ts +43 -0
  24. package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -0
  25. package/dist/src/account-lib/baseCoin/enum.js +70 -0
  26. package/dist/src/account-lib/baseCoin/errors.d.ts +65 -0
  27. package/dist/src/account-lib/baseCoin/errors.d.ts.map +1 -0
  28. package/dist/src/account-lib/baseCoin/errors.js +114 -0
  29. package/dist/src/account-lib/baseCoin/iface.d.ts +162 -0
  30. package/dist/src/account-lib/baseCoin/iface.d.ts.map +1 -0
  31. package/dist/src/account-lib/baseCoin/iface.js +38 -0
  32. package/dist/src/account-lib/baseCoin/index.d.ts +12 -0
  33. package/dist/src/account-lib/baseCoin/index.d.ts.map +1 -0
  34. package/dist/src/account-lib/baseCoin/index.js +31 -0
  35. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts +55 -0
  36. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.d.ts.map +1 -0
  37. package/dist/src/account-lib/baseCoin/secp256k1ExtendedKeyPair.js +124 -0
  38. package/dist/src/account-lib/index.d.ts +4 -0
  39. package/dist/src/account-lib/index.d.ts.map +1 -0
  40. package/dist/src/account-lib/index.js +16 -0
  41. package/dist/src/account-lib/util/crypto.d.ts +106 -0
  42. package/dist/src/account-lib/util/crypto.d.ts.map +1 -0
  43. package/dist/src/account-lib/util/crypto.js +269 -0
  44. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts +49 -0
  45. package/dist/src/account-lib/util/ed25519KeyDeriver.d.ts.map +1 -0
  46. package/dist/src/account-lib/util/ed25519KeyDeriver.js +87 -0
  47. package/dist/src/index.d.ts +1 -0
  48. package/dist/src/index.d.ts.map +1 -1
  49. package/dist/src/index.js +2 -1
  50. package/dist/src/v2/environments.d.ts.map +1 -1
  51. package/dist/src/v2/environments.js +2 -2
  52. package/dist/tsconfig.tsbuildinfo +1679 -118
  53. package/package.json +23 -12
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.Secp256k1ExtendedKeyPair = void 0;
23
+ const bip32 = __importStar(require("bip32"));
24
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
25
+ const Crypto = __importStar(require("../util/crypto"));
26
+ const errors_1 = require("./errors");
27
+ /**
28
+ * Base class for SECP256K1 extended keypairs.
29
+ */
30
+ class Secp256k1ExtendedKeyPair {
31
+ /**
32
+ * Public constructor. By default, creates a key pair with a random master seed.
33
+ *
34
+ * @param {KeyPairOptions} source Either a master seed, a private key (extended or raw), or a public key
35
+ * (extended, compressed, or uncompressed)
36
+ */
37
+ constructor(source) {
38
+ this.source = source;
39
+ }
40
+ static toKeyPair(hdNode) {
41
+ if (hdNode.privateKey) {
42
+ return bitcoinjs_lib_1.ECPair.fromPrivateKey(hdNode.privateKey);
43
+ }
44
+ else {
45
+ return bitcoinjs_lib_1.ECPair.fromPublicKey(hdNode.publicKey);
46
+ }
47
+ }
48
+ /**
49
+ * @param compressed
50
+ * @return Buffer 33 bytes if `compressed` is set, 65 bytes otherwise. Standard libsecp256k1 format.
51
+ */
52
+ getPublicKey({ compressed }) {
53
+ var _a;
54
+ return bitcoinjs_lib_1.ECPair.fromPublicKey((_a = this.keyPair) === null || _a === void 0 ? void 0 : _a.publicKey, { compressed }).publicKey;
55
+ }
56
+ /**
57
+ * @return Buffer 32 bytes in standard libsecp256k1 format
58
+ */
59
+ getPrivateKey() {
60
+ var _a;
61
+ return (_a = this.keyPair) === null || _a === void 0 ? void 0 : _a.privateKey;
62
+ }
63
+ /**
64
+ * Build a Hierarchical Deterministic node or an ECPair from a private key.
65
+ *
66
+ * @param {string} prv An extended or raw private key
67
+ */
68
+ recordKeysFromPrivateKey(prv) {
69
+ if (Crypto.isValidXprv(prv)) {
70
+ this.hdNode = bip32.fromBase58(prv);
71
+ }
72
+ else if (Crypto.isValidPrv(prv)) {
73
+ // Cannot create the HD node without the chain code, so create a regular Key Chain
74
+ this.keyPair = bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(prv, 'hex'));
75
+ }
76
+ else {
77
+ throw new Error('Unsupported private key');
78
+ }
79
+ }
80
+ /**
81
+ * Build a Hierarchical Deterministic node or an ECPair from a public key.
82
+ *
83
+ * @param {string} pub - An extended, compressed, or uncompressed public key
84
+ */
85
+ recordKeysFromPublicKey(pub) {
86
+ if (Crypto.isValidXpub(pub)) {
87
+ this.hdNode = bip32.fromBase58(pub);
88
+ }
89
+ else if (Crypto.isValidPub(pub)) {
90
+ // Cannot create an HD node without the chain code, so create a regular Key Chain
91
+ this.keyPair = bitcoinjs_lib_1.ECPair.fromPublicKey(Buffer.from(pub, 'hex'));
92
+ }
93
+ else {
94
+ throw new Error('Unsupported public key: ' + pub);
95
+ }
96
+ }
97
+ /**
98
+ * Get the extended public key, and the private key if one is available. This is only possible
99
+ * when the key pair was created from a seed or extended keys.
100
+ *
101
+ * @returns {ExtendedKeys} The Extended keys object
102
+ */
103
+ getExtendedKeys() {
104
+ if (!this.hdNode) {
105
+ throw new Error('Cannot get extended keys');
106
+ }
107
+ const result = {
108
+ xpub: this.hdNode.neutered().toBase58(),
109
+ };
110
+ // A neutered HD node means it only contains the public key information
111
+ if (!this.hdNode.isNeutered()) {
112
+ result.xprv = this.hdNode.toBase58();
113
+ }
114
+ return result;
115
+ }
116
+ getAddress(format) {
117
+ throw new errors_1.NotImplementedError('getAddress not implemented');
118
+ }
119
+ getKeys() {
120
+ throw new errors_1.NotImplementedError('getKeys not implemented');
121
+ }
122
+ }
123
+ exports.Secp256k1ExtendedKeyPair = Secp256k1ExtendedKeyPair;
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjcDI1NmsxRXh0ZW5kZWRLZXlQYWlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FjY291bnQtbGliL2Jhc2VDb2luL3NlY3AyNTZrMUV4dGVuZGVkS2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQStCO0FBQy9CLGlEQUF1QztBQUN2Qyx1REFBeUM7QUFJekMscUNBQStDO0FBRS9DOztHQUVHO0FBQ0gsTUFBc0Isd0JBQXdCO0lBYzVDOzs7OztPQUtHO0lBQ0gsWUFBc0IsTUFBdUI7UUFDM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQXJCRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQTRCO1FBQzNDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNyQixPQUFPLHNCQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsT0FBTyxzQkFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBaUJEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBMkI7O1FBQ2xELE9BQU8sc0JBQU0sQ0FBQyxhQUFhLENBQUMsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhOztRQUNYLE9BQU8sTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxVQUFVLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3QkFBd0IsQ0FBQyxHQUFXO1FBQ2xDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsa0ZBQWtGO1lBQ2xGLElBQUksQ0FBQyxPQUFPLEdBQUcsc0JBQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMvRDthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx1QkFBdUIsQ0FBQyxHQUFXO1FBQ2pDLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDckM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakMsaUZBQWlGO1lBQ2pGLElBQUksQ0FBQyxPQUFPLEdBQUcsc0JBQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM5RDthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUNuRDtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7U0FDN0M7UUFDRCxNQUFNLE1BQU0sR0FBaUI7WUFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1NBQ3hDLENBQUM7UUFDRix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDN0IsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFzQjtRQUMvQixNQUFNLElBQUksNEJBQW1CLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQWxHRCw0REFrR0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXAzMiBmcm9tICdiaXAzMic7XG5pbXBvcnQgeyBFQ1BhaXIgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCAqIGFzIENyeXB0byBmcm9tICcuLi91dGlsL2NyeXB0byc7XG5pbXBvcnQgeyBLZXlQYWlyT3B0aW9ucywgRXh0ZW5kZWRLZXlzIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBCYXNlS2V5UGFpciB9IGZyb20gJy4vYmFzZUtleVBhaXInO1xuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4vZW51bSc7XG5pbXBvcnQgeyBOb3RJbXBsZW1lbnRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFNFQ1AyNTZLMSBleHRlbmRlZCBrZXlwYWlycy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpciBpbXBsZW1lbnRzIEJhc2VLZXlQYWlyIHtcbiAgc3RhdGljIHRvS2V5UGFpcihoZE5vZGU6IGJpcDMyLkJJUDMySW50ZXJmYWNlKTogRUNQYWlyLkVDUGFpckludGVyZmFjZSB7XG4gICAgaWYgKGhkTm9kZS5wcml2YXRlS2V5KSB7XG4gICAgICByZXR1cm4gRUNQYWlyLmZyb21Qcml2YXRlS2V5KGhkTm9kZS5wcml2YXRlS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEVDUGFpci5mcm9tUHVibGljS2V5KGhkTm9kZS5wdWJsaWNLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudGF0aW9uIG9mIHRoZSBIRCBwcm90b2NvbCAoQklQMzIpLiBPbmx5IGF2YWlsYWJsZSB3aGVuIGNyZWF0aW5nIGEgS2V5UGFpciBmcm9tIGEgc2VlZCxcbiAgLy8gb3IgZXh0ZW5kZWQga2V5c1xuICBwcm90ZWN0ZWQgaGROb2RlPzogYmlwMzIuQklQMzJJbnRlcmZhY2U7XG4gIHByb3RlY3RlZCBrZXlQYWlyOiBFQ1BhaXIuRUNQYWlySW50ZXJmYWNlO1xuICBwcm90ZWN0ZWQgc291cmNlPzogS2V5UGFpck9wdGlvbnM7XG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuIEJ5IGRlZmF1bHQsIGNyZWF0ZXMgYSBrZXkgcGFpciB3aXRoIGEgcmFuZG9tIG1hc3RlciBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleVBhaXJPcHRpb25zfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXkgKGV4dGVuZGVkIG9yIHJhdyksIG9yIGEgcHVibGljIGtleVxuICAgKiAgICAgKGV4dGVuZGVkLCBjb21wcmVzc2VkLCBvciB1bmNvbXByZXNzZWQpXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gY29tcHJlc3NlZFxuICAgKiBAcmV0dXJuIEJ1ZmZlciAzMyBieXRlcyBpZiBgY29tcHJlc3NlZGAgaXMgc2V0LCA2NSBieXRlcyBvdGhlcndpc2UuIFN0YW5kYXJkIGxpYnNlY3AyNTZrMSBmb3JtYXQuXG4gICAqL1xuICBnZXRQdWJsaWNLZXkoeyBjb21wcmVzc2VkIH06IHsgY29tcHJlc3NlZDogYm9vbGVhbiB9KTogQnVmZmVyIHtcbiAgICByZXR1cm4gRUNQYWlyLmZyb21QdWJsaWNLZXkodGhpcy5rZXlQYWlyPy5wdWJsaWNLZXksIHsgY29tcHJlc3NlZCB9KS5wdWJsaWNLZXk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybiBCdWZmZXIgMzIgYnl0ZXMgaW4gc3RhbmRhcmQgbGlic2VjcDI1NmsxIGZvcm1hdFxuICAgKi9cbiAgZ2V0UHJpdmF0ZUtleSgpOiBCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmtleVBhaXI/LnByaXZhdGVLZXk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBIaWVyYXJjaGljYWwgRGV0ZXJtaW5pc3RpYyBub2RlIG9yIGFuIEVDUGFpciBmcm9tIGEgcHJpdmF0ZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgQW4gZXh0ZW5kZWQgb3IgcmF3IHByaXZhdGUga2V5XG4gICAqL1xuICByZWNvcmRLZXlzRnJvbVByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoQ3J5cHRvLmlzVmFsaWRYcHJ2KHBydikpIHtcbiAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChwcnYpO1xuICAgIH0gZWxzZSBpZiAoQ3J5cHRvLmlzVmFsaWRQcnYocHJ2KSkge1xuICAgICAgLy8gQ2Fubm90IGNyZWF0ZSB0aGUgSEQgbm9kZSB3aXRob3V0IHRoZSBjaGFpbiBjb2RlLCBzbyBjcmVhdGUgYSByZWd1bGFyIEtleSBDaGFpblxuICAgICAgdGhpcy5rZXlQYWlyID0gRUNQYWlyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIEhpZXJhcmNoaWNhbCBEZXRlcm1pbmlzdGljIG5vZGUgb3IgYW4gRUNQYWlyIGZyb20gYSBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIC0gQW4gZXh0ZW5kZWQsIGNvbXByZXNzZWQsIG9yIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5XG4gICAqL1xuICByZWNvcmRLZXlzRnJvbVB1YmxpY0tleShwdWI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChDcnlwdG8uaXNWYWxpZFhwdWIocHViKSkge1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tQmFzZTU4KHB1Yik7XG4gICAgfSBlbHNlIGlmIChDcnlwdG8uaXNWYWxpZFB1YihwdWIpKSB7XG4gICAgICAvLyBDYW5ub3QgY3JlYXRlIGFuIEhEIG5vZGUgd2l0aG91dCB0aGUgY2hhaW4gY29kZSwgc28gY3JlYXRlIGEgcmVndWxhciBLZXkgQ2hhaW5cbiAgICAgIHRoaXMua2V5UGFpciA9IEVDUGFpci5mcm9tUHVibGljS2V5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwdWJsaWMga2V5OiAnICsgcHViKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlbmRlZCBwdWJsaWMga2V5LCBhbmQgdGhlIHByaXZhdGUga2V5IGlmIG9uZSBpcyBhdmFpbGFibGUuIFRoaXMgaXMgb25seSBwb3NzaWJsZVxuICAgKiB3aGVuIHRoZSBrZXkgcGFpciB3YXMgY3JlYXRlZCBmcm9tIGEgc2VlZCBvciBleHRlbmRlZCBrZXlzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RXh0ZW5kZWRLZXlzfSBUaGUgRXh0ZW5kZWQga2V5cyBvYmplY3RcbiAgICovXG4gIGdldEV4dGVuZGVkS2V5cygpOiBFeHRlbmRlZEtleXMge1xuICAgIGlmICghdGhpcy5oZE5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCBleHRlbmRlZCBrZXlzJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogRXh0ZW5kZWRLZXlzID0ge1xuICAgICAgeHB1YjogdGhpcy5oZE5vZGUubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgIH07XG4gICAgLy8gQSBuZXV0ZXJlZCBIRCBub2RlIG1lYW5zIGl0IG9ubHkgY29udGFpbnMgdGhlIHB1YmxpYyBrZXkgaW5mb3JtYXRpb25cbiAgICBpZiAoIXRoaXMuaGROb2RlLmlzTmV1dGVyZWQoKSkge1xuICAgICAgcmVzdWx0LnhwcnYgPSB0aGlzLmhkTm9kZS50b0Jhc2U1OCgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0QWRkcmVzcyhmb3JtYXQ/OiBBZGRyZXNzRm9ybWF0KTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignZ2V0QWRkcmVzcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGdldEtleXMoKTogYW55IHtcbiAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcignZ2V0S2V5cyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './baseCoin';
2
+ export * from './util/crypto';
3
+ export * from './util/ed25519KeyDeriver';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/account-lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./baseCoin"), exports);
14
+ __exportStar(require("./util/crypto"), exports);
15
+ __exportStar(require("./util/ed25519KeyDeriver"), exports);
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWNjb3VudC1saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQTJCO0FBQzNCLGdEQUE4QjtBQUM5QiwyREFBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2VDb2luJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbC9jcnlwdG8nO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsL2VkMjU1MTlLZXlEZXJpdmVyJztcbiJdfQ==
@@ -0,0 +1,106 @@
1
+ /// <reference types="node" />
2
+ import { ExtendedKeys } from '../baseCoin/iface';
3
+ /**
4
+ * @param {string} xpub - a base-58 encoded extended public key (BIP32)
5
+ * @returns {string} the uncompressed public key in hexadecimal
6
+ */
7
+ export declare function xpubToUncompressedPub(xpub: string): string;
8
+ /**
9
+ * @param {string} xprv - base58-encoded extended private key (BIP32)
10
+ * @returns {string} the hex-encoded raw private key
11
+ */
12
+ export declare function xprvToRawPrv(xprv: string): string;
13
+ /**
14
+ * @param {string} prv - Private key in hex format to get the extended keys for
15
+ * @returns {ExtendedKeys} xprv and xpub in string format
16
+ */
17
+ export declare function rawPrvToExtendedKeys(prv: string): ExtendedKeys;
18
+ /**
19
+ * Whether the input is a valid BIP32 xpub or not
20
+ *
21
+ * @param xpub
22
+ */
23
+ export declare function isValidXpub(xpub: string): boolean;
24
+ /**
25
+ * Whether the input is a valid BIP32 xprv or not
26
+ *
27
+ * @param xprv
28
+ */
29
+ export declare function isValidXprv(xprv: string): boolean;
30
+ /**
31
+ * Whether the input is a valid secp256k1 public key
32
+ *
33
+ * @param pub
34
+ */
35
+ export declare function isValidPub(pub: string): boolean;
36
+ /**
37
+ * Whether the input is a valid secp256k1 private key
38
+ *
39
+ * @param prv
40
+ */
41
+ export declare function isValidPrv(prv: string): boolean;
42
+ /**
43
+ * Whether the input is a valid ed25519 private key
44
+ *
45
+ * @param {string} prv A hexadecimal private key to validate
46
+ * @returns {boolean} Whether the input is a valid public key or not
47
+ */
48
+ export declare function isValidEd25519Seed(prv: string): boolean;
49
+ /**
50
+ * Whether the input is a valid ed25519 private key
51
+ *
52
+ * @param {string} prv A hexadecimal private key to validate
53
+ * @returns {boolean} Whether the input is a valid public key or not
54
+ */
55
+ export declare function isValidEd25519SecretKey(prv: string): boolean;
56
+ /**
57
+ * Whether the input is a valid ed25519 public key
58
+ *
59
+ * @param {string} pub A hexadecimal public key to validate
60
+ * @returns {boolean} Whether the input is a valid public key or not
61
+ */
62
+ export declare function isValidEd25519PublicKey(pub: string): boolean;
63
+ /**
64
+ * Whether the input is a valid BLS private key
65
+ *
66
+ * @param {string} prv a private key to validate
67
+ * @returns {boolean} Whether the input is a valid private key or not
68
+ */
69
+ export declare function isValidBLSPrivateKey(prv: string): boolean;
70
+ /**
71
+ * Whether input is a valid BLS public key
72
+ *
73
+ * @param {string} pub the public key to validate
74
+ * @returns {boolean} Whether input is a valid public key or not
75
+ */
76
+ export declare function isValidBLSPublicKey(pub: string): boolean;
77
+ /**
78
+ * Returns an hex string of the given buffer
79
+ *
80
+ * @param {Buffer | Uint8Array} buffer - the buffer to be converted to hex
81
+ * @returns {string} - the hex value
82
+ */
83
+ export declare function toHex(buffer: Buffer | Uint8Array): string;
84
+ /**
85
+ * Returns an hex string of the given bigint
86
+ *
87
+ * @param {bigint} bigint - the bigint to be converted to hex
88
+ * @returns {string} - the hex value
89
+ */
90
+ export declare function bigIntToHex(bigint: bigint): string;
91
+ /**
92
+ * Check if base58 decoded string is equale to length
93
+ *
94
+ * @param {string} value - string to be checked
95
+ * @param {number} length - expected decoded length
96
+ * @return {boolean} if the string can decoded as base58 and match the expected length
97
+ */
98
+ export declare function isBase58(value: string, length: number): boolean;
99
+ /**
100
+ * Returns a Uint8Array of the given hex string
101
+ *
102
+ * @param {string} str - the hex string to be converted
103
+ * @returns {string} - the Uint8Array value
104
+ */
105
+ export declare function toUint8Array(str: string): Uint8Array;
106
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../../src/account-lib/util/crypto.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUjD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYjD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOvD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAOxD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED;;;;;;GAMG;AAEH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM/D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAEpD"}
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.toUint8Array = exports.isBase58 = exports.bigIntToHex = exports.toHex = exports.isValidBLSPublicKey = exports.isValidBLSPrivateKey = exports.isValidEd25519PublicKey = exports.isValidEd25519SecretKey = exports.isValidEd25519Seed = exports.isValidPrv = exports.isValidPub = exports.isValidXprv = exports.isValidXpub = exports.rawPrvToExtendedKeys = exports.xprvToRawPrv = exports.xpubToUncompressedPub = void 0;
26
+ const bip32 = __importStar(require("bip32"));
27
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
28
+ const nacl = __importStar(require("tweetnacl"));
29
+ const hex = __importStar(require("@stablelib/hex"));
30
+ const bls = __importStar(require("noble-bls12-381"));
31
+ const strip_hex_prefix_1 = __importDefault(require("strip-hex-prefix"));
32
+ const bs58_1 = __importDefault(require("bs58"));
33
+ /**
34
+ * @param {string} xpub - a base-58 encoded extended public key (BIP32)
35
+ * @returns {string} the uncompressed public key in hexadecimal
36
+ */
37
+ function xpubToUncompressedPub(xpub) {
38
+ if (!isValidXpub(xpub)) {
39
+ throw new Error('invalid xpub');
40
+ }
41
+ return bitcoinjs_lib_1.ECPair.fromPublicKey(bip32.fromBase58(xpub, bitcoinjs_lib_1.networks.bitcoin).publicKey, {
42
+ compressed: false,
43
+ }).publicKey.toString('hex');
44
+ }
45
+ exports.xpubToUncompressedPub = xpubToUncompressedPub;
46
+ /**
47
+ * @param {string} xprv - base58-encoded extended private key (BIP32)
48
+ * @returns {string} the hex-encoded raw private key
49
+ */
50
+ function xprvToRawPrv(xprv) {
51
+ if (!isValidXprv(xprv)) {
52
+ throw new Error('invalid xprv');
53
+ }
54
+ const { privateKey } = bip32.fromBase58(xprv, bitcoinjs_lib_1.networks.bitcoin);
55
+ if (!privateKey) {
56
+ throw new Error('invalid xprv');
57
+ }
58
+ return privateKey.toString('hex');
59
+ }
60
+ exports.xprvToRawPrv = xprvToRawPrv;
61
+ /**
62
+ * @param {string} prv - Private key in hex format to get the extended keys for
63
+ * @returns {ExtendedKeys} xprv and xpub in string format
64
+ */
65
+ function rawPrvToExtendedKeys(prv) {
66
+ const hd = bip32.fromPrivateKey(Buffer.from(prv, 'hex'), Buffer.alloc(32));
67
+ return {
68
+ xprv: hd.toBase58(),
69
+ xpub: hd.neutered().toBase58(),
70
+ };
71
+ }
72
+ exports.rawPrvToExtendedKeys = rawPrvToExtendedKeys;
73
+ /**
74
+ * Whether the input is a valid BIP32 xpub or not
75
+ *
76
+ * @param xpub
77
+ */
78
+ function isValidXpub(xpub) {
79
+ if (xpub.substr(0, 4) !== 'xpub') {
80
+ // check for xpub formats we don't support, such as tpub
81
+ return false;
82
+ }
83
+ try {
84
+ bip32.fromBase58(xpub, bitcoinjs_lib_1.networks.bitcoin);
85
+ }
86
+ catch (err) {
87
+ return false;
88
+ }
89
+ // if HD generation didn't throw, it is a valid xpub
90
+ return true;
91
+ }
92
+ exports.isValidXpub = isValidXpub;
93
+ /**
94
+ * Whether the input is a valid BIP32 xprv or not
95
+ *
96
+ * @param xprv
97
+ */
98
+ function isValidXprv(xprv) {
99
+ if (xprv.substr(0, 4) !== 'xprv') {
100
+ // check for xprv formats we don't support
101
+ return false;
102
+ }
103
+ try {
104
+ bip32.fromBase58(xprv, bitcoinjs_lib_1.networks.bitcoin);
105
+ }
106
+ catch (err) {
107
+ return false;
108
+ }
109
+ // if HD generation didn't throw, it is a valid xprv
110
+ return true;
111
+ }
112
+ exports.isValidXprv = isValidXprv;
113
+ /**
114
+ * Whether the input is a valid secp256k1 public key
115
+ *
116
+ * @param pub
117
+ */
118
+ function isValidPub(pub) {
119
+ try {
120
+ bitcoinjs_lib_1.ECPair.fromPublicKey(Buffer.from(pub, 'hex'));
121
+ }
122
+ catch (e) {
123
+ return false;
124
+ }
125
+ return true;
126
+ }
127
+ exports.isValidPub = isValidPub;
128
+ /**
129
+ * Whether the input is a valid secp256k1 private key
130
+ *
131
+ * @param prv
132
+ */
133
+ function isValidPrv(prv) {
134
+ try {
135
+ bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(prv, 'hex'));
136
+ }
137
+ catch (e) {
138
+ return false;
139
+ }
140
+ return true;
141
+ }
142
+ exports.isValidPrv = isValidPrv;
143
+ /**
144
+ * Whether the input is a valid ed25519 private key
145
+ *
146
+ * @param {string} prv A hexadecimal private key to validate
147
+ * @returns {boolean} Whether the input is a valid public key or not
148
+ */
149
+ function isValidEd25519Seed(prv) {
150
+ try {
151
+ const decodedPrv = toUint8Array(prv);
152
+ return decodedPrv.length === nacl.sign.seedLength;
153
+ }
154
+ catch (e) {
155
+ return false;
156
+ }
157
+ }
158
+ exports.isValidEd25519Seed = isValidEd25519Seed;
159
+ /**
160
+ * Whether the input is a valid ed25519 private key
161
+ *
162
+ * @param {string} prv A hexadecimal private key to validate
163
+ * @returns {boolean} Whether the input is a valid public key or not
164
+ */
165
+ function isValidEd25519SecretKey(prv) {
166
+ try {
167
+ const decodedPrv = toUint8Array(prv);
168
+ return decodedPrv.length === nacl.sign.secretKeyLength;
169
+ }
170
+ catch (e) {
171
+ return false;
172
+ }
173
+ }
174
+ exports.isValidEd25519SecretKey = isValidEd25519SecretKey;
175
+ /**
176
+ * Whether the input is a valid ed25519 public key
177
+ *
178
+ * @param {string} pub A hexadecimal public key to validate
179
+ * @returns {boolean} Whether the input is a valid public key or not
180
+ */
181
+ function isValidEd25519PublicKey(pub) {
182
+ try {
183
+ const decodedPub = new Uint8Array(Buffer.from(pub, 'hex'));
184
+ return decodedPub.length === nacl.sign.publicKeyLength;
185
+ }
186
+ catch (e) {
187
+ return false;
188
+ }
189
+ }
190
+ exports.isValidEd25519PublicKey = isValidEd25519PublicKey;
191
+ /**
192
+ * Whether the input is a valid BLS private key
193
+ *
194
+ * @param {string} prv a private key to validate
195
+ * @returns {boolean} Whether the input is a valid private key or not
196
+ */
197
+ function isValidBLSPrivateKey(prv) {
198
+ try {
199
+ return bls.Fr.isValid(BigInt(prv));
200
+ }
201
+ catch (e) {
202
+ return false;
203
+ }
204
+ }
205
+ exports.isValidBLSPrivateKey = isValidBLSPrivateKey;
206
+ /**
207
+ * Whether input is a valid BLS public key
208
+ *
209
+ * @param {string} pub the public key to validate
210
+ * @returns {boolean} Whether input is a valid public key or not
211
+ */
212
+ function isValidBLSPublicKey(pub) {
213
+ try {
214
+ bls.PointG1.fromCompressedHex(strip_hex_prefix_1.default(pub)).assertValidity();
215
+ return true;
216
+ }
217
+ catch (e) {
218
+ return false;
219
+ }
220
+ }
221
+ exports.isValidBLSPublicKey = isValidBLSPublicKey;
222
+ /**
223
+ * Returns an hex string of the given buffer
224
+ *
225
+ * @param {Buffer | Uint8Array} buffer - the buffer to be converted to hex
226
+ * @returns {string} - the hex value
227
+ */
228
+ function toHex(buffer) {
229
+ return hex.encode(buffer, true);
230
+ }
231
+ exports.toHex = toHex;
232
+ /**
233
+ * Returns an hex string of the given bigint
234
+ *
235
+ * @param {bigint} bigint - the bigint to be converted to hex
236
+ * @returns {string} - the hex value
237
+ */
238
+ function bigIntToHex(bigint) {
239
+ const hex = bigint.toString(16);
240
+ return '0x' + '0'.slice(0, hex.length % 2) + hex;
241
+ }
242
+ exports.bigIntToHex = bigIntToHex;
243
+ /**
244
+ * Check if base58 decoded string is equale to length
245
+ *
246
+ * @param {string} value - string to be checked
247
+ * @param {number} length - expected decoded length
248
+ * @return {boolean} if the string can decoded as base58 and match the expected length
249
+ */
250
+ function isBase58(value, length) {
251
+ try {
252
+ return !!value && bs58_1.default.decode(value).length === length;
253
+ }
254
+ catch (e) {
255
+ return false;
256
+ }
257
+ }
258
+ exports.isBase58 = isBase58;
259
+ /**
260
+ * Returns a Uint8Array of the given hex string
261
+ *
262
+ * @param {string} str - the hex string to be converted
263
+ * @returns {string} - the Uint8Array value
264
+ */
265
+ function toUint8Array(str) {
266
+ return hex.decode(str);
267
+ }
268
+ exports.toUint8Array = toUint8Array;
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FjY291bnQtbGliL3V0aWwvY3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBK0I7QUFDL0IsaURBQWlEO0FBQ2pELGdEQUFrQztBQUNsQyxvREFBc0M7QUFDdEMscURBQXVDO0FBQ3ZDLHdFQUE4QztBQUU5QyxnREFBd0I7QUFFeEI7OztHQUdHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsSUFBWTtJQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDakM7SUFDRCxPQUFPLHNCQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLHdCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFO1FBQzlFLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFQRCxzREFPQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUNqQztJQUVELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSx3QkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0tBQ2pDO0lBQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENB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SUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoQyxPQUFPLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNuRCxDQUFDO0FBSEQsa0NBR0M7QUFFRDs7Ozs7O0dBTUc7QUFFSCxTQUFnQixRQUFRLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDcEQsSUFBSTtRQUNGLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxjQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUM7S0FDeEQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBTkQsNEJBTUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxHQUFXO0lBQ3RDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRkQsb0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXAzMiBmcm9tICdiaXAzMic7XG5pbXBvcnQgeyBFQ1BhaXIsIG5ldHdvcmtzIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgKiBhcyBoZXggZnJvbSAnQHN0YWJsZWxpYi9oZXgnO1xuaW1wb3J0ICogYXMgYmxzIGZyb20gJ25vYmxlLWJsczEyLTM4MSc7XG5pbXBvcnQgc3RyaXBIZXhQcmVmaXggZnJvbSAnc3RyaXAtaGV4LXByZWZpeCc7XG5pbXBvcnQgeyBFeHRlbmRlZEtleXMgfSBmcm9tICcuLi9iYXNlQ29pbi9pZmFjZSc7XG5pbXBvcnQgYnM1OCBmcm9tICdiczU4JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30geHB1YiAtIGEgYmFzZS01OCBlbmNvZGVkIGV4dGVuZGVkIHB1YmxpYyBrZXkgKEJJUDMyKVxuICogQHJldHVybnMge3N0cmluZ30gdGhlIHVuY29tcHJlc3NlZCBwdWJsaWMga2V5IGluIGhleGFkZWNpbWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4cHViVG9VbmNvbXByZXNzZWRQdWIoeHB1Yjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1ZhbGlkWHB1Yih4cHViKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB4cHViJyk7XG4gIH1cbiAgcmV0dXJuIEVDUGFpci5mcm9tUHVibGljS2V5KGJpcDMyLmZyb21CYXNlNTgoeHB1YiwgbmV0d29ya3MuYml0Y29pbikucHVibGljS2V5LCB7XG4gICAgY29tcHJlc3NlZDogZmFsc2UsXG4gIH0pLnB1YmxpY0tleS50b1N0cmluZygnaGV4Jyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHhwcnYgLSBiYXNlNTgtZW5jb2RlZCBleHRlbmRlZCBwcml2YXRlIGtleSAoQklQMzIpXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgaGV4LWVuY29kZWQgcmF3IHByaXZhdGUga2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4cHJ2VG9SYXdQcnYoeHBydjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpc1ZhbGlkWHBydih4cHJ2KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB4cHJ2Jyk7XG4gIH1cblxuICBjb25zdCB7IHByaXZhdGVLZXkgfSA9IGJpcDMyLmZyb21CYXNlNTgoeHBydiwgbmV0d29ya3MuYml0Y29pbik7XG4gIGlmICghcHJpdmF0ZUtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB4cHJ2Jyk7XG4gIH1cbiAgcmV0dXJuIHByaXZhdGVLZXkudG9TdHJpbmcoJ2hleCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgLSBQcml2YXRlIGtleSBpbiBoZXggZm9ybWF0IHRvIGdldCB0aGUgZXh0ZW5kZWQga2V5cyBmb3JcbiAqIEByZXR1cm5zIHtFeHRlbmRlZEtleXN9IHhwcnYgYW5kIHhwdWIgaW4gc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmF3UHJ2VG9FeHRlbmRlZEtleXMocHJ2OiBzdHJpbmcpOiBFeHRlbmRlZEtleXMge1xuICBjb25zdCBoZCA9IGJpcDMyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpLCBCdWZmZXIuYWxsb2MoMzIpKTtcbiAgcmV0dXJuIHtcbiAgICB4cHJ2OiBoZC50b0Jhc2U1OCgpLFxuICAgIHhwdWI6IGhkLm5ldXRlcmVkKCkudG9CYXNlNTgoKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIEJJUDMyIHhwdWIgb3Igbm90XG4gKlxuICogQHBhcmFtIHhwdWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRYcHViKHhwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoeHB1Yi5zdWJzdHIoMCwgNCkgIT09ICd4cHViJykge1xuICAgIC8vIGNoZWNrIGZvciB4cHViIGZvcm1hdHMgd2UgZG9uJ3Qgc3VwcG9ydCwgc3VjaCBhcyB0cHViXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgYmlwMzIuZnJvbUJhc2U1OCh4cHViLCBuZXR3b3Jrcy5iaXRjb2luKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGlmIEhEIGdlbmVyYXRpb24gZGlkbid0IHRocm93LCBpdCBpcyBhIHZhbGlkIHhwdWJcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBCSVAzMiB4cHJ2IG9yIG5vdFxuICpcbiAqIEBwYXJhbSB4cHJ2XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkWHBydih4cHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHhwcnYuc3Vic3RyKDAsIDQpICE9PSAneHBydicpIHtcbiAgICAvLyBjaGVjayBmb3IgeHBydiBmb3JtYXRzIHdlIGRvbid0IHN1cHBvcnRcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBiaXAzMi5mcm9tQmFzZTU4KHhwcnYsIG5ldHdvcmtzLmJpdGNvaW4pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWYgSEQgZ2VuZXJhdGlvbiBkaWRuJ3QgdGhyb3csIGl0IGlzIGEgdmFsaWQgeHBydlxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIHNlY3AyNTZrMSBwdWJsaWMga2V5XG4gKlxuICogQHBhcmFtIHB1YlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIEVDUGFpci5mcm9tUHVibGljS2V5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIHNlY3AyNTZrMSBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSBwcnZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBFQ1BhaXIuZnJvbVByaXZhdGVLZXkoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgZWQyNTUxOSBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgQSBoZXhhZGVjaW1hbCBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgcHVibGljIGtleSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZDI1NTE5U2VlZChwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRlY29kZWRQcnYgPSB0b1VpbnQ4QXJyYXkocHJ2KTtcbiAgICByZXR1cm4gZGVjb2RlZFBydi5sZW5ndGggPT09IG5hY2wuc2lnbi5zZWVkTGVuZ3RoO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBlZDI1NTE5IHByaXZhdGUga2V5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBydiBBIGhleGFkZWNpbWFsIHByaXZhdGUga2V5IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBwdWJsaWMga2V5IG9yIG5vdFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEVkMjU1MTlTZWNyZXRLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkUHJ2ID0gdG9VaW50OEFycmF5KHBydik7XG4gICAgcmV0dXJuIGRlY29kZWRQcnYubGVuZ3RoID09PSBuYWNsLnNpZ24uc2VjcmV0S2V5TGVuZ3RoO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgaW5wdXQgaXMgYSB2YWxpZCBlZDI1NTE5IHB1YmxpYyBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHViIEEgaGV4YWRlY2ltYWwgcHVibGljIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgcHVibGljIGtleSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVjb2RlZFB1YiA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgICByZXR1cm4gZGVjb2RlZFB1Yi5sZW5ndGggPT09IG5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGg7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRoZSBpbnB1dCBpcyBhIHZhbGlkIEJMUyBwcml2YXRlIGtleVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgYSBwcml2YXRlIGtleSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGlucHV0IGlzIGEgdmFsaWQgcHJpdmF0ZSBrZXkgb3Igbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQkxTUHJpdmF0ZUtleShwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiBibHMuRnIuaXNWYWxpZChCaWdJbnQocHJ2KSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGlucHV0IGlzIGEgdmFsaWQgQkxTIHB1YmxpYyBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHViIHRoZSBwdWJsaWMga2V5IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBpbnB1dCBpcyBhIHZhbGlkIHB1YmxpYyBrZXkgb3Igbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQkxTUHVibGljS2V5KHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgYmxzLlBvaW50RzEuZnJvbUNvbXByZXNzZWRIZXgoc3RyaXBIZXhQcmVmaXgocHViKSkuYXNzZXJ0VmFsaWRpdHkoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaGV4IHN0cmluZyBvZiB0aGUgZ2l2ZW4gYnVmZmVyXG4gKlxuICogQHBhcmFtIHtCdWZmZXIgfCBVaW50OEFycmF5fSBidWZmZXIgLSB0aGUgYnVmZmVyIHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9IZXgoYnVmZmVyOiBCdWZmZXIgfCBVaW50OEFycmF5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGhleC5lbmNvZGUoYnVmZmVyLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGhleCBzdHJpbmcgb2YgdGhlIGdpdmVuIGJpZ2ludFxuICpcbiAqIEBwYXJhbSB7YmlnaW50fSBiaWdpbnQgLSB0aGUgYmlnaW50IHRvIGJlIGNvbnZlcnRlZCB0byBoZXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gdGhlIGhleCB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50VG9IZXgoYmlnaW50OiBiaWdpbnQpOiBzdHJpbmcge1xuICBjb25zdCBoZXggPSBiaWdpbnQudG9TdHJpbmcoMTYpO1xuICByZXR1cm4gJzB4JyArICcwJy5zbGljZSgwLCBoZXgubGVuZ3RoICUgMikgKyBoZXg7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYmFzZTU4IGRlY29kZWQgc3RyaW5nIGlzIGVxdWFsZSB0byBsZW5ndGhcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBzdHJpbmcgdG8gYmUgY2hlY2tlZFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIGV4cGVjdGVkIGRlY29kZWQgbGVuZ3RoXG4gKiBAcmV0dXJuIHtib29sZWFufSBpZiB0aGUgc3RyaW5nIGNhbiBkZWNvZGVkIGFzIGJhc2U1OCBhbmQgbWF0Y2ggdGhlIGV4cGVjdGVkIGxlbmd0aFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jhc2U1OCh2YWx1ZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiAhIXZhbHVlICYmIGJzNTguZGVjb2RlKHZhbHVlKS5sZW5ndGggPT09IGxlbmd0aDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBVaW50OEFycmF5IG9mIHRoZSBnaXZlbiBoZXggc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIHRoZSBoZXggc3RyaW5nIHRvIGJlIGNvbnZlcnRlZFxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgVWludDhBcnJheSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9VaW50OEFycmF5KHN0cjogc3RyaW5nKTogVWludDhBcnJheSB7XG4gIHJldHVybiBoZXguZGVjb2RlKHN0cik7XG59XG4iXX0=
@@ -0,0 +1,49 @@
1
+ /// <reference types="node" />
2
+ export interface HdKeypair {
3
+ key: Buffer;
4
+ chainCode: Buffer;
5
+ }
6
+ /**
7
+ * Heirarchical determinisitic key derivation for the ed25519 elliptic curve,
8
+ * as defined in SLIP-0010.
9
+ *
10
+ * https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md
11
+ * https://github.com/satoshilabs/slips/blob/master/slip-0010.md
12
+ */
13
+ export declare class Ed25519KeyDeriver {
14
+ /**
15
+ * This key derivation code was copied and adapted from:
16
+ * https://github.com/chatch/stellar-hd-wallet/blob/612c12325ca9047dce460016fb7d148f55f575ca/src/hd-key.js
17
+ *
18
+ * There have been some slight modifications to improve typescript support.
19
+ *
20
+ * The original ed25519-hd-key module is licensed under "GPL-3".
21
+ */
22
+ private static readonly ED25519_CURVE;
23
+ private static readonly HARDENED_OFFSET;
24
+ private static readonly PATH_REGEX;
25
+ /**
26
+ * Derive a SLIP-0010 key given a path and master key seed.
27
+ *
28
+ * @param path derivation path
29
+ * @param seed key seed
30
+ */
31
+ static derivePath(path: string, seed: string): HdKeypair;
32
+ /**
33
+ * Generate a SLIP-0010 master key from the entropy seed
34
+ *
35
+ * @param seed master key seed used to recreate master key
36
+ */
37
+ private static getMasterKeyFromSeed;
38
+ /**
39
+ * Calculate a child private key given the parent key, the chain code, and the child index.
40
+ *
41
+ * @param key parent key
42
+ * @param chainCode chain code for parent key
43
+ * @param index index of child to derive
44
+ */
45
+ private static CKDPriv;
46
+ private static replaceDerive;
47
+ private static isValidPath;
48
+ }
49
+ //# sourceMappingURL=ed25519KeyDeriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519KeyDeriver.d.ts","sourceRoot":"","sources":["../../../../src/account-lib/util/ed25519KeyDeriver.ts"],"names":[],"mappings":";AAKA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAkB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAEpE;;;;;OAKG;WACW,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;IAY/D;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAatB,OAAO,CAAC,MAAM,CAAC,aAAa,CAA+D;IAC3F,OAAO,CAAC,MAAM,CAAC,WAAW;CAM3B"}