@ledgerhq/hw-ledger-key-ring-protocol 0.2.1-fix-build-number-pre.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 (224) hide show
  1. package/.eslintrc.js +33 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/CHANGELOG.md +126 -0
  4. package/LICENSE.txt +21 -0
  5. package/README.md +3 -0
  6. package/jest.config.js +13 -0
  7. package/lib/ApduDevice.d.ts +99 -0
  8. package/lib/ApduDevice.d.ts.map +1 -0
  9. package/lib/ApduDevice.js +528 -0
  10. package/lib/ApduDevice.js.map +1 -0
  11. package/lib/BigEndian.d.ts +7 -0
  12. package/lib/BigEndian.d.ts.map +1 -0
  13. package/lib/BigEndian.js +26 -0
  14. package/lib/BigEndian.js.map +1 -0
  15. package/lib/CommandBlock.d.ts +114 -0
  16. package/lib/CommandBlock.d.ts.map +1 -0
  17. package/lib/CommandBlock.js +156 -0
  18. package/lib/CommandBlock.js.map +1 -0
  19. package/lib/CommandStream.d.ts +38 -0
  20. package/lib/CommandStream.d.ts.map +1 -0
  21. package/lib/CommandStream.js +195 -0
  22. package/lib/CommandStream.js.map +1 -0
  23. package/lib/CommandStreamDecoder.d.ts +15 -0
  24. package/lib/CommandStreamDecoder.d.ts.map +1 -0
  25. package/lib/CommandStreamDecoder.js +101 -0
  26. package/lib/CommandStreamDecoder.js.map +1 -0
  27. package/lib/CommandStreamEncoder.d.ts +16 -0
  28. package/lib/CommandStreamEncoder.d.ts.map +1 -0
  29. package/lib/CommandStreamEncoder.js +131 -0
  30. package/lib/CommandStreamEncoder.js.map +1 -0
  31. package/lib/CommandStreamJsonifier.d.ts +6 -0
  32. package/lib/CommandStreamJsonifier.d.ts.map +1 -0
  33. package/lib/CommandStreamJsonifier.js +75 -0
  34. package/lib/CommandStreamJsonifier.js.map +1 -0
  35. package/lib/CommandStreamResolver.d.ts +53 -0
  36. package/lib/CommandStreamResolver.d.ts.map +1 -0
  37. package/lib/CommandStreamResolver.js +221 -0
  38. package/lib/CommandStreamResolver.js.map +1 -0
  39. package/lib/Crypto.d.ts +38 -0
  40. package/lib/Crypto.d.ts.map +1 -0
  41. package/lib/Crypto.js +47 -0
  42. package/lib/Crypto.js.map +1 -0
  43. package/lib/Device.d.ts +43 -0
  44. package/lib/Device.d.ts.map +1 -0
  45. package/lib/Device.js +195 -0
  46. package/lib/Device.js.map +1 -0
  47. package/lib/IndexedTree.d.ts +13 -0
  48. package/lib/IndexedTree.d.ts.map +1 -0
  49. package/lib/IndexedTree.js +75 -0
  50. package/lib/IndexedTree.js.map +1 -0
  51. package/lib/NobleCrypto.d.ts +39 -0
  52. package/lib/NobleCrypto.d.ts.map +1 -0
  53. package/lib/NobleCrypto.js +240 -0
  54. package/lib/NobleCrypto.js.map +1 -0
  55. package/lib/PublicKey.d.ts +5 -0
  56. package/lib/PublicKey.d.ts.map +1 -0
  57. package/lib/PublicKey.js +10 -0
  58. package/lib/PublicKey.js.map +1 -0
  59. package/lib/SeedId.d.ts +80 -0
  60. package/lib/SeedId.d.ts.map +1 -0
  61. package/lib/SeedId.js +244 -0
  62. package/lib/SeedId.js.map +1 -0
  63. package/lib/StreamTree.d.ts +50 -0
  64. package/lib/StreamTree.d.ts.map +1 -0
  65. package/lib/StreamTree.js +169 -0
  66. package/lib/StreamTree.js.map +1 -0
  67. package/lib/StreamTreeCipher.d.ts +46 -0
  68. package/lib/StreamTreeCipher.d.ts.map +1 -0
  69. package/lib/StreamTreeCipher.js +175 -0
  70. package/lib/StreamTreeCipher.js.map +1 -0
  71. package/lib/__tests__/codec.d.ts +2 -0
  72. package/lib/__tests__/codec.d.ts.map +1 -0
  73. package/lib/__tests__/codec.js +108 -0
  74. package/lib/__tests__/codec.js.map +1 -0
  75. package/lib/__tests__/crypto.d.ts +2 -0
  76. package/lib/__tests__/crypto.d.ts.map +1 -0
  77. package/lib/__tests__/crypto.js +46 -0
  78. package/lib/__tests__/crypto.js.map +1 -0
  79. package/lib/__tests__/indexed_tree.d.ts +2 -0
  80. package/lib/__tests__/indexed_tree.d.ts.map +1 -0
  81. package/lib/__tests__/indexed_tree.js +45 -0
  82. package/lib/__tests__/indexed_tree.js.map +1 -0
  83. package/lib/__tests__/key_exchange.d.ts +2 -0
  84. package/lib/__tests__/key_exchange.d.ts.map +1 -0
  85. package/lib/__tests__/key_exchange.js +129 -0
  86. package/lib/__tests__/key_exchange.js.map +1 -0
  87. package/lib/__tests__/seedId.d.ts +2 -0
  88. package/lib/__tests__/seedId.d.ts.map +1 -0
  89. package/lib/__tests__/seedId.js +92 -0
  90. package/lib/__tests__/seedId.js.map +1 -0
  91. package/lib/__tests__/shared_object.d.ts +2 -0
  92. package/lib/__tests__/shared_object.d.ts.map +1 -0
  93. package/lib/__tests__/shared_object.js +78 -0
  94. package/lib/__tests__/shared_object.js.map +1 -0
  95. package/lib/index.d.ts +35 -0
  96. package/lib/index.d.ts.map +1 -0
  97. package/lib/index.js +81 -0
  98. package/lib/index.js.map +1 -0
  99. package/lib/tlv.d.ts +99 -0
  100. package/lib/tlv.d.ts.map +1 -0
  101. package/lib/tlv.js +150 -0
  102. package/lib/tlv.js.map +1 -0
  103. package/lib-es/ApduDevice.d.ts +99 -0
  104. package/lib-es/ApduDevice.d.ts.map +1 -0
  105. package/lib-es/ApduDevice.js +522 -0
  106. package/lib-es/ApduDevice.js.map +1 -0
  107. package/lib-es/BigEndian.d.ts +7 -0
  108. package/lib-es/BigEndian.d.ts.map +1 -0
  109. package/lib-es/BigEndian.js +23 -0
  110. package/lib-es/BigEndian.js.map +1 -0
  111. package/lib-es/CommandBlock.d.ts +114 -0
  112. package/lib-es/CommandBlock.d.ts.map +1 -0
  113. package/lib-es/CommandBlock.js +143 -0
  114. package/lib-es/CommandBlock.js.map +1 -0
  115. package/lib-es/CommandStream.d.ts +38 -0
  116. package/lib-es/CommandStream.d.ts.map +1 -0
  117. package/lib-es/CommandStream.js +187 -0
  118. package/lib-es/CommandStream.js.map +1 -0
  119. package/lib-es/CommandStreamDecoder.d.ts +15 -0
  120. package/lib-es/CommandStreamDecoder.d.ts.map +1 -0
  121. package/lib-es/CommandStreamDecoder.js +97 -0
  122. package/lib-es/CommandStreamDecoder.js.map +1 -0
  123. package/lib-es/CommandStreamEncoder.d.ts +16 -0
  124. package/lib-es/CommandStreamEncoder.d.ts.map +1 -0
  125. package/lib-es/CommandStreamEncoder.js +127 -0
  126. package/lib-es/CommandStreamEncoder.js.map +1 -0
  127. package/lib-es/CommandStreamJsonifier.d.ts +6 -0
  128. package/lib-es/CommandStreamJsonifier.d.ts.map +1 -0
  129. package/lib-es/CommandStreamJsonifier.js +72 -0
  130. package/lib-es/CommandStreamJsonifier.js.map +1 -0
  131. package/lib-es/CommandStreamResolver.d.ts +53 -0
  132. package/lib-es/CommandStreamResolver.d.ts.map +1 -0
  133. package/lib-es/CommandStreamResolver.js +216 -0
  134. package/lib-es/CommandStreamResolver.js.map +1 -0
  135. package/lib-es/Crypto.d.ts +38 -0
  136. package/lib-es/Crypto.d.ts.map +1 -0
  137. package/lib-es/Crypto.js +43 -0
  138. package/lib-es/Crypto.js.map +1 -0
  139. package/lib-es/Device.d.ts +43 -0
  140. package/lib-es/Device.d.ts.map +1 -0
  141. package/lib-es/Device.js +187 -0
  142. package/lib-es/Device.js.map +1 -0
  143. package/lib-es/IndexedTree.d.ts +13 -0
  144. package/lib-es/IndexedTree.d.ts.map +1 -0
  145. package/lib-es/IndexedTree.js +71 -0
  146. package/lib-es/IndexedTree.js.map +1 -0
  147. package/lib-es/NobleCrypto.d.ts +39 -0
  148. package/lib-es/NobleCrypto.d.ts.map +1 -0
  149. package/lib-es/NobleCrypto.js +209 -0
  150. package/lib-es/NobleCrypto.js.map +1 -0
  151. package/lib-es/PublicKey.d.ts +5 -0
  152. package/lib-es/PublicKey.d.ts.map +1 -0
  153. package/lib-es/PublicKey.js +6 -0
  154. package/lib-es/PublicKey.js.map +1 -0
  155. package/lib-es/SeedId.d.ts +80 -0
  156. package/lib-es/SeedId.d.ts.map +1 -0
  157. package/lib-es/SeedId.js +235 -0
  158. package/lib-es/SeedId.js.map +1 -0
  159. package/lib-es/StreamTree.d.ts +50 -0
  160. package/lib-es/StreamTree.d.ts.map +1 -0
  161. package/lib-es/StreamTree.js +165 -0
  162. package/lib-es/StreamTree.js.map +1 -0
  163. package/lib-es/StreamTreeCipher.d.ts +46 -0
  164. package/lib-es/StreamTreeCipher.d.ts.map +1 -0
  165. package/lib-es/StreamTreeCipher.js +171 -0
  166. package/lib-es/StreamTreeCipher.js.map +1 -0
  167. package/lib-es/__tests__/codec.d.ts +2 -0
  168. package/lib-es/__tests__/codec.d.ts.map +1 -0
  169. package/lib-es/__tests__/codec.js +106 -0
  170. package/lib-es/__tests__/codec.js.map +1 -0
  171. package/lib-es/__tests__/crypto.d.ts +2 -0
  172. package/lib-es/__tests__/crypto.d.ts.map +1 -0
  173. package/lib-es/__tests__/crypto.js +44 -0
  174. package/lib-es/__tests__/crypto.js.map +1 -0
  175. package/lib-es/__tests__/indexed_tree.d.ts +2 -0
  176. package/lib-es/__tests__/indexed_tree.d.ts.map +1 -0
  177. package/lib-es/__tests__/indexed_tree.js +43 -0
  178. package/lib-es/__tests__/indexed_tree.js.map +1 -0
  179. package/lib-es/__tests__/key_exchange.d.ts +2 -0
  180. package/lib-es/__tests__/key_exchange.d.ts.map +1 -0
  181. package/lib-es/__tests__/key_exchange.js +124 -0
  182. package/lib-es/__tests__/key_exchange.js.map +1 -0
  183. package/lib-es/__tests__/seedId.d.ts +2 -0
  184. package/lib-es/__tests__/seedId.d.ts.map +1 -0
  185. package/lib-es/__tests__/seedId.js +90 -0
  186. package/lib-es/__tests__/seedId.js.map +1 -0
  187. package/lib-es/__tests__/shared_object.d.ts +2 -0
  188. package/lib-es/__tests__/shared_object.d.ts.map +1 -0
  189. package/lib-es/__tests__/shared_object.js +76 -0
  190. package/lib-es/__tests__/shared_object.js.map +1 -0
  191. package/lib-es/index.d.ts +35 -0
  192. package/lib-es/index.d.ts.map +1 -0
  193. package/lib-es/index.js +32 -0
  194. package/lib-es/index.js.map +1 -0
  195. package/lib-es/tlv.d.ts +99 -0
  196. package/lib-es/tlv.d.ts.map +1 -0
  197. package/lib-es/tlv.js +144 -0
  198. package/lib-es/tlv.js.map +1 -0
  199. package/package.json +63 -0
  200. package/src/ApduDevice.ts +688 -0
  201. package/src/BigEndian.ts +25 -0
  202. package/src/CommandBlock.ts +244 -0
  203. package/src/CommandStream.ts +260 -0
  204. package/src/CommandStreamDecoder.ts +142 -0
  205. package/src/CommandStreamEncoder.ts +144 -0
  206. package/src/CommandStreamJsonifier.ts +82 -0
  207. package/src/CommandStreamResolver.ts +284 -0
  208. package/src/Crypto.ts +78 -0
  209. package/src/Device.ts +246 -0
  210. package/src/IndexedTree.ts +80 -0
  211. package/src/NobleCrypto.ts +255 -0
  212. package/src/PublicKey.ts +6 -0
  213. package/src/SeedId.ts +338 -0
  214. package/src/StreamTree.ts +212 -0
  215. package/src/StreamTreeCipher.ts +207 -0
  216. package/src/__tests__/codec.ts +146 -0
  217. package/src/__tests__/crypto.ts +44 -0
  218. package/src/__tests__/indexed_tree.ts +51 -0
  219. package/src/__tests__/key_exchange.ts +167 -0
  220. package/src/__tests__/seedId.ts +120 -0
  221. package/src/__tests__/shared_object.ts +118 -0
  222. package/src/index.ts +43 -0
  223. package/src/tlv.ts +210 -0
  224. package/tsconfig.json +14 -0
