signify-ts 0.2.1 → 0.3.0-dev.e31e78d

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 (129) hide show
  1. package/README.md +104 -34
  2. package/dist/exports.d.ts +40 -40
  3. package/dist/exports.js +40 -0
  4. package/dist/index.d.ts +2 -3
  5. package/dist/index.js +3 -8
  6. package/dist/keri/app/aiding.d.ts +54 -18
  7. package/{src/keri/app/aiding.ts → dist/keri/app/aiding.js} +130 -236
  8. package/dist/keri/app/clienting.d.ts +59 -22
  9. package/{src/keri/app/clienting.ts → dist/keri/app/clienting.js} +146 -235
  10. package/dist/keri/app/contacting.d.ts +30 -23
  11. package/{src/keri/app/contacting.ts → dist/keri/app/contacting.js} +26 -63
  12. package/dist/keri/app/controller.d.ts +49 -6
  13. package/{src/keri/app/controller.ts → dist/keri/app/controller.js} +80 -186
  14. package/dist/keri/app/coring.d.ts +134 -25
  15. package/{src/keri/app/coring.ts → dist/keri/app/coring.js} +83 -56
  16. package/dist/keri/app/credentialing.d.ts +187 -69
  17. package/dist/keri/app/credentialing.js +540 -0
  18. package/dist/keri/app/delegating.d.ts +18 -0
  19. package/dist/keri/app/delegating.js +24 -0
  20. package/dist/keri/app/escrowing.d.ts +5 -3
  21. package/{src/keri/app/escrowing.ts → dist/keri/app/escrowing.js} +3 -9
  22. package/dist/keri/app/exchanging.d.ts +243 -11
  23. package/dist/keri/app/exchanging.js +242 -0
  24. package/dist/keri/app/grouping.d.ts +11 -9
  25. package/{src/keri/app/grouping.ts → dist/keri/app/grouping.js} +10 -29
  26. package/dist/keri/app/habery.d.ts +2 -2
  27. package/dist/keri/app/habery.js +117 -0
  28. package/dist/keri/app/notifying.d.ts +2 -2
  29. package/{src/keri/app/notifying.ts → dist/keri/app/notifying.js} +7 -17
  30. package/dist/keri/core/authing.d.ts +2 -2
  31. package/{src/keri/core/authing.ts → dist/keri/core/authing.js} +26 -42
  32. package/dist/keri/core/base64.d.ts +2 -0
  33. package/dist/keri/core/base64.js +16 -0
  34. package/dist/keri/core/bexter.d.ts +1 -1
  35. package/{src/keri/core/bexter.ts → dist/keri/core/bexter.js} +18 -32
  36. package/dist/keri/core/cigar.d.ts +2 -2
  37. package/dist/keri/core/cigar.js +13 -0
  38. package/dist/keri/core/cipher.d.ts +1 -1
  39. package/{src/keri/core/cipher.ts → dist/keri/core/cipher.js} +10 -19
  40. package/dist/keri/core/core.d.ts +117 -9
  41. package/dist/keri/core/core.js +385 -0
  42. package/dist/keri/core/counter.d.ts +2 -2
  43. package/dist/keri/core/counter.js +221 -0
  44. package/dist/keri/core/decrypter.d.ts +4 -4
  45. package/{src/keri/core/decrypter.ts → dist/keri/core/decrypter.js} +23 -40
  46. package/dist/keri/core/diger.d.ts +3 -3
  47. package/{src/keri/core/diger.ts → dist/keri/core/diger.js} +18 -33
  48. package/dist/keri/core/encrypter.d.ts +2 -2
  49. package/{src/keri/core/encrypter.ts → dist/keri/core/encrypter.js} +18 -38
  50. package/dist/keri/core/eventing.d.ts +6 -6
  51. package/dist/keri/core/eventing.js +383 -0
  52. package/dist/keri/core/httping.d.ts +11 -4
  53. package/{src/keri/core/httping.ts → dist/keri/core/httping.js} +36 -101
  54. package/dist/keri/core/indexer.d.ts +1 -1
  55. package/dist/keri/core/indexer.js +407 -0
  56. package/dist/keri/core/keeping.d.ts +113 -46
  57. package/dist/keri/core/keeping.js +347 -0
  58. package/{src/keri/core/kering.ts → dist/keri/core/kering.js} +1 -3
  59. package/dist/keri/core/keyState.d.ts +98 -0
  60. package/dist/keri/core/manager.d.ts +147 -12
  61. package/dist/keri/core/manager.js +880 -0
  62. package/dist/keri/core/matter.d.ts +1 -1
  63. package/dist/keri/core/matter.js +460 -0
  64. package/dist/keri/core/number.d.ts +2 -2
  65. package/{src/keri/core/number.ts → dist/keri/core/number.js} +26 -32
  66. package/dist/keri/core/pather.d.ts +2 -2
  67. package/{src/keri/core/pather.ts → dist/keri/core/pather.js} +12 -27
  68. package/dist/keri/core/prefixer.d.ts +10 -10
  69. package/dist/keri/core/prefixer.js +182 -0
  70. package/dist/keri/core/saider.d.ts +2 -12
  71. package/dist/keri/core/saider.js +107 -0
  72. package/dist/keri/core/salter.d.ts +44 -9
  73. package/dist/keri/core/salter.js +110 -0
  74. package/dist/keri/core/seqner.d.ts +1 -1
  75. package/{src/keri/core/seqner.ts → dist/keri/core/seqner.js} +20 -21
  76. package/dist/keri/core/serder.d.ts +25 -12
  77. package/dist/keri/core/serder.js +133 -0
  78. package/dist/keri/core/siger.d.ts +2 -2
  79. package/{src/keri/core/siger.ts → dist/keri/core/siger.js} +4 -14
  80. package/dist/keri/core/signer.d.ts +4 -4
  81. package/dist/keri/core/signer.js +84 -0
  82. package/{src/keri/core/tholder.ts → dist/keri/core/tholder.js} +69 -94
  83. package/dist/keri/core/utils.d.ts +1 -1
  84. package/{src/keri/core/utils.ts → dist/keri/core/utils.js} +30 -60
  85. package/dist/keri/core/vdring.d.ts +2 -2
  86. package/dist/keri/core/vdring.js +61 -0
  87. package/dist/keri/core/verfer.d.ts +2 -6
  88. package/dist/keri/core/verfer.js +37 -0
  89. package/dist/keri/end/ending.d.ts +10 -8
  90. package/dist/keri/end/ending.js +136 -0
  91. package/{src/ready.ts → dist/ready.js} +1 -2
  92. package/dist/types/keria-api-schema.d.ts +1158 -0
  93. package/dist/types/keria-api-schema.js +34 -0
  94. package/package.json +53 -52
  95. package/dist/math.d.ts +0 -1
  96. package/dist/signify-ts.cjs +0 -7842
  97. package/dist/signify-ts.cjs.development.js +0 -9501
  98. package/dist/signify-ts.cjs.development.js.map +0 -1
  99. package/dist/signify-ts.cjs.map +0 -7
  100. package/dist/signify-ts.cjs.production.min.js +0 -2
  101. package/dist/signify-ts.cjs.production.min.js.map +0 -1
  102. package/dist/signify-ts.esm.js +0 -9345
  103. package/dist/signify-ts.esm.js.map +0 -1
  104. package/dist/signify-ts.mjs +0 -7818
  105. package/dist/signify-ts.mjs.map +0 -7
  106. package/src/buffer-polyfill.ts +0 -5
  107. package/src/exports.ts +0 -44
  108. package/src/index.ts +0 -4
  109. package/src/keri/app/credentialing.ts +0 -841
  110. package/src/keri/app/exchanging.ts +0 -220
  111. package/src/keri/app/habery.ts +0 -185
  112. package/src/keri/core/cigar.ts +0 -18
  113. package/src/keri/core/core.ts +0 -326
  114. package/src/keri/core/counter.ts +0 -273
  115. package/src/keri/core/eventing.ts +0 -581
  116. package/src/keri/core/indexer.ts +0 -509
  117. package/src/keri/core/keeping.ts +0 -684
  118. package/src/keri/core/manager.ts +0 -1183
  119. package/src/keri/core/matter.ts +0 -521
  120. package/src/keri/core/prefixer.ts +0 -233
  121. package/src/keri/core/saider.ts +0 -186
  122. package/src/keri/core/salter.ts +0 -120
  123. package/src/keri/core/serder.ts +0 -163
  124. package/src/keri/core/signer.ts +0 -133
  125. package/src/keri/core/vdring.ts +0 -94
  126. package/src/keri/core/verfer.ts +0 -47
  127. package/src/keri/end/ending.ts +0 -170
  128. package/src/math.ts +0 -3
  129. /package/dist/{buffer-polyfill.d.ts → keri/core/keyState.js} +0 -0
