signify-ts 0.1.1 → 0.2.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.
- package/README.md +96 -47
- package/dist/buffer-polyfill.d.ts +1 -0
- package/dist/exports.d.ts +40 -0
- package/dist/index.d.ts +4 -3
- package/dist/keri/app/aiding.d.ts +138 -0
- package/dist/keri/app/clienting.d.ts +182 -0
- package/dist/keri/app/contacting.d.ts +93 -0
- package/dist/keri/app/controller.d.ts +49 -0
- package/dist/keri/app/coring.d.ts +121 -0
- package/dist/keri/app/credentialing.d.ts +239 -0
- package/dist/keri/app/escrowing.d.ts +19 -0
- package/dist/keri/app/exchanging.d.ts +60 -0
- package/dist/keri/app/grouping.d.ts +44 -0
- package/dist/keri/app/habery.d.ts +48 -47
- package/dist/keri/app/notifying.d.ts +34 -0
- package/dist/keri/core/authing.d.ts +10 -9
- package/dist/keri/core/bexter.d.ts +7 -0
- package/dist/keri/core/cigar.d.ts +8 -8
- package/dist/keri/core/cipher.d.ts +5 -5
- package/dist/keri/core/core.d.ts +59 -53
- package/dist/keri/core/counter.d.ts +43 -43
- package/dist/keri/core/decrypter.d.ts +10 -10
- package/dist/keri/core/diger.d.ts +21 -21
- package/dist/keri/core/encrypter.d.ts +9 -9
- package/dist/keri/core/eventing.d.ts +54 -21
- package/dist/keri/core/httping.d.ts +44 -34
- package/dist/keri/core/indexer.d.ts +98 -88
- package/dist/keri/core/keeping.d.ts +103 -1
- package/dist/keri/core/kering.d.ts +5 -5
- package/dist/keri/core/manager.d.ts +174 -172
- package/dist/keri/core/matter.d.ts +116 -69
- package/dist/keri/core/number.d.ts +7 -6
- package/dist/keri/core/pather.d.ts +7 -0
- package/dist/keri/core/prefixer.d.ts +15 -15
- package/dist/keri/core/saider.d.ts +23 -23
- package/dist/keri/core/salter.d.ts +23 -23
- package/dist/keri/core/seqner.d.ts +15 -0
- package/dist/keri/core/serder.d.ts +31 -23
- package/dist/keri/core/siger.d.ts +18 -18
- package/dist/keri/core/signer.d.ts +34 -34
- package/dist/keri/core/tholder.d.ts +29 -14
- package/dist/keri/core/utils.d.ts +20 -15
- package/dist/keri/core/vdring.d.ts +16 -0
- package/dist/keri/core/verfer.d.ts +13 -12
- package/dist/keri/end/ending.d.ts +13 -13
- package/dist/math.d.ts +1 -0
- package/dist/ready.d.ts +1 -0
- package/dist/signify-ts.cjs +7835 -0
- package/dist/signify-ts.cjs.development.js +6369 -256
- package/dist/signify-ts.cjs.development.js.map +1 -1
- package/dist/signify-ts.cjs.map +7 -0
- package/dist/signify-ts.cjs.production.min.js +1 -1
- package/dist/signify-ts.cjs.production.min.js.map +1 -1
- package/dist/signify-ts.esm.js +6205 -229
- package/dist/signify-ts.esm.js.map +1 -1
- package/dist/signify-ts.mjs +7811 -0
- package/dist/signify-ts.mjs.map +7 -0
- package/package.json +49 -49
- package/src/buffer-polyfill.ts +5 -0
- package/src/exports.ts +44 -0
- package/src/index.ts +4 -5
- package/src/keri/app/aiding.ts +493 -0
- package/src/keri/app/clienting.ts +492 -0
- package/src/keri/app/contacting.ts +188 -0
- package/src/keri/app/controller.ts +372 -0
- package/src/keri/app/coring.ts +225 -0
- package/src/keri/app/credentialing.ts +820 -0
- package/src/keri/app/escrowing.ts +34 -0
- package/src/keri/app/exchanging.ts +220 -0
- package/src/keri/app/grouping.ts +90 -0
- package/src/keri/app/habery.ts +118 -85
- package/src/keri/app/notifying.ts +69 -0
- package/src/keri/core/authing.ts +73 -85
- package/src/keri/core/bexter.ts +138 -0
- package/src/keri/core/cigar.ts +10 -11
- package/src/keri/core/cipher.ts +23 -14
- package/src/keri/core/core.ts +223 -81
- package/src/keri/core/counter.ts +182 -116
- package/src/keri/core/decrypter.ts +48 -34
- package/src/keri/core/diger.ts +23 -22
- package/src/keri/core/encrypter.ts +37 -27
- package/src/keri/core/eventing.ts +468 -106
- package/src/keri/core/httping.ts +151 -105
- package/src/keri/core/indexer.ts +313 -211
- package/src/keri/core/keeping.ts +679 -3
- package/src/keri/core/kering.ts +4 -6
- package/src/keri/core/manager.ts +660 -499
- package/src/keri/core/matter.ts +382 -148
- package/src/keri/core/number.ts +56 -11
- package/src/keri/core/pather.ts +98 -0
- package/src/keri/core/prefixer.ts +122 -101
- package/src/keri/core/saider.ts +104 -76
- package/src/keri/core/salter.ts +71 -40
- package/src/keri/core/seqner.ts +46 -0
- package/src/keri/core/serder.ts +102 -38
- package/src/keri/core/siger.ts +19 -18
- package/src/keri/core/signer.ts +73 -53
- package/src/keri/core/tholder.ts +196 -30
- package/src/keri/core/utils.ts +121 -50
- package/src/keri/core/vdring.ts +94 -0
- package/src/keri/core/verfer.ts +22 -9
- package/src/keri/end/ending.ts +111 -101
- package/src/math.ts +3 -0
- package/src/ready.ts +5 -0
- package/dist/keri/app/accountant.d.ts +0 -10
- package/dist/keri/app/apping.d.ts +0 -1
- package/dist/keri/app/client.d.ts +0 -7
- package/dist/keri/app/signify.d.ts +0 -6
- package/src/keri/app/accountant.ts +0 -35
- package/src/keri/app/apping.ts +0 -12
- package/src/keri/app/client.ts +0 -30
- package/src/keri/app/signify.ts +0 -12
- package/src/keri/app/tsconfig.json +0 -100
- package/src/keri/core/tsconfig.json +0 -100
- package/src/keri/end/tsconfig.json +0 -100
package/src/keri/core/number.ts
CHANGED
|
@@ -1,21 +1,66 @@
|
|
|
1
|
+
import { Matter, MatterArgs, NumDex } from './matter';
|
|
2
|
+
import { bytesToInt, intToBytes } from './utils';
|
|
1
3
|
|
|
2
|
-
export class
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
export class CesrNumber extends Matter {
|
|
5
|
+
constructor(
|
|
6
|
+
{ raw, code, qb64b, qb64, qb2 }: MatterArgs,
|
|
7
|
+
num?: number | string,
|
|
8
|
+
numh?: string
|
|
9
|
+
) {
|
|
10
|
+
let _num;
|
|
11
|
+
if (
|
|
12
|
+
raw == undefined &&
|
|
13
|
+
qb64 == undefined &&
|
|
14
|
+
qb64b == undefined &&
|
|
15
|
+
qb2 == undefined
|
|
16
|
+
) {
|
|
17
|
+
if (typeof num == 'number') {
|
|
18
|
+
_num = num;
|
|
19
|
+
} else if (numh != undefined) {
|
|
20
|
+
_num = parseInt(numh, 16);
|
|
21
|
+
} else {
|
|
22
|
+
_num = 0;
|
|
23
|
+
}
|
|
10
24
|
}
|
|
11
25
|
|
|
26
|
+
if (_num == undefined) {
|
|
27
|
+
throw new Error('Invalid whole number');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (_num <= 256 ** 2 - 1) {
|
|
31
|
+
// make short version of code
|
|
32
|
+
code = NumDex.Short;
|
|
33
|
+
} else if (_num <= 256 ** 4 - 1) {
|
|
34
|
+
// make long version of code
|
|
35
|
+
code = code = NumDex.Long;
|
|
36
|
+
} else if (_num <= 256 ** 8 - 1) {
|
|
37
|
+
// make big version of code
|
|
38
|
+
code = code = NumDex.Big;
|
|
39
|
+
} else if (_num <= 256 ** 16 - 1) {
|
|
40
|
+
// make huge version of code
|
|
41
|
+
code = code = NumDex.Huge;
|
|
42
|
+
} else {
|
|
43
|
+
throw new Error('Invalid num = {num}, too large to encode.');
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
raw = intToBytes(_num, Matter._rawSize(code));
|
|
47
|
+
|
|
48
|
+
super({ raw, code, qb64b, qb64, qb2 });
|
|
49
|
+
|
|
50
|
+
if (!NumDex.has(this.code)) {
|
|
51
|
+
throw new Error('Invalid code ' + code + ' for Number');
|
|
52
|
+
}
|
|
12
53
|
}
|
|
13
54
|
|
|
14
55
|
get num(): number {
|
|
15
|
-
return this.
|
|
56
|
+
return bytesToInt(this.raw);
|
|
16
57
|
}
|
|
17
58
|
|
|
18
59
|
get numh(): string {
|
|
19
|
-
return this.
|
|
60
|
+
return this.num.toString(16);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
get positive(): boolean {
|
|
64
|
+
return this.num > 0;
|
|
20
65
|
}
|
|
21
|
-
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Bexter, Reb64 } from './bexter';
|
|
2
|
+
import { MatterArgs, MtrDex } from './matter';
|
|
3
|
+
import { EmptyMaterialError } from './kering';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
Pather is a subclass of Bexter that provides SAD Path language specific functionality
|
|
7
|
+
for variable length strings that only contain Base64 URL safe characters. Pather allows
|
|
8
|
+
the specification of SAD Paths as a list of field components which will be converted to the
|
|
9
|
+
Base64 URL safe character representation.
|
|
10
|
+
|
|
11
|
+
Additionally, Pather provides .rawify for extracting and serializing the content targeted by
|
|
12
|
+
.path for a SAD, represented as an instance of Serder. Pather enforces Base64 URL character
|
|
13
|
+
safety by leveraging the fact that SADs must have static field ordering. Any field label can
|
|
14
|
+
be replaced by its field ordinal to allow for path specification and traversal for any field
|
|
15
|
+
labels that contain non-Base64 URL safe characters.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Examples: strings:
|
|
19
|
+
path = []
|
|
20
|
+
text = "-"
|
|
21
|
+
qb64 = '6AABAAA-'
|
|
22
|
+
|
|
23
|
+
path = ["A"]
|
|
24
|
+
text = "-A"
|
|
25
|
+
qb64 = '5AABAA-A'
|
|
26
|
+
|
|
27
|
+
path = ["A", "B"]
|
|
28
|
+
text = "-A-B"
|
|
29
|
+
qb64 = '4AAB-A-B'
|
|
30
|
+
|
|
31
|
+
path = ["A", 1, "B", 3]
|
|
32
|
+
text = "-A-1-B-3"
|
|
33
|
+
qb64 = '4AAC-A-1-B-3'
|
|
34
|
+
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
export class Pather extends Bexter {
|
|
38
|
+
constructor(
|
|
39
|
+
{ raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2 }: MatterArgs,
|
|
40
|
+
bext?: string,
|
|
41
|
+
path?: string[]
|
|
42
|
+
) {
|
|
43
|
+
if (
|
|
44
|
+
raw === undefined &&
|
|
45
|
+
bext === undefined &&
|
|
46
|
+
qb64b === undefined &&
|
|
47
|
+
qb64 === undefined &&
|
|
48
|
+
qb2 === undefined
|
|
49
|
+
) {
|
|
50
|
+
if (path === undefined)
|
|
51
|
+
throw new EmptyMaterialError('Missing bext string.');
|
|
52
|
+
|
|
53
|
+
bext = Pather._bextify(path);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
super({ raw, code, qb64b, qb64, qb2 }, bext);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// TODO: implement SAD access methods like resolve, root, strip, startswith and tail
|
|
60
|
+
|
|
61
|
+
get path(): string[] {
|
|
62
|
+
if (!this.bext.startsWith('-')) {
|
|
63
|
+
throw new Error('invalid SAD ptr');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
let path = this.bext;
|
|
67
|
+
while (path.charAt(0) === '-') {
|
|
68
|
+
path = path.substring(1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const apath = path.split('-');
|
|
72
|
+
if (apath[0] !== '') {
|
|
73
|
+
return apath;
|
|
74
|
+
} else {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
static _bextify(path: any[]): string {
|
|
80
|
+
const vath = [];
|
|
81
|
+
for (const p of path) {
|
|
82
|
+
let sp = '';
|
|
83
|
+
if (typeof p === 'number') {
|
|
84
|
+
sp = p.toString();
|
|
85
|
+
} else {
|
|
86
|
+
sp = p;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const match = Reb64.exec(sp);
|
|
90
|
+
if (!match) {
|
|
91
|
+
throw new Error(`"Non Base64 path component = ${p}.`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
vath.push(sp);
|
|
95
|
+
}
|
|
96
|
+
return '-' + vath.join('-');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -1,212 +1,233 @@
|
|
|
1
|
-
import {Matter, MatterArgs, MtrDex} from
|
|
2
|
-
import {EmptyMaterialError} from
|
|
3
|
-
import {Dict, Ilks} from
|
|
4
|
-
import {sizeify} from
|
|
5
|
-
import {Verfer} from
|
|
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
6
|
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
const Dummy: string = "#"
|
|
7
|
+
import { blake3 } from '@noble/hashes/blake3';
|
|
10
8
|
|
|
9
|
+
const Dummy: string = '#';
|
|
11
10
|
|
|
12
11
|
export class Prefixer extends Matter {
|
|
13
|
-
private readonly _derive: Function | undefined
|
|
14
|
-
private readonly _verify: Function | undefined
|
|
12
|
+
private readonly _derive: Function | undefined;
|
|
13
|
+
private readonly _verify: Function | undefined;
|
|
15
14
|
|
|
16
|
-
constructor({raw, code, qb64b, qb64, qb2}: MatterArgs, ked?: Dict<any>) {
|
|
15
|
+
constructor({ raw, code, qb64b, qb64, qb2 }: MatterArgs, ked?: Dict<any>) {
|
|
17
16
|
try {
|
|
18
|
-
super({raw, code, qb64b, qb64, qb2});
|
|
17
|
+
super({ raw, code, qb64b, qb64, qb2 });
|
|
19
18
|
} catch (e) {
|
|
20
19
|
if (e instanceof EmptyMaterialError) {
|
|
21
|
-
if (ked == undefined || (code == undefined && !(
|
|
22
|
-
throw e
|
|
20
|
+
if (ked == undefined || (code == undefined && !('i' in ked))) {
|
|
21
|
+
throw e;
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
if (code == undefined) {
|
|
26
|
-
super({qb64: ked['i'], code: code})
|
|
27
|
-
code = this.code
|
|
25
|
+
super({ qb64: ked['i'], code: code });
|
|
26
|
+
code = this.code;
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
let _derive
|
|
29
|
+
let _derive;
|
|
31
30
|
if (code == MtrDex.Ed25519N) {
|
|
32
|
-
_derive = Prefixer._derive_ed25519N
|
|
31
|
+
_derive = Prefixer._derive_ed25519N;
|
|
33
32
|
} else if (code == MtrDex.Ed25519) {
|
|
34
|
-
_derive = Prefixer._derive_ed25519
|
|
33
|
+
_derive = Prefixer._derive_ed25519;
|
|
35
34
|
} else if (code == MtrDex.Blake3_256) {
|
|
36
|
-
_derive = Prefixer._derive_blake3_256
|
|
35
|
+
_derive = Prefixer._derive_blake3_256;
|
|
37
36
|
} else {
|
|
38
|
-
throw new Error(`Unsupported code = ${code} for prefixer.`)
|
|
37
|
+
throw new Error(`Unsupported code = ${code} for prefixer.`);
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
[raw, code] = _derive(ked)
|
|
42
|
-
super({raw: raw, code: code})
|
|
43
|
-
this._derive = _derive
|
|
40
|
+
[raw, code] = _derive(ked);
|
|
41
|
+
super({ raw: raw, code: code });
|
|
42
|
+
this._derive = _derive;
|
|
44
43
|
} else {
|
|
45
|
-
throw e
|
|
44
|
+
throw e;
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
47
|
|
|
49
48
|
if (this.code == MtrDex.Ed25519N) {
|
|
50
|
-
this._verify = this._verify_ed25519N
|
|
49
|
+
this._verify = this._verify_ed25519N;
|
|
51
50
|
} else if (this.code == MtrDex.Ed25519) {
|
|
52
|
-
this._verify = this._verify_ed25519
|
|
51
|
+
this._verify = this._verify_ed25519;
|
|
53
52
|
} else if (this.code == MtrDex.Blake3_256) {
|
|
54
|
-
this._verify = this._verify_blake3_256
|
|
53
|
+
this._verify = this._verify_blake3_256;
|
|
55
54
|
} else {
|
|
56
|
-
throw new Error(`Unsupported code = ${code} for prefixer.`)
|
|
55
|
+
throw new Error(`Unsupported code = ${code} for prefixer.`);
|
|
57
56
|
}
|
|
58
|
-
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
derive(ked: Dict<any>): [Uint8Array, string] {
|
|
62
|
-
if (ked[
|
|
63
|
-
throw new Error(
|
|
60
|
+
if (ked['i'] != Ilks.icp) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`Non-incepting ilk ${ked['i']} for prefix derivation`
|
|
63
|
+
);
|
|
64
64
|
}
|
|
65
|
-
return this._derive!(ked)
|
|
65
|
+
return this._derive!(ked);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
verify(ked: Dict<any>, prefixed: boolean = false): boolean {
|
|
69
|
-
if (ked[
|
|
70
|
-
throw new Error(
|
|
69
|
+
if (ked['i'] != Ilks.icp) {
|
|
70
|
+
throw new Error(
|
|
71
|
+
`Non-incepting ilk ${ked['i']} for prefix derivation`
|
|
72
|
+
);
|
|
71
73
|
}
|
|
72
|
-
return this._verify!(ked, this.qb64, prefixed)
|
|
74
|
+
return this._verify!(ked, this.qb64, prefixed);
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
|
|
76
77
|
static _derive_ed25519N(ked: Dict<any>): [Uint8Array, string] {
|
|
77
|
-
let verfer
|
|
78
|
-
|
|
78
|
+
let verfer;
|
|
79
|
+
const keys = ked['k'];
|
|
79
80
|
if (keys.length != 1) {
|
|
80
|
-
throw new Error(
|
|
81
|
+
throw new Error(
|
|
82
|
+
`Basic derivation needs at most 1 key got ${keys.length} keys instead`
|
|
83
|
+
);
|
|
81
84
|
}
|
|
82
85
|
try {
|
|
83
|
-
verfer = new Verfer({qb64: keys[0]})
|
|
86
|
+
verfer = new Verfer({ qb64: keys[0] });
|
|
84
87
|
} catch (e) {
|
|
85
|
-
throw new Error(`Error extracting public key = ${e}`)
|
|
88
|
+
throw new Error(`Error extracting public key = ${e}`);
|
|
86
89
|
}
|
|
87
90
|
|
|
88
91
|
if (!(verfer.code in [MtrDex.Ed25519N])) {
|
|
89
|
-
throw new Error(`Mismatch derivation code = ${verfer.code}`)
|
|
92
|
+
throw new Error(`Mismatch derivation code = ${verfer.code}`);
|
|
90
93
|
}
|
|
91
94
|
|
|
92
|
-
|
|
95
|
+
const next = 'n' in ked ? ked['n'] : [];
|
|
93
96
|
if (verfer.code == MtrDex.Ed25519N && next.length > 0) {
|
|
94
|
-
throw new Error(
|
|
97
|
+
throw new Error(
|
|
98
|
+
`Non-empty nxt = ${next} for non-transferable code = ${verfer.code}`
|
|
99
|
+
);
|
|
95
100
|
}
|
|
96
101
|
|
|
97
|
-
|
|
102
|
+
const backers = 'b' in ked ? ked['b'] : [];
|
|
98
103
|
if (verfer.code == MtrDex.Ed25519N && backers.length > 0) {
|
|
99
|
-
throw new Error(
|
|
104
|
+
throw new Error(
|
|
105
|
+
`Non-empty b =${backers} for non-transferable code = ${verfer.code}`
|
|
106
|
+
);
|
|
100
107
|
}
|
|
101
108
|
|
|
102
|
-
|
|
109
|
+
const anchor = 'a' in ked ? ked['a'] : [];
|
|
103
110
|
if (verfer.code == MtrDex.Ed25519N && anchor.length > 0) {
|
|
104
|
-
throw new Error(
|
|
111
|
+
throw new Error(
|
|
112
|
+
`Non-empty a = ${verfer.code} for non-transferable code = ${verfer.code}`
|
|
113
|
+
);
|
|
105
114
|
}
|
|
106
115
|
|
|
107
|
-
return [verfer.raw, verfer.code]
|
|
108
|
-
|
|
116
|
+
return [verfer.raw, verfer.code];
|
|
109
117
|
}
|
|
110
118
|
|
|
111
119
|
static _derive_ed25519(ked: Dict<any>): [Uint8Array, string] {
|
|
112
|
-
let verfer
|
|
113
|
-
|
|
120
|
+
let verfer;
|
|
121
|
+
const keys = ked['k'];
|
|
114
122
|
if (keys.length != 1) {
|
|
115
|
-
throw new Error(
|
|
123
|
+
throw new Error(
|
|
124
|
+
`Basic derivation needs at most 1 key got ${keys.length} keys instead`
|
|
125
|
+
);
|
|
116
126
|
}
|
|
117
127
|
|
|
118
128
|
try {
|
|
119
|
-
verfer = new Verfer({qb64: keys[0]})
|
|
129
|
+
verfer = new Verfer({ qb64: keys[0] });
|
|
120
130
|
} catch (e) {
|
|
121
|
-
throw new Error(`Error extracting public key = ${e}`)
|
|
131
|
+
throw new Error(`Error extracting public key = ${e}`);
|
|
122
132
|
}
|
|
123
133
|
|
|
124
134
|
if (verfer.code in [MtrDex.Ed25519]) {
|
|
125
|
-
throw new Error(`Mismatch derivation code = ${verfer.code}`)
|
|
135
|
+
throw new Error(`Mismatch derivation code = ${verfer.code}`);
|
|
126
136
|
}
|
|
127
137
|
|
|
128
|
-
return [verfer.raw, verfer.code]
|
|
138
|
+
return [verfer.raw, verfer.code];
|
|
129
139
|
}
|
|
130
140
|
|
|
131
141
|
static _derive_blake3_256(ked: Dict<any>): [Uint8Array, string] {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
if (
|
|
135
|
-
throw new Error(`Invalid ilk = ${ilk} to derive pre.`)
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
kd[
|
|
139
|
-
kd[
|
|
140
|
-
|
|
141
|
-
const
|
|
142
|
-
|
|
143
|
-
|
|
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];
|
|
144
155
|
}
|
|
145
156
|
|
|
146
|
-
_verify_ed25519N(
|
|
157
|
+
_verify_ed25519N(
|
|
158
|
+
ked: Dict<any>,
|
|
159
|
+
pre: string,
|
|
160
|
+
prefixed: boolean = false
|
|
161
|
+
): boolean {
|
|
147
162
|
try {
|
|
148
|
-
|
|
163
|
+
const keys = ked['k'];
|
|
149
164
|
if (keys.length != 1) {
|
|
150
|
-
return false
|
|
165
|
+
return false;
|
|
151
166
|
}
|
|
152
167
|
|
|
153
168
|
if (keys[0] != pre) {
|
|
154
|
-
return false
|
|
169
|
+
return false;
|
|
155
170
|
}
|
|
156
171
|
|
|
157
|
-
if (prefixed && ked[
|
|
158
|
-
return false
|
|
172
|
+
if (prefixed && ked['i'] != pre) {
|
|
173
|
+
return false;
|
|
159
174
|
}
|
|
160
175
|
|
|
161
|
-
|
|
162
|
-
if (next.length > 0) {
|
|
163
|
-
|
|
176
|
+
const next = 'n' in ked ? ked['n'] : [];
|
|
177
|
+
if (next.length > 0) {
|
|
178
|
+
// must be empty
|
|
179
|
+
return false;
|
|
164
180
|
}
|
|
165
181
|
} catch (e) {
|
|
166
|
-
return false
|
|
182
|
+
return false;
|
|
167
183
|
}
|
|
168
184
|
|
|
169
|
-
return true
|
|
170
|
-
|
|
185
|
+
return true;
|
|
171
186
|
}
|
|
172
187
|
|
|
173
|
-
_verify_ed25519(
|
|
188
|
+
_verify_ed25519(
|
|
189
|
+
ked: Dict<any>,
|
|
190
|
+
pre: string,
|
|
191
|
+
prefixed: boolean = false
|
|
192
|
+
): boolean {
|
|
174
193
|
try {
|
|
175
|
-
|
|
194
|
+
const keys = ked['k'];
|
|
176
195
|
if (keys.length != 1) {
|
|
177
|
-
return false
|
|
196
|
+
return false;
|
|
178
197
|
}
|
|
179
198
|
|
|
180
199
|
if (keys[0] != pre) {
|
|
181
|
-
return false
|
|
200
|
+
return false;
|
|
182
201
|
}
|
|
183
202
|
|
|
184
|
-
if (prefixed && ked[
|
|
185
|
-
return false
|
|
203
|
+
if (prefixed && ked['i'] != pre) {
|
|
204
|
+
return false;
|
|
186
205
|
}
|
|
187
206
|
} catch (e) {
|
|
188
|
-
return false
|
|
207
|
+
return false;
|
|
189
208
|
}
|
|
190
209
|
|
|
191
|
-
return true
|
|
210
|
+
return true;
|
|
192
211
|
}
|
|
193
212
|
|
|
194
|
-
_verify_blake3_256(
|
|
213
|
+
_verify_blake3_256(
|
|
214
|
+
ked: Dict<any>,
|
|
215
|
+
pre: string,
|
|
216
|
+
prefixed: boolean = false
|
|
217
|
+
): boolean {
|
|
195
218
|
try {
|
|
196
|
-
|
|
197
|
-
|
|
219
|
+
const [raw] = Prefixer._derive_blake3_256(ked);
|
|
220
|
+
const crymat = new Matter({ raw: raw, code: MtrDex.Blake3_256 });
|
|
198
221
|
if (crymat.qb64 != pre) {
|
|
199
|
-
return false
|
|
222
|
+
return false;
|
|
200
223
|
}
|
|
201
224
|
|
|
202
|
-
if (prefixed && ked[
|
|
203
|
-
return false
|
|
225
|
+
if (prefixed && ked['i'] != pre) {
|
|
226
|
+
return false;
|
|
204
227
|
}
|
|
205
|
-
|
|
206
228
|
} catch (e) {
|
|
207
|
-
return false
|
|
229
|
+
return false;
|
|
208
230
|
}
|
|
209
|
-
return true
|
|
210
|
-
|
|
231
|
+
return true;
|
|
211
232
|
}
|
|
212
|
-
}
|
|
233
|
+
}
|