@ledgerhq/hw-ledger-key-ring-protocol 0.2.1-nightly.0

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 (225) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.unimportedrc.json +4 -0
  4. package/CHANGELOG.md +126 -0
  5. package/LICENSE.txt +21 -0
  6. package/README.md +3 -0
  7. package/jest.config.js +13 -0
  8. package/lib/ApduDevice.d.ts +99 -0
  9. package/lib/ApduDevice.d.ts.map +1 -0
  10. package/lib/ApduDevice.js +532 -0
  11. package/lib/ApduDevice.js.map +1 -0
  12. package/lib/BigEndian.d.ts +7 -0
  13. package/lib/BigEndian.d.ts.map +1 -0
  14. package/lib/BigEndian.js +26 -0
  15. package/lib/BigEndian.js.map +1 -0
  16. package/lib/CommandBlock.d.ts +114 -0
  17. package/lib/CommandBlock.d.ts.map +1 -0
  18. package/lib/CommandBlock.js +173 -0
  19. package/lib/CommandBlock.js.map +1 -0
  20. package/lib/CommandStream.d.ts +38 -0
  21. package/lib/CommandStream.d.ts.map +1 -0
  22. package/lib/CommandStream.js +197 -0
  23. package/lib/CommandStream.js.map +1 -0
  24. package/lib/CommandStreamDecoder.d.ts +15 -0
  25. package/lib/CommandStreamDecoder.d.ts.map +1 -0
  26. package/lib/CommandStreamDecoder.js +101 -0
  27. package/lib/CommandStreamDecoder.js.map +1 -0
  28. package/lib/CommandStreamEncoder.d.ts +16 -0
  29. package/lib/CommandStreamEncoder.d.ts.map +1 -0
  30. package/lib/CommandStreamEncoder.js +131 -0
  31. package/lib/CommandStreamEncoder.js.map +1 -0
  32. package/lib/CommandStreamJsonifier.d.ts +6 -0
  33. package/lib/CommandStreamJsonifier.d.ts.map +1 -0
  34. package/lib/CommandStreamJsonifier.js +75 -0
  35. package/lib/CommandStreamJsonifier.js.map +1 -0
  36. package/lib/CommandStreamResolver.d.ts +53 -0
  37. package/lib/CommandStreamResolver.d.ts.map +1 -0
  38. package/lib/CommandStreamResolver.js +221 -0
  39. package/lib/CommandStreamResolver.js.map +1 -0
  40. package/lib/Crypto.d.ts +38 -0
  41. package/lib/Crypto.d.ts.map +1 -0
  42. package/lib/Crypto.js +47 -0
  43. package/lib/Crypto.js.map +1 -0
  44. package/lib/Device.d.ts +43 -0
  45. package/lib/Device.d.ts.map +1 -0
  46. package/lib/Device.js +203 -0
  47. package/lib/Device.js.map +1 -0
  48. package/lib/IndexedTree.d.ts +13 -0
  49. package/lib/IndexedTree.d.ts.map +1 -0
  50. package/lib/IndexedTree.js +75 -0
  51. package/lib/IndexedTree.js.map +1 -0
  52. package/lib/NobleCrypto.d.ts +41 -0
  53. package/lib/NobleCrypto.d.ts.map +1 -0
  54. package/lib/NobleCrypto.js +298 -0
  55. package/lib/NobleCrypto.js.map +1 -0
  56. package/lib/PublicKey.d.ts +5 -0
  57. package/lib/PublicKey.d.ts.map +1 -0
  58. package/lib/PublicKey.js +10 -0
  59. package/lib/PublicKey.js.map +1 -0
  60. package/lib/SeedId.d.ts +80 -0
  61. package/lib/SeedId.d.ts.map +1 -0
  62. package/lib/SeedId.js +244 -0
  63. package/lib/SeedId.js.map +1 -0
  64. package/lib/StreamTree.d.ts +50 -0
  65. package/lib/StreamTree.d.ts.map +1 -0
  66. package/lib/StreamTree.js +169 -0
  67. package/lib/StreamTree.js.map +1 -0
  68. package/lib/StreamTreeCipher.d.ts +46 -0
  69. package/lib/StreamTreeCipher.d.ts.map +1 -0
  70. package/lib/StreamTreeCipher.js +179 -0
  71. package/lib/StreamTreeCipher.js.map +1 -0
  72. package/lib/__tests__/codec.d.ts +2 -0
  73. package/lib/__tests__/codec.d.ts.map +1 -0
  74. package/lib/__tests__/codec.js +108 -0
  75. package/lib/__tests__/codec.js.map +1 -0
  76. package/lib/__tests__/crypto.d.ts +2 -0
  77. package/lib/__tests__/crypto.d.ts.map +1 -0
  78. package/lib/__tests__/crypto.js +46 -0
  79. package/lib/__tests__/crypto.js.map +1 -0
  80. package/lib/__tests__/indexed_tree.d.ts +2 -0
  81. package/lib/__tests__/indexed_tree.d.ts.map +1 -0
  82. package/lib/__tests__/indexed_tree.js +45 -0
  83. package/lib/__tests__/indexed_tree.js.map +1 -0
  84. package/lib/__tests__/key_exchange.d.ts +2 -0
  85. package/lib/__tests__/key_exchange.d.ts.map +1 -0
  86. package/lib/__tests__/key_exchange.js +129 -0
  87. package/lib/__tests__/key_exchange.js.map +1 -0
  88. package/lib/__tests__/seedId.d.ts +2 -0
  89. package/lib/__tests__/seedId.d.ts.map +1 -0
  90. package/lib/__tests__/seedId.js +92 -0
  91. package/lib/__tests__/seedId.js.map +1 -0
  92. package/lib/__tests__/shared_object.d.ts +2 -0
  93. package/lib/__tests__/shared_object.d.ts.map +1 -0
  94. package/lib/__tests__/shared_object.js +78 -0
  95. package/lib/__tests__/shared_object.js.map +1 -0
  96. package/lib/index.d.ts +35 -0
  97. package/lib/index.d.ts.map +1 -0
  98. package/lib/index.js +81 -0
  99. package/lib/index.js.map +1 -0
  100. package/lib/tlv.d.ts +99 -0
  101. package/lib/tlv.d.ts.map +1 -0
  102. package/lib/tlv.js +150 -0
  103. package/lib/tlv.js.map +1 -0
  104. package/lib-es/ApduDevice.d.ts +99 -0
  105. package/lib-es/ApduDevice.d.ts.map +1 -0
  106. package/lib-es/ApduDevice.js +526 -0
  107. package/lib-es/ApduDevice.js.map +1 -0
  108. package/lib-es/BigEndian.d.ts +7 -0
  109. package/lib-es/BigEndian.d.ts.map +1 -0
  110. package/lib-es/BigEndian.js +23 -0
  111. package/lib-es/BigEndian.js.map +1 -0
  112. package/lib-es/CommandBlock.d.ts +114 -0
  113. package/lib-es/CommandBlock.d.ts.map +1 -0
  114. package/lib-es/CommandBlock.js +160 -0
  115. package/lib-es/CommandBlock.js.map +1 -0
  116. package/lib-es/CommandStream.d.ts +38 -0
  117. package/lib-es/CommandStream.d.ts.map +1 -0
  118. package/lib-es/CommandStream.js +189 -0
  119. package/lib-es/CommandStream.js.map +1 -0
  120. package/lib-es/CommandStreamDecoder.d.ts +15 -0
  121. package/lib-es/CommandStreamDecoder.d.ts.map +1 -0
  122. package/lib-es/CommandStreamDecoder.js +97 -0
  123. package/lib-es/CommandStreamDecoder.js.map +1 -0
  124. package/lib-es/CommandStreamEncoder.d.ts +16 -0
  125. package/lib-es/CommandStreamEncoder.d.ts.map +1 -0
  126. package/lib-es/CommandStreamEncoder.js +127 -0
  127. package/lib-es/CommandStreamEncoder.js.map +1 -0
  128. package/lib-es/CommandStreamJsonifier.d.ts +6 -0
  129. package/lib-es/CommandStreamJsonifier.d.ts.map +1 -0
  130. package/lib-es/CommandStreamJsonifier.js +72 -0
  131. package/lib-es/CommandStreamJsonifier.js.map +1 -0
  132. package/lib-es/CommandStreamResolver.d.ts +53 -0
  133. package/lib-es/CommandStreamResolver.d.ts.map +1 -0
  134. package/lib-es/CommandStreamResolver.js +216 -0
  135. package/lib-es/CommandStreamResolver.js.map +1 -0
  136. package/lib-es/Crypto.d.ts +38 -0
  137. package/lib-es/Crypto.d.ts.map +1 -0
  138. package/lib-es/Crypto.js +43 -0
  139. package/lib-es/Crypto.js.map +1 -0
  140. package/lib-es/Device.d.ts +43 -0
  141. package/lib-es/Device.d.ts.map +1 -0
  142. package/lib-es/Device.js +195 -0
  143. package/lib-es/Device.js.map +1 -0
  144. package/lib-es/IndexedTree.d.ts +13 -0
  145. package/lib-es/IndexedTree.d.ts.map +1 -0
  146. package/lib-es/IndexedTree.js +71 -0
  147. package/lib-es/IndexedTree.js.map +1 -0
  148. package/lib-es/NobleCrypto.d.ts +41 -0
  149. package/lib-es/NobleCrypto.d.ts.map +1 -0
  150. package/lib-es/NobleCrypto.js +267 -0
  151. package/lib-es/NobleCrypto.js.map +1 -0
  152. package/lib-es/PublicKey.d.ts +5 -0
  153. package/lib-es/PublicKey.d.ts.map +1 -0
  154. package/lib-es/PublicKey.js +6 -0
  155. package/lib-es/PublicKey.js.map +1 -0
  156. package/lib-es/SeedId.d.ts +80 -0
  157. package/lib-es/SeedId.d.ts.map +1 -0
  158. package/lib-es/SeedId.js +235 -0
  159. package/lib-es/SeedId.js.map +1 -0
  160. package/lib-es/StreamTree.d.ts +50 -0
  161. package/lib-es/StreamTree.d.ts.map +1 -0
  162. package/lib-es/StreamTree.js +165 -0
  163. package/lib-es/StreamTree.js.map +1 -0
  164. package/lib-es/StreamTreeCipher.d.ts +46 -0
  165. package/lib-es/StreamTreeCipher.d.ts.map +1 -0
  166. package/lib-es/StreamTreeCipher.js +175 -0
  167. package/lib-es/StreamTreeCipher.js.map +1 -0
  168. package/lib-es/__tests__/codec.d.ts +2 -0
  169. package/lib-es/__tests__/codec.d.ts.map +1 -0
  170. package/lib-es/__tests__/codec.js +106 -0
  171. package/lib-es/__tests__/codec.js.map +1 -0
  172. package/lib-es/__tests__/crypto.d.ts +2 -0
  173. package/lib-es/__tests__/crypto.d.ts.map +1 -0
  174. package/lib-es/__tests__/crypto.js +44 -0
  175. package/lib-es/__tests__/crypto.js.map +1 -0
  176. package/lib-es/__tests__/indexed_tree.d.ts +2 -0
  177. package/lib-es/__tests__/indexed_tree.d.ts.map +1 -0
  178. package/lib-es/__tests__/indexed_tree.js +43 -0
  179. package/lib-es/__tests__/indexed_tree.js.map +1 -0
  180. package/lib-es/__tests__/key_exchange.d.ts +2 -0
  181. package/lib-es/__tests__/key_exchange.d.ts.map +1 -0
  182. package/lib-es/__tests__/key_exchange.js +124 -0
  183. package/lib-es/__tests__/key_exchange.js.map +1 -0
  184. package/lib-es/__tests__/seedId.d.ts +2 -0
  185. package/lib-es/__tests__/seedId.d.ts.map +1 -0
  186. package/lib-es/__tests__/seedId.js +90 -0
  187. package/lib-es/__tests__/seedId.js.map +1 -0
  188. package/lib-es/__tests__/shared_object.d.ts +2 -0
  189. package/lib-es/__tests__/shared_object.d.ts.map +1 -0
  190. package/lib-es/__tests__/shared_object.js +76 -0
  191. package/lib-es/__tests__/shared_object.js.map +1 -0
  192. package/lib-es/index.d.ts +35 -0
  193. package/lib-es/index.d.ts.map +1 -0
  194. package/lib-es/index.js +32 -0
  195. package/lib-es/index.js.map +1 -0
  196. package/lib-es/tlv.d.ts +99 -0
  197. package/lib-es/tlv.d.ts.map +1 -0
  198. package/lib-es/tlv.js +144 -0
  199. package/lib-es/tlv.js.map +1 -0
  200. package/package.json +63 -0
  201. package/src/ApduDevice.ts +692 -0
  202. package/src/BigEndian.ts +25 -0
  203. package/src/CommandBlock.ts +247 -0
  204. package/src/CommandStream.ts +262 -0
  205. package/src/CommandStreamDecoder.ts +142 -0
  206. package/src/CommandStreamEncoder.ts +144 -0
  207. package/src/CommandStreamJsonifier.ts +82 -0
  208. package/src/CommandStreamResolver.ts +284 -0
  209. package/src/Crypto.ts +78 -0
  210. package/src/Device.ts +254 -0
  211. package/src/IndexedTree.ts +80 -0
  212. package/src/NobleCrypto.ts +294 -0
  213. package/src/PublicKey.ts +6 -0
  214. package/src/SeedId.ts +338 -0
  215. package/src/StreamTree.ts +212 -0
  216. package/src/StreamTreeCipher.ts +207 -0
  217. package/src/__tests__/codec.ts +146 -0
  218. package/src/__tests__/crypto.ts +44 -0
  219. package/src/__tests__/indexed_tree.ts +51 -0
  220. package/src/__tests__/key_exchange.ts +167 -0
  221. package/src/__tests__/seedId.ts +120 -0
  222. package/src/__tests__/shared_object.ts +118 -0
  223. package/src/index.ts +43 -0
  224. package/src/tlv.ts +210 -0
  225. package/tsconfig.json +14 -0