@@ -1,684 +0,0 @@
1
- import { Salter } from './salter';
2
- import { Algos, SaltyCreator, RandyCreator } from './manager';
3
- import { MtrDex } from './matter';
4
- import { Tier } from './salter';
5
- import { Encrypter } from '../core/encrypter';
6
- import { Decrypter } from './decrypter';
7
- import { b } from './core';
8
- import { Cipher } from './cipher';
9
- import { Diger } from './diger';
10
- import { Prefixer } from './prefixer';
11
- import { Signer } from './signer';
12
- import { Siger } from './siger';
13
- import { Cigar } from './cigar';
14
-
15
- export {};
16
-
17
- /** External module definition */
18
- export interface ExternalModule {
19
- type: string;
20
- name: string;
21
- module: any;
22
- }
23
-
24
- export class KeyManager {
25
- private salter?: Salter;
26
- private modules?: any;
27
-
28
- constructor(salter: Salter, externalModules: ExternalModule[] = []) {
29
- this.salter = salter;
30
- this.modules = [];
31
- externalModules.forEach((mod) => {
32
- this.modules[mod.type] = mod.module;
33
- });
34
- }
35
-
36
- new(algo: Algos, pidx: number, kargs: any) {
37
- switch (algo) {
38
- case Algos.salty:
39
- return new SaltyKeeper(
40
- this.salter!,
41
- pidx,
42
- kargs['kidx'],
43
- kargs['tier'],
44
- kargs['transferable'],
45
- kargs['stem'],
46
- kargs['code'],
47
- kargs['count'],
48
- kargs['icodes'],
49
- kargs['ncode'],
50
- kargs['ncount'],
51
- kargs['ncodes'],
52
- kargs['dcode'],
53
- kargs['bran'],
54
- kargs['sxlt']
55
- );
56
- case Algos.randy:
57
- return new RandyKeeper(
58
- this.salter!,
59
- kargs['code'],
60
- kargs['count'],
61
- kargs['icodes'],
62
- kargs['transferable'],
63
- kargs['ncode'],
64
- kargs['ncount'],
65
- kargs['ncodes'],
66
- kargs['dcode'],
67
- kargs['prxs'],
68
- kargs['nxts']
69
- );
70
- case Algos.group:
71
- return new GroupKeeper(
72
- this,
73
- kargs['mhab'],
74
- kargs['states'],
75
- kargs['rstates'],
76
- kargs['keys'],
77
- kargs['ndigs']
78
- );
79
- case Algos.extern:
80
- const typ = kargs.extern_type;
81
- if (typ in this.modules) {
82
- const mod = new this.modules[typ](pidx, kargs);
83
- return mod;
84
- } else {
85
- throw new Error(`unsupported external module type ${typ}`);
86
- }
87
- default:
88
- throw new Error('Unknown algo');
89
- }
90
- }
91
-
92
- get(aid: any) {
93
- const pre = new Prefixer({ qb64: aid['prefix'] });
94
- if (Algos.salty in aid) {
95
- const kargs = aid[Algos.salty];
96
- return new SaltyKeeper(
97
- this.salter!,
98
- kargs['pidx'],
99
- kargs['kidx'],
100
- kargs['tier'],
101
- kargs['transferable'],
102
- kargs['stem'],
103
- kargs['code'],
104
- kargs['count'],
105
- kargs['icodes'],
106
- kargs['ncode'],
107
- kargs['ncount'],
108
- kargs['ncodes'],
109
- kargs['dcode'],
110
- kargs['bran'],
111
- kargs['sxlt']
112
- );
113
- } else if (Algos.randy in aid) {
114
- const kargs = aid[Algos.randy];
115
- return new RandyKeeper(
116
- this.salter!,
117
- kargs['code'],
118
- kargs['count'],
119
- kargs['icodes'],
120
- pre.transferable,
121
- kargs['ncode'],
122
- kargs['ncount'],
123
- kargs['ncodes'],
124
- kargs['dcode'],
125
- kargs['prxs'],
126
- kargs['nxts']
127
- );
128
- } else if (Algos.group in aid) {
129
- const kargs = aid[Algos.group];
130
- return new GroupKeeper(
131
- this,
132
- kargs['mhab'],
133
- kargs['states'],
134
- kargs['rstates'],
135
- kargs['keys'],
136
- kargs['ndigs']
137
- );
138
- } else if (Algos.extern in aid) {
139
- const kargs = aid[Algos.randy];
140
- const typ = kargs.extern_type;
141
- if (typ in this.modules) {
142
- const mod = new this.modules[typ](kargs['pidx'], kargs);
143
- return mod;
144
- } else {
145
- throw new Error(`unsupported external module type ${typ}`);
146
- }
147
- } else {
148
- throw new Error(`Algo not allowed yet`);
149
- }
150
- }
151
- }
152
-
153
- export class SaltyKeeper {
154
- private aeid: string;
155
- private encrypter: Encrypter;
156
- private decrypter: Decrypter;
157
- private salter: Salter;
158
- private pidx: number;
159
- private kidx: number;
160
- private tier: Tier;
161
- private transferable: boolean;
162
- private stem: string | undefined;
163
- private code: string;
164
- private count: number;
165
- private icodes: string[] | undefined;
166
- private ncode: string;
167
- private ncount: number;
168
- private ncodes: string[] | undefined;
169
- private dcode: string | undefined;
170
- private sxlt: string | undefined;
171
- private bran: string | undefined;
172
- private creator: SaltyCreator;
173
- public algo: Algos = Algos.salty;
174
- public signers: Signer[];
175
-
176
- constructor(
177
- salter: Salter,
178
- pidx: number,
179
- kidx: number = 0,
180
- tier = Tier.low,
181
- transferable = false,
182
- stem = undefined,
183
- code = MtrDex.Ed25519_Seed,
184
- count = 1,
185
- icodes: string[] | undefined = undefined,
186
- ncode = MtrDex.Ed25519_Seed,
187
- ncount = 1,
188
- ncodes: string[] | undefined = undefined,
189
- dcode = MtrDex.Blake3_256,
190
- bran: string | undefined = undefined,
191
- sxlt = undefined
192
- ) {
193
- // # Salter is the entered passcode and used for enc/dec of salts for each AID
194
- this.salter = salter;
195
- const signer = this.salter.signer(undefined, (transferable = false));
196
-
197
- this.aeid = signer.verfer.qb64;
198
-
199
- this.encrypter = new Encrypter({}, b(this.aeid));
200
- this.decrypter = new Decrypter({}, signer.qb64b);
201
-
202
- this.code = code;
203
- this.ncode = ncode;
204
- this.tier = tier;
205
- this.icodes =
206
- icodes == undefined ? new Array<string>(count).fill(code) : icodes;
207
- this.ncodes =
208
- ncodes == undefined
209
- ? new Array<string>(ncount).fill(ncode)
210
- : ncodes;
211
- this.dcode = dcode;
212
- this.pidx = pidx;
213
- this.kidx = kidx;
214
- this.transferable = transferable;
215
- this.count = count;
216
- this.ncount = ncount;
217
- this.stem = stem == undefined ? 'signify:aid' : stem;
218
-
219
- if (bran != undefined) {
220
- this.bran = MtrDex.Salt_128 + 'A' + bran!.slice(0, 21);
221
- this.creator = new SaltyCreator(this.bran, this.tier, this.stem);
222
- this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64;
223
- } else if (sxlt == undefined) {
224
- this.creator = new SaltyCreator(undefined, this.tier, this.stem);
225
- this.sxlt = this.encrypter.encrypt(b(this.creator.salt)).qb64;
226
- } else {
227
- this.sxlt = sxlt;
228
- const ciph = new Cipher({ qb64: this.sxlt });
229
- this.creator = new SaltyCreator(
230
- this.decrypter.decrypt(null, ciph).qb64,
231
- (tier = tier),
232
- this.stem
233
- );
234
- }
235
-
236
- this.signers = this.creator.create(
237
- this.icodes,
238
- this.ncount,
239
- this.ncode,
240
- this.transferable,
241
- this.pidx,
242
- 0,
243
- this.kidx,
244
- false
245
- ).signers;
246
- }
247
-
248
- params() {
249
- // Get AID parameters to store externally
250
-
251
- return {
252
- sxlt: this.sxlt,
253
- pidx: this.pidx,
254
- kidx: this.kidx,
255
- stem: this.stem,
256
- tier: this.tier,
257
- icodes: this.icodes,
258
- ncodes: this.ncodes,
259
- dcode: this.dcode,
260
- transferable: this.transferable,
261
- };
262
- }
263
-
264
- incept(transferable: boolean) {
265
- // Create verfers and digers for inception event for AID represented by this Keeper
266
-
267
- // Args:
268
- // transferable (bool): True if the AID for this keeper can establish new keys
269
-
270
- // Returns:
271
- // verfers(list): qualified base64 of signing public keys
272
- // digers(list): qualified base64 of hash of rotation public keys
273
-
274
- this.transferable = transferable;
275
- this.kidx = 0;
276
-
277
- const signers = this.creator.create(
278
- this.icodes,
279
- this.count,
280
- this.code,
281
- this.transferable,
282
- this.pidx,
283
- 0,
284
- this.kidx,
285
- false
286
- );
287
- const verfers = signers.signers.map((signer) => signer.verfer.qb64);
288
-
289
- const nsigners = this.creator.create(
290
- this.ncodes,
291
- this.ncount,
292
- this.ncode,
293
- this.transferable,
294
- this.pidx,
295
- 0,
296
- this.icodes?.length,
297
- false
298
- );
299
- const digers = nsigners.signers.map(
300
- (nsigner) =>
301
- new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64
302
- );
303
-
304
- return [verfers, digers];
305
- }
306
-
307
- rotate(ncodes: string[], transferable: boolean, ..._: any[]) {
308
- // Rotate and return verfers and digers for next rotation event for AID represented by this Keeper
309
-
310
- // Args:
311
- // ncodes (list):
312
- // transferable (bool): derivation codes for rotation key creation
313
-
314
- // Returns:
315
- // verfers(list): qualified base64 of signing public keys
316
- // digers(list): qualified base64 of hash of rotation public keys
317
-
318
- this.ncodes = ncodes;
319
- this.transferable = transferable;
320
- const signers = this.creator.create(
321
- this.ncodes,
322
- this.ncount,
323
- this.ncode,
324
- this.transferable,
325
- this.pidx,
326
- 0,
327
- this.kidx + this.icodes!.length,
328
- false
329
- );
330
- const verfers = signers.signers.map((signer) => signer.verfer.qb64);
331
-
332
- this.kidx = this.kidx! + this.icodes!.length;
333
- const nsigners = this.creator.create(
334
- this.ncodes,
335
- this.ncount,
336
- this.ncode,
337
- this.transferable,
338
- this.pidx,
339
- 0,
340
- this.kidx + this.icodes!.length,
341
- false
342
- );
343
- const digers = nsigners.signers.map(
344
- (nsigner) =>
345
- new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64
346
- );
347
-
348
- return [verfers, digers];
349
- }
350
-
351
- sign(
352
- ser: Uint8Array,
353
- indexed = true,
354
- indices: number[] | undefined = undefined,
355
- ondices: number[] | undefined = undefined
356
- ) {
357
- const signers = this.creator.create(
358
- this.icodes,
359
- this.ncount,
360
- this.ncode,
361
- this.transferable,
362
- this.pidx,
363
- 0,
364
- this.kidx,
365
- false
366
- );
367
-
368
- if (indexed) {
369
- const sigers = [];
370
- let i = 0;
371
- for (const [j, signer] of signers.signers.entries()) {
372
- if (indices != undefined) {
373
- i = indices![j];
374
- if (typeof i != 'number' || i < 0) {
375
- throw new Error(
376
- `Invalid signing index = ${i}, not whole number.`
377
- );
378
- }
379
- } else {
380
- i = j;
381
- }
382
- let o = 0;
383
- if (ondices != undefined) {
384
- o = ondices![j];
385
- if (
386
- (o == undefined ||
387
- (typeof o == 'number' &&
388
- typeof o != 'number' &&
389
- o >= 0))!
390
- ) {
391
- throw new Error(
392
- `Invalid ondex = ${o}, not whole number.`
393
- );
394
- }
395
- } else {
396
- o = i;
397
- }
398
- sigers.push(
399
- signer.sign(ser, i, o == undefined ? true : false, o)
400
- );
401
- }
402
- return sigers.map((siger) => siger.qb64);
403
- } else {
404
- const cigars = [];
405
- for (const [_, signer] of signers.signers.entries()) {
406
- cigars.push(signer.sign(ser));
407
- }
408
- return cigars.map((cigar) => cigar.qb64);
409
- }
410
- }
411
- }
412
-
413
- export class RandyKeeper {
414
- private salter: Salter;
415
- private code: string;
416
- private count: number;
417
- private icodes: string[] | undefined;
418
- private transferable: boolean;
419
- private ncount: number;
420
- private ncodes: string[] | undefined;
421
- private ncode: string;
422
- private dcode: string | undefined;
423
- private prxs: string[] | undefined;
424
- private nxts: string[] | undefined;
425
- private aeid: string;
426
- private encrypter: Encrypter;
427
- private decrypter: Decrypter;
428
- private creator: RandyCreator;
429
- public algo: Algos = Algos.randy;
430
- public signers: Signer[];
431
-
432
- constructor(
433
- salter: Salter,
434
- code = MtrDex.Ed25519_Seed,
435
- count = 1,
436
- icodes: string[] | undefined = undefined,
437
- transferable = false,
438
- ncode = MtrDex.Ed25519_Seed,
439
- ncount = 1,
440
- ncodes: string[],
441
- dcode = MtrDex.Blake3_256,
442
- prxs: string[] | undefined = undefined,
443
- nxts: string[] | undefined = undefined
444
- ) {
445
- this.salter = salter;
446
- this.icodes =
447
- icodes == undefined ? new Array<string>(count).fill(code) : icodes;
448
- this.ncodes =
449
- ncodes == undefined
450
- ? new Array<string>(ncount).fill(ncode)
451
- : ncodes;
452
-
453
- this.code = code;
454
- this.ncode = ncode;
455
- this.count = count;
456
- this.ncount = ncount;
457
-
458
- const signer = this.salter.signer(undefined, (transferable = false));
459
- this.aeid = signer.verfer.qb64;
460
-
461
- this.encrypter = new Encrypter({}, b(this.aeid));
462
- this.decrypter = new Decrypter({}, signer.qb64b);
463
-
464
- this.nxts = nxts ?? [];
465
- this.prxs = prxs ?? [];
466
- this.transferable = transferable;
467
-
468
- this.icodes = icodes;
469
- this.ncodes = ncodes;
470
- this.dcode = dcode;
471
-
472
- this.creator = new RandyCreator();
473
-
474
- this.signers = this.prxs.map((prx) =>
475
- this.decrypter.decrypt(
476
- new Cipher({ qb64: prx }).qb64b,
477
- undefined,
478
- this.transferable
479
- )
480
- );
481
- }
482
-
483
- params() {
484
- return {
485
- nxts: this.nxts,
486
- prxs: this.prxs,
487
- transferable: this.transferable,
488
- };
489
- }
490
-
491
- incept(transferable: boolean) {
492
- this.transferable = transferable;
493
-
494
- const signers = this.creator.create(
495
- this.icodes,
496
- this.count,
497
- this.code,
498
- this.transferable
499
- );
500
- this.prxs = signers.signers.map(
501
- (signer) => this.encrypter.encrypt(undefined, signer).qb64
502
- );
503
-
504
- const verfers = signers.signers.map((signer) => signer.verfer.qb64);
505
-
506
- const nsigners = this.creator.create(
507
- this.ncodes,
508
- this.ncount,
509
- this.ncode,
510
- this.transferable
511
- );
512
-
513
- this.nxts = nsigners.signers.map(
514
- (signer) => this.encrypter.encrypt(undefined, signer).qb64
515
- );
516
-
517
- const digers = nsigners.signers.map(
518
- (nsigner) =>
519
- new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64
520
- );
521
-
522
- return [verfers, digers];
523
- }
524
-
525
- rotate(ncodes: string[], transferable: boolean, ..._: any[]) {
526
- this.ncodes = ncodes;
527
- this.transferable = transferable;
528
- this.prxs = this.nxts;
529
-
530
- const signers = this.nxts!.map((nxt) =>
531
- this.decrypter.decrypt(
532
- undefined,
533
- new Cipher({ qb64: nxt }),
534
- this.transferable
535
- )
536
- );
537
- const verfers = signers.map((signer) => signer.verfer.qb64);
538
- const nsigners = this.creator.create(
539
- this.ncodes,
540
- this.ncount,
541
- this.ncode,
542
- this.transferable
543
- );
544
-
545
- this.nxts = nsigners.signers.map(
546
- (signer) => this.encrypter.encrypt(undefined, signer).qb64
547
- );
548
-
549
- const digers = nsigners.signers.map(
550
- (nsigner) =>
551
- new Diger({ code: this.dcode }, nsigner.verfer.qb64b).qb64
552
- );
553
-
554
- return [verfers, digers];
555
- }
556
-
557
- sign(
558
- ser: Uint8Array,
559
- indexed = true,
560
- indices: number[] | undefined = undefined,
561
- ondices: number[] | undefined = undefined
562
- ) {
563
- const signers = this.prxs!.map((prx) =>
564
- this.decrypter.decrypt(
565
- new Cipher({ qb64: prx }).qb64b,
566
- undefined,
567
- this.transferable
568
- )
569
- );
570
-
571
- if (indexed) {
572
- const sigers = [];
573
- let i = 0;
574
- for (const [j, signer] of signers.entries()) {
575
- if (indices != undefined) {
576
- i = indices![j];
577
- if (typeof i != 'number' || i < 0) {
578
- throw new Error(
579
- `Invalid signing index = ${i}, not whole number.`
580
- );
581
- }
582
- } else {
583
- i = j;
584
- }
585
- let o = 0;
586
- if (ondices != undefined) {
587
- o = ondices![j];
588
- if (
589
- (o == undefined ||
590
- (typeof o == 'number' &&
591
- typeof o != 'number' &&
592
- o >= 0))!
593
- ) {
594
- throw new Error(
595
- `Invalid ondex = ${o}, not whole number.`
596
- );
597
- }
598
- } else {
599
- o = i;
600
- }
601
- sigers.push(
602
- signer.sign(ser, i, o == undefined ? true : false, o)
603
- );
604
- }
605
- return sigers.map((siger) => siger.qb64);
606
- } else {
607
- const cigars = [];
608
- for (const [_, signer] of signers.entries()) {
609
- cigars.push(signer.sign(ser));
610
- }
611
- return cigars.map((cigar) => cigar.qb64);
612
- }
613
- }
614
- }
615
- export class GroupKeeper {
616
- private manager: KeyManager;
617
- private mhab: any;
618
- private gkeys: string[] | undefined;
619
- private gdigs: string[] | undefined;
620
- public algo: Algos = Algos.group;
621
- public signers: Signer[];
622
-
623
- constructor(
624
- manager: KeyManager,
625
- mhab = undefined,
626
- states: any[] | undefined = undefined,
627
- rstates: any[] | undefined = undefined,
628
- keys: any[] | undefined = undefined,
629
- ndigs: any[] | undefined = undefined
630
- ) {
631
- this.manager = manager;
632
- if (states != undefined) {
633
- keys = states.map((state) => state['k'][0]);
634
- }
635
-
636
- if (rstates != undefined) {
637
- ndigs = rstates.map((state) => state['n'][0]);
638
- }
639
-
640
- this.gkeys = keys;
641
- this.gdigs = ndigs;
642
- this.mhab = mhab;
643
- this.signers = [];
644
- }
645
- incept(..._: any) {
646
- return [this.gkeys, this.gdigs];
647
- }
648
-
649
- rotate(
650
- _ncodes: string[],
651
- _transferable: boolean,
652
- states: any[],
653
- rstates: any[],
654
- ..._: any
655
- ) {
656
- this.gkeys = states.map((state) => state['k'][0]);
657
- this.gdigs = rstates.map((state) => state['n'][0]);
658
- return [this.gkeys, this.gdigs];
659
- }
660
-
661
- async sign(
662
- ser: Uint8Array,
663
- indexed: boolean = true,
664
- _indices: number[] | undefined = undefined,
665
- _ondices: number[] | undefined = undefined
666
- ): Promise<Siger[] | Cigar[]> {
667
- const key = this.mhab['state']['k'][0];
668
- const ndig = this.mhab['state']['n'][0];
669
-
670
- const csi = this.gkeys!.indexOf(key);
671
- const pni = this.gdigs!.indexOf(ndig);
672
- const mkeeper = this.manager.get(this.mhab);
673
-
674
- return await mkeeper.sign(ser, indexed, [csi], [pni]);
675
- }
676
-
677
- params() {
678
- return {
679
- mhab: this.mhab,
680
- keys: this.gkeys,
681
- ndigs: this.gdigs,
682
- };
683
- }
684
- }