signify-ts 0.2.0 → 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.
- package/README.md +104 -34
- package/dist/exports.d.ts +40 -40
- package/dist/exports.js +40 -0
- package/dist/index.d.ts +2 -3
- package/dist/index.js +3 -8
- package/dist/keri/app/aiding.d.ts +54 -18
- package/{src/keri/app/aiding.ts → dist/keri/app/aiding.js} +130 -236
- package/dist/keri/app/clienting.d.ts +59 -22
- package/{src/keri/app/clienting.ts → dist/keri/app/clienting.js} +146 -235
- package/dist/keri/app/contacting.d.ts +30 -23
- package/{src/keri/app/contacting.ts → dist/keri/app/contacting.js} +26 -63
- package/dist/keri/app/controller.d.ts +49 -6
- package/{src/keri/app/controller.ts → dist/keri/app/controller.js} +80 -186
- package/dist/keri/app/coring.d.ts +134 -25
- package/{src/keri/app/coring.ts → dist/keri/app/coring.js} +83 -56
- package/dist/keri/app/credentialing.d.ts +191 -67
- package/dist/keri/app/credentialing.js +540 -0
- package/dist/keri/app/delegating.d.ts +18 -0
- package/dist/keri/app/delegating.js +24 -0
- package/dist/keri/app/escrowing.d.ts +5 -3
- package/{src/keri/app/escrowing.ts → dist/keri/app/escrowing.js} +3 -9
- package/dist/keri/app/exchanging.d.ts +243 -11
- package/dist/keri/app/exchanging.js +242 -0
- package/dist/keri/app/grouping.d.ts +11 -9
- package/{src/keri/app/grouping.ts → dist/keri/app/grouping.js} +10 -29
- package/dist/keri/app/habery.d.ts +2 -2
- package/dist/keri/app/habery.js +117 -0
- package/dist/keri/app/notifying.d.ts +2 -2
- package/{src/keri/app/notifying.ts → dist/keri/app/notifying.js} +7 -17
- package/dist/keri/core/authing.d.ts +2 -2
- package/{src/keri/core/authing.ts → dist/keri/core/authing.js} +26 -42
- package/dist/keri/core/base64.d.ts +2 -0
- package/dist/keri/core/base64.js +16 -0
- package/dist/keri/core/bexter.d.ts +1 -1
- package/{src/keri/core/bexter.ts → dist/keri/core/bexter.js} +18 -32
- package/dist/keri/core/cigar.d.ts +2 -2
- package/dist/keri/core/cigar.js +13 -0
- package/dist/keri/core/cipher.d.ts +1 -1
- package/{src/keri/core/cipher.ts → dist/keri/core/cipher.js} +10 -19
- package/dist/keri/core/core.d.ts +117 -9
- package/dist/keri/core/core.js +385 -0
- package/dist/keri/core/counter.d.ts +2 -2
- package/dist/keri/core/counter.js +221 -0
- package/dist/keri/core/decrypter.d.ts +4 -4
- package/{src/keri/core/decrypter.ts → dist/keri/core/decrypter.js} +23 -40
- package/dist/keri/core/diger.d.ts +3 -3
- package/{src/keri/core/diger.ts → dist/keri/core/diger.js} +18 -33
- package/dist/keri/core/encrypter.d.ts +2 -2
- package/{src/keri/core/encrypter.ts → dist/keri/core/encrypter.js} +18 -38
- package/dist/keri/core/eventing.d.ts +6 -6
- package/dist/keri/core/eventing.js +383 -0
- package/dist/keri/core/httping.d.ts +11 -4
- package/{src/keri/core/httping.ts → dist/keri/core/httping.js} +36 -101
- package/dist/keri/core/indexer.d.ts +1 -1
- package/dist/keri/core/indexer.js +407 -0
- package/dist/keri/core/keeping.d.ts +113 -46
- package/dist/keri/core/keeping.js +347 -0
- package/{src/keri/core/kering.ts → dist/keri/core/kering.js} +1 -3
- package/dist/keri/core/keyState.d.ts +98 -0
- package/dist/keri/core/manager.d.ts +147 -12
- package/dist/keri/core/manager.js +880 -0
- package/dist/keri/core/matter.d.ts +1 -1
- package/dist/keri/core/matter.js +460 -0
- package/dist/keri/core/number.d.ts +2 -2
- package/{src/keri/core/number.ts → dist/keri/core/number.js} +26 -32
- package/dist/keri/core/pather.d.ts +2 -2
- package/{src/keri/core/pather.ts → dist/keri/core/pather.js} +12 -27
- package/dist/keri/core/prefixer.d.ts +10 -10
- package/dist/keri/core/prefixer.js +182 -0
- package/dist/keri/core/saider.d.ts +2 -12
- package/dist/keri/core/saider.js +107 -0
- package/dist/keri/core/salter.d.ts +44 -9
- package/dist/keri/core/salter.js +110 -0
- package/dist/keri/core/seqner.d.ts +1 -1
- package/{src/keri/core/seqner.ts → dist/keri/core/seqner.js} +20 -21
- package/dist/keri/core/serder.d.ts +25 -12
- package/dist/keri/core/serder.js +133 -0
- package/dist/keri/core/siger.d.ts +2 -2
- package/{src/keri/core/siger.ts → dist/keri/core/siger.js} +4 -14
- package/dist/keri/core/signer.d.ts +4 -4
- package/dist/keri/core/signer.js +84 -0
- package/{src/keri/core/tholder.ts → dist/keri/core/tholder.js} +69 -94
- package/dist/keri/core/utils.d.ts +1 -1
- package/{src/keri/core/utils.ts → dist/keri/core/utils.js} +30 -60
- package/dist/keri/core/vdring.d.ts +2 -2
- package/dist/keri/core/vdring.js +61 -0
- package/dist/keri/core/verfer.d.ts +2 -6
- package/dist/keri/core/verfer.js +37 -0
- package/dist/keri/end/ending.d.ts +10 -8
- package/dist/keri/end/ending.js +136 -0
- package/{src/ready.ts → dist/ready.js} +1 -2
- package/dist/types/keria-api-schema.d.ts +1158 -0
- package/dist/types/keria-api-schema.js +34 -0
- package/package.json +53 -52
- package/dist/math.d.ts +0 -1
- package/dist/signify-ts.cjs +0 -7835
- package/dist/signify-ts.cjs.development.js +0 -9501
- package/dist/signify-ts.cjs.development.js.map +0 -1
- package/dist/signify-ts.cjs.map +0 -7
- package/dist/signify-ts.cjs.production.min.js +0 -2
- package/dist/signify-ts.cjs.production.min.js.map +0 -1
- package/dist/signify-ts.esm.js +0 -9345
- package/dist/signify-ts.esm.js.map +0 -1
- package/dist/signify-ts.mjs +0 -7811
- package/dist/signify-ts.mjs.map +0 -7
- package/src/buffer-polyfill.ts +0 -5
- package/src/exports.ts +0 -44
- package/src/index.ts +0 -4
- package/src/keri/app/credentialing.ts +0 -820
- package/src/keri/app/exchanging.ts +0 -220
- package/src/keri/app/habery.ts +0 -185
- package/src/keri/core/cigar.ts +0 -18
- package/src/keri/core/core.ts +0 -326
- package/src/keri/core/counter.ts +0 -273
- package/src/keri/core/eventing.ts +0 -581
- package/src/keri/core/indexer.ts +0 -509
- package/src/keri/core/keeping.ts +0 -684
- package/src/keri/core/manager.ts +0 -1183
- package/src/keri/core/matter.ts +0 -521
- package/src/keri/core/prefixer.ts +0 -233
- package/src/keri/core/saider.ts +0 -186
- package/src/keri/core/salter.ts +0 -120
- package/src/keri/core/serder.ts +0 -163
- package/src/keri/core/signer.ts +0 -133
- package/src/keri/core/vdring.ts +0 -94
- package/src/keri/core/verfer.ts +0 -47
- package/src/keri/end/ending.ts +0 -170
- package/src/math.ts +0 -3
- /package/dist/{buffer-polyfill.d.ts → keri/core/keyState.js} +0 -0
|
@@ -1,233 +0,0 @@
|
|
|
1
|
-
import { Matter, MatterArgs, MtrDex } from './matter';
|
|
2
|
-
import { EmptyMaterialError } from './kering';
|
|
3
|
-
import { Dict, Ilks } from './core';
|
|
4
|
-
import { sizeify } from './serder';
|
|
5
|
-
import { Verfer } from './verfer';
|
|
6
|
-
|
|
7
|
-
import { blake3 } from '@noble/hashes/blake3';
|
|
8
|
-
|
|
9
|
-
const Dummy: string = '#';
|
|
10
|
-
|
|
11
|
-
export class Prefixer extends Matter {
|
|
12
|
-
private readonly _derive: Function | undefined;
|
|
13
|
-
private readonly _verify: Function | undefined;
|
|
14
|
-
|
|
15
|
-
constructor({ raw, code, qb64b, qb64, qb2 }: MatterArgs, ked?: Dict<any>) {
|
|
16
|
-
try {
|
|
17
|
-
super({ raw, code, qb64b, qb64, qb2 });
|
|
18
|
-
} catch (e) {
|
|
19
|
-
if (e instanceof EmptyMaterialError) {
|
|
20
|
-
if (ked == undefined || (code == undefined && !('i' in ked))) {
|
|
21
|
-
throw e;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (code == undefined) {
|
|
25
|
-
super({ qb64: ked['i'], code: code });
|
|
26
|
-
code = this.code;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
let _derive;
|
|
30
|
-
if (code == MtrDex.Ed25519N) {
|
|
31
|
-
_derive = Prefixer._derive_ed25519N;
|
|
32
|
-
} else if (code == MtrDex.Ed25519) {
|
|
33
|
-
_derive = Prefixer._derive_ed25519;
|
|
34
|
-
} else if (code == MtrDex.Blake3_256) {
|
|
35
|
-
_derive = Prefixer._derive_blake3_256;
|
|
36
|
-
} else {
|
|
37
|
-
throw new Error(`Unsupported code = ${code} for prefixer.`);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
[raw, code] = _derive(ked);
|
|
41
|
-
super({ raw: raw, code: code });
|
|
42
|
-
this._derive = _derive;
|
|
43
|
-
} else {
|
|
44
|
-
throw e;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (this.code == MtrDex.Ed25519N) {
|
|
49
|
-
this._verify = this._verify_ed25519N;
|
|
50
|
-
} else if (this.code == MtrDex.Ed25519) {
|
|
51
|
-
this._verify = this._verify_ed25519;
|
|
52
|
-
} else if (this.code == MtrDex.Blake3_256) {
|
|
53
|
-
this._verify = this._verify_blake3_256;
|
|
54
|
-
} else {
|
|
55
|
-
throw new Error(`Unsupported code = ${code} for prefixer.`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
derive(ked: Dict<any>): [Uint8Array, string] {
|
|
60
|
-
if (ked['i'] != Ilks.icp) {
|
|
61
|
-
throw new Error(
|
|
62
|
-
`Non-incepting ilk ${ked['i']} for prefix derivation`
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
return this._derive!(ked);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
verify(ked: Dict<any>, prefixed: boolean = false): boolean {
|
|
69
|
-
if (ked['i'] != Ilks.icp) {
|
|
70
|
-
throw new Error(
|
|
71
|
-
`Non-incepting ilk ${ked['i']} for prefix derivation`
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
return this._verify!(ked, this.qb64, prefixed);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
static _derive_ed25519N(ked: Dict<any>): [Uint8Array, string] {
|
|
78
|
-
let verfer;
|
|
79
|
-
const keys = ked['k'];
|
|
80
|
-
if (keys.length != 1) {
|
|
81
|
-
throw new Error(
|
|
82
|
-
`Basic derivation needs at most 1 key got ${keys.length} keys instead`
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
try {
|
|
86
|
-
verfer = new Verfer({ qb64: keys[0] });
|
|
87
|
-
} catch (e) {
|
|
88
|
-
throw new Error(`Error extracting public key = ${e}`);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (!(verfer.code in [MtrDex.Ed25519N])) {
|
|
92
|
-
throw new Error(`Mismatch derivation code = ${verfer.code}`);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const next = 'n' in ked ? ked['n'] : [];
|
|
96
|
-
if (verfer.code == MtrDex.Ed25519N && next.length > 0) {
|
|
97
|
-
throw new Error(
|
|
98
|
-
`Non-empty nxt = ${next} for non-transferable code = ${verfer.code}`
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
const backers = 'b' in ked ? ked['b'] : [];
|
|
103
|
-
if (verfer.code == MtrDex.Ed25519N && backers.length > 0) {
|
|
104
|
-
throw new Error(
|
|
105
|
-
`Non-empty b =${backers} for non-transferable code = ${verfer.code}`
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const anchor = 'a' in ked ? ked['a'] : [];
|
|
110
|
-
if (verfer.code == MtrDex.Ed25519N && anchor.length > 0) {
|
|
111
|
-
throw new Error(
|
|
112
|
-
`Non-empty a = ${verfer.code} for non-transferable code = ${verfer.code}`
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return [verfer.raw, verfer.code];
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
static _derive_ed25519(ked: Dict<any>): [Uint8Array, string] {
|
|
120
|
-
let verfer;
|
|
121
|
-
const keys = ked['k'];
|
|
122
|
-
if (keys.length != 1) {
|
|
123
|
-
throw new Error(
|
|
124
|
-
`Basic derivation needs at most 1 key got ${keys.length} keys instead`
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
verfer = new Verfer({ qb64: keys[0] });
|
|
130
|
-
} catch (e) {
|
|
131
|
-
throw new Error(`Error extracting public key = ${e}`);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (verfer.code in [MtrDex.Ed25519]) {
|
|
135
|
-
throw new Error(`Mismatch derivation code = ${verfer.code}`);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return [verfer.raw, verfer.code];
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
static _derive_blake3_256(ked: Dict<any>): [Uint8Array, string] {
|
|
142
|
-
const kd = ked;
|
|
143
|
-
const ilk = ked['t'];
|
|
144
|
-
if (![Ilks.icp, Ilks.dip, Ilks.vcp, Ilks.dip].includes(ilk)) {
|
|
145
|
-
throw new Error(`Invalid ilk = ${ilk} to derive pre.`);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
kd['i'] = ''.padStart(Matter.Sizes.get(MtrDex.Blake3_256)!.fs!, Dummy);
|
|
149
|
-
kd['d'] = ked['i'];
|
|
150
|
-
const [raw] = sizeify(ked);
|
|
151
|
-
const dig = Buffer.from(
|
|
152
|
-
blake3.create({ dkLen: 32 }).update(raw).digest()
|
|
153
|
-
);
|
|
154
|
-
return [dig, MtrDex.Blake3_256];
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
_verify_ed25519N(
|
|
158
|
-
ked: Dict<any>,
|
|
159
|
-
pre: string,
|
|
160
|
-
prefixed: boolean = false
|
|
161
|
-
): boolean {
|
|
162
|
-
try {
|
|
163
|
-
const keys = ked['k'];
|
|
164
|
-
if (keys.length != 1) {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (keys[0] != pre) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (prefixed && ked['i'] != pre) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
const next = 'n' in ked ? ked['n'] : [];
|
|
177
|
-
if (next.length > 0) {
|
|
178
|
-
// must be empty
|
|
179
|
-
return false;
|
|
180
|
-
}
|
|
181
|
-
} catch (e) {
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
return true;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
_verify_ed25519(
|
|
189
|
-
ked: Dict<any>,
|
|
190
|
-
pre: string,
|
|
191
|
-
prefixed: boolean = false
|
|
192
|
-
): boolean {
|
|
193
|
-
try {
|
|
194
|
-
const keys = ked['k'];
|
|
195
|
-
if (keys.length != 1) {
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (keys[0] != pre) {
|
|
200
|
-
return false;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (prefixed && ked['i'] != pre) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
} catch (e) {
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
return true;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
_verify_blake3_256(
|
|
214
|
-
ked: Dict<any>,
|
|
215
|
-
pre: string,
|
|
216
|
-
prefixed: boolean = false
|
|
217
|
-
): boolean {
|
|
218
|
-
try {
|
|
219
|
-
const [raw] = Prefixer._derive_blake3_256(ked);
|
|
220
|
-
const crymat = new Matter({ raw: raw, code: MtrDex.Blake3_256 });
|
|
221
|
-
if (crymat.qb64 != pre) {
|
|
222
|
-
return false;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
if (prefixed && ked['i'] != pre) {
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
} catch (e) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
return true;
|
|
232
|
-
}
|
|
233
|
-
}
|
package/src/keri/core/saider.ts
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { DigiDex, Matter, MatterArgs, MtrDex } from './matter';
|
|
2
|
-
import { deversify, Dict, Serials } from './core';
|
|
3
|
-
import { EmptyMaterialError } from './kering';
|
|
4
|
-
import { dumps, sizeify } from './serder';
|
|
5
|
-
|
|
6
|
-
import { blake3 } from '@noble/hashes/blake3';
|
|
7
|
-
|
|
8
|
-
const Dummy = '#';
|
|
9
|
-
|
|
10
|
-
export enum Ids {
|
|
11
|
-
d = 'd',
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
class Digestage {
|
|
15
|
-
public klas: any = undefined;
|
|
16
|
-
public size: number | undefined = 0;
|
|
17
|
-
public length: number | undefined = 0;
|
|
18
|
-
constructor(klas: any, size?: number, length?: number) {
|
|
19
|
-
this.klas = klas;
|
|
20
|
-
this.size = size;
|
|
21
|
-
this.length = length;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export class Saider extends Matter {
|
|
26
|
-
static Digests = new Map<string, Digestage>([
|
|
27
|
-
[
|
|
28
|
-
MtrDex.Blake3_256,
|
|
29
|
-
new Digestage(Saider._derive_blake3_256, undefined, undefined),
|
|
30
|
-
],
|
|
31
|
-
]);
|
|
32
|
-
|
|
33
|
-
constructor(
|
|
34
|
-
{ raw, code, qb64b, qb64, qb2 }: MatterArgs,
|
|
35
|
-
sad?: Dict<any>,
|
|
36
|
-
kind?: Serials,
|
|
37
|
-
label: string = Ids.d
|
|
38
|
-
) {
|
|
39
|
-
try {
|
|
40
|
-
super({ raw, code, qb64b, qb64, qb2 });
|
|
41
|
-
} catch (e) {
|
|
42
|
-
if (e instanceof EmptyMaterialError) {
|
|
43
|
-
if (sad == undefined || !(label in sad)) {
|
|
44
|
-
throw e;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (code == undefined) {
|
|
48
|
-
if (sad[label] != '') {
|
|
49
|
-
super({ qb64: sad[label], code: code });
|
|
50
|
-
code = this.code;
|
|
51
|
-
} else {
|
|
52
|
-
code = MtrDex.Blake3_256;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!DigiDex.has(code)) {
|
|
57
|
-
throw new Error(`Unsupported digest code = ${code}`);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
[raw] = Saider._derive({ ...sad }, code, kind, label);
|
|
61
|
-
super({ raw: raw, code: code });
|
|
62
|
-
} else {
|
|
63
|
-
throw e;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (!this.digestive) {
|
|
68
|
-
throw new Error(`Unsupported digest code = ${this.code}.`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
static _derive_blake3_256(
|
|
73
|
-
ser: Uint8Array,
|
|
74
|
-
_digest_size: number,
|
|
75
|
-
_length: number
|
|
76
|
-
) {
|
|
77
|
-
return Buffer.from(blake3.create({ dkLen: 32 }).update(ser).digest());
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
private static _derive(
|
|
81
|
-
sad: Dict<any>,
|
|
82
|
-
code: string,
|
|
83
|
-
kind: Serials | undefined,
|
|
84
|
-
label: string
|
|
85
|
-
): [Uint8Array, Dict<any>] {
|
|
86
|
-
if (!DigiDex.has(code) || !Saider.Digests.has(code)) {
|
|
87
|
-
throw new Error(`Unsupported digest code = ${code}.`);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
sad = { ...sad };
|
|
91
|
-
sad[label] = ''.padStart(Matter.Sizes.get(code)!.fs!, Dummy);
|
|
92
|
-
if ('v' in sad) {
|
|
93
|
-
[, , kind, sad] = sizeify(sad, kind);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
const ser = { ...sad };
|
|
97
|
-
|
|
98
|
-
const digestage = Saider.Digests.get(code);
|
|
99
|
-
|
|
100
|
-
const cpa = Saider._serialze(ser, kind);
|
|
101
|
-
const args: any[] = [];
|
|
102
|
-
if (digestage!.size != undefined) {
|
|
103
|
-
args.push(digestage!.size);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (digestage!.length != undefined) {
|
|
107
|
-
args.push(digestage!.length);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return [digestage!.klas(cpa, ...args), sad];
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
public derive(
|
|
114
|
-
sad: Dict<any>,
|
|
115
|
-
code: string,
|
|
116
|
-
kind: Serials | undefined,
|
|
117
|
-
label: string
|
|
118
|
-
): [Uint8Array, Dict<any>] {
|
|
119
|
-
code = code != undefined ? code : this.code;
|
|
120
|
-
return Saider._derive(sad, code, kind, label);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
public verify(
|
|
124
|
-
sad: Dict<any>,
|
|
125
|
-
prefixed: boolean = false,
|
|
126
|
-
versioned: boolean = false,
|
|
127
|
-
kind?: Serials,
|
|
128
|
-
label: string = Ids.d
|
|
129
|
-
): boolean {
|
|
130
|
-
try {
|
|
131
|
-
const [raw, dsad] = Saider._derive(sad, this.code, kind, label);
|
|
132
|
-
const saider = new Saider({ raw: raw, code: this.code });
|
|
133
|
-
if (this.qb64 != saider.qb64) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if ('v' in sad && versioned) {
|
|
138
|
-
if (sad['v'] != dsad['v']) {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
if (prefixed && sad[label] != this.qb64) {
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
} catch (e) {
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
private static _serialze(sad: Dict<any>, kind?: Serials): string {
|
|
154
|
-
let knd = Serials.JSON;
|
|
155
|
-
if ('v' in sad) {
|
|
156
|
-
[, knd] = deversify(sad['v']);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
if (kind == undefined) {
|
|
160
|
-
kind = knd;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return dumps(sad, kind);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
public static saidify(
|
|
167
|
-
sad: Dict<any>,
|
|
168
|
-
code: string = MtrDex.Blake3_256,
|
|
169
|
-
kind: Serials = Serials.JSON,
|
|
170
|
-
label: string = Ids.d
|
|
171
|
-
): [Saider, Dict<any>] {
|
|
172
|
-
if (!(label in sad)) {
|
|
173
|
-
throw new Error(`Missing id field labeled=${label} in sad.`);
|
|
174
|
-
}
|
|
175
|
-
let raw;
|
|
176
|
-
[raw, sad] = Saider._derive(sad, code, kind, label);
|
|
177
|
-
const saider = new Saider(
|
|
178
|
-
{ raw: raw, code: code },
|
|
179
|
-
undefined,
|
|
180
|
-
kind,
|
|
181
|
-
label
|
|
182
|
-
);
|
|
183
|
-
sad[label] = saider.qb64;
|
|
184
|
-
return [saider, sad];
|
|
185
|
-
}
|
|
186
|
-
}
|
package/src/keri/core/salter.ts
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { Signer } from './signer';
|
|
2
|
-
|
|
3
|
-
import { Matter, MtrDex } from './matter';
|
|
4
|
-
import { EmptyMaterialError } from './kering';
|
|
5
|
-
import libsodium from 'libsodium-wrappers-sumo';
|
|
6
|
-
|
|
7
|
-
export enum Tier {
|
|
8
|
-
low = 'low',
|
|
9
|
-
med = 'med',
|
|
10
|
-
high = 'high',
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface SalterArgs {
|
|
14
|
-
raw?: Uint8Array | undefined;
|
|
15
|
-
code?: string;
|
|
16
|
-
tier?: Tier;
|
|
17
|
-
qb64b?: Uint8Array | undefined;
|
|
18
|
-
qb64?: string;
|
|
19
|
-
qb2?: Uint8Array | undefined;
|
|
20
|
-
}
|
|
21
|
-
export class Salter extends Matter {
|
|
22
|
-
private readonly _tier: Tier | null;
|
|
23
|
-
|
|
24
|
-
constructor({
|
|
25
|
-
raw,
|
|
26
|
-
code = MtrDex.Salt_128,
|
|
27
|
-
tier = Tier.low,
|
|
28
|
-
qb64,
|
|
29
|
-
qb64b,
|
|
30
|
-
qb2,
|
|
31
|
-
}: SalterArgs) {
|
|
32
|
-
try {
|
|
33
|
-
super({ raw, code, qb64, qb64b, qb2 });
|
|
34
|
-
} catch (e) {
|
|
35
|
-
if (e instanceof EmptyMaterialError) {
|
|
36
|
-
if (code == MtrDex.Salt_128) {
|
|
37
|
-
const salt = libsodium.randombytes_buf(
|
|
38
|
-
libsodium.crypto_pwhash_SALTBYTES
|
|
39
|
-
);
|
|
40
|
-
super({ raw: salt, code: code });
|
|
41
|
-
} else {
|
|
42
|
-
throw new Error(
|
|
43
|
-
'invalid code for Salter, only Salt_128 accepted'
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
} else {
|
|
47
|
-
throw e;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (this.code != MtrDex.Salt_128) {
|
|
52
|
-
throw new Error('invalid code for Salter, only Salt_128 accepted');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
this._tier = tier !== null ? tier : Tier.low;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
private stretch(
|
|
59
|
-
size: number = 32,
|
|
60
|
-
path: string = '',
|
|
61
|
-
tier: Tier | null = null,
|
|
62
|
-
temp: boolean = false
|
|
63
|
-
): Uint8Array {
|
|
64
|
-
tier = tier == null ? this.tier : tier;
|
|
65
|
-
|
|
66
|
-
let opslimit: number, memlimit: number;
|
|
67
|
-
|
|
68
|
-
// Harcoded values based on keripy
|
|
69
|
-
if (temp) {
|
|
70
|
-
opslimit = 1; //libsodium.crypto_pwhash_OPSLIMIT_MIN
|
|
71
|
-
memlimit = 8192; //libsodium.crypto_pwhash_MEMLIMIT_MIN
|
|
72
|
-
} else {
|
|
73
|
-
switch (tier) {
|
|
74
|
-
case Tier.low:
|
|
75
|
-
opslimit = 2; //libsodium.crypto_pwhash_OPSLIMIT_INTERACTIVE
|
|
76
|
-
memlimit = 67108864; //libsodium.crypto_pwhash_MEMLIMIT_INTERACTIVE
|
|
77
|
-
break;
|
|
78
|
-
case Tier.med:
|
|
79
|
-
opslimit = 3; //libsodium.crypto_pwhash_OPSLIMIT_MODERATE
|
|
80
|
-
memlimit = 268435456; //libsodium.crypto_pwhash_MEMLIMIT_MODERATE
|
|
81
|
-
break;
|
|
82
|
-
case Tier.high:
|
|
83
|
-
opslimit = 4; //libsodium.crypto_pwhash_OPSLIMIT_SENSITIVE
|
|
84
|
-
memlimit = 1073741824; //libsodium.crypto_pwhash_MEMLIMIT_SENSITIVE
|
|
85
|
-
break;
|
|
86
|
-
default:
|
|
87
|
-
throw new Error(`Unsupported security tier = ${tier}.`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return libsodium.crypto_pwhash(
|
|
92
|
-
size,
|
|
93
|
-
path,
|
|
94
|
-
this.raw,
|
|
95
|
-
opslimit,
|
|
96
|
-
memlimit,
|
|
97
|
-
libsodium.crypto_pwhash_ALG_ARGON2ID13
|
|
98
|
-
);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
signer(
|
|
102
|
-
code: string = MtrDex.Ed25519_Seed,
|
|
103
|
-
transferable: boolean = true,
|
|
104
|
-
path: string = '',
|
|
105
|
-
tier: Tier | null = null,
|
|
106
|
-
temp: boolean = false
|
|
107
|
-
): Signer {
|
|
108
|
-
const seed = this.stretch(Matter._rawSize(code), path, tier, temp);
|
|
109
|
-
|
|
110
|
-
return new Signer({
|
|
111
|
-
raw: seed,
|
|
112
|
-
code: code,
|
|
113
|
-
transferable: transferable,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
get tier(): Tier | null {
|
|
118
|
-
return this._tier;
|
|
119
|
-
}
|
|
120
|
-
}
|
package/src/keri/core/serder.ts
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { MtrDex } from './matter';
|
|
2
|
-
import {
|
|
3
|
-
deversify,
|
|
4
|
-
Dict,
|
|
5
|
-
Ident,
|
|
6
|
-
Serials,
|
|
7
|
-
versify,
|
|
8
|
-
Version,
|
|
9
|
-
Versionage,
|
|
10
|
-
} from './core';
|
|
11
|
-
import { Verfer } from './verfer';
|
|
12
|
-
import { Diger } from './diger';
|
|
13
|
-
import { CesrNumber } from './number';
|
|
14
|
-
|
|
15
|
-
export class Serder {
|
|
16
|
-
private _kind: Serials;
|
|
17
|
-
private _raw: string = '';
|
|
18
|
-
private _ked: Dict<any> = {};
|
|
19
|
-
private _ident: Ident = Ident.KERI;
|
|
20
|
-
private _size: number = 0;
|
|
21
|
-
private _version: Version = Versionage;
|
|
22
|
-
private readonly _code: string;
|
|
23
|
-
|
|
24
|
-
constructor(
|
|
25
|
-
ked: Dict<any>,
|
|
26
|
-
kind: Serials = Serials.JSON,
|
|
27
|
-
code: string = MtrDex.Blake3_256
|
|
28
|
-
) {
|
|
29
|
-
this._code = code;
|
|
30
|
-
this._kind = kind;
|
|
31
|
-
this.ked = ked;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
set ked(ked: Dict<any>) {
|
|
35
|
-
const [raw, ident, kind, kd, version] = this._exhale(ked, this._kind);
|
|
36
|
-
const size = raw.length;
|
|
37
|
-
this._raw = raw;
|
|
38
|
-
this._ident = ident;
|
|
39
|
-
this._ked = kd;
|
|
40
|
-
this._kind = kind;
|
|
41
|
-
this._size = size;
|
|
42
|
-
this._version = version;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
get pre(): string {
|
|
46
|
-
return this._ked['i'];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
get ked(): Dict<any> {
|
|
50
|
-
return this._ked;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
get code(): string {
|
|
54
|
-
return this._code;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
get raw(): string {
|
|
58
|
-
return this._raw;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
get sner(): CesrNumber {
|
|
62
|
-
return new CesrNumber({}, this.ked['s']);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
get sn(): number {
|
|
66
|
-
return this.sner.num;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
get kind(): Serials {
|
|
70
|
-
return this._kind;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
private _exhale(
|
|
74
|
-
ked: Dict<any>,
|
|
75
|
-
kind: Serials
|
|
76
|
-
): [string, Ident, Serials, Dict<any>, Version] {
|
|
77
|
-
return sizeify(ked, kind);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
get ident(): Ident {
|
|
81
|
-
return this._ident;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
get size(): number {
|
|
85
|
-
return this._size;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
get version(): Version {
|
|
89
|
-
return this._version;
|
|
90
|
-
}
|
|
91
|
-
get verfers(): Verfer[] {
|
|
92
|
-
let keys: any = [];
|
|
93
|
-
if ('k' in this._ked) {
|
|
94
|
-
// establishment event
|
|
95
|
-
keys = this._ked['k'];
|
|
96
|
-
} else {
|
|
97
|
-
// non-establishment event
|
|
98
|
-
keys = [];
|
|
99
|
-
}
|
|
100
|
-
// create a new Verfer for each key
|
|
101
|
-
const verfers = [];
|
|
102
|
-
for (const key of keys) {
|
|
103
|
-
verfers.push(new Verfer({ qb64: key }));
|
|
104
|
-
}
|
|
105
|
-
return verfers;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
get digers(): Diger[] {
|
|
109
|
-
let keys: any = [];
|
|
110
|
-
if ('n' in this._ked) {
|
|
111
|
-
// establishment event
|
|
112
|
-
keys = this._ked['n'];
|
|
113
|
-
} else {
|
|
114
|
-
// non-establishment event
|
|
115
|
-
keys = [];
|
|
116
|
-
}
|
|
117
|
-
// create a new Verfer for each key
|
|
118
|
-
const digers = [];
|
|
119
|
-
for (const key of keys) {
|
|
120
|
-
digers.push(new Diger({ qb64: key }));
|
|
121
|
-
}
|
|
122
|
-
return digers;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
pretty() {
|
|
126
|
-
return JSON.stringify(this._ked, undefined, 2);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export function dumps(ked: Object, kind: Serials.JSON): string {
|
|
131
|
-
if (kind == Serials.JSON) {
|
|
132
|
-
return JSON.stringify(ked);
|
|
133
|
-
} else {
|
|
134
|
-
throw new Error('unsupported event encoding');
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export function sizeify(
|
|
139
|
-
ked: Dict<any>,
|
|
140
|
-
kind?: Serials
|
|
141
|
-
): [string, Ident, Serials, Dict<any>, Version] {
|
|
142
|
-
if (!('v' in ked)) {
|
|
143
|
-
throw new Error('Missing or empty version string');
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const [ident, knd, version] = deversify(ked['v'] as string);
|
|
147
|
-
if (version != Versionage) {
|
|
148
|
-
throw new Error(`unsupported version ${version.toString()}`);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (kind == undefined) {
|
|
152
|
-
kind = knd;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
let raw = dumps(ked, kind);
|
|
156
|
-
const size = raw.length;
|
|
157
|
-
|
|
158
|
-
ked['v'] = versify(ident, version, kind, size);
|
|
159
|
-
|
|
160
|
-
raw = dumps(ked, kind);
|
|
161
|
-
|
|
162
|
-
return [raw, ident, kind, ked, version];
|
|
163
|
-
}
|