@@ -0,0 +1,43 @@
1
+ import { PublicKey } from "./PublicKey";
2
+ import { CommandBlock } from "./CommandBlock";
3
+ import { KeyPair } from "./Crypto";
4
+ import { StreamTree } from "./StreamTree";
5
+ /**
6
+ *
7
+ */
8
+ export interface Device {
9
+ getPublicKey(): Promise<PublicKey>;
10
+ /**
11
+ * Checks wether the public key can be directly fetched or if acquiring the public key
12
+ * requires a user action.
13
+ *
14
+ * @returns True if the public key is directly available, false otherwise
15
+ */
16
+ isPublicKeyAvailable(): boolean;
17
+ sign(stream: CommandBlock[], tree?: StreamTree): Promise<CommandBlock>;
18
+ /**
19
+ * Read the symmetric key from the stream tree at the given path. This function may not be implemented by all devices.
20
+ * @param tree The stream tree
21
+ * @param path The path to the key
22
+ * @returns The public key of the symmetric key
23
+ */
24
+ readKey(tree: StreamTree, path: number[]): Promise<Uint8Array>;
25
+ }
26
+ export declare class SoftwareDevice implements Device {
27
+ private keyPair;
28
+ constructor(kp: KeyPair);
29
+ getPublicKey(): Promise<PublicKey>;
30
+ private generateSharedKey;
31
+ private encryptSharedKey;
32
+ private decryptSharedKey;
33
+ private deriveKey;
34
+ sign(stream: CommandBlock[], tree?: StreamTree): Promise<CommandBlock>;
35
+ readKey(tree: StreamTree, path: number[]): Promise<Uint8Array>;
36
+ isPublicKeyAvailable(): boolean;
37
+ }
38
+ /**
39
+ *
40
+ */
41
+ export declare function createDevice(): Promise<Device>;
42
+ export declare const ISSUER_PLACEHOLDER: Uint8Array;
43
+ //# sourceMappingURL=Device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,YAAY,EAMb,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAA0B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,MAAM;IAErB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC;;;;;OAKG;IACH,oBAAoB,IAAI,OAAO,CAAC;IAGhC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAEvE;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AAcD,qBAAa,cAAe,YAAW,MAAM;IAC3C,OAAO,CAAC,OAAO,CAAU;gBAEb,EAAE,EAAE,OAAO;IAIjB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC;YAI1B,iBAAiB;YAMjB,gBAAgB;YAgBhB,gBAAgB;YAUhB,SAAS;IAmBjB,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAgGtE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IA4BpE,oBAAoB,IAAI,OAAO;CAGhC;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAGpD;AAED,eAAO,MAAM,kBAAkB,YAE7B,CAAC"}
@@ -0,0 +1,195 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { PublicKey } from "./PublicKey";
11
+ import { CommandType, signCommandBlock, } from "./CommandBlock";
12
+ import CommandStreamResolver from "./CommandStreamResolver";
13
+ import { crypto, DerivationPath } from "./Crypto";
14
+ export class SoftwareDevice {
15
+ constructor(kp) {
16
+ this.keyPair = kp;
17
+ }
18
+ getPublicKey() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ return new PublicKey(this.keyPair.publicKey);
21
+ });
22
+ }
23
+ generateSharedKey() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ const xpriv = yield crypto.randomBytes(64);
26
+ const pk = yield crypto.derivePrivate(xpriv, []);
27
+ return { xpriv, publicKey: pk.publicKey };
28
+ });
29
+ }
30
+ encryptSharedKey(sharedKey, recipient) {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ const kp = yield crypto.randomKeypair();
33
+ const ecdh = yield crypto.ecdh(kp, recipient);
34
+ const initializationVector = yield crypto.randomBytes(16);
35
+ const encryptedXpriv = yield crypto.encrypt(ecdh, initializationVector, sharedKey.xpriv);
36
+ return {
37
+ encryptedXpriv,
38
+ publicKey: sharedKey.publicKey,
39
+ ephemeralPublicKey: kp.publicKey,
40
+ initializationVector,
41
+ };
42
+ });
43
+ }
44
+ decryptSharedKey(encryptedSharedKey) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const ecdh = yield crypto.ecdh(this.keyPair, encryptedSharedKey.ephemeralPublicKey);
47
+ const xpriv = yield crypto.decrypt(ecdh, encryptedSharedKey.initializationVector, encryptedSharedKey.encryptedXpriv);
48
+ return { xpriv, publicKey: encryptedSharedKey.publicKey };
49
+ });
50
+ }
51
+ deriveKey(tree, path) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const event = yield tree.getPublishKeyEvent(this.keyPair.publicKey, path);
54
+ if (!event) {
55
+ throw new Error("Cannot find key in the tree for the current device");
56
+ }
57
+ const encryptedSharedKey = {
58
+ encryptedXpriv: event.encryptedXpriv,
59
+ publicKey: event.groupPublicKey,
60
+ ephemeralPublicKey: event.ephemeralPublicKey,
61
+ initializationVector: event.nonce,
62
+ };
63
+ const sharedKey = yield this.decryptSharedKey(encryptedSharedKey);
64
+ const newKey = yield crypto.derivePrivate(sharedKey.xpriv, path);
65
+ const xpriv = new Uint8Array(64);
66
+ xpriv.set(newKey.privateKey);
67
+ xpriv.set(newKey.chainCode, 32);
68
+ return { xpriv, publicKey: newKey.publicKey };
69
+ });
70
+ }
71
+ sign(stream, tree) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ if (stream.length === 0) {
74
+ throw new Error("Cannot sign an empty stream");
75
+ }
76
+ if (stream[stream.length - 1].commands.length === 0) {
77
+ throw new Error("Cannot sign an empty block");
78
+ }
79
+ const lastBlock = stream[stream.length - 1];
80
+ lastBlock.issuer = this.keyPair.publicKey;
81
+ // Resolve the stream (before the last block)
82
+ const resolved = yield CommandStreamResolver.resolve(stream.slice(0, stream.length - 1));
83
+ // The shared key of the stream
84
+ let sharedKey = null;
85
+ // Iterate through the commands to inject encrypted keys
86
+ for (let commandIndex = 0; commandIndex < lastBlock.commands.length; commandIndex++) {
87
+ const command = lastBlock.commands[commandIndex];
88
+ switch (command.getType()) {
89
+ case CommandType.Seed: {
90
+ // Generate the shared key
91
+ sharedKey = yield this.generateSharedKey();
92
+ // Encrypt the shared key and inject it in the command
93
+ const encryptedSharedKey = yield this.encryptSharedKey(sharedKey, this.keyPair.publicKey);
94
+ command.groupKey = sharedKey.publicKey;
95
+ command.encryptedXpriv = encryptedSharedKey.encryptedXpriv;
96
+ command.ephemeralPublicKey = encryptedSharedKey.ephemeralPublicKey;
97
+ command.initializationVector = encryptedSharedKey.initializationVector;
98
+ break;
99
+ }
100
+ case CommandType.Derive: {
101
+ // Derive the shared key from the tree
102
+ if (!tree) {
103
+ throw new Error("Cannot derive a key without a tree");
104
+ }
105
+ sharedKey = yield this.deriveKey(tree, command.path);
106
+ // Encrypt the shared key and inject it in the command
107
+ const encryptedDerivedKey = yield this.encryptSharedKey(sharedKey, this.keyPair.publicKey);
108
+ command.groupKey = sharedKey.publicKey;
109
+ command.encryptedXpriv = encryptedDerivedKey.encryptedXpriv;
110
+ command.initializationVector = encryptedDerivedKey.initializationVector;
111
+ command.ephemeralPublicKey = encryptedDerivedKey.ephemeralPublicKey;
112
+ break;
113
+ }
114
+ case CommandType.PublishKey: {
115
+ // Derive the shared key from the tree
116
+ if (!sharedKey) {
117
+ // If the current stream is the seed stream, read the key from the first command in the first block
118
+ const encryptedKey = resolved.getEncryptedKey(this.keyPair.publicKey);
119
+ if (encryptedKey) {
120
+ sharedKey = yield this.decryptSharedKey({
121
+ encryptedXpriv: encryptedKey.encryptedXpriv,
122
+ initializationVector: encryptedKey.initialiationVector,
123
+ publicKey: encryptedKey.issuer,
124
+ ephemeralPublicKey: encryptedKey.ephemeralPublicKey,
125
+ });
126
+ }
127
+ else if (stream[0].commands[0].getType() == CommandType.Seed) {
128
+ if (crypto.to_hex(stream[0].issuer) !== crypto.to_hex(this.keyPair.publicKey)) {
129
+ throw new Error("Cannot read the seed key from another device");
130
+ }
131
+ }
132
+ else {
133
+ // console.dir(stream, { depth: null });
134
+ sharedKey = yield this.deriveKey(tree, resolved.getStreamDerivationPath());
135
+ }
136
+ if (!sharedKey)
137
+ throw new Error("Cannot find the shared key");
138
+ }
139
+ const encryptedSharedKey = yield this.encryptSharedKey(sharedKey, command.recipient);
140
+ command.encryptedXpriv = encryptedSharedKey.encryptedXpriv;
141
+ command.initializationVector = encryptedSharedKey.initializationVector;
142
+ command.ephemeralPublicKey = encryptedSharedKey.ephemeralPublicKey;
143
+ break;
144
+ }
145
+ }
146
+ }
147
+ const signature = (yield signCommandBlock(lastBlock, (yield this.getPublicKey()).publicKey, this.keyPair.privateKey)).signature;
148
+ lastBlock.signature = signature;
149
+ return lastBlock;
150
+ });
151
+ }
152
+ readKey(tree, path) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ const event = yield tree.getPublishKeyEvent(this.keyPair.publicKey, path);
155
+ if (!event) {
156
+ throw new Error("Cannot find key in the tree for the current device");
157
+ }
158
+ const encryptedSharedKey = {
159
+ encryptedXpriv: event.encryptedXpriv,
160
+ initializationVector: event.nonce,
161
+ publicKey: event.groupPublicKey,
162
+ ephemeralPublicKey: event.ephemeralPublicKey,
163
+ };
164
+ const sharedKey = yield this.decryptSharedKey(encryptedSharedKey);
165
+ // Derive the key to match the path
166
+ let index = DerivationPath.toIndexArray(event.stream.getStreamPath()).length;
167
+ while (index < path.length) {
168
+ const derivation = yield crypto.derivePrivate(sharedKey.xpriv, [index]);
169
+ const xpriv = new Uint8Array(64);
170
+ xpriv.set(derivation.privateKey);
171
+ xpriv.set(derivation.chainCode, 32);
172
+ sharedKey.xpriv = xpriv;
173
+ sharedKey.publicKey = derivation.publicKey;
174
+ index += 1;
175
+ }
176
+ return sharedKey.xpriv;
177
+ });
178
+ }
179
+ isPublicKeyAvailable() {
180
+ return true;
181
+ }
182
+ }
183
+ /**
184
+ *
185
+ */
186
+ export function createDevice() {
187
+ return __awaiter(this, void 0, void 0, function* () {
188
+ const kp = yield crypto.randomKeypair();
189
+ return new SoftwareDevice(kp);
190
+ });
191
+ }
192
+ export const ISSUER_PLACEHOLDER = new Uint8Array([
193
+ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
194
+ ]);
195
+ //# sourceMappingURL=Device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Device.js","sourceRoot":"","sources":["../src/Device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare class IndexedTree<T> {
2
+ private node;
3
+ private children;
4
+ constructor(node: T | null, children?: Map<number, IndexedTree<T>>);
5
+ getHighestIndex(): number;
6
+ getChildren(): Map<number, IndexedTree<T>>;
7
+ getChild(index: number): IndexedTree<T> | undefined;
8
+ findChild(path: number[]): IndexedTree<T> | undefined;
9
+ getValue(): T | null;
10
+ updateChild(path: number[], value: T): IndexedTree<T>;
11
+ addChild(path: number[], child: IndexedTree<T>): IndexedTree<T>;
12
+ }
13
+ //# sourceMappingURL=IndexedTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexedTree.d.ts","sourceRoot":"","sources":["../src/IndexedTree.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,QAAQ,CAA8B;gBAElC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAa;IAKtE,eAAe,IAAI,MAAM;IAIzB,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;IAInD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;IAYrD,QAAQ,IAAI,CAAC,GAAG,IAAI;IAKpB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAmBrD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;CAsBvE"}
@@ -0,0 +1,71 @@
1
+ export class IndexedTree {
2
+ constructor(node, children = new Map()) {
3
+ this.node = node;
4
+ this.children = children;
5
+ }
6
+ getHighestIndex() {
7
+ return [...this.children.keys()].reduce((a, b) => Math.max(a, b), 0);
8
+ }
9
+ getChildren() {
10
+ return this.children;
11
+ }
12
+ getChild(index) {
13
+ return this.children.get(index);
14
+ }
15
+ findChild(path) {
16
+ if (path.length === 0) {
17
+ return this;
18
+ }
19
+ const index = path[0];
20
+ const rest = path.slice(1);
21
+ if (this.children.has(index)) {
22
+ return this.children.get(index).findChild(rest);
23
+ }
24
+ return undefined;
25
+ }
26
+ getValue() {
27
+ return this.node;
28
+ }
29
+ /// Update the value of the node, if the node doesn't exist, it will be created
30
+ updateChild(path, value) {
31
+ if (path.length === 0) {
32
+ return new IndexedTree(value, this.children);
33
+ }
34
+ const index = path[0];
35
+ const rest = path.slice(1);
36
+ const children = new Map(this.children);
37
+ if (this.children.has(index)) {
38
+ const subTree = this.children.get(index).updateChild(rest, value);
39
+ children.set(index, subTree);
40
+ }
41
+ else {
42
+ const subTree = new IndexedTree(null).updateChild(rest, value);
43
+ children.set(index, subTree);
44
+ }
45
+ return new IndexedTree(this.node, children);
46
+ }
47
+ /// Adds a subtree to the tree
48
+ addChild(path, child) {
49
+ if (path.length === 0) {
50
+ return this;
51
+ }
52
+ if (path.length == 1) {
53
+ const children = new Map(this.children);
54
+ children.set(path[0], child);
55
+ return new IndexedTree(this.node, children);
56
+ }
57
+ const index = path[0];
58
+ const rest = path.slice(1);
59
+ const children = new Map(this.children);
60
+ if (this.children.has(index)) {
61
+ const subTree = this.children.get(index).addChild(rest, child);
62
+ children.set(index, subTree);
63
+ }
64
+ else {
65
+ const subTree = new IndexedTree(null).addChild(rest, child);
66
+ children.set(index, subTree);
67
+ }
68
+ return new IndexedTree(this.node, children);
69
+ }
70
+ }
71
+ //# sourceMappingURL=IndexedTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IndexedTree.js","sourceRoot":"","sources":["../src/IndexedTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { Crypto, KeyPair, KeyPairWithChainCode } from "./Crypto";
2
+ export declare class NobleCryptoSecp256k1 implements Crypto {
3
+ randomKeypair(): Promise<KeyPair>;
4
+ derivePrivate(xpriv: Uint8Array, path: number[]): Promise<KeyPairWithChainCode>;
5
+ keypairFromSecretKey(secretKey: Uint8Array): Promise<KeyPair>;
6
+ private derEncode;
7
+ private derDecode;
8
+ sign(message: Uint8Array, keyPair: KeyPair): Promise<Uint8Array>;
9
+ verify(message: Uint8Array, signature: Uint8Array, publicKey: Uint8Array): Promise<boolean>;
10
+ private to_array;
11
+ private normalizeKey;
12
+ private normalizeNonce;
13
+ private concat;
14
+ private enforceLength;
15
+ private pad;
16
+ private unpad;
17
+ encrypt(secret: Uint8Array, nonce: Uint8Array, message: Uint8Array): Promise<Uint8Array>;
18
+ decrypt(secret: Uint8Array, nonce: Uint8Array, ciphertext: Uint8Array): Promise<Uint8Array>;
19
+ /**
20
+ * Ledger Live data are encrypted following pattern based on ECIES.
21
+ * For each encryption the Ledger Live instance generates a random keypair over secp256k1 (ephemeral public key)
22
+ * and a 16 bytes IV. Ledger Live then perform an ECDH between the command stream public key and
23
+ * the ephemeral private key to get the encryption key.
24
+ * The data is then encrypted using AES-256-GCM and serialized using the following format:
25
+ 1 byte : Version of the format (0x00)
26
+ 33 bytes : Compressed ephemeral public key
27
+ 16 bytes : Nonce/IV
28
+ 16 bytes : Tag/MAC (from AES-256-GCM)
29
+ variable : Encrypted data
30
+ */
31
+ encryptUserData(commandStreamPrivateKey: Uint8Array, data: Uint8Array): Promise<Uint8Array>;
32
+ decryptUserData(commandStreamPrivateKey: Uint8Array, data: Uint8Array): Promise<Uint8Array>;
33
+ randomBytes(size: number): Promise<Uint8Array>;
34
+ ecdh(keyPair: KeyPair, publicKey: Uint8Array): Promise<Uint8Array>;
35
+ computeSymmetricKey(privateKey: Uint8Array, extra: Uint8Array): Promise<Uint8Array>;
36
+ hash(message: Uint8Array): Promise<Uint8Array>;
37
+ from_hex(hex: string): Uint8Array;
38
+ to_hex(bytes?: Uint8Array | undefined | null): string;
39
+ }
40
+ export declare function to_hex(bytes?: Uint8Array | undefined | null): string;
41
+ //# sourceMappingURL=NobleCrypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NobleCrypto.d.ts","sourceRoot":"","sources":["../src/NobleCrypto.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAMjE,qBAAa,oBAAqB,YAAW,MAAM;IAC3C,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAQjC,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAc/E,oBAAoB,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAOnE,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,SAAS;IAYX,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAMhE,MAAM,CACV,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,OAAO,CAAC;IAMnB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,GAAG;IAYX,OAAO,CAAC,KAAK;IAaP,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAWxF,OAAO,CACX,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,CAAC;IAYtB;;;;;;;;;;;OAWG;IACG,eAAe,CACnB,uBAAuB,EAAE,UAAU,EACnC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC;IAmChB,eAAe,CACnB,uBAAuB,EAAE,UAAU,EACnC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC;IA2BhB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI9C,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAOlE,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAKnF,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpD,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IAQjC,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM;CAGtD;AAED,wBAAgB,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAKpE"}