@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 @@
1
+ {"version":3,"file":"SeedId.js","sourceRoot":"","sources":["../src/SeedId.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { CommandStream, Device } from ".";
2
+ import { IndexedTree } from "./IndexedTree";
3
+ /**
4
+ *
5
+ */
6
+ export interface ApplicationStreams {
7
+ appStream: CommandStream;
8
+ appRootStream: CommandStream;
9
+ }
10
+ /**
11
+ *
12
+ */
13
+ export interface StreamTreeCreateOpts {
14
+ topic?: Uint8Array;
15
+ }
16
+ /**
17
+ *
18
+ */
19
+ export interface PublishKeyEvent {
20
+ stream: CommandStream;
21
+ encryptedXpriv: Uint8Array;
22
+ groupPublicKey: Uint8Array;
23
+ ephemeralPublicKey: Uint8Array;
24
+ nonce: Uint8Array;
25
+ }
26
+ /**
27
+ *
28
+ */
29
+ export declare class StreamTree {
30
+ private tree;
31
+ constructor(tree: IndexedTree<CommandStream>);
32
+ getApplicationRootPath(applicationId: number, increment?: number): string;
33
+ getPublishKeyEvent(member: Uint8Array, path: number[]): Promise<PublishKeyEvent | null>;
34
+ getChild(path: string | number[]): CommandStream | null;
35
+ getRoot(): CommandStream;
36
+ /**
37
+ * Share a private key with a member
38
+ */
39
+ share(path: string | number[], owner: Device, member: Uint8Array, name: string, permission: number): Promise<StreamTree>;
40
+ /**
41
+ * Close a stream
42
+ */
43
+ close(path: string | number[], owner: Device): Promise<StreamTree>;
44
+ update(stream: CommandStream): StreamTree;
45
+ serialize(): Record<string, string>;
46
+ static deserialize(data: Record<string, string>): StreamTree;
47
+ static createNewTree(owner: Device, opts?: StreamTreeCreateOpts): Promise<StreamTree>;
48
+ static from(...streams: CommandStream[]): StreamTree;
49
+ }
50
+ //# sourceMappingURL=StreamTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamTree.d.ts","sourceRoot":"","sources":["../src/StreamTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8C,MAAM,EAAE,MAAM,GAAG,CAAC;AAEtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,UAAU,CAAC;IAC3B,kBAAkB,EAAE,UAAU,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAA6B;gBAE7B,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAOrC,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,MAAM;IAatE,kBAAkB,CAC7B,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA0B3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,aAAa,GAAG,IAAI;IAUvD,OAAO,IAAI,aAAa;IAI/B;;OAEG;IACU,KAAK,CAChB,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,CAAC;IAsBtB;;OAEG;IACU,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQxE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU;IAUzC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAuB1C,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,UAAU;WAO/C,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC;IAU/F,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,EAAE,aAAa,EAAE,GAAG,UAAU;CAoBrD"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.StreamTree = void 0;
13
+ const _1 = require(".");
14
+ const Crypto_1 = require("./Crypto");
15
+ const IndexedTree_1 = require("./IndexedTree");
16
+ /**
17
+ *
18
+ */
19
+ class StreamTree {
20
+ constructor(tree) {
21
+ if (tree.getValue() === null) {
22
+ throw new Error("Root of the tree cannot be null");
23
+ }
24
+ this.tree = tree;
25
+ }
26
+ getApplicationRootPath(applicationId, increment = 0) {
27
+ var _a;
28
+ // tree index is always 0 in the current implementation
29
+ const treeIndex = 0;
30
+ // for application index, we have key rotation that is possible so we need to find the last index
31
+ const child = (_a = this.tree
32
+ .getChild(Crypto_1.DerivationPath.hardenedIndex(treeIndex))) === null || _a === void 0 ? void 0 : _a.getChild(Crypto_1.DerivationPath.hardenedIndex(applicationId));
33
+ const applicationIndex = child
34
+ ? Crypto_1.DerivationPath.reverseHardenedIndex(child.getHighestIndex())
35
+ : 0;
36
+ return `m/${treeIndex}'/${applicationId}'/${applicationIndex + increment}'`;
37
+ }
38
+ getPublishKeyEvent(member, path) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ // Iterate over the tree from leaf to root
41
+ const leaf = this.tree.findChild(path);
42
+ if (!leaf || leaf.getValue() === null) {
43
+ if (path.length === 0) {
44
+ return null;
45
+ }
46
+ return this.getPublishKeyEvent(member, path.slice(0, path.length - 1));
47
+ }
48
+ const resolved = yield leaf.getValue().resolve();
49
+ const key = resolved.getEncryptedKey(member);
50
+ if (!key) {
51
+ if (path.length === 0) {
52
+ return null;
53
+ }
54
+ return this.getPublishKeyEvent(member, path.slice(0, path.length - 1));
55
+ }
56
+ return {
57
+ stream: leaf.getValue(),
58
+ encryptedXpriv: key.encryptedXpriv,
59
+ ephemeralPublicKey: key.ephemeralPublicKey,
60
+ nonce: key.initialiationVector,
61
+ groupPublicKey: resolved.getGroupPublicKey(),
62
+ };
63
+ });
64
+ }
65
+ getChild(path) {
66
+ const indexes = typeof path === "string" ? Crypto_1.DerivationPath.toIndexArray(path) : path;
67
+ const subtree = this.tree.findChild(indexes);
68
+ if (subtree === undefined) {
69
+ return null;
70
+ }
71
+ return subtree.getValue();
72
+ }
73
+ getRoot() {
74
+ return this.tree.getValue();
75
+ }
76
+ /**
77
+ * Share a private key with a member
78
+ */
79
+ share(path, owner, member, name, permission) {
80
+ return __awaiter(this, void 0, void 0, function* () {
81
+ const indexes = typeof path === "string" ? Crypto_1.DerivationPath.toIndexArray(path) : path;
82
+ let stream = this.getChild(indexes) || new _1.CommandStream();
83
+ if (stream.blocks.length === 0 && indexes.length > 0) {
84
+ const root = yield this.getRoot().getRootHash();
85
+ stream = yield stream
86
+ .edit()
87
+ .derive(indexes)
88
+ .addMember(name, member, permission, true)
89
+ .issue(owner, this, root);
90
+ return this.update(stream);
91
+ }
92
+ else if (stream.blocks.length === 0) {
93
+ throw new Error("StreamTree.share cannot add a member if the root was not previously created");
94
+ }
95
+ else {
96
+ const newStream = yield stream.edit().addMember(name, member, permission).issue(owner, this);
97
+ return this.update(newStream);
98
+ }
99
+ });
100
+ }
101
+ /**
102
+ * Close a stream
103
+ */
104
+ close(path, owner) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ const indexes = typeof path === "string" ? Crypto_1.DerivationPath.toIndexArray(path) : path;
107
+ let stream = this.getChild(indexes) || new _1.CommandStream();
108
+ stream = yield stream.edit().close().issue(owner, this);
109
+ return this.update(stream);
110
+ });
111
+ }
112
+ update(stream) {
113
+ const path = stream.getStreamPath();
114
+ if (path === null)
115
+ throw new Error("Stream path cannot be null");
116
+ const indexes = Crypto_1.DerivationPath.toIndexArray(path);
117
+ const newTree = this.tree.updateChild(indexes, stream);
118
+ return new StreamTree(newTree);
119
+ }
120
+ serialize() {
121
+ const streamEntries = serializeTree(this.tree, []);
122
+ const entries = streamEntries.flatMap(([path, stream]) => stream ? [[path, Crypto_1.crypto.to_hex(_1.CommandStreamEncoder.encode(stream.blocks))]] : []);
123
+ return Object.fromEntries(entries);
124
+ function serializeTree(tree, path) {
125
+ const stream = tree.getValue();
126
+ const childrens = tree.getChildren();
127
+ return [
128
+ [Crypto_1.DerivationPath.toString(path), stream],
129
+ ...Array.from(childrens.entries()).flatMap(([index, child]) => serializeTree(child, [...path, index])),
130
+ ];
131
+ }
132
+ }
133
+ static deserialize(data) {
134
+ const streams = Object.values(data).map(data => new _1.CommandStream(_1.CommandStreamDecoder.decode(Crypto_1.crypto.from_hex(data))));
135
+ return StreamTree.from(...streams);
136
+ }
137
+ static createNewTree(owner_1) {
138
+ return __awaiter(this, arguments, void 0, function* (owner, opts = {}) {
139
+ let stream = new _1.CommandStream();
140
+ const streamToIssue = stream.edit().seed(opts.topic);
141
+ stream = yield streamToIssue.issue(owner);
142
+ const tree = new IndexedTree_1.IndexedTree(stream);
143
+ return new StreamTree(tree);
144
+ });
145
+ }
146
+ static from(...streams) {
147
+ // Map all stream with their path
148
+ const streamMap = new Map();
149
+ streams.forEach(stream => {
150
+ const path = stream.getStreamPath();
151
+ if (path === null)
152
+ throw new Error("Stream path cannot be null");
153
+ streamMap.set(path, stream);
154
+ });
155
+ // Create tree if the list contains the root
156
+ const root = streamMap.get("");
157
+ if (root === undefined)
158
+ throw new Error("StreamTree.from requires the root of the tree");
159
+ let tree = new IndexedTree_1.IndexedTree(root);
160
+ streamMap.delete("");
161
+ streamMap.forEach((stream, path) => {
162
+ const p = Crypto_1.DerivationPath.toIndexArray(path);
163
+ tree = tree.addChild(p, new IndexedTree_1.IndexedTree(stream));
164
+ });
165
+ return new StreamTree(tree);
166
+ }
167
+ }
168
+ exports.StreamTree = StreamTree;
169
+ //# sourceMappingURL=StreamTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamTree.js","sourceRoot":"","sources":["../src/StreamTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Device } from ".";
2
+ import { StreamTree } from "./StreamTree";
3
+ /**
4
+ *
5
+ */
6
+ export declare enum StreamTreeCipherMode {
7
+ AES_256_CBC = 0,
8
+ AES_256_GCM = 1
9
+ }
10
+ /**
11
+ *
12
+ */
13
+ export declare class StreamTreeCipher {
14
+ private _mode;
15
+ private _device;
16
+ constructor(mode: StreamTreeCipherMode, device: Device);
17
+ get mode(): StreamTreeCipherMode;
18
+ /**
19
+ * Encrypts a message for a given path in the tree
20
+ * @param tree
21
+ * @param path
22
+ * @param message
23
+ * @param nonce optional nonce to use for the encryption (if null a random nonce will be generated)
24
+ * @returns the encrypted message with the nonce prepended (1 byte for the nonce length + nonce + 33 bytes ephemeral key + encrypted message + 4 bytes checksum)
25
+ * @throws Error if the cipher mode is not implemented
26
+ * @throws Error if the path is not found in the tree and can't be derived from the device
27
+ */
28
+ encrypt(tree: StreamTree, path: number[], message: Uint8Array, nonce?: Uint8Array | null): Promise<Uint8Array>;
29
+ private getGroupKeypair;
30
+ private encodeData;
31
+ private decodeData;
32
+ /**
33
+ * Decrypts a message for a given path in the tree
34
+ * @param tree
35
+ * @param path
36
+ * @param encrytedPayload
37
+ * @returns the decrypted message
38
+ * @throws Error if the cipher mode is not implemented
39
+ * @throws Error if the path is not found in the tree and can't be derived from the device
40
+ * @throws Error if the checksum is invalid
41
+ */
42
+ decrypt(tree: StreamTree, path: number[], encrytedPayload: Uint8Array): Promise<Uint8Array>;
43
+ private computeChecksum;
44
+ static create(device: Device, mode?: StreamTreeCipherMode): StreamTreeCipher;
45
+ }
46
+ //# sourceMappingURL=StreamTreeCipher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamTreeCipher.d.ts","sourceRoot":"","sources":["../src/StreamTreeCipher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,GAAG,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,WAAW,IAAO;IAClB,WAAW,IAAO;CACnB;AAYD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAKtD,IAAI,IAAI,IAAI,oBAAoB,CAE/B;IAED;;;;;;;;;OASG;IACG,OAAO,CACX,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,UAAU,EACnB,KAAK,GAAE,UAAU,GAAG,IAAW,GAC9B,OAAO,CAAC,UAAU,CAAC;YAgCR,eAAe;YAmBf,UAAU;IA4BxB,OAAO,CAAC,UAAU;IAkBlB;;;;;;;;;OASG;IACG,OAAO,CACX,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EAAE,EACd,eAAe,EAAE,UAAU,GAC1B,OAAO,CAAC,UAAU,CAAC;YAgCR,eAAe;IAK7B,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,oBAAuD,GAC5D,gBAAgB;CAGpB"}
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.StreamTreeCipher = exports.StreamTreeCipherMode = void 0;
13
+ const _1 = require(".");
14
+ /**
15
+ *
16
+ */
17
+ var StreamTreeCipherMode;
18
+ (function (StreamTreeCipherMode) {
19
+ StreamTreeCipherMode[StreamTreeCipherMode["AES_256_CBC"] = 0] = "AES_256_CBC";
20
+ StreamTreeCipherMode[StreamTreeCipherMode["AES_256_GCM"] = 1] = "AES_256_GCM";
21
+ })(StreamTreeCipherMode || (exports.StreamTreeCipherMode = StreamTreeCipherMode = {}));
22
+ const TAG_LENGTH = 16;
23
+ /**
24
+ *
25
+ */
26
+ class StreamTreeCipher {
27
+ constructor(mode, device) {
28
+ this._mode = mode;
29
+ this._device = device;
30
+ }
31
+ get mode() {
32
+ return this._mode;
33
+ }
34
+ /**
35
+ * Encrypts a message for a given path in the tree
36
+ * @param tree
37
+ * @param path
38
+ * @param message
39
+ * @param nonce optional nonce to use for the encryption (if null a random nonce will be generated)
40
+ * @returns the encrypted message with the nonce prepended (1 byte for the nonce length + nonce + 33 bytes ephemeral key + encrypted message + 4 bytes checksum)
41
+ * @throws Error if the cipher mode is not implemented
42
+ * @throws Error if the path is not found in the tree and can't be derived from the device
43
+ */
44
+ encrypt(tree_1, path_1, message_1) {
45
+ return __awaiter(this, arguments, void 0, function* (tree, path, message, nonce = null) {
46
+ if (nonce === null) {
47
+ nonce = yield _1.crypto.randomBytes(16);
48
+ }
49
+ // Generate ephemeral key pair
50
+ const ephemeralKeyPair = yield _1.crypto.randomKeypair();
51
+ // Get the group public key
52
+ const groupKeypair = yield this.getGroupKeypair(tree, path);
53
+ // Compute the secret via ECDH
54
+ const secret = yield _1.crypto.ecdh(ephemeralKeyPair, groupKeypair.publicKey);
55
+ let encrypted = new Uint8Array(0);
56
+ switch (this._mode) {
57
+ case StreamTreeCipherMode.AES_256_CBC: {
58
+ encrypted = yield _1.crypto.encrypt(secret, nonce, message);
59
+ break;
60
+ }
61
+ case StreamTreeCipherMode.AES_256_GCM: {
62
+ encrypted = yield _1.crypto.encrypt(secret, nonce, message);
63
+ break;
64
+ }
65
+ default:
66
+ throw new Error("Unknown cipher mode");
67
+ }
68
+ // Serialize encrypted data
69
+ return this.encodeData(ephemeralKeyPair.publicKey, nonce, encrypted, message);
70
+ });
71
+ }
72
+ getGroupKeypair(tree, path) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ if (!this._device.isPublicKeyAvailable()) {
75
+ throw new Error("Stream tree cipher is only available for software devices");
76
+ }
77
+ const member = yield this._device.getPublicKey();
78
+ const event = yield tree.getPublishKeyEvent(member.publicKey, path);
79
+ if (!event) {
80
+ throw new Error("Cannot find key in the tree for the current device");
81
+ }
82
+ // Compute the relative path from the event to the path parameter
83
+ const privateKey = (yield this._device.readKey(tree, path)).slice(0, 32);
84
+ const publicKey = (yield _1.crypto.keypairFromSecretKey(privateKey)).publicKey;
85
+ return { privateKey, publicKey };
86
+ });
87
+ }
88
+ encodeData(ephemeralPublicKey, nonce, data, message) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const result = new Uint8Array(1 + 33 + nonce.length + TAG_LENGTH + data.length);
91
+ let offset = 0;
92
+ // Version
93
+ result[offset] = this._mode;
94
+ offset += 1;
95
+ // Ephemeral public key
96
+ result.set(ephemeralPublicKey, offset);
97
+ offset += ephemeralPublicKey.length;
98
+ // Nonce/IV
99
+ result.set(nonce, offset);
100
+ offset += nonce.length;
101
+ // Checksum
102
+ if (this._mode == StreamTreeCipherMode.AES_256_CBC) {
103
+ const checksum = yield this.computeChecksum(message);
104
+ result.set(checksum, offset);
105
+ offset += checksum.length;
106
+ }
107
+ // Encrypted data
108
+ result.set(data, offset);
109
+ return result;
110
+ });
111
+ }
112
+ decodeData(payload) {
113
+ const version = payload[0];
114
+ let offset = 1;
115
+ const ephemeralPublicKey = payload.slice(offset, offset + 33);
116
+ offset += 33;
117
+ const nonce = payload.slice(offset, offset + 16);
118
+ offset += 16;
119
+ const checksum = payload.slice(payload.length - 16, payload.length);
120
+ const encrypted = payload.slice(offset, payload.length - 16);
121
+ return {
122
+ version,
123
+ ephemeralPublicKey,
124
+ nonce,
125
+ encrypted,
126
+ checksum,
127
+ };
128
+ }
129
+ /**
130
+ * Decrypts a message for a given path in the tree
131
+ * @param tree
132
+ * @param path
133
+ * @param encrytedPayload
134
+ * @returns the decrypted message
135
+ * @throws Error if the cipher mode is not implemented
136
+ * @throws Error if the path is not found in the tree and can't be derived from the device
137
+ * @throws Error if the checksum is invalid
138
+ */
139
+ decrypt(tree, path, encrytedPayload) {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ const decodedPayload = this.decodeData(encrytedPayload);
142
+ const ephemeralKey = decodedPayload.ephemeralPublicKey;
143
+ const nonce = decodedPayload.nonce;
144
+ const encryptedMessage = decodedPayload.encrypted;
145
+ const checksum = decodedPayload.checksum;
146
+ const sharedKeyPair = yield this.getGroupKeypair(tree, path);
147
+ const secret = yield _1.crypto.ecdh(sharedKeyPair, ephemeralKey);
148
+ let decrypted = new Uint8Array(0);
149
+ switch (this._mode) {
150
+ case StreamTreeCipherMode.AES_256_CBC: {
151
+ decrypted = yield _1.crypto.decrypt(secret, nonce, encryptedMessage);
152
+ const computedChecksum = yield this.computeChecksum(decrypted);
153
+ if (_1.crypto.to_hex(computedChecksum) !== _1.crypto.to_hex(checksum)) {
154
+ throw new Error("Invalid checksum");
155
+ }
156
+ break;
157
+ }
158
+ case StreamTreeCipherMode.AES_256_GCM: {
159
+ decrypted = yield _1.crypto.decrypt(secret, nonce, encryptedMessage);
160
+ break;
161
+ }
162
+ default:
163
+ throw new Error("Unknown cipher mode");
164
+ }
165
+ return decrypted;
166
+ });
167
+ }
168
+ computeChecksum(message) {
169
+ return __awaiter(this, void 0, void 0, function* () {
170
+ const hash = yield _1.crypto.hash(message);
171
+ return hash.slice(0, 16);
172
+ });
173
+ }
174
+ static create(device, mode = StreamTreeCipherMode.AES_256_GCM) {
175
+ return new StreamTreeCipher(mode, device);
176
+ }
177
+ }
178
+ exports.StreamTreeCipher = StreamTreeCipher;
179
+ //# sourceMappingURL=StreamTreeCipher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamTreeCipher.js","sourceRoot":"","sources":["../src/StreamTreeCipher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/__tests__/codec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const CommandBlock_1 = require("../CommandBlock");
13
+ const tlv_1 = require("../tlv");
14
+ const CommandStreamDecoder_1 = require("../CommandStreamDecoder");
15
+ const CommandStreamEncoder_1 = require("../CommandStreamEncoder");
16
+ const Crypto_1 = require("../Crypto");
17
+ const __1 = require("..");
18
+ describe("Encode/Decode command stream tester", () => {
19
+ it("should encode and decode a byte", () => __awaiter(void 0, void 0, void 0, function* () {
20
+ const byte = 42;
21
+ let buffer = new Uint8Array();
22
+ buffer = tlv_1.TLV.pushByte(buffer, 42);
23
+ const decoded = tlv_1.TLV.readVarInt(tlv_1.TLV.readTLV(buffer, 0));
24
+ expect(decoded.value).toBe(byte);
25
+ }));
26
+ it("should encode and decode a Int32", () => __awaiter(void 0, void 0, void 0, function* () {
27
+ const varint = 0xdeadbeef;
28
+ let buffer = new Uint8Array();
29
+ buffer = tlv_1.TLV.pushInt32(buffer, varint);
30
+ const decoded = tlv_1.TLV.readVarInt(tlv_1.TLV.readTLV(buffer, 0));
31
+ expect(decoded.value).toBe(varint);
32
+ }));
33
+ it("should encode and decode a string", () => __awaiter(void 0, void 0, void 0, function* () {
34
+ const str = "Hello World";
35
+ let buffer = new Uint8Array();
36
+ buffer = tlv_1.TLV.pushString(buffer, str);
37
+ const decoded = tlv_1.TLV.readString(tlv_1.TLV.readTLV(buffer, 0));
38
+ expect(decoded.value).toBe(str);
39
+ }));
40
+ it("should encode and decode a hash", () => __awaiter(void 0, void 0, void 0, function* () {
41
+ const hash = yield Crypto_1.crypto.hash(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]));
42
+ let buffer = new Uint8Array();
43
+ buffer = tlv_1.TLV.pushHash(buffer, hash);
44
+ const decoded = tlv_1.TLV.readHash(tlv_1.TLV.readTLV(buffer, 0));
45
+ expect(Crypto_1.crypto.to_hex(decoded.value)).toEqual(Crypto_1.crypto.to_hex(hash));
46
+ }));
47
+ it("should encode and decode bytes", () => __awaiter(void 0, void 0, void 0, function* () {
48
+ const bytes = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
49
+ let buffer = new Uint8Array();
50
+ buffer = tlv_1.TLV.pushBytes(buffer, bytes);
51
+ const decoded = tlv_1.TLV.readBytes(tlv_1.TLV.readTLV(buffer, 0));
52
+ expect(decoded.value).toEqual(bytes);
53
+ }));
54
+ it("should encode and decode a signature", () => __awaiter(void 0, void 0, void 0, function* () {
55
+ const alice = yield Crypto_1.crypto.randomKeypair();
56
+ const block = yield (0, CommandBlock_1.signCommandBlock)(yield (0, CommandBlock_1.createCommandBlock)(alice.publicKey, []), alice.publicKey, alice.privateKey);
57
+ let buffer = new Uint8Array();
58
+ buffer = tlv_1.TLV.pushSignature(buffer, block.signature);
59
+ const decoded = tlv_1.TLV.readSignature(tlv_1.TLV.readTLV(buffer, 0));
60
+ expect(decoded.value).toEqual(block.signature);
61
+ }));
62
+ it("should encode and decode a public key", () => __awaiter(void 0, void 0, void 0, function* () {
63
+ const alice = yield Crypto_1.crypto.randomKeypair();
64
+ let buffer = new Uint8Array();
65
+ buffer = tlv_1.TLV.pushPublicKey(buffer, alice.publicKey);
66
+ const decoded = tlv_1.TLV.readPublicKey(tlv_1.TLV.readTLV(buffer, 0));
67
+ expect(decoded.value).toEqual(alice.publicKey);
68
+ }));
69
+ it("should encode and decode a stream. Encoding/Decoding should not alter the stream", () => __awaiter(void 0, void 0, void 0, function* () {
70
+ const alice = yield Crypto_1.crypto.randomKeypair();
71
+ const groupPk = yield Crypto_1.crypto.randomKeypair();
72
+ const groupChainCode = yield Crypto_1.crypto.randomBytes(32);
73
+ const xpriv = new Uint8Array(64);
74
+ const initializationVector = yield Crypto_1.crypto.randomBytes(16);
75
+ xpriv.set(groupPk.privateKey);
76
+ xpriv.set(groupChainCode, 32);
77
+ const ephemeralPk = yield Crypto_1.crypto.randomKeypair();
78
+ const block1 = yield (0, CommandBlock_1.signCommandBlock)(yield (0, CommandBlock_1.createCommandBlock)(alice.publicKey, [
79
+ new CommandBlock_1.Seed(yield Crypto_1.crypto.randomBytes(16), 0, groupPk.publicKey, initializationVector, xpriv, ephemeralPk.publicKey),
80
+ ]), alice.publicKey, alice.privateKey);
81
+ const block2 = yield (0, CommandBlock_1.signCommandBlock)(yield (0, CommandBlock_1.createCommandBlock)(alice.publicKey, [
82
+ new CommandBlock_1.AddMember("Alice", yield Crypto_1.crypto.randomBytes(32), CommandBlock_1.Permissions.OWNER),
83
+ new CommandBlock_1.PublishKey(yield Crypto_1.crypto.randomBytes(16), yield Crypto_1.crypto.randomBytes(32), yield Crypto_1.crypto.randomBytes(32), yield Crypto_1.crypto.randomBytes(32)),
84
+ ]), alice.publicKey, alice.privateKey);
85
+ const block3 = yield (0, CommandBlock_1.signCommandBlock)(yield (0, CommandBlock_1.createCommandBlock)(alice.publicKey, []), alice.publicKey, alice.privateKey);
86
+ const stream = [block1, block2, block3];
87
+ const encoded = CommandStreamEncoder_1.CommandStreamEncoder.encode(stream);
88
+ const digestEncoded = yield Crypto_1.crypto.hash(encoded);
89
+ const decoded = CommandStreamDecoder_1.CommandStreamDecoder.decode(encoded);
90
+ const reencoded = CommandStreamEncoder_1.CommandStreamEncoder.encode(decoded);
91
+ const digestReencoded = yield Crypto_1.crypto.hash(reencoded);
92
+ expect(digestEncoded).toEqual(digestReencoded);
93
+ }));
94
+ it("decodes a specific command stream", () => __awaiter(void 0, void 0, void 0, function* () {
95
+ const tlv = "0101010220824b3168c79e8b61b599751c107117b5c9b647f2b6859de8a245952559707692062102a13e82cd0d2f77d1ab1434d8bd799571e54cd32e1121c5cf82217f8b0b713b6b01010315a8050c800000008000001080000000062103ccf74aa7775b3d39d6cbb0236acee7a7f980b9f6a556a4d814d44b0bd56cb77b05108c51eda6be26623ca919ed17333afcdb054019c0b60ede1692479cc04ce69eae6a0bd51941bab6f044f3dec10c11cf11e6253504d1df6b0aab7dc1996e4eaa7c6f92c29153c59534578901cd7ff4efcea1ae06210268abdb3d49ba4a274ce8660cde0d1eeaf1fea00e281218be775f6b3aefc39756113a040f7765622d746f6f6c732d6563626638062103a270456b0f95714cc61a6473e6b6d8db354a3c377281096bdd2439a5475ecbf80104ffffffff129a05100e5205b4a616b2a4d79b07b4a4932f560540669e741f38fee07956fb0dc0ea9978d55bd5d8424b0d0f66a2c5a45788f92d0ddc283138c7ba62c521de1d604ee7f847c5aed40a11536bbe742af0be8cfd4132062103a270456b0f95714cc61a6473e6b6d8db354a3c377281096bdd2439a5475ecbf80621027003755248202ea8a67d1fcdcd82d7f7022248f3af892fa5307d3ea250dc81050346304402204422a779fd08723d8cba19c0cc11ef7a24f6f1f459cb01598ff1a26f27ea8976022053a554d4f509223f2d08faa5de796fed13a9762f35da08e94884edd1f7c0d015";
96
+ const decoded = CommandStreamDecoder_1.CommandStreamDecoder.decode(Crypto_1.crypto.from_hex(tlv));
97
+ const stream = new __1.CommandStream(decoded);
98
+ const resolved = yield stream.resolve();
99
+ expect(resolved.getMembersData()).toEqual([
100
+ {
101
+ id: "03a270456b0f95714cc61a6473e6b6d8db354a3c377281096bdd2439a5475ecbf8",
102
+ name: "web-tools-ecbf8",
103
+ permissions: 4294967295,
104
+ },
105
+ ]);
106
+ }));
107
+ });
108
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/__tests__/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/__tests__/crypto.ts"],"names":[],"mappings":""}