@@ -0,0 +1,46 @@
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 Crypto_1 = require("../Crypto");
13
+ describe("Sodium wrapper tester", () => {
14
+ it("should computes the same symetric key with ECDH using two parties", () => __awaiter(void 0, void 0, void 0, function* () {
15
+ const kp1 = yield Crypto_1.crypto.randomKeypair();
16
+ const kp2 = yield Crypto_1.crypto.randomKeypair();
17
+ const shared1 = yield Crypto_1.crypto.ecdh(kp1, kp2.publicKey);
18
+ const shared2 = yield Crypto_1.crypto.ecdh(kp2, kp1.publicKey);
19
+ expect(Crypto_1.crypto.to_hex(shared1)).toBe(Crypto_1.crypto.to_hex(shared2));
20
+ }));
21
+ it("should encrypt a message and decrypt using the same symmetric key", () => __awaiter(void 0, void 0, void 0, function* () {
22
+ //const message = "Hello world!"
23
+ const message = yield Crypto_1.crypto.randomBytes(64);
24
+ const key = yield Crypto_1.crypto.randomBytes(32);
25
+ const nonce = yield Crypto_1.crypto.randomBytes(16);
26
+ const encrypted = yield Crypto_1.crypto.encrypt(key, nonce, message);
27
+ const decrypted = yield Crypto_1.crypto.decrypt(key, nonce, encrypted);
28
+ expect(Crypto_1.crypto.to_hex(decrypted)).toBe(Crypto_1.crypto.to_hex(message));
29
+ }));
30
+ it("should encrypt user data", () => __awaiter(void 0, void 0, void 0, function* () {
31
+ const keypair = yield Crypto_1.crypto.randomKeypair();
32
+ const data = yield Crypto_1.crypto.randomBytes(64);
33
+ const encrypted = yield Crypto_1.crypto.encryptUserData(keypair.privateKey, data);
34
+ const decrypted = yield Crypto_1.crypto.decryptUserData(keypair.privateKey, encrypted);
35
+ expect(Crypto_1.crypto.to_hex(decrypted)).toBe(Crypto_1.crypto.to_hex(data));
36
+ }));
37
+ it("should verify truncated signature by padding 0s from the start", () => __awaiter(void 0, void 0, void 0, function* () {
38
+ const hash = Crypto_1.crypto.from_hex("19514a2e50bfad4a6de397ebde776191cbb720e8bbfcc3c165385c3664c03341");
39
+ const signature = Crypto_1.crypto.from_hex(
40
+ // Here the "S" part of the signature is only 31 bytes long it should be padded with a 0
41
+ "3043022052a82876fcd4d9d8383ce12a7e4d96bb4c1d9e71e857cd087c092b87cec6baeb021f6b86b9a3bab1e7794ca6ef081c66cb6e6dff06cceddbd23e1f25089e311784");
42
+ const issuer = Crypto_1.crypto.from_hex("026e7bf1e015da491674be5796b15d6fabd1f454aad478a6a223934e5a872719e0");
43
+ expect(yield Crypto_1.crypto.verify(hash, signature, issuer)).toBe(true);
44
+ }));
45
+ });
46
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/__tests__/crypto.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAAmC;AAEnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,mEAAmE,EAAE,GAAS,EAAE;QACjF,MAAM,GAAG,GAAG,MAAM,eAAM,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,eAAM,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAEtD,MAAM,CAAC,eAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAS,EAAE;QACjF,gCAAgC;QAChC,MAAM,OAAO,GAAG,MAAM,eAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,eAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,MAAM,eAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,eAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC9D,MAAM,CAAC,eAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAS,EAAE;QACxC,MAAM,OAAO,GAAG,MAAM,eAAM,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,eAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,eAAM,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,MAAM,eAAM,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC9E,MAAM,CAAC,eAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAS,EAAE;QAC9E,MAAM,IAAI,GAAG,eAAM,CAAC,QAAQ,CAC1B,kEAAkE,CACnE,CAAC;QACF,MAAM,SAAS,GAAG,eAAM,CAAC,QAAQ;QAC/B,wFAAwF;QACxF,4IAA4I,CAC7I,CAAC;QACF,MAAM,MAAM,GAAG,eAAM,CAAC,QAAQ,CAC5B,oEAAoE,CACrE,CAAC;QACF,MAAM,CAAC,MAAM,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=indexed_tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed_tree.d.ts","sourceRoot":"","sources":["../../src/__tests__/indexed_tree.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const IndexedTree_1 = require("../IndexedTree");
4
+ describe("Indexed tree unit test suite", () => {
5
+ it("should create a new tree with a root", () => {
6
+ const tree = new IndexedTree_1.IndexedTree(0);
7
+ expect(tree.getValue()).toBe(0);
8
+ });
9
+ it("should create a new tree with a root and update the root", () => {
10
+ let tree = new IndexedTree_1.IndexedTree(0);
11
+ tree = tree.updateChild([], 1);
12
+ expect(tree.getValue()).toBe(1);
13
+ });
14
+ it("should create a new tree with a root and update a child", () => {
15
+ let tree = new IndexedTree_1.IndexedTree(0);
16
+ tree = tree.updateChild([1], 1);
17
+ expect(tree.getChild(1).getValue()).toBe(1);
18
+ });
19
+ it("should create a tree with multiple children and update a child which had no value before", () => {
20
+ var _a, _b;
21
+ let tree = new IndexedTree_1.IndexedTree(0);
22
+ tree = tree.updateChild([0, 1], 1);
23
+ tree = tree.updateChild([0, 2], 2);
24
+ expect(tree.findChild([0, 1]).getValue()).toBe(1);
25
+ expect(tree.findChild([0, 2]).getValue()).toBe(2);
26
+ expect((_a = tree.getChild(0)) === null || _a === void 0 ? void 0 : _a.getValue()).toBe(null);
27
+ tree = tree.updateChild([0], 42);
28
+ expect((_b = tree.getChild(0)) === null || _b === void 0 ? void 0 : _b.getValue()).toBe(42);
29
+ });
30
+ it("should add a subtree to the tree", () => {
31
+ let tree = new IndexedTree_1.IndexedTree(0);
32
+ tree = tree.addChild([0, 1], new IndexedTree_1.IndexedTree(1));
33
+ tree = tree.addChild([0, 2], new IndexedTree_1.IndexedTree(2));
34
+ let subtree = new IndexedTree_1.IndexedTree(42);
35
+ subtree = subtree.updateChild([0], 43);
36
+ subtree = subtree.updateChild([1], 44);
37
+ tree = tree.addChild([0, 3], subtree);
38
+ expect(tree.findChild([0, 1]).getValue()).toBe(1);
39
+ expect(tree.findChild([0, 2]).getValue()).toBe(2);
40
+ expect(tree.findChild([0, 3]).getValue()).toBe(42);
41
+ expect(tree.findChild([0, 3, 0]).getValue()).toBe(43);
42
+ expect(tree.findChild([0, 3, 1]).getValue()).toBe(44);
43
+ });
44
+ });
45
+ //# sourceMappingURL=indexed_tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed_tree.js","sourceRoot":"","sources":["../../src/__tests__/indexed_tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=key_exchange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key_exchange.d.ts","sourceRoot":"","sources":["../../src/__tests__/key_exchange.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const Device_1 = require("../Device");
16
+ const CommandStream_1 = __importDefault(require("../CommandStream"));
17
+ const CommandBlock_1 = require("../CommandBlock");
18
+ const Crypto_1 = require("../Crypto");
19
+ const StreamTreeCipher_1 = require("../StreamTreeCipher");
20
+ const StreamTree_1 = require("../StreamTree");
21
+ const DEFAULT_TOPIC = "c96d450545ff2836204c29af291428a5bf740304978f5dfb0b4a261474192851";
22
+ describe("Symmetric key exchange scenarii", () => {
23
+ it("create a new group with 1 member", () => __awaiter(void 0, void 0, void 0, function* () {
24
+ const alice = yield (0, Device_1.createDevice)();
25
+ const topic = Crypto_1.crypto.from_hex(DEFAULT_TOPIC);
26
+ let stream = new CommandStream_1.default([]);
27
+ stream = yield stream.edit().seed(topic).issue(alice);
28
+ const resolved = yield stream.resolve();
29
+ expect(resolved.isCreated()).toBe(true);
30
+ expect(resolved.getMembers().length).toBe(1);
31
+ expect(resolved.getMembersData().length).toBe(0);
32
+ expect(Crypto_1.crypto.to_hex(resolved.getTopic())).toBe(Crypto_1.crypto.to_hex(topic));
33
+ //const parsed = CommandStreamDecoder.decode(CommandStreamEncoder.encode(stream.blocks));
34
+ //console.log(JSON.stringify(CommandStreamJsonifier.jsonify(parsed), null, 2));
35
+ //const raw = CommandStreamEncoder.encode(stream.blocks);
36
+ //console.log(crypto.to_hex(raw));
37
+ }));
38
+ it("create a group owned by Alice, Alice adds Bob and publish a key for Bob.", () => __awaiter(void 0, void 0, void 0, function* () {
39
+ const alice = yield (0, Device_1.createDevice)();
40
+ const bob = yield (0, Device_1.createDevice)();
41
+ let stream = new CommandStream_1.default();
42
+ stream = yield stream.edit().seed(Crypto_1.crypto.from_hex(DEFAULT_TOPIC)).issue(alice);
43
+ stream = yield stream
44
+ .edit()
45
+ .addMember("Bob", (yield bob.getPublicKey()).publicKey, CommandBlock_1.Permissions.KEY_READER)
46
+ .issue(alice);
47
+ const tree = StreamTree_1.StreamTree.from(stream);
48
+ // Encrypt a message from Alice
49
+ const originalMessage = new TextEncoder().encode("Hello World!");
50
+ const encryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(alice).encrypt(tree, [], originalMessage);
51
+ // The message should be different from the original
52
+ expect(Crypto_1.crypto.to_hex(encryptedMessage)).not.toEqual(Crypto_1.crypto.to_hex(originalMessage));
53
+ // Decrypt the message from Bob
54
+ const decryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(bob).decrypt(tree, [], encryptedMessage);
55
+ // The message should be the same as the original
56
+ expect(Crypto_1.crypto.to_hex(decryptedMessage)).toBe(Crypto_1.crypto.to_hex(originalMessage));
57
+ }));
58
+ it("create a group owned by Alice, Alice adds Bob and publish a key for Bob, Alice adds Charlie and Bob publishes a key for Charlie", () => __awaiter(void 0, void 0, void 0, function* () {
59
+ const alice = yield (0, Device_1.createDevice)();
60
+ const bob = yield (0, Device_1.createDevice)();
61
+ const charlie = yield (0, Device_1.createDevice)();
62
+ let stream = new CommandStream_1.default();
63
+ stream = yield stream.edit().seed(Crypto_1.crypto.from_hex(DEFAULT_TOPIC)).issue(alice);
64
+ stream = yield stream
65
+ .edit()
66
+ .addMember("Bob", (yield bob.getPublicKey()).publicKey, CommandBlock_1.Permissions.KEY_READER)
67
+ .issue(alice);
68
+ stream = yield stream
69
+ .edit()
70
+ .addMember("Charlie", (yield charlie.getPublicKey()).publicKey, CommandBlock_1.Permissions.KEY_READER)
71
+ .issue(alice);
72
+ const tree = StreamTree_1.StreamTree.from(stream);
73
+ // Encrypt a message from Alice
74
+ const originalMessage = new TextEncoder().encode("Hello World!");
75
+ const encryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(alice).encrypt(tree, [], originalMessage);
76
+ // The message should be different from the original
77
+ expect(Crypto_1.crypto.to_hex(encryptedMessage)).not.toBe(Crypto_1.crypto.to_hex(originalMessage));
78
+ {
79
+ // Decrypt the message from Bob
80
+ const decryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(bob).decrypt(tree, [], encryptedMessage);
81
+ // The message should be the same as the original
82
+ expect(Crypto_1.crypto.to_hex(decryptedMessage)).toBe(Crypto_1.crypto.to_hex(originalMessage));
83
+ }
84
+ {
85
+ // Decrypt the message from Charlie
86
+ const decryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(charlie).decrypt(tree, [], encryptedMessage);
87
+ // The message should be the same as the original
88
+ expect(Crypto_1.crypto.to_hex(decryptedMessage)).toBe(Crypto_1.crypto.to_hex(originalMessage));
89
+ }
90
+ //console.log(crypto.to_hex(CommandStreamEncoder.encode(stream.blocks)));
91
+ //const parsed = CommandStreamDecoder.decode(CommandStreamEncoder.encode(stream.blocks));
92
+ //console.log(JSON.stringify(CommandStreamJsonifier.jsonify(parsed), null, 2));
93
+ }));
94
+ it("creates group owned by Alice, Alice adds Bob as an admin, Bob adds Charlie", () => __awaiter(void 0, void 0, void 0, function* () {
95
+ const alice = yield (0, Device_1.createDevice)();
96
+ const bob = yield (0, Device_1.createDevice)();
97
+ const charlie = yield (0, Device_1.createDevice)();
98
+ let stream = new CommandStream_1.default();
99
+ stream = yield stream.edit().seed(Crypto_1.crypto.from_hex(DEFAULT_TOPIC)).issue(alice);
100
+ stream = yield stream
101
+ .edit()
102
+ .addMember("Bob", (yield bob.getPublicKey()).publicKey, CommandBlock_1.Permissions.ADD_MEMBER | CommandBlock_1.Permissions.KEY_READER)
103
+ .issue(alice);
104
+ stream = yield stream
105
+ .edit()
106
+ .addMember("Charlie", (yield charlie.getPublicKey()).publicKey, CommandBlock_1.Permissions.KEY_READER)
107
+ .issue(bob);
108
+ const tree = StreamTree_1.StreamTree.from(stream);
109
+ // Encrypt a message from Alice
110
+ const originalMessage = new TextEncoder().encode("Hello World!");
111
+ const encryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(alice).encrypt(tree, [], originalMessage);
112
+ // The message should be different from the original
113
+ expect(Crypto_1.crypto.to_hex(encryptedMessage)).not.toBe(Crypto_1.crypto.to_hex(originalMessage));
114
+ {
115
+ // Decrypt the message from Bob
116
+ const decryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(bob).decrypt(tree, [], encryptedMessage);
117
+ // The message should be the same as the original
118
+ expect(Crypto_1.crypto.to_hex(decryptedMessage)).toBe(Crypto_1.crypto.to_hex(originalMessage));
119
+ }
120
+ {
121
+ // Decrypt the message from Charlie
122
+ const decryptedMessage = yield StreamTreeCipher_1.StreamTreeCipher.create(charlie).decrypt(tree, [], encryptedMessage);
123
+ // The message should be the same as the original
124
+ expect(Crypto_1.crypto.to_hex(decryptedMessage)).toBe(Crypto_1.crypto.to_hex(originalMessage));
125
+ }
126
+ //console.log(JSON.stringify(CommandStreamJsonifier.jsonify(stream.blocks), null, 2));
127
+ }));
128
+ });
129
+ //# sourceMappingURL=key_exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key_exchange.js","sourceRoot":"","sources":["../../src/__tests__/key_exchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=seedId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seedId.d.ts","sourceRoot":"","sources":["../../src/__tests__/seedId.ts"],"names":[],"mappings":""}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const Crypto_1 = require("../Crypto");
4
+ const SeedId_1 = require("../SeedId");
5
+ describe("PubKeyCredential regular cases", () => {
6
+ const rpPubKeyCredential = new SeedId_1.PubKeyCredential({
7
+ version: 0,
8
+ curveId: 0x21,
9
+ signAlgorithm: 0x01,
10
+ publicKey: Crypto_1.crypto.from_hex("02b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5"),
11
+ });
12
+ test("assertValidity", () => {
13
+ expect(() => rpPubKeyCredential.assertValidity()).not.toThrow();
14
+ });
15
+ test("toJSON", () => {
16
+ expect(rpPubKeyCredential.toJSON()).toEqual({
17
+ version: 0,
18
+ curveId: 33,
19
+ signAlgorithm: 1,
20
+ publicKey: "02b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5",
21
+ });
22
+ });
23
+ test("toBytes", () => {
24
+ expect(Crypto_1.crypto.to_hex(rpPubKeyCredential.toBytes())).toEqual("0021012102b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5");
25
+ });
26
+ test("fromBytes", () => {
27
+ expect(SeedId_1.PubKeyCredential.fromBytes(Crypto_1.crypto.from_hex("0021012102b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5"))).toEqual([rpPubKeyCredential, 37]);
28
+ });
29
+ test("toBytes into fromBytes", () => {
30
+ const bytes = rpPubKeyCredential.toBytes();
31
+ const [pubKeyCredential, _] = SeedId_1.PubKeyCredential.fromBytes(bytes);
32
+ expect(pubKeyCredential).toEqual(rpPubKeyCredential);
33
+ });
34
+ });
35
+ describe("Challenge regular cases", () => {
36
+ const rpPubKeyCredential = new SeedId_1.PubKeyCredential({
37
+ version: 0,
38
+ curveId: 0x21,
39
+ signAlgorithm: 0x01,
40
+ publicKey: Crypto_1.crypto.from_hex("02b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5"),
41
+ });
42
+ const challengeData = Crypto_1.crypto.from_hex("53cafde60e5395b164eb867213bc05f6");
43
+ const rpSignature = Crypto_1.crypto.from_hex("3045022025d130d7ae5c48a6cf09781d04a08e9a2d07ce1bd17e84637f6ede4a043c5dcc022100a846ececf20eb53ffc2dc502ce8074ba40b241bfd13edaf1e8575559a9b2b4ea");
44
+ const challenge = new SeedId_1.Challenge({
45
+ payloadType: 0x07,
46
+ version: 0,
47
+ protocolVersion: {
48
+ major: 1,
49
+ minor: 0,
50
+ patch: 0,
51
+ },
52
+ challengeData: challengeData,
53
+ challengeExpiry: new Date(1708678950000),
54
+ host: "localhost",
55
+ rpCredential: rpPubKeyCredential,
56
+ rpSignature: rpSignature,
57
+ });
58
+ test("parse one example from backend", () => {
59
+ const hex = "01010702010012102d4492d50ef878a450d9bd6e8862690014010115483046022100beb271fa9752c377251005e125cc115737e427d5259a2dbbc9a38f7a36430c3f0221008826b3d3c1b491b41908d7cc89d71b92e9428c52a927e95341d555252f687b0f16046654aea120096c6f63616c686f7374320121332103cb7628e7248ddf9c07da54b979f16bf081fb3d173aac0992ad2a44ef6a388ae2600401000000";
60
+ const bytes = Crypto_1.crypto.from_hex(hex);
61
+ const [challengeFromBytes, l] = SeedId_1.Challenge.fromBytes(bytes);
62
+ expect(l).toEqual(bytes.length);
63
+ expect(challengeFromBytes.toJSON()).toEqual({
64
+ payloadType: 7,
65
+ version: 0,
66
+ challenge: { data: "2d4492d50ef878a450d9bd6e88626900", expiry: "2024-05-27T16:02:41.000Z" },
67
+ host: "localhost",
68
+ rp: [
69
+ {
70
+ credential: {
71
+ version: 0,
72
+ curveId: 33,
73
+ signAlgorithm: 1,
74
+ publicKey: "03cb7628e7248ddf9c07da54b979f16bf081fb3d173aac0992ad2a44ef6a388ae2",
75
+ },
76
+ signature: "3046022100beb271fa9752c377251005e125cc115737e427d5259a2dbbc9a38f7a36430c3f0221008826b3d3c1b491b41908d7cc89d71b92e9428c52a927e95341d555252f687b0f",
77
+ },
78
+ ],
79
+ protocolVersion: { major: 1, minor: 0, patch: 0 },
80
+ });
81
+ });
82
+ test("toBytes", () => {
83
+ expect(Crypto_1.crypto.to_hex(challenge.toBytes())).toEqual("010107020100121053cafde60e5395b164eb867213bc05f614010115473045022025d130d7ae5c48a6cf09781d04a08e9a2d07ce1bd17e84637f6ede4a043c5dcc022100a846ececf20eb53ffc2dc502ce8074ba40b241bfd13edaf1e8575559a9b2b4ea160465d85f2620096c6f63616c686f7374320121332102b2c29ab36022219967cc21a306599ecaf51ce9f2998da6982388d52c8c69a6a5600401000000");
84
+ });
85
+ test("toBytes <> fromBytes", () => {
86
+ const bytes = challenge.toBytes();
87
+ const [challengeFromBytes, _] = SeedId_1.Challenge.fromBytes(bytes);
88
+ expect(challengeFromBytes).toEqual(challenge);
89
+ expect(challengeFromBytes.toBytes()).toEqual(bytes);
90
+ });
91
+ });
92
+ //# sourceMappingURL=seedId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seedId.js","sourceRoot":"","sources":["../../src/__tests__/seedId.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shared_object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared_object.d.ts","sourceRoot":"","sources":["../../src/__tests__/shared_object.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /*
3
+ This test suite simulates an application generating data (using a fixed shchema) and sharing part of the
4
+ data to specific users. The data is encrypted using a StreamTree.
5
+ */
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
8
+ return new (P || (P = Promise))(function (resolve, reject) {
9
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
11
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
12
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
13
+ });
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const StreamTree_1 = require("../StreamTree");
17
+ const __1 = require("..");
18
+ const CommandBlock_1 = require("../CommandBlock");
19
+ const StreamTreeCipher_1 = require("../StreamTreeCipher");
20
+ const Crypto_1 = require("../Crypto");
21
+ const APPLICATION_ID = 12;
22
+ function encryptSharedObject(device_1, tree_1, sharedObject_1) {
23
+ return __awaiter(this, arguments, void 0, function* (device, tree, sharedObject, mapping = new Map()) {
24
+ const cipher = StreamTreeCipher_1.StreamTreeCipher.create(device);
25
+ const encrypt = (key, defaultPath) => __awaiter(this, void 0, void 0, function* () {
26
+ return Crypto_1.crypto.to_hex(yield cipher.encrypt(tree, Crypto_1.DerivationPath.toIndexArray(mapping.get(key) || defaultPath), new TextEncoder().encode(sharedObject[key].toString())));
27
+ });
28
+ const encryptedSharedObject = {
29
+ name: yield encrypt("name", `0h/${APPLICATION_ID}h/0h/0h/0h`),
30
+ age: yield encrypt("age", `0h/${APPLICATION_ID}h/0h/1h/0h`),
31
+ email: yield encrypt("email", `0h/${APPLICATION_ID}h/0h/2h/0h`),
32
+ };
33
+ return encryptedSharedObject;
34
+ });
35
+ }
36
+ function decryptSharedObject(device_1, tree_1, encryptedSharedObject_1) {
37
+ return __awaiter(this, arguments, void 0, function* (device, tree, encryptedSharedObject, mapping = new Map()) {
38
+ const cipher = StreamTreeCipher_1.StreamTreeCipher.create(device);
39
+ const decrypt = (key, defaultPath) => __awaiter(this, void 0, void 0, function* () {
40
+ const path = Crypto_1.DerivationPath.toIndexArray(mapping.get(key) || defaultPath);
41
+ const bytes = yield cipher.decrypt(tree, path, Crypto_1.crypto.from_hex(encryptedSharedObject[key]));
42
+ return new TextDecoder().decode(bytes);
43
+ });
44
+ const sharedObject = {
45
+ name: yield decrypt("name", `0h/${APPLICATION_ID}h/0h/0h/0h`),
46
+ age: parseInt(yield decrypt("age", `0h/${APPLICATION_ID}h/0h/1h/0h`)),
47
+ email: yield decrypt("email", `0h/${APPLICATION_ID}h/0h/2h/0h`),
48
+ };
49
+ return sharedObject;
50
+ });
51
+ }
52
+ describe("Shared object scenario using StreamTree", () => {
53
+ it("should create a tree with 3 members, one member encrypt a shared object and another one decrypts it", () => __awaiter(void 0, void 0, void 0, function* () {
54
+ const alice = yield __1.device.software();
55
+ const bob = yield __1.device.software();
56
+ const carol = yield __1.device.software();
57
+ // Create a new tree owned by alice
58
+ let tree = yield StreamTree_1.StreamTree.createNewTree(alice);
59
+ // Share the application node with bob
60
+ tree = yield tree.share(tree.getApplicationRootPath(APPLICATION_ID), alice, (yield bob.getPublicKey()).publicKey, "Bob", CommandBlock_1.Permissions.OWNER);
61
+ // Bob creates a shared object and encrypt it (1 value -> 1 encryption key)
62
+ const sharedObject = {
63
+ name: "Bob",
64
+ age: 42,
65
+ email: "bob@box.com",
66
+ };
67
+ //console.dir(sharedObject, { depth: null });
68
+ const encryptedObject = yield encryptSharedObject(bob, tree, sharedObject);
69
+ // Share the application node with carol
70
+ tree = yield tree.share(tree.getApplicationRootPath(APPLICATION_ID), alice, (yield carol.getPublicKey()).publicKey, "Carol", CommandBlock_1.Permissions.OWNER);
71
+ // Decrypt with Carol
72
+ const decryptedObject = yield decryptSharedObject(carol, tree, encryptedObject);
73
+ //console.dir(encryptedObject, { depth: null });
74
+ //console.dir(decryptedObject, { depth: null });
75
+ expect(decryptedObject).toEqual(sharedObject);
76
+ }));
77
+ });
78
+ //# sourceMappingURL=shared_object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared_object.js","sourceRoot":"","sources":["../../src/__tests__/shared_object.ts"],"names":[],"mappings":";AAAA;;;EAGE;;;;;;;;;;;AAEF,8CAA2C;AAC3C,0BAAoC;AACpC,kDAA8C;AAC9C,0DAAuD;AACvD,sCAAmD;AAcnD,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,SAAe,mBAAmB;yDAChC,MAAc,EACd,IAAgB,EAChB,YAA0B,EAC1B,UAA+B,IAAI,GAAG,EAAE;QAExC,MAAM,MAAM,GAAG,mCAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,CAAO,GAA8B,EAAE,WAAmB,EAAmB,EAAE;YAC7F,OAAO,eAAM,CAAC,MAAM,CAClB,MAAM,MAAM,CAAC,OAAO,CAClB,IAAI,EACJ,uBAAc,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,EAC5D,IAAI,WAAW,EAAE,CAAC,MAAM,CAAE,YAAY,CAAC,GAAG,CAAqB,CAAC,QAAQ,EAAE,CAAC,CAC5E,CACF,CAAC;QACJ,CAAC,CAAA,CAAC;QACF,MAAM,qBAAqB,GAAG;YAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,cAAc,YAAY,CAAC;YAC7D,GAAG,EAAE,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,cAAc,YAAY,CAAC;YAC3D,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,cAAc,YAAY,CAAC;SAChE,CAAC;QACF,OAAO,qBAAqB,CAAC;IAC/B,CAAC;CAAA;AAED,SAAe,mBAAmB;yDAChC,MAAc,EACd,IAAgB,EAChB,qBAA4C,EAC5C,UAA+B,IAAI,GAAG,EAAE;QAExC,MAAM,MAAM,GAAG,mCAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,CAAO,GAAW,EAAE,WAAmB,EAAmB,EAAE;YAC1E,MAAM,IAAI,GAAG,uBAAc,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAChC,IAAI,EACJ,IAAI,EACJ,eAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAyC,CAAW,CAAC,CAC5F,CAAC;YACF,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAA,CAAC;QACF,MAAM,YAAY,GAAG;YACnB,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,cAAc,YAAY,CAAC;YAC7D,GAAG,EAAE,QAAQ,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,MAAM,cAAc,YAAY,CAAC,CAAC;YACrE,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,cAAc,YAAY,CAAC;SAChE,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;CAAA;AAED,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,qGAAqG,EAAE,GAAS,EAAE;QACnH,MAAM,KAAK,GAAG,MAAM,UAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,UAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,UAAM,CAAC,QAAQ,EAAE,CAAC;QAEtC,mCAAmC;QACnC,IAAI,IAAI,GAAG,MAAM,uBAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEjD,sCAAsC;QACtC,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CACrB,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAC3C,KAAK,EACL,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,EACpC,KAAK,EACL,0BAAW,CAAC,KAAK,CAClB,CAAC;QAEF,2EAA2E;QAC3E,MAAM,YAAY,GAAG;YACnB,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,EAAE;YACP,KAAK,EAAE,aAAa;SACrB,CAAC;QACF,6CAA6C;QAC7C,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAE3E,wCAAwC;QACxC,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CACrB,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,EAC3C,KAAK,EACL,CAAC,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,EACtC,OAAO,EACP,0BAAW,CAAC,KAAK,CAClB,CAAC;QAEF,qBAAqB;QACrB,MAAM,eAAe,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAEhF,gDAAgD;QAChD,gDAAgD;QAEhD,MAAM,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ import { createDevice, SoftwareDevice } from "./Device";
2
+ import * as CS from "./CommandStream";
3
+ import { createApduDevice } from "./ApduDevice";
4
+ import Jsonifier from "./CommandStreamJsonifier";
5
+ export type { Device } from "./Device";
6
+ export type { StreamTreeCipherMode } from "./StreamTreeCipher";
7
+ export { StreamTreeCipher } from "./StreamTreeCipher";
8
+ export { crypto, DerivationPath } from "./Crypto";
9
+ export { PublicKey } from "./PublicKey";
10
+ export type { CommandType, Command, CommandBlock } from "./CommandBlock";
11
+ export { AddMember, CloseStream, Derive, EditMember, PublishKey, Seed, Permissions, } from "./CommandBlock";
12
+ export { APDU, TRUSTCHAIN_APP_NAME } from "./ApduDevice";
13
+ export { CommandStreamEncoder } from "./CommandStreamEncoder";
14
+ export { CommandStreamDecoder } from "./CommandStreamDecoder";
15
+ export { Challenge, PubKeyCredential } from "./SeedId";
16
+ export { StreamTree } from "./StreamTree";
17
+ export { SoftwareDevice };
18
+ /**
19
+ *
20
+ */
21
+ export declare class CommandStream extends CS.default {
22
+ }
23
+ /**
24
+ *
25
+ */
26
+ export declare class CommandStreamJsonifier extends Jsonifier {
27
+ }
28
+ /**
29
+ *
30
+ */
31
+ export declare const device: {
32
+ software: typeof createDevice;
33
+ apdu: typeof createApduDevice;
34
+ };
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,SAAS,MAAM,0BAA0B,CAAC;AAEjD,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACL,SAAS,EACT,WAAW,EACX,MAAM,EACN,UAAU,EACV,UAAU,EACV,IAAI,EACJ,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B;;GAEG;AACH,qBAAa,aAAc,SAAQ,EAAE,CAAC,OAAO;CAAG;AAChD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;CAAG;AAExD;;GAEG;AACH,eAAO,MAAM,MAAM;;;CAGlB,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.device = exports.CommandStreamJsonifier = exports.CommandStream = exports.SoftwareDevice = exports.StreamTree = exports.PubKeyCredential = exports.Challenge = exports.CommandStreamDecoder = exports.CommandStreamEncoder = exports.TRUSTCHAIN_APP_NAME = exports.APDU = exports.Permissions = exports.Seed = exports.PublishKey = exports.EditMember = exports.Derive = exports.CloseStream = exports.AddMember = exports.PublicKey = exports.DerivationPath = exports.crypto = exports.StreamTreeCipher = void 0;
30
+ const Device_1 = require("./Device");
31
+ Object.defineProperty(exports, "SoftwareDevice", { enumerable: true, get: function () { return Device_1.SoftwareDevice; } });
32
+ const CS = __importStar(require("./CommandStream"));
33
+ const ApduDevice_1 = require("./ApduDevice");
34
+ const CommandStreamJsonifier_1 = __importDefault(require("./CommandStreamJsonifier"));
35
+ var StreamTreeCipher_1 = require("./StreamTreeCipher");
36
+ Object.defineProperty(exports, "StreamTreeCipher", { enumerable: true, get: function () { return StreamTreeCipher_1.StreamTreeCipher; } });
37
+ var Crypto_1 = require("./Crypto");
38
+ Object.defineProperty(exports, "crypto", { enumerable: true, get: function () { return Crypto_1.crypto; } });
39
+ Object.defineProperty(exports, "DerivationPath", { enumerable: true, get: function () { return Crypto_1.DerivationPath; } });
40
+ var PublicKey_1 = require("./PublicKey");
41
+ Object.defineProperty(exports, "PublicKey", { enumerable: true, get: function () { return PublicKey_1.PublicKey; } });
42
+ var CommandBlock_1 = require("./CommandBlock");
43
+ Object.defineProperty(exports, "AddMember", { enumerable: true, get: function () { return CommandBlock_1.AddMember; } });
44
+ Object.defineProperty(exports, "CloseStream", { enumerable: true, get: function () { return CommandBlock_1.CloseStream; } });
45
+ Object.defineProperty(exports, "Derive", { enumerable: true, get: function () { return CommandBlock_1.Derive; } });
46
+ Object.defineProperty(exports, "EditMember", { enumerable: true, get: function () { return CommandBlock_1.EditMember; } });
47
+ Object.defineProperty(exports, "PublishKey", { enumerable: true, get: function () { return CommandBlock_1.PublishKey; } });
48
+ Object.defineProperty(exports, "Seed", { enumerable: true, get: function () { return CommandBlock_1.Seed; } });
49
+ Object.defineProperty(exports, "Permissions", { enumerable: true, get: function () { return CommandBlock_1.Permissions; } });
50
+ var ApduDevice_2 = require("./ApduDevice");
51
+ Object.defineProperty(exports, "APDU", { enumerable: true, get: function () { return ApduDevice_2.APDU; } });
52
+ Object.defineProperty(exports, "TRUSTCHAIN_APP_NAME", { enumerable: true, get: function () { return ApduDevice_2.TRUSTCHAIN_APP_NAME; } });
53
+ var CommandStreamEncoder_1 = require("./CommandStreamEncoder");
54
+ Object.defineProperty(exports, "CommandStreamEncoder", { enumerable: true, get: function () { return CommandStreamEncoder_1.CommandStreamEncoder; } });
55
+ var CommandStreamDecoder_1 = require("./CommandStreamDecoder");
56
+ Object.defineProperty(exports, "CommandStreamDecoder", { enumerable: true, get: function () { return CommandStreamDecoder_1.CommandStreamDecoder; } });
57
+ var SeedId_1 = require("./SeedId");
58
+ Object.defineProperty(exports, "Challenge", { enumerable: true, get: function () { return SeedId_1.Challenge; } });
59
+ Object.defineProperty(exports, "PubKeyCredential", { enumerable: true, get: function () { return SeedId_1.PubKeyCredential; } });
60
+ var StreamTree_1 = require("./StreamTree");
61
+ Object.defineProperty(exports, "StreamTree", { enumerable: true, get: function () { return StreamTree_1.StreamTree; } });
62
+ /**
63
+ *
64
+ */
65
+ class CommandStream extends CS.default {
66
+ }
67
+ exports.CommandStream = CommandStream;
68
+ /**
69
+ *
70
+ */
71
+ class CommandStreamJsonifier extends CommandStreamJsonifier_1.default {
72
+ }
73
+ exports.CommandStreamJsonifier = CommandStreamJsonifier;
74
+ /**
75
+ *
76
+ */
77
+ exports.device = {
78
+ software: Device_1.createDevice,
79
+ apdu: ApduDevice_1.createApduDevice,
80
+ };
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAwD;AAyB/C,+FAzBc,uBAAc,OAyBd;AAxBvB,oDAAsC;AACtC,6CAAgD;AAChD,sFAAiD;AAIjD,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,mCAAkD;AAAzC,gGAAA,MAAM,OAAA;AAAE,wGAAA,cAAc,OAAA;AAC/B,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAElB,+CAQwB;AAPtB,yGAAA,SAAS,OAAA;AACT,2GAAA,WAAW,OAAA;AACX,sGAAA,MAAM,OAAA;AACN,0GAAA,UAAU,OAAA;AACV,0GAAA,UAAU,OAAA;AACV,oGAAA,IAAI,OAAA;AACJ,2GAAA,WAAW,OAAA;AAEb,2CAAyD;AAAhD,kGAAA,IAAI,OAAA;AAAE,iHAAA,mBAAmB,OAAA;AAClC,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAC7B,mCAAuD;AAA9C,mGAAA,SAAS,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AACpC,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAGnB;;GAEG;AACH,MAAa,aAAc,SAAQ,EAAE,CAAC,OAAO;CAAG;AAAhD,sCAAgD;AAChD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,gCAAS;CAAG;AAAxD,wDAAwD;AAExD;;GAEG;AACU,QAAA,MAAM,GAAG;IACpB,QAAQ,EAAE,qBAAY;IACtB,IAAI,EAAE,6BAAgB;CACvB,CAAC"}