@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,114 @@
1
+ /**
2
+ *
3
+ */
4
+ export interface Command {
5
+ getType(): CommandType;
6
+ }
7
+ /**
8
+ *
9
+ */
10
+ export declare enum CommandType {
11
+ Seed = 16,
12
+ AddMember = 17,
13
+ PublishKey = 18,
14
+ EditMember = 20,
15
+ Derive = 21,
16
+ CloseStream = 19
17
+ }
18
+ /**
19
+ *
20
+ */
21
+ export declare const Permissions: {
22
+ KEY_READER: number;
23
+ KEY_CREATOR: number;
24
+ KEY_REVOKER: number;
25
+ ADD_MEMBER: number;
26
+ REMOVE_MEMBER: number;
27
+ CHANGE_MEMBER_PERMISSIONS: number;
28
+ CHANGE_MEMBER_NAME: number;
29
+ MEMBER: number;
30
+ OWNER: number;
31
+ };
32
+ /**
33
+ *
34
+ */
35
+ export declare class Seed implements Command {
36
+ topic: Uint8Array | null;
37
+ protocolVersion: number;
38
+ groupKey: Uint8Array;
39
+ initializationVector: Uint8Array;
40
+ encryptedXpriv: Uint8Array;
41
+ ephemeralPublicKey: Uint8Array;
42
+ constructor(topic: Uint8Array | null, protocolVersion: number, groupKey: Uint8Array, initializationVector: Uint8Array, encryptedXpriv: Uint8Array, ephemerPublicKey: Uint8Array);
43
+ getType(): CommandType;
44
+ }
45
+ /**
46
+ *
47
+ */
48
+ export declare class Derive implements Command {
49
+ path: number[];
50
+ groupKey: Uint8Array;
51
+ initializationVector: Uint8Array;
52
+ encryptedXpriv: Uint8Array;
53
+ ephemeralPublicKey: Uint8Array;
54
+ constructor(path: number[], groupKey: Uint8Array, initializationVector: Uint8Array, encryptedXpriv: Uint8Array, ephemeralPublicKey: Uint8Array);
55
+ getType(): CommandType;
56
+ }
57
+ /**
58
+ *
59
+ */
60
+ export declare class AddMember implements Command {
61
+ name: string;
62
+ publicKey: Uint8Array;
63
+ permissions: number;
64
+ constructor(name: string, publicKey: Uint8Array, permissions: number);
65
+ getType(): CommandType;
66
+ }
67
+ /**
68
+ *
69
+ */
70
+ export declare class PublishKey implements Command {
71
+ initializationVector: Uint8Array;
72
+ encryptedXpriv: Uint8Array;
73
+ recipient: Uint8Array;
74
+ ephemeralPublicKey: Uint8Array;
75
+ constructor(initializationVector: Uint8Array, encryptedXpriv: Uint8Array, recipient: Uint8Array, ephemeralPublicKey: Uint8Array);
76
+ getType(): CommandType;
77
+ }
78
+ /**
79
+ *
80
+ */
81
+ export declare class EditMember implements Command {
82
+ member: Uint8Array;
83
+ name: string | null;
84
+ permissions: number | null;
85
+ constructor(member: Uint8Array, name: string | null, permissions: number | null);
86
+ getType(): CommandType;
87
+ }
88
+ /**
89
+ *
90
+ */
91
+ export declare class CloseStream implements Command {
92
+ constructor();
93
+ getType(): CommandType;
94
+ }
95
+ export interface CommandBlock {
96
+ version: number;
97
+ parent: Uint8Array;
98
+ issuer: Uint8Array;
99
+ commands: Command[];
100
+ signature: Uint8Array;
101
+ }
102
+ /**
103
+ * Create a new command block.
104
+ * @param issuer The public key of the command block issuer
105
+ * @param commands The list of commands in this command block
106
+ * @param signature The signature of the command block (by default the block is not signed)
107
+ * @param parent The parent command block hash (if null, the block is the first block and a parent will be generated)
108
+ * @returns
109
+ */
110
+ export declare function createCommandBlock(issuer: Uint8Array, commands: Command[], signature?: Uint8Array, parent?: Uint8Array | null): Promise<CommandBlock>;
111
+ export declare function signCommandBlock(block: CommandBlock, issuer: Uint8Array, secretKey: Uint8Array): Promise<CommandBlock>;
112
+ export declare function hashCommandBlock(block: CommandBlock): Promise<Uint8Array>;
113
+ export declare function verifyCommandBlock(block: CommandBlock): Promise<boolean>;
114
+ //# sourceMappingURL=CommandBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandBlock.d.ts","sourceRoot":"","sources":["../src/CommandBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
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.verifyCommandBlock = exports.hashCommandBlock = exports.signCommandBlock = exports.createCommandBlock = exports.CloseStream = exports.EditMember = exports.PublishKey = exports.AddMember = exports.Derive = exports.Seed = exports.Permissions = exports.CommandType = void 0;
13
+ const CommandStreamEncoder_1 = require("./CommandStreamEncoder");
14
+ const Crypto_1 = require("./Crypto");
15
+ /**
16
+ *
17
+ */
18
+ var CommandType;
19
+ (function (CommandType) {
20
+ CommandType[CommandType["Seed"] = 16] = "Seed";
21
+ CommandType[CommandType["AddMember"] = 17] = "AddMember";
22
+ CommandType[CommandType["PublishKey"] = 18] = "PublishKey";
23
+ CommandType[CommandType["EditMember"] = 20] = "EditMember";
24
+ CommandType[CommandType["Derive"] = 21] = "Derive";
25
+ CommandType[CommandType["CloseStream"] = 19] = "CloseStream";
26
+ })(CommandType || (exports.CommandType = CommandType = {}));
27
+ /**
28
+ *
29
+ */
30
+ exports.Permissions = {
31
+ KEY_READER: 0x01,
32
+ KEY_CREATOR: 0x02,
33
+ KEY_REVOKER: 0x04,
34
+ ADD_MEMBER: 0x08,
35
+ REMOVE_MEMBER: 0x16,
36
+ CHANGE_MEMBER_PERMISSIONS: 0x32,
37
+ CHANGE_MEMBER_NAME: 0x64,
38
+ MEMBER: 0,
39
+ OWNER: 0xffffffff,
40
+ };
41
+ /**
42
+ *
43
+ */
44
+ class Seed {
45
+ constructor(topic, protocolVersion, groupKey, initializationVector, encryptedXpriv, ephemerPublicKey) {
46
+ this.topic = topic;
47
+ this.protocolVersion = protocolVersion;
48
+ this.groupKey = groupKey.length == 0 ? new Uint8Array(33) : groupKey;
49
+ this.initializationVector =
50
+ initializationVector.length == 0 ? new Uint8Array(16) : initializationVector;
51
+ this.encryptedXpriv = encryptedXpriv.length == 0 ? new Uint8Array(64) : encryptedXpriv;
52
+ this.ephemeralPublicKey = ephemerPublicKey.length == 0 ? new Uint8Array(33) : ephemerPublicKey;
53
+ }
54
+ getType() {
55
+ return CommandType.Seed;
56
+ }
57
+ }
58
+ exports.Seed = Seed;
59
+ /**
60
+ *
61
+ */
62
+ class Derive {
63
+ constructor(path, groupKey, initializationVector, encryptedXpriv, ephemeralPublicKey) {
64
+ this.path = path;
65
+ this.groupKey = groupKey;
66
+ this.initializationVector = initializationVector;
67
+ this.encryptedXpriv = encryptedXpriv;
68
+ this.ephemeralPublicKey = ephemeralPublicKey;
69
+ }
70
+ getType() {
71
+ return CommandType.Derive;
72
+ }
73
+ }
74
+ exports.Derive = Derive;
75
+ /**
76
+ *
77
+ */
78
+ class AddMember {
79
+ constructor(name, publicKey, permissions) {
80
+ this.name = name;
81
+ this.publicKey = publicKey;
82
+ this.permissions = permissions;
83
+ }
84
+ getType() {
85
+ return CommandType.AddMember;
86
+ }
87
+ }
88
+ exports.AddMember = AddMember;
89
+ /**
90
+ *
91
+ */
92
+ class PublishKey {
93
+ constructor(initializationVector, encryptedXpriv, recipient, ephemeralPublicKey) {
94
+ this.encryptedXpriv = encryptedXpriv;
95
+ this.initializationVector = initializationVector;
96
+ this.recipient = recipient;
97
+ this.ephemeralPublicKey = ephemeralPublicKey;
98
+ }
99
+ getType() {
100
+ return CommandType.PublishKey;
101
+ }
102
+ }
103
+ exports.PublishKey = PublishKey;
104
+ /**
105
+ *
106
+ */
107
+ class EditMember {
108
+ constructor(member, name, permissions) {
109
+ this.name = name;
110
+ this.permissions = permissions;
111
+ this.member = member;
112
+ }
113
+ getType() {
114
+ return CommandType.EditMember;
115
+ }
116
+ }
117
+ exports.EditMember = EditMember;
118
+ /**
119
+ *
120
+ */
121
+ class CloseStream {
122
+ constructor() { }
123
+ getType() {
124
+ return CommandType.CloseStream;
125
+ }
126
+ }
127
+ exports.CloseStream = CloseStream;
128
+ /**
129
+ * Create a new command block.
130
+ * @param issuer The public key of the command block issuer
131
+ * @param commands The list of commands in this command block
132
+ * @param signature The signature of the command block (by default the block is not signed)
133
+ * @param parent The parent command block hash (if null, the block is the first block and a parent will be generated)
134
+ * @returns
135
+ */
136
+ function createCommandBlock(issuer_1, commands_1) {
137
+ return __awaiter(this, arguments, void 0, function* (issuer, commands, signature = new Uint8Array(), parent = null) {
138
+ if (parent === null) {
139
+ parent = parent = yield Crypto_1.crypto.randomBytes(32);
140
+ }
141
+ return {
142
+ version: 1,
143
+ issuer,
144
+ parent,
145
+ commands,
146
+ signature,
147
+ };
148
+ });
149
+ }
150
+ exports.createCommandBlock = createCommandBlock;
151
+ function signCommandBlock(block, issuer, secretKey) {
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ const signature = yield Crypto_1.crypto.sign(yield hashCommandBlock(block), yield Crypto_1.crypto.keypairFromSecretKey(secretKey));
154
+ return Object.assign(Object.assign({}, block), { signature });
155
+ });
156
+ }
157
+ exports.signCommandBlock = signCommandBlock;
158
+ function hashCommandBlock(block) {
159
+ return __awaiter(this, void 0, void 0, function* () {
160
+ return yield Crypto_1.crypto.hash(CommandStreamEncoder_1.CommandStreamEncoder.encode([block]));
161
+ });
162
+ }
163
+ exports.hashCommandBlock = hashCommandBlock;
164
+ function verifyCommandBlock(block) {
165
+ return __awaiter(this, void 0, void 0, function* () {
166
+ const unsignedBlock = Object.assign({}, block);
167
+ unsignedBlock.signature = new Uint8Array();
168
+ const hash = yield hashCommandBlock(unsignedBlock);
169
+ return yield Crypto_1.crypto.verify(hash, block.signature, block.issuer);
170
+ });
171
+ }
172
+ exports.verifyCommandBlock = verifyCommandBlock;
173
+ //# sourceMappingURL=CommandBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandBlock.js","sourceRoot":"","sources":["../src/CommandBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { CommandBlock, Command } from "./CommandBlock";
2
+ import { ResolvedCommandStream } from "./CommandStreamResolver";
3
+ import { Device } from "./Device";
4
+ import { StreamTree } from "./StreamTree";
5
+ /**
6
+ *
7
+ */
8
+ export type CommandIssuer = (device: Device, tempStream: CommandStream, streamTree?: StreamTree | null) => Promise<Command[]>;
9
+ /**
10
+ *
11
+ */
12
+ export declare class CommandStreamIssuer {
13
+ private _stream;
14
+ private _steps;
15
+ constructor(stream: CommandStream);
16
+ seed(topic?: Uint8Array | null): CommandStreamIssuer;
17
+ derive(path: number[]): CommandStreamIssuer;
18
+ addMember(name: string, publicKey: Uint8Array, permissions: number, publishKey?: boolean): CommandStreamIssuer;
19
+ publishKey(publicKey: Uint8Array): CommandStreamIssuer;
20
+ close(): CommandStreamIssuer;
21
+ issue(device: Device, streamTree?: StreamTree | null, parentHash?: Uint8Array | null): Promise<CommandStream>;
22
+ }
23
+ /**
24
+ *
25
+ */
26
+ export default class CommandStream {
27
+ private _blocks;
28
+ constructor(blocks?: CommandBlock[]);
29
+ resolve(incomplete?: boolean): Promise<ResolvedCommandStream>;
30
+ getRootHash(): Promise<Uint8Array>;
31
+ getStreamPath(): string | null;
32
+ push(block: CommandBlock, issuer: Device, tree: StreamTree | null): Promise<CommandStream>;
33
+ issue(device: Device, commands: Command[], tree?: StreamTree | null, parentHash?: Uint8Array | null): Promise<CommandStream>;
34
+ edit(): CommandStreamIssuer;
35
+ getStreamPublicKey(): Promise<Uint8Array>;
36
+ get blocks(): CommandBlock[];
37
+ }
38
+ //# sourceMappingURL=CommandStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStream.d.ts","sourceRoot":"","sources":["../src/CommandStream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,OAAO,EASR,MAAM,gBAAgB,CAAC;AACxB,OAA8B,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,aAAa,EACzB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,KAC3B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AAExB;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,aAAa;IAI1B,IAAI,CAAC,KAAK,GAAE,UAAU,GAAG,IAAW,GAAG,mBAAmB;IAe1D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB;IAgB3C,SAAS,CACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,MAAM,EACnB,UAAU,GAAE,OAAc,GACzB,mBAAmB;IAsBf,UAAU,CAAC,SAAS,EAAE,UAAU,GAAG,mBAAmB;IAetD,KAAK,IAAI,mBAAmB;IAetB,KAAK,CAChB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,EAC9B,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAC7B,OAAO,CAAC,aAAa,CAAC;CAqB1B;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,OAAO,CAAsB;gBAEzB,MAAM,GAAE,YAAY,EAAO;IAIhC,OAAO,CAAC,UAAU,GAAE,OAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAKpE,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC;IAIlC,aAAa,IAAI,MAAM,GAAG,IAAI;IAWxB,IAAI,CACf,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GAAG,IAAI,GACtB,OAAO,CAAC,aAAa,CAAC;IAkCZ,KAAK,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,GAAE,UAAU,GAAG,IAAW,EAC9B,UAAU,GAAE,UAAU,GAAG,IAAW,GACnC,OAAO,CAAC,aAAa,CAAC;IAclB,IAAI,IAAI,mBAAmB;IAIrB,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC;IAatD,IAAI,MAAM,IAAI,YAAY,EAAE,CAE3B;CACF"}
@@ -0,0 +1,197 @@
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
+ exports.CommandStreamIssuer = void 0;
16
+ const CommandBlock_1 = require("./CommandBlock");
17
+ const CommandStreamResolver_1 = __importDefault(require("./CommandStreamResolver"));
18
+ const Crypto_1 = require("./Crypto");
19
+ const Device_1 = require("./Device");
20
+ const EMPTY = new Uint8Array();
21
+ /**
22
+ *
23
+ */
24
+ class CommandStreamIssuer {
25
+ constructor(stream) {
26
+ this._steps = [];
27
+ this._stream = stream;
28
+ }
29
+ seed(topic = null) {
30
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
31
+ device;
32
+ tempStream;
33
+ streamTree;
34
+ return [new CommandBlock_1.Seed(topic, 0, EMPTY, EMPTY, EMPTY, EMPTY)];
35
+ });
36
+ this._steps.push(step);
37
+ return this;
38
+ }
39
+ derive(path) {
40
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
41
+ device;
42
+ tempStream;
43
+ streamTree;
44
+ const derivationPath = Crypto_1.DerivationPath.toIndexArray(path);
45
+ return [new CommandBlock_1.Derive(derivationPath, EMPTY, EMPTY, EMPTY, EMPTY)];
46
+ });
47
+ this._steps.push(step);
48
+ return this;
49
+ }
50
+ addMember(name, publicKey, permissions, publishKey = true) {
51
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
52
+ device;
53
+ tempStream;
54
+ streamTree;
55
+ if (publishKey) {
56
+ return [
57
+ new CommandBlock_1.AddMember(name, publicKey, permissions),
58
+ new CommandBlock_1.PublishKey(EMPTY, EMPTY, publicKey, EMPTY),
59
+ ];
60
+ }
61
+ else {
62
+ return [new CommandBlock_1.AddMember(name, publicKey, permissions)];
63
+ }
64
+ });
65
+ this._steps.push(step);
66
+ return this;
67
+ }
68
+ publishKey(publicKey) {
69
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
70
+ device;
71
+ tempStream;
72
+ streamTree;
73
+ return [new CommandBlock_1.PublishKey(EMPTY, EMPTY, publicKey, EMPTY)];
74
+ });
75
+ this._steps.push(step);
76
+ return this;
77
+ }
78
+ close() {
79
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
80
+ device;
81
+ tempStream;
82
+ streamTree;
83
+ return [new CommandBlock_1.CloseStream()];
84
+ });
85
+ this._steps.push(step);
86
+ return this;
87
+ }
88
+ issue(device, streamTree, parentHash) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ const lastBlockHash = this._stream.blocks.length > 0
91
+ ? yield (0, CommandBlock_1.hashCommandBlock)(this._stream.blocks[this._stream.blocks.length - 1])
92
+ : null;
93
+ const block = yield (0, CommandBlock_1.createCommandBlock)(Device_1.ISSUER_PLACEHOLDER, [], new Uint8Array(), parentHash || lastBlockHash);
94
+ const stream = new CommandStream(this._stream.blocks.concat([]));
95
+ const tempStream = new CommandStream(this._stream.blocks.concat([block]));
96
+ let commands = [];
97
+ for (const step of this._steps) {
98
+ const newCommands = yield step(device, tempStream, streamTree);
99
+ commands = commands.concat(newCommands);
100
+ tempStream.blocks[tempStream.blocks.length - 1].commands = commands;
101
+ }
102
+ return yield stream.issue(device, commands, streamTree, parentHash);
103
+ });
104
+ }
105
+ }
106
+ exports.CommandStreamIssuer = CommandStreamIssuer;
107
+ /**
108
+ *
109
+ */
110
+ class CommandStream {
111
+ constructor(blocks = []) {
112
+ this._blocks = [];
113
+ this._blocks = blocks;
114
+ }
115
+ resolve(incomplete = false) {
116
+ incomplete;
117
+ return CommandStreamResolver_1.default.resolve(this._blocks);
118
+ }
119
+ getRootHash() {
120
+ return (0, CommandBlock_1.hashCommandBlock)(this._blocks[0]);
121
+ }
122
+ getStreamPath() {
123
+ if (this._blocks.length === 0)
124
+ return null;
125
+ if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Seed) {
126
+ return "";
127
+ }
128
+ else if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Derive) {
129
+ return Crypto_1.DerivationPath.toString(this._blocks[0].commands[0].path);
130
+ }
131
+ else {
132
+ throw new Error("Malformed CommandStream");
133
+ }
134
+ }
135
+ push(block, issuer, tree) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ let stream = [];
138
+ if (block.commands.length === 0) {
139
+ throw new Error("Attempts to create an empty block");
140
+ }
141
+ // If the first command of the new block is not a seed and the first command of the stream is not a seed either, prepend the root block
142
+ if ((this._blocks.length == 0 || this._blocks[0].commands[0].getType() !== CommandBlock_1.CommandType.Seed) &&
143
+ block.commands[0].getType() !== CommandBlock_1.CommandType.Seed) {
144
+ const root = tree === null || tree === void 0 ? void 0 : tree.getRoot();
145
+ if (!root || root.blocks.length === 0) {
146
+ throw new Error("Null or empty tree cannot be used to sign the new block");
147
+ }
148
+ stream = [root.blocks[0]].concat(this._blocks);
149
+ }
150
+ else {
151
+ stream = this._blocks;
152
+ }
153
+ if (block.commands[0].getType() === CommandBlock_1.CommandType.Derive) {
154
+ // Set the parent hash of the block to the root hash
155
+ const b = Object.assign({}, block);
156
+ b.parent = yield (0, CommandBlock_1.hashCommandBlock)(stream[0]);
157
+ stream = stream.concat([b]);
158
+ }
159
+ else {
160
+ stream = stream.concat([block]);
161
+ }
162
+ const signedBlock = yield issuer.sign(stream, tree || undefined);
163
+ return new CommandStream(this._blocks.concat([signedBlock]));
164
+ });
165
+ }
166
+ issue(device_1, commands_1) {
167
+ return __awaiter(this, arguments, void 0, function* (device, commands, tree = null, parentHash = null) {
168
+ const lastBlockHash = this._blocks.length > 0
169
+ ? yield (0, CommandBlock_1.hashCommandBlock)(this._blocks[this._blocks.length - 1])
170
+ : null;
171
+ const block = yield (0, CommandBlock_1.createCommandBlock)(Device_1.ISSUER_PLACEHOLDER, commands, new Uint8Array(), parentHash || lastBlockHash);
172
+ return this.push(block, device, tree);
173
+ });
174
+ }
175
+ edit() {
176
+ return new CommandStreamIssuer(this);
177
+ }
178
+ getStreamPublicKey() {
179
+ return __awaiter(this, void 0, void 0, function* () {
180
+ // Group public must be the first command in the first block othwerwise it is malformed
181
+ if (this._blocks.length === 0 || this._blocks[0].commands.length === 0)
182
+ throw new Error("Empty CommandStream");
183
+ if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Seed) {
184
+ return this._blocks[0].commands[0].groupKey;
185
+ }
186
+ if (this._blocks[0].commands[0].getType() === CommandBlock_1.CommandType.Derive) {
187
+ return this._blocks[0].commands[0].groupKey;
188
+ }
189
+ throw new Error("Malformed CommandStream");
190
+ });
191
+ }
192
+ get blocks() {
193
+ return this._blocks;
194
+ }
195
+ }
196
+ exports.default = CommandStream;
197
+ //# sourceMappingURL=CommandStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStream.js","sourceRoot":"","sources":["../src/CommandStream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Command, CommandBlock } from "./CommandBlock";
2
+ import { TLVField } from "./tlv";
3
+ export declare const TLVCommandStreamDecoder: {
4
+ readCommand: (tlv: TLVField) => Command;
5
+ readSeedCommand: (buffer: Uint8Array) => Command;
6
+ readDeriveCommand: (buffer: Uint8Array) => Command;
7
+ readAddMemberCommand: (buffer: Uint8Array) => Command;
8
+ readPublishKeyCommand: (buffer: Uint8Array) => Command;
9
+ readCloseStreamCommand: (buffer: Uint8Array) => Command;
10
+ readEditMemberCommand: (buffer: Uint8Array) => Command;
11
+ };
12
+ export declare class CommandStreamDecoder {
13
+ static decode(buffer: Uint8Array): CommandBlock[];
14
+ }
15
+ //# sourceMappingURL=CommandStreamDecoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStreamDecoder.d.ts","sourceRoot":"","sources":["../src/CommandStreamDecoder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,YAAY,EAQb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAO,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,eAAO,MAAM,uBAAuB;uBAGN,QAAQ,KAAG,OAAO;8BAmBX,UAAU,KAAG,OAAO;gCAmBlB,UAAU,KAAG,OAAO;mCAiBjB,UAAU,KAAG,OAAO;oCAOnB,UAAU,KAAG,OAAO;qCAcnB,UAAU,KAAG,OAAO;oCAKrB,UAAU,KAAG,OAAO;CAM9D,CAAC;AAkCF,qBAAa,oBAAoB;WACjB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE;CAGzD"}