@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,160 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { CommandStreamEncoder } from "./CommandStreamEncoder";
11
+ import { crypto } from "./Crypto";
12
+ /**
13
+ *
14
+ */
15
+ export var CommandType;
16
+ (function (CommandType) {
17
+ CommandType[CommandType["Seed"] = 16] = "Seed";
18
+ CommandType[CommandType["AddMember"] = 17] = "AddMember";
19
+ CommandType[CommandType["PublishKey"] = 18] = "PublishKey";
20
+ CommandType[CommandType["EditMember"] = 20] = "EditMember";
21
+ CommandType[CommandType["Derive"] = 21] = "Derive";
22
+ CommandType[CommandType["CloseStream"] = 19] = "CloseStream";
23
+ })(CommandType || (CommandType = {}));
24
+ /**
25
+ *
26
+ */
27
+ export const Permissions = {
28
+ KEY_READER: 0x01,
29
+ KEY_CREATOR: 0x02,
30
+ KEY_REVOKER: 0x04,
31
+ ADD_MEMBER: 0x08,
32
+ REMOVE_MEMBER: 0x16,
33
+ CHANGE_MEMBER_PERMISSIONS: 0x32,
34
+ CHANGE_MEMBER_NAME: 0x64,
35
+ MEMBER: 0,
36
+ OWNER: 0xffffffff,
37
+ };
38
+ /**
39
+ *
40
+ */
41
+ export class Seed {
42
+ constructor(topic, protocolVersion, groupKey, initializationVector, encryptedXpriv, ephemerPublicKey) {
43
+ this.topic = topic;
44
+ this.protocolVersion = protocolVersion;
45
+ this.groupKey = groupKey.length == 0 ? new Uint8Array(33) : groupKey;
46
+ this.initializationVector =
47
+ initializationVector.length == 0 ? new Uint8Array(16) : initializationVector;
48
+ this.encryptedXpriv = encryptedXpriv.length == 0 ? new Uint8Array(64) : encryptedXpriv;
49
+ this.ephemeralPublicKey = ephemerPublicKey.length == 0 ? new Uint8Array(33) : ephemerPublicKey;
50
+ }
51
+ getType() {
52
+ return CommandType.Seed;
53
+ }
54
+ }
55
+ /**
56
+ *
57
+ */
58
+ export class Derive {
59
+ constructor(path, groupKey, initializationVector, encryptedXpriv, ephemeralPublicKey) {
60
+ this.path = path;
61
+ this.groupKey = groupKey;
62
+ this.initializationVector = initializationVector;
63
+ this.encryptedXpriv = encryptedXpriv;
64
+ this.ephemeralPublicKey = ephemeralPublicKey;
65
+ }
66
+ getType() {
67
+ return CommandType.Derive;
68
+ }
69
+ }
70
+ /**
71
+ *
72
+ */
73
+ export class AddMember {
74
+ constructor(name, publicKey, permissions) {
75
+ this.name = name;
76
+ this.publicKey = publicKey;
77
+ this.permissions = permissions;
78
+ }
79
+ getType() {
80
+ return CommandType.AddMember;
81
+ }
82
+ }
83
+ /**
84
+ *
85
+ */
86
+ export class PublishKey {
87
+ constructor(initializationVector, encryptedXpriv, recipient, ephemeralPublicKey) {
88
+ this.encryptedXpriv = encryptedXpriv;
89
+ this.initializationVector = initializationVector;
90
+ this.recipient = recipient;
91
+ this.ephemeralPublicKey = ephemeralPublicKey;
92
+ }
93
+ getType() {
94
+ return CommandType.PublishKey;
95
+ }
96
+ }
97
+ /**
98
+ *
99
+ */
100
+ export class EditMember {
101
+ constructor(member, name, permissions) {
102
+ this.name = name;
103
+ this.permissions = permissions;
104
+ this.member = member;
105
+ }
106
+ getType() {
107
+ return CommandType.EditMember;
108
+ }
109
+ }
110
+ /**
111
+ *
112
+ */
113
+ export class CloseStream {
114
+ constructor() { }
115
+ getType() {
116
+ return CommandType.CloseStream;
117
+ }
118
+ }
119
+ /**
120
+ * Create a new command block.
121
+ * @param issuer The public key of the command block issuer
122
+ * @param commands The list of commands in this command block
123
+ * @param signature The signature of the command block (by default the block is not signed)
124
+ * @param parent The parent command block hash (if null, the block is the first block and a parent will be generated)
125
+ * @returns
126
+ */
127
+ export function createCommandBlock(issuer_1, commands_1) {
128
+ return __awaiter(this, arguments, void 0, function* (issuer, commands, signature = new Uint8Array(), parent = null) {
129
+ if (parent === null) {
130
+ parent = parent = yield crypto.randomBytes(32);
131
+ }
132
+ return {
133
+ version: 1,
134
+ issuer,
135
+ parent,
136
+ commands,
137
+ signature,
138
+ };
139
+ });
140
+ }
141
+ export function signCommandBlock(block, issuer, secretKey) {
142
+ return __awaiter(this, void 0, void 0, function* () {
143
+ const signature = yield crypto.sign(yield hashCommandBlock(block), yield crypto.keypairFromSecretKey(secretKey));
144
+ return Object.assign(Object.assign({}, block), { signature });
145
+ });
146
+ }
147
+ export function hashCommandBlock(block) {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ return yield crypto.hash(CommandStreamEncoder.encode([block]));
150
+ });
151
+ }
152
+ export function verifyCommandBlock(block) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ const unsignedBlock = Object.assign({}, block);
155
+ unsignedBlock.signature = new Uint8Array();
156
+ const hash = yield hashCommandBlock(unsignedBlock);
157
+ return yield crypto.verify(hash, block.signature, block.issuer);
158
+ });
159
+ }
160
+ //# sourceMappingURL=CommandBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandBlock.js","sourceRoot":"","sources":["../src/CommandBlock.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AASlC;;GAEG;AACH,MAAM,CAAN,IAAY,WAOX;AAPD,WAAY,WAAW;IACrB,8CAAW,CAAA;IACX,wDAAgB,CAAA;IAChB,0DAAiB,CAAA;IACjB,0DAAiB,CAAA;IACjB,kDAAa,CAAA;IACb,4DAAkB,CAAA;AACpB,CAAC,EAPW,WAAW,KAAX,WAAW,QAOtB;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,IAAI;IACnB,yBAAyB,EAAE,IAAI;IAC/B,kBAAkB,EAAE,IAAI;IAExB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,UAAU;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,IAAI;IAQf,YACE,KAAwB,EACxB,eAAuB,EACvB,QAAoB,EACpB,oBAAgC,EAChC,cAA0B,EAC1B,gBAA4B;QAE5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACrE,IAAI,CAAC,oBAAoB;YACvB,oBAAoB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAC/E,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QACvF,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACjG,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,MAAM;IAOjB,YACE,IAAc,EACd,QAAoB,EACpB,oBAAgC,EAChC,cAA0B,EAC1B,kBAA8B;QAE9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,SAAS;IAKpB,YAAY,IAAY,EAAE,SAAqB,EAAE,WAAmB;QAClE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC,SAAS,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IAMrB,YACE,oBAAgC,EAChC,cAA0B,EAC1B,SAAqB,EACrB,kBAA8B;QAE9B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAC/C,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAU;IAKrB,YAAY,MAAkB,EAAE,IAAmB,EAAE,WAA0B;QAC7E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,WAAW,CAAC,UAAU,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IACtB,gBAAe,CAAC;IAEhB,OAAO;QACL,OAAO,WAAW,CAAC,WAAW,CAAC;IACjC,CAAC;CACF;AAuBD;;;;;;;GAOG;AACH,MAAM,UAAgB,kBAAkB;yDACtC,MAAkB,EAClB,QAAmB,EACnB,YAAwB,IAAI,UAAU,EAAE,EACxC,SAA4B,IAAI;QAEhC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,MAAM,GAAG,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC;YACV,MAAM;YACN,MAAM;YACN,QAAQ;YACR,SAAS;SACV,CAAC;IACJ,CAAC;CAAA;AAED,MAAM,UAAgB,gBAAgB,CACpC,KAAmB,EACnB,MAAkB,EAClB,SAAqB;;QAErB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CACjC,MAAM,gBAAgB,CAAC,KAAK,CAAC,EAC7B,MAAM,MAAM,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAC7C,CAAC;QACF,uCACK,KAAK,KACR,SAAS,IACT;IACJ,CAAC;CAAA;AAED,MAAM,UAAgB,gBAAgB,CAAC,KAAmB;;QACxD,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;CAAA;AAED,MAAM,UAAgB,kBAAkB,CAAC,KAAmB;;QAC1D,MAAM,aAAa,qBAAQ,KAAK,CAAE,CAAC;QACnC,aAAa,CAAC,SAAS,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC;QACnD,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;CAAA"}
@@ -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,189 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { createCommandBlock, hashCommandBlock, CommandType, Seed, Derive, AddMember, PublishKey, CloseStream, } from "./CommandBlock";
11
+ import CommandStreamResolver from "./CommandStreamResolver";
12
+ import { DerivationPath } from "./Crypto";
13
+ import { ISSUER_PLACEHOLDER } from "./Device";
14
+ const EMPTY = new Uint8Array();
15
+ /**
16
+ *
17
+ */
18
+ export class CommandStreamIssuer {
19
+ constructor(stream) {
20
+ this._steps = [];
21
+ this._stream = stream;
22
+ }
23
+ seed(topic = null) {
24
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
25
+ device;
26
+ tempStream;
27
+ streamTree;
28
+ return [new Seed(topic, 0, EMPTY, EMPTY, EMPTY, EMPTY)];
29
+ });
30
+ this._steps.push(step);
31
+ return this;
32
+ }
33
+ derive(path) {
34
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
35
+ device;
36
+ tempStream;
37
+ streamTree;
38
+ const derivationPath = DerivationPath.toIndexArray(path);
39
+ return [new Derive(derivationPath, EMPTY, EMPTY, EMPTY, EMPTY)];
40
+ });
41
+ this._steps.push(step);
42
+ return this;
43
+ }
44
+ addMember(name, publicKey, permissions, publishKey = true) {
45
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
46
+ device;
47
+ tempStream;
48
+ streamTree;
49
+ if (publishKey) {
50
+ return [
51
+ new AddMember(name, publicKey, permissions),
52
+ new PublishKey(EMPTY, EMPTY, publicKey, EMPTY),
53
+ ];
54
+ }
55
+ else {
56
+ return [new AddMember(name, publicKey, permissions)];
57
+ }
58
+ });
59
+ this._steps.push(step);
60
+ return this;
61
+ }
62
+ publishKey(publicKey) {
63
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
64
+ device;
65
+ tempStream;
66
+ streamTree;
67
+ return [new PublishKey(EMPTY, EMPTY, publicKey, EMPTY)];
68
+ });
69
+ this._steps.push(step);
70
+ return this;
71
+ }
72
+ close() {
73
+ const step = (device, tempStream, streamTree) => __awaiter(this, void 0, void 0, function* () {
74
+ device;
75
+ tempStream;
76
+ streamTree;
77
+ return [new CloseStream()];
78
+ });
79
+ this._steps.push(step);
80
+ return this;
81
+ }
82
+ issue(device, streamTree, parentHash) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const lastBlockHash = this._stream.blocks.length > 0
85
+ ? yield hashCommandBlock(this._stream.blocks[this._stream.blocks.length - 1])
86
+ : null;
87
+ const block = yield createCommandBlock(ISSUER_PLACEHOLDER, [], new Uint8Array(), parentHash || lastBlockHash);
88
+ const stream = new CommandStream(this._stream.blocks.concat([]));
89
+ const tempStream = new CommandStream(this._stream.blocks.concat([block]));
90
+ let commands = [];
91
+ for (const step of this._steps) {
92
+ const newCommands = yield step(device, tempStream, streamTree);
93
+ commands = commands.concat(newCommands);
94
+ tempStream.blocks[tempStream.blocks.length - 1].commands = commands;
95
+ }
96
+ return yield stream.issue(device, commands, streamTree, parentHash);
97
+ });
98
+ }
99
+ }
100
+ /**
101
+ *
102
+ */
103
+ export default class CommandStream {
104
+ constructor(blocks = []) {
105
+ this._blocks = [];
106
+ this._blocks = blocks;
107
+ }
108
+ resolve(incomplete = false) {
109
+ incomplete;
110
+ return CommandStreamResolver.resolve(this._blocks);
111
+ }
112
+ getRootHash() {
113
+ return hashCommandBlock(this._blocks[0]);
114
+ }
115
+ getStreamPath() {
116
+ if (this._blocks.length === 0)
117
+ return null;
118
+ if (this._blocks[0].commands[0].getType() === CommandType.Seed) {
119
+ return "";
120
+ }
121
+ else if (this._blocks[0].commands[0].getType() === CommandType.Derive) {
122
+ return DerivationPath.toString(this._blocks[0].commands[0].path);
123
+ }
124
+ else {
125
+ throw new Error("Malformed CommandStream");
126
+ }
127
+ }
128
+ push(block, issuer, tree) {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ let stream = [];
131
+ if (block.commands.length === 0) {
132
+ throw new Error("Attempts to create an empty block");
133
+ }
134
+ // 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
135
+ if ((this._blocks.length == 0 || this._blocks[0].commands[0].getType() !== CommandType.Seed) &&
136
+ block.commands[0].getType() !== CommandType.Seed) {
137
+ const root = tree === null || tree === void 0 ? void 0 : tree.getRoot();
138
+ if (!root || root.blocks.length === 0) {
139
+ throw new Error("Null or empty tree cannot be used to sign the new block");
140
+ }
141
+ stream = [root.blocks[0]].concat(this._blocks);
142
+ }
143
+ else {
144
+ stream = this._blocks;
145
+ }
146
+ if (block.commands[0].getType() === CommandType.Derive) {
147
+ // Set the parent hash of the block to the root hash
148
+ const b = Object.assign({}, block);
149
+ b.parent = yield hashCommandBlock(stream[0]);
150
+ stream = stream.concat([b]);
151
+ }
152
+ else {
153
+ stream = stream.concat([block]);
154
+ }
155
+ const signedBlock = yield issuer.sign(stream, tree || undefined);
156
+ return new CommandStream(this._blocks.concat([signedBlock]));
157
+ });
158
+ }
159
+ issue(device_1, commands_1) {
160
+ return __awaiter(this, arguments, void 0, function* (device, commands, tree = null, parentHash = null) {
161
+ const lastBlockHash = this._blocks.length > 0
162
+ ? yield hashCommandBlock(this._blocks[this._blocks.length - 1])
163
+ : null;
164
+ const block = yield createCommandBlock(ISSUER_PLACEHOLDER, commands, new Uint8Array(), parentHash || lastBlockHash);
165
+ return this.push(block, device, tree);
166
+ });
167
+ }
168
+ edit() {
169
+ return new CommandStreamIssuer(this);
170
+ }
171
+ getStreamPublicKey() {
172
+ return __awaiter(this, void 0, void 0, function* () {
173
+ // Group public must be the first command in the first block othwerwise it is malformed
174
+ if (this._blocks.length === 0 || this._blocks[0].commands.length === 0)
175
+ throw new Error("Empty CommandStream");
176
+ if (this._blocks[0].commands[0].getType() === CommandType.Seed) {
177
+ return this._blocks[0].commands[0].groupKey;
178
+ }
179
+ if (this._blocks[0].commands[0].getType() === CommandType.Derive) {
180
+ return this._blocks[0].commands[0].groupKey;
181
+ }
182
+ throw new Error("Malformed CommandStream");
183
+ });
184
+ }
185
+ get blocks() {
186
+ return this._blocks;
187
+ }
188
+ }
189
+ //# 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"}
@@ -0,0 +1,97 @@
1
+ import { Seed, AddMember, CloseStream, Derive, EditMember, PublishKey, CommandType, } from "./CommandBlock";
2
+ import { TLV } from "./tlv";
3
+ export const TLVCommandStreamDecoder = {
4
+ // Read command from TLV
5
+ readCommand: function (tlv) {
6
+ switch (tlv.type) {
7
+ case CommandType.Seed:
8
+ return TLVCommandStreamDecoder.readSeedCommand(tlv.value);
9
+ case CommandType.Derive:
10
+ return TLVCommandStreamDecoder.readDeriveCommand(tlv.value);
11
+ case CommandType.AddMember:
12
+ return TLVCommandStreamDecoder.readAddMemberCommand(tlv.value);
13
+ case CommandType.PublishKey:
14
+ return TLVCommandStreamDecoder.readPublishKeyCommand(tlv.value);
15
+ case CommandType.EditMember:
16
+ return TLVCommandStreamDecoder.readEditMemberCommand(tlv.value);
17
+ case CommandType.CloseStream:
18
+ return TLVCommandStreamDecoder.readCloseStreamCommand(tlv.value);
19
+ default:
20
+ throw new Error("Unknown command type");
21
+ }
22
+ },
23
+ readSeedCommand: function (buffer) {
24
+ const readTopic = TLV.readNullOr(TLV.readTLV(buffer, 0), TLV.readBytes);
25
+ const readProtocolVersion = TLV.readVarInt(TLV.readTLV(buffer, readTopic.offset));
26
+ const readGroupKey = TLV.readPublicKey(TLV.readTLV(buffer, readProtocolVersion.offset));
27
+ const readIV = TLV.readBytes(TLV.readTLV(buffer, readGroupKey.offset));
28
+ const readEncryptedXpriv = TLV.readBytes(TLV.readTLV(buffer, readIV.offset));
29
+ const readEphemeralPublicKey = TLV.readPublicKey(TLV.readTLV(buffer, readEncryptedXpriv.offset));
30
+ return new Seed(readTopic.value, readProtocolVersion.value, readGroupKey.value, readIV.value, readEncryptedXpriv.value, readEphemeralPublicKey.value);
31
+ },
32
+ readDeriveCommand: function (buffer) {
33
+ const readPath = TLV.readDerivationPath(TLV.readTLV(buffer, 0));
34
+ const readGroupKey = TLV.readPublicKey(TLV.readTLV(buffer, readPath.offset));
35
+ const readIV = TLV.readBytes(TLV.readTLV(buffer, readGroupKey.offset));
36
+ const readEncryptedXpriv = TLV.readBytes(TLV.readTLV(buffer, readIV.offset));
37
+ const readEphemeralPublicKey = TLV.readPublicKey(TLV.readTLV(buffer, readEncryptedXpriv.offset));
38
+ return new Derive(readPath.value, readGroupKey.value, readIV.value, readEncryptedXpriv.value, readEphemeralPublicKey.value);
39
+ },
40
+ readAddMemberCommand: function (buffer) {
41
+ const readName = TLV.readString(TLV.readTLV(buffer, 0));
42
+ const pubkey = TLV.readPublicKey(TLV.readTLV(buffer, readName.offset));
43
+ const permissions = TLV.readVarInt(TLV.readTLV(buffer, pubkey.offset));
44
+ return new AddMember(readName.value, pubkey.value, permissions.value);
45
+ },
46
+ readPublishKeyCommand: function (buffer) {
47
+ const IV = TLV.readBytes(TLV.readTLV(buffer, 0));
48
+ const encryptedXpriv = TLV.readBytes(TLV.readTLV(buffer, IV.offset));
49
+ const recipient = TLV.readPublicKey(TLV.readTLV(buffer, encryptedXpriv.offset));
50
+ const ephemeralPublicKey = TLV.readPublicKey(TLV.readTLV(buffer, recipient.offset));
51
+ return new PublishKey(IV.value, encryptedXpriv.value, recipient.value, ephemeralPublicKey.value);
52
+ },
53
+ readCloseStreamCommand: function (buffer) {
54
+ buffer;
55
+ return new CloseStream();
56
+ },
57
+ readEditMemberCommand: function (buffer) {
58
+ const member = TLV.readPublicKey(TLV.readTLV(buffer, 0));
59
+ const permissions = TLV.readNullOr(TLV.readTLV(buffer, member.offset), TLV.readVarInt);
60
+ const name = TLV.readNullOr(TLV.readTLV(buffer, permissions.offset), TLV.readString);
61
+ return new EditMember(member.value, name.value, permissions.value);
62
+ },
63
+ };
64
+ function unpack(buffer) {
65
+ const stream = [];
66
+ let offset = 0;
67
+ while (offset < buffer.length) {
68
+ const version = TLV.readVarInt(TLV.readTLV(buffer, offset));
69
+ const parent = TLV.readHash(TLV.readTLV(buffer, version.offset));
70
+ const issuer = TLV.readPublicKey(TLV.readTLV(buffer, parent.offset));
71
+ const length = TLV.readVarInt(TLV.readTLV(buffer, issuer.offset));
72
+ offset = length.offset;
73
+ const commands = [];
74
+ for (let index = 0; index < length.value; index++) {
75
+ const commandBuffer = TLV.readTLV(buffer, offset);
76
+ const command = TLVCommandStreamDecoder.readCommand(commandBuffer.tlv);
77
+ commands.push(command);
78
+ offset = commandBuffer.offset;
79
+ }
80
+ const signature = TLV.readSignature(TLV.readTLV(buffer, offset));
81
+ offset = signature.offset;
82
+ stream.push({
83
+ version: version.value,
84
+ parent: parent.value,
85
+ issuer: issuer.value,
86
+ commands,
87
+ signature: signature.value,
88
+ });
89
+ }
90
+ return stream;
91
+ }
92
+ export class CommandStreamDecoder {
93
+ static decode(buffer) {
94
+ return unpack(buffer);
95
+ }
96
+ }
97
+ //# sourceMappingURL=CommandStreamDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandStreamDecoder.js","sourceRoot":"","sources":["../src/CommandStreamDecoder.ts"],"names":[],"mappings":"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"}