signify-ts 0.1.0 → 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 +101 -5
- package/dist/buffer-polyfill.d.ts +1 -0
- package/dist/exports.d.ts +40 -0
- package/dist/index.d.ts +4 -1
- 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 -0
- package/dist/keri/app/notifying.d.ts +34 -0
- package/dist/keri/core/authing.d.ts +10 -0
- 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 -68
- package/dist/keri/core/counter.d.ts +43 -0
- 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 -0
- package/dist/keri/core/httping.d.ts +44 -0
- 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 -151
- package/dist/keri/core/matter.d.ts +116 -47
- package/dist/keri/core/number.d.ts +7 -0
- package/dist/keri/core/pather.d.ts +7 -0
- package/dist/keri/core/prefixer.d.ts +15 -0
- package/dist/keri/core/saider.d.ts +23 -0
- package/dist/keri/core/salter.d.ts +23 -0
- package/dist/keri/core/seqner.d.ts +15 -0
- package/dist/keri/core/serder.d.ts +31 -0
- 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 -0
- package/dist/keri/core/utils.d.ts +20 -14
- package/dist/keri/core/vdring.d.ts +16 -0
- package/dist/keri/core/verfer.d.ts +13 -0
- package/dist/keri/end/ending.d.ts +13 -0
- 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 +9493 -5
- 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 +9341 -5
- 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 +51 -49
- package/src/buffer-polyfill.ts +5 -0
- package/src/exports.ts +44 -0
- package/src/index.ts +4 -6
- 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 +185 -0
- package/src/keri/app/notifying.ts +69 -0
- package/src/keri/core/authing.ts +117 -0
- package/src/keri/core/bexter.ts +138 -0
- package/src/keri/core/cigar.ts +11 -12
- package/src/keri/core/cipher.ts +23 -14
- package/src/keri/core/core.ts +249 -97
- package/src/keri/core/counter.ts +273 -0
- package/src/keri/core/decrypter.ts +48 -34
- package/src/keri/core/diger.ts +25 -24
- package/src/keri/core/encrypter.ts +37 -27
- package/src/keri/core/eventing.ts +581 -0
- package/src/keri/core/httping.ts +209 -0
- package/src/keri/core/indexer.ts +314 -211
- package/src/keri/core/keeping.ts +679 -4
- package/src/keri/core/kering.ts +4 -6
- package/src/keri/core/manager.ts +759 -450
- package/src/keri/core/matter.ts +404 -135
- package/src/keri/core/number.ts +66 -0
- package/src/keri/core/pather.ts +98 -0
- package/src/keri/core/prefixer.ts +233 -0
- package/src/keri/core/saider.ts +186 -0
- package/src/keri/core/salter.ts +76 -41
- package/src/keri/core/seqner.ts +46 -0
- package/src/keri/core/serder.ts +163 -0
- package/src/keri/core/siger.ts +19 -18
- package/src/keri/core/signer.ts +74 -53
- package/src/keri/core/tholder.ts +218 -0
- package/src/keri/core/utils.ts +120 -45
- package/src/keri/core/vdring.ts +94 -0
- package/src/keri/core/verfer.ts +25 -11
- package/src/keri/end/ending.ts +170 -0
- package/src/math.ts +3 -0
- package/src/ready.ts +5 -0
- package/src/keri/core/tsconfig.json +0 -100
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { BexDex, Matter, MatterArgs, MtrDex } from './matter';
|
|
2
|
+
import { EmptyMaterialError } from './kering';
|
|
3
|
+
import Base64 from 'urlsafe-base64';
|
|
4
|
+
|
|
5
|
+
const B64REX = '^[A-Za-z0-9\\-_]*$';
|
|
6
|
+
export const Reb64 = new RegExp(B64REX);
|
|
7
|
+
|
|
8
|
+
/*
|
|
9
|
+
|
|
10
|
+
Bexter is subclass of Matter, cryptographic material, for variable length
|
|
11
|
+
strings that only contain Base64 URL safe characters, i.e. Base64 text (bext).
|
|
12
|
+
When created using the 'bext' paramaeter, the encoded matter in qb64 format
|
|
13
|
+
in the text domain is more compact than would be the case if the string were
|
|
14
|
+
passed in as raw bytes. The text is used as is to form the value part of the
|
|
15
|
+
qb64 version not including the leader.
|
|
16
|
+
|
|
17
|
+
Due to ambiguity that arises from pre-padding bext whose length is a multiple of
|
|
18
|
+
three with one or more 'A' chars. Any bext that starts with an 'A' and whose length
|
|
19
|
+
is either a multiple of 3 or 4 may not round trip. Bext with a leading 'A'
|
|
20
|
+
whose length is a multiple of four may have the leading 'A' stripped when
|
|
21
|
+
round tripping.
|
|
22
|
+
|
|
23
|
+
Bexter(bext='ABBB').bext == 'BBB'
|
|
24
|
+
Bexter(bext='BBB').bext == 'BBB'
|
|
25
|
+
Bexter(bext='ABBB').qb64 == '4AABABBB' == Bexter(bext='BBB').qb64
|
|
26
|
+
|
|
27
|
+
To avoid this problem, only use for applications of base 64 strings that
|
|
28
|
+
never start with 'A'
|
|
29
|
+
|
|
30
|
+
Examples: base64 text strings:
|
|
31
|
+
|
|
32
|
+
bext = ""
|
|
33
|
+
qb64 = '4AAA'
|
|
34
|
+
|
|
35
|
+
bext = "-"
|
|
36
|
+
qb64 = '6AABAAA-'
|
|
37
|
+
|
|
38
|
+
bext = "-A"
|
|
39
|
+
qb64 = '5AABAA-A'
|
|
40
|
+
|
|
41
|
+
bext = "-A-"
|
|
42
|
+
qb64 = '4AABA-A-'
|
|
43
|
+
|
|
44
|
+
bext = "-A-B"
|
|
45
|
+
qb64 = '4AAB-A-B'
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
Example uses:
|
|
49
|
+
CESR encoded paths for nested SADs and SAIDs
|
|
50
|
+
CESR encoded fractionally weighted threshold expressions
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
Attributes:
|
|
54
|
+
|
|
55
|
+
Inherited Properties: (See Matter)
|
|
56
|
+
.pad is int number of pad chars given raw
|
|
57
|
+
|
|
58
|
+
.code is str derivation code to indicate cypher suite
|
|
59
|
+
.raw is bytes crypto material only without code
|
|
60
|
+
.index is int count of attached crypto material by context (receipts)
|
|
61
|
+
.qb64 is str in Base64 fully qualified with derivation code + crypto mat
|
|
62
|
+
.qb64b is bytes in Base64 fully qualified with derivation code + crypto mat
|
|
63
|
+
.qb2 is bytes in binary with derivation code + crypto material
|
|
64
|
+
.transferable is Boolean, True when transferable derivation code False otherwise
|
|
65
|
+
|
|
66
|
+
Properties:
|
|
67
|
+
.text is the Base64 text value, .qb64 with text code and leader removed.
|
|
68
|
+
|
|
69
|
+
Hidden:
|
|
70
|
+
._pad is method to compute .pad property
|
|
71
|
+
._code is str value for .code property
|
|
72
|
+
._raw is bytes value for .raw property
|
|
73
|
+
._index is int value for .index property
|
|
74
|
+
._infil is method to compute fully qualified Base64 from .raw and .code
|
|
75
|
+
._exfil is method to extract .code and .raw from fully qualified Base64
|
|
76
|
+
|
|
77
|
+
Methods:
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
export class Bexter extends Matter {
|
|
85
|
+
constructor(
|
|
86
|
+
{ raw, code = MtrDex.StrB64_L0, qb64b, qb64, qb2 }: MatterArgs,
|
|
87
|
+
bext?: string
|
|
88
|
+
) {
|
|
89
|
+
if (
|
|
90
|
+
raw === undefined &&
|
|
91
|
+
qb64b === undefined &&
|
|
92
|
+
qb64 === undefined &&
|
|
93
|
+
qb2 === undefined
|
|
94
|
+
) {
|
|
95
|
+
if (bext === undefined)
|
|
96
|
+
throw new EmptyMaterialError('Missing bext string.');
|
|
97
|
+
|
|
98
|
+
const match = Reb64.exec(bext);
|
|
99
|
+
if (!match) throw new Error('Invalid Base64.');
|
|
100
|
+
|
|
101
|
+
raw = Bexter._rawify(bext);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
super({ raw, code, qb64b, qb64, qb2 });
|
|
105
|
+
|
|
106
|
+
if (!BexDex.has(this.code))
|
|
107
|
+
throw new Error(`Invalid code = ${this.code} for Bexter.`);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
static _rawify(bext: string): Uint8Array {
|
|
111
|
+
const ts = bext.length % 4; // bext size mod 4
|
|
112
|
+
const ws = (4 - ts) % 4; // pre conv wad size in chars
|
|
113
|
+
const ls = (3 - ts) % 3; // post conv lead size in bytes
|
|
114
|
+
const wad = new Array(ws);
|
|
115
|
+
wad.fill('A');
|
|
116
|
+
const base = wad.join('') + bext; // pre pad with wad of zeros in Base64 == 'A'
|
|
117
|
+
const raw = Base64.decode(base); // [ls:] // convert and remove leader
|
|
118
|
+
|
|
119
|
+
return Uint8Array.from(raw).subarray(ls); // raw binary equivalent of text
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
get bext(): string {
|
|
123
|
+
const sizage = Matter.Sizes.get(this.code);
|
|
124
|
+
const wad = Uint8Array.from(new Array(sizage?.ls).fill(0));
|
|
125
|
+
const bext = Base64.encode(Buffer.from([...wad, ...this.raw]));
|
|
126
|
+
|
|
127
|
+
let ws = 0;
|
|
128
|
+
if (sizage?.ls === 0 && bext !== undefined) {
|
|
129
|
+
if (bext[0] === 'A') {
|
|
130
|
+
ws = 1;
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
ws = (sizage?.ls! + 1) % 4;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return bext.substring(ws);
|
|
137
|
+
}
|
|
138
|
+
}
|
package/src/keri/core/cigar.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import {Verfer} from
|
|
2
|
-
import {Matter, MatterArgs} from
|
|
3
|
-
|
|
1
|
+
import { Verfer } from './verfer';
|
|
2
|
+
import { Matter, MatterArgs } from './matter';
|
|
4
3
|
|
|
5
4
|
export class Cigar extends Matter {
|
|
6
|
-
private _verfer: Verfer
|
|
7
|
-
constructor({raw, code, qb64, qb64b, qb2}:MatterArgs, verfer
|
|
8
|
-
super({raw, code, qb64, qb64b, qb2});
|
|
9
|
-
this._verfer = verfer
|
|
5
|
+
private _verfer: Verfer | undefined;
|
|
6
|
+
constructor({ raw, code, qb64, qb64b, qb2 }: MatterArgs, verfer?: Verfer) {
|
|
7
|
+
super({ raw, code, qb64, qb64b, qb2 });
|
|
8
|
+
this._verfer = verfer;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
get verfer(): Verfer {
|
|
13
|
-
return this._verfer
|
|
11
|
+
get verfer(): Verfer | undefined {
|
|
12
|
+
return this._verfer;
|
|
14
13
|
}
|
|
15
14
|
|
|
16
|
-
set verfer(verfer:Verfer) {
|
|
17
|
-
this._verfer = verfer
|
|
15
|
+
set verfer(verfer: Verfer | undefined) {
|
|
16
|
+
this._verfer = verfer;
|
|
18
17
|
}
|
|
19
|
-
}
|
|
18
|
+
}
|
package/src/keri/core/cipher.ts
CHANGED
|
@@ -1,25 +1,34 @@
|
|
|
1
|
-
import {Matter, MatterArgs, MtrDex} from
|
|
2
|
-
import {Decrypter} from
|
|
3
|
-
|
|
1
|
+
import { Matter, MatterArgs, MtrDex } from './matter';
|
|
2
|
+
import { Decrypter } from './decrypter';
|
|
4
3
|
|
|
5
4
|
export class Cipher extends Matter {
|
|
6
|
-
constructor({raw, code, qb64, qb64b, qb2}:MatterArgs) {
|
|
5
|
+
constructor({ raw, code, qb64, qb64b, qb2 }: MatterArgs) {
|
|
7
6
|
if (raw != undefined && code == undefined) {
|
|
8
7
|
if (raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Salt)) {
|
|
9
|
-
code = MtrDex.X25519_Cipher_Salt
|
|
10
|
-
} else if (
|
|
11
|
-
|
|
8
|
+
code = MtrDex.X25519_Cipher_Salt;
|
|
9
|
+
} else if (
|
|
10
|
+
raw.length == Matter._rawSize(MtrDex.X25519_Cipher_Seed)
|
|
11
|
+
) {
|
|
12
|
+
code = MtrDex.X25519_Cipher_Salt;
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
|
-
super({raw: raw, code: code, qb64b: qb64b, qb64: qb64, qb2: qb2});
|
|
15
|
+
super({ raw: raw, code: code, qb64b: qb64b, qb64: qb64, qb2: qb2 });
|
|
15
16
|
|
|
16
|
-
if (
|
|
17
|
-
|
|
17
|
+
if (
|
|
18
|
+
!Array.from([
|
|
19
|
+
MtrDex.X25519_Cipher_Salt,
|
|
20
|
+
MtrDex.X25519_Cipher_Seed,
|
|
21
|
+
]).includes(this.code)
|
|
22
|
+
) {
|
|
23
|
+
throw new Error(`Unsupported Cipher code == ${this.code}`);
|
|
18
24
|
}
|
|
19
25
|
}
|
|
20
26
|
|
|
21
|
-
decrypt(
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
decrypt(
|
|
28
|
+
prikey: Uint8Array | undefined = undefined,
|
|
29
|
+
seed: Uint8Array | undefined = undefined
|
|
30
|
+
) {
|
|
31
|
+
const decrypter = new Decrypter({ qb64b: prikey }, seed);
|
|
32
|
+
return decrypter.decrypt(this.qb64b);
|
|
24
33
|
}
|
|
25
|
-
}
|
|
34
|
+
}
|
package/src/keri/core/core.ts
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
export enum Serials {
|
|
2
|
+
JSON = 'JSON',
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export enum Ident {
|
|
6
|
+
KERI = 'KERI',
|
|
7
|
+
ACDC = 'ACDC',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export class Version {
|
|
11
|
+
public major: number;
|
|
12
|
+
public minor: number;
|
|
13
|
+
|
|
14
|
+
constructor(major: number = 1, minor: number = 0) {
|
|
15
|
+
this.major = major;
|
|
16
|
+
this.minor = minor;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const Versionage = new Version();
|
|
21
|
+
|
|
14
22
|
export const Ilks = {
|
|
15
23
|
icp: 'icp',
|
|
16
24
|
rot: 'rot',
|
|
@@ -19,75 +27,128 @@ export const Ilks = {
|
|
|
19
27
|
drt: 'drt',
|
|
20
28
|
rct: 'rct',
|
|
21
29
|
vrc: 'vrc',
|
|
30
|
+
rpy: 'rpy',
|
|
31
|
+
exn: 'exn',
|
|
32
|
+
vcp: 'vcp',
|
|
33
|
+
iss: 'iss',
|
|
34
|
+
rev: 'rev',
|
|
22
35
|
};
|
|
23
36
|
|
|
24
|
-
export const IcpLabels = [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
export const IcpLabels = [
|
|
38
|
+
'v',
|
|
39
|
+
'i',
|
|
40
|
+
's',
|
|
41
|
+
't',
|
|
42
|
+
'kt',
|
|
43
|
+
'k',
|
|
44
|
+
'n',
|
|
45
|
+
'bt',
|
|
46
|
+
'b',
|
|
47
|
+
'c',
|
|
48
|
+
'a',
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
export const DipLabels = [
|
|
52
|
+
'v',
|
|
53
|
+
'i',
|
|
54
|
+
's',
|
|
55
|
+
't',
|
|
56
|
+
'kt',
|
|
57
|
+
'k',
|
|
58
|
+
'n',
|
|
59
|
+
'bt',
|
|
60
|
+
'b',
|
|
61
|
+
'c',
|
|
62
|
+
'a',
|
|
63
|
+
'di',
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
export const RotLabels = [
|
|
67
|
+
'v',
|
|
68
|
+
'i',
|
|
69
|
+
's',
|
|
70
|
+
't',
|
|
71
|
+
'p',
|
|
72
|
+
'kt',
|
|
73
|
+
'k',
|
|
74
|
+
'n',
|
|
75
|
+
'bt',
|
|
76
|
+
'br',
|
|
77
|
+
'ba',
|
|
78
|
+
'a',
|
|
79
|
+
];
|
|
80
|
+
export const DrtLabels = [
|
|
81
|
+
'v',
|
|
82
|
+
'i',
|
|
83
|
+
's',
|
|
84
|
+
't',
|
|
85
|
+
'p',
|
|
86
|
+
'kt',
|
|
87
|
+
'k',
|
|
88
|
+
'n',
|
|
89
|
+
'bt',
|
|
90
|
+
'br',
|
|
91
|
+
'ba',
|
|
92
|
+
'a',
|
|
93
|
+
];
|
|
94
|
+
export const IxnLabels = ['v', 'i', 's', 't', 'p', 'a'];
|
|
95
|
+
|
|
96
|
+
export const KsnLabels = [
|
|
97
|
+
'v',
|
|
98
|
+
'i',
|
|
99
|
+
's',
|
|
100
|
+
't',
|
|
101
|
+
'p',
|
|
102
|
+
'd',
|
|
103
|
+
'f',
|
|
104
|
+
'dt',
|
|
105
|
+
'et',
|
|
106
|
+
'kt',
|
|
107
|
+
'k',
|
|
108
|
+
'n',
|
|
109
|
+
'bt',
|
|
110
|
+
'b',
|
|
111
|
+
'c',
|
|
112
|
+
'ee',
|
|
113
|
+
'di',
|
|
114
|
+
'r',
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
export const RpyLabels = ['v', 't', 'd', 'dt', 'r', 'a'];
|
|
118
|
+
|
|
119
|
+
const encoder = new TextEncoder();
|
|
120
|
+
const decoder = new TextDecoder();
|
|
43
121
|
|
|
44
122
|
export const VERFULLSIZE = 17;
|
|
45
123
|
export const MINSNIFFSIZE = 12 + VERFULLSIZE;
|
|
46
124
|
export const MINSIGSIZE = 4;
|
|
47
125
|
|
|
48
|
-
/**
|
|
49
|
-
* @description It will return version string
|
|
50
|
-
*/
|
|
51
|
-
export function versify(version: { major: number, minor: number }, kind = Serials.json, size: number) {
|
|
52
|
-
if (!(Object.values(Serials).indexOf(kind) > -1)) {
|
|
53
|
-
throw new Error('Invalid serialization kind =' + kind);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!version) {
|
|
57
|
-
version = Versionage;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const hex1 = version.major.toString(16);
|
|
61
|
-
const hex2 = version.minor.toString(16);
|
|
62
|
-
const kindHex = kind;
|
|
63
|
-
const hex3 = util.pad(size.toString(16), VERRAWSIZE);
|
|
64
|
-
|
|
65
|
-
return `KERI${hex1}${hex2}${kindHex}${hex3}_`;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
Vstrings.json = versify(Versionage, Serials.json, 0);
|
|
69
|
-
Vstrings.mgpk = versify(Versionage, Serials.mgpk, 0);
|
|
70
|
-
Vstrings.cbor = versify(Versionage, Serials.cbor, 0);
|
|
71
|
-
|
|
72
126
|
// const version_pattern = 'KERI(?P<major>[0-9a-f])(?P<minor>[0-9a-f])
|
|
73
127
|
// (?P<kind>[A-Z]{4})(?P<size>[0-9a-f]{6})'
|
|
74
128
|
// const version_pattern1 = `KERI\(\?P<major>\[0\-9a\-f\]\)\(\?P<minor>\[0\-9a\-f\]\)\
|
|
75
129
|
// (\?P<kind>\[A\-Z\]\{4\}\)\(\?P<size>\[0\-9a\-f\]\{6\}\)_`
|
|
76
130
|
|
|
77
|
-
export const VEREX = 'KERI([0-9a-f])([0-9a-f])([A-Z]{4})([0-9a-f]{6})';
|
|
131
|
+
export const VEREX = '(KERI|ACDC)([0-9a-f])([0-9a-f])([A-Z]{4})([0-9a-f]{6})_';
|
|
132
|
+
|
|
133
|
+
export interface Dict<TValue> {
|
|
134
|
+
[id: string]: TValue;
|
|
135
|
+
}
|
|
78
136
|
|
|
79
137
|
// Regex pattern matching
|
|
80
138
|
|
|
81
139
|
/**
|
|
82
140
|
* @description This function is use to deversify the version
|
|
83
141
|
* Here we will use regex to to validate and extract serialization kind,size and version
|
|
84
|
-
* @param {string}
|
|
85
|
-
* @return {Object} contaning kind of serialization like cbor,json,mgpk
|
|
142
|
+
* @param {string} versionString version string
|
|
143
|
+
* @return {Object} contaning prototol (KERI or ACDC), kind of serialization like cbor,json,mgpk
|
|
86
144
|
* version = version of object ,size = raw size integer
|
|
87
145
|
*/
|
|
88
|
-
export function deversify(
|
|
146
|
+
export function deversify(
|
|
147
|
+
versionString: string
|
|
148
|
+
): [Ident, Serials, Version, string] {
|
|
89
149
|
let kind;
|
|
90
150
|
let size;
|
|
151
|
+
let proto;
|
|
91
152
|
const version = Versionage;
|
|
92
153
|
|
|
93
154
|
// we need to identify how to match the buffers pattern ,like we do regex matching for strings
|
|
@@ -96,79 +157,170 @@ export function deversify(versionString: string) {
|
|
|
96
157
|
const match = re.exec(versionString);
|
|
97
158
|
|
|
98
159
|
if (match) {
|
|
99
|
-
[version.major, version.minor, kind, size] = [
|
|
100
|
-
|
|
160
|
+
[proto, version.major, version.minor, kind, size] = [
|
|
161
|
+
match[1],
|
|
101
162
|
+match[2],
|
|
102
|
-
match[3],
|
|
163
|
+
+match[3],
|
|
103
164
|
match[4],
|
|
165
|
+
match[5],
|
|
104
166
|
];
|
|
105
|
-
if (!Object.values(Serials).includes(kind)) {
|
|
167
|
+
if (!Object.values(Serials).includes(kind as Serials)) {
|
|
106
168
|
throw new Error(`Invalid serialization kind = ${kind}`);
|
|
107
169
|
}
|
|
108
|
-
|
|
170
|
+
if (!Object.values(Ident).includes(proto as Ident)) {
|
|
171
|
+
throw new Error(`Invalid serialization kind = ${kind}`);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const ta = kind as keyof typeof Serials;
|
|
175
|
+
kind = Serials[ta];
|
|
176
|
+
const pa = proto as keyof typeof Ident;
|
|
177
|
+
proto = Ident[pa];
|
|
178
|
+
|
|
179
|
+
return [proto, kind, version, size];
|
|
109
180
|
}
|
|
110
181
|
throw new Error(`Invalid version string = ${versionString}`);
|
|
111
182
|
}
|
|
112
183
|
|
|
113
|
-
export
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
184
|
+
export function versify(
|
|
185
|
+
ident: Ident = Ident.KERI,
|
|
186
|
+
version?: Version,
|
|
187
|
+
kind: Serials = Serials.JSON,
|
|
188
|
+
size: number = 0
|
|
189
|
+
) {
|
|
190
|
+
version = version == undefined ? Versionage : version;
|
|
191
|
+
|
|
192
|
+
return `${ident}${version.major.toString(
|
|
193
|
+
16
|
|
194
|
+
)}${version.minor.toString()}${kind}${size.toString(16).padStart(6, '0')}_`;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export const B64ChrByIdx = new Map<number, string>([
|
|
198
|
+
[0, 'A'],
|
|
199
|
+
[1, 'B'],
|
|
200
|
+
[2, 'C'],
|
|
201
|
+
[3, 'D'],
|
|
202
|
+
[4, 'E'],
|
|
203
|
+
[5, 'F'],
|
|
204
|
+
[6, 'G'],
|
|
205
|
+
[7, 'H'],
|
|
206
|
+
[8, 'I'],
|
|
207
|
+
[9, 'J'],
|
|
208
|
+
[10, 'K'],
|
|
209
|
+
[11, 'L'],
|
|
210
|
+
[12, 'M'],
|
|
211
|
+
[13, 'N'],
|
|
212
|
+
[14, 'O'],
|
|
213
|
+
[15, 'P'],
|
|
214
|
+
[16, 'Q'],
|
|
215
|
+
[17, 'R'],
|
|
216
|
+
[18, 'S'],
|
|
217
|
+
[19, 'T'],
|
|
218
|
+
[20, 'U'],
|
|
219
|
+
[21, 'V'],
|
|
220
|
+
[22, 'W'],
|
|
221
|
+
[23, 'X'],
|
|
222
|
+
[24, 'Y'],
|
|
223
|
+
[25, 'Z'],
|
|
224
|
+
[26, 'a'],
|
|
225
|
+
[27, 'b'],
|
|
226
|
+
[28, 'c'],
|
|
227
|
+
[29, 'd'],
|
|
228
|
+
[30, 'e'],
|
|
229
|
+
[31, 'f'],
|
|
230
|
+
[32, 'g'],
|
|
231
|
+
[33, 'h'],
|
|
232
|
+
[34, 'i'],
|
|
233
|
+
[35, 'j'],
|
|
234
|
+
[36, 'k'],
|
|
235
|
+
[37, 'l'],
|
|
236
|
+
[38, 'm'],
|
|
237
|
+
[39, 'n'],
|
|
238
|
+
[40, 'o'],
|
|
239
|
+
[41, 'p'],
|
|
240
|
+
[42, 'q'],
|
|
241
|
+
[43, 'r'],
|
|
242
|
+
[44, 's'],
|
|
243
|
+
[45, 't'],
|
|
244
|
+
[46, 'u'],
|
|
245
|
+
[47, 'v'],
|
|
246
|
+
[48, 'w'],
|
|
247
|
+
[49, 'x'],
|
|
248
|
+
[50, 'y'],
|
|
249
|
+
[51, 'z'],
|
|
250
|
+
[52, '0'],
|
|
251
|
+
[53, '1'],
|
|
252
|
+
[54, '2'],
|
|
253
|
+
[55, '3'],
|
|
254
|
+
[56, '4'],
|
|
255
|
+
[57, '5'],
|
|
256
|
+
[58, '6'],
|
|
257
|
+
[59, '7'],
|
|
258
|
+
[60, '8'],
|
|
259
|
+
[61, '9'],
|
|
260
|
+
[62, '-'],
|
|
261
|
+
[63, '_'],
|
|
262
|
+
]);
|
|
263
|
+
|
|
264
|
+
export const B64IdxByChr = new Map<string, number>(
|
|
265
|
+
Array.from(B64ChrByIdx, (entry) => [entry[1], entry[0]])
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
export function intToB64(i: number, l = 1): string {
|
|
269
|
+
let out = '';
|
|
270
|
+
while (l != 0) {
|
|
271
|
+
out = B64ChrByIdx.get(i % 64) + out;
|
|
272
|
+
i = Math.floor(i / 64);
|
|
128
273
|
if (i == 0) {
|
|
129
|
-
break
|
|
274
|
+
break;
|
|
130
275
|
}
|
|
131
276
|
}
|
|
132
277
|
|
|
133
|
-
|
|
134
|
-
|
|
278
|
+
const x = l - out.length;
|
|
279
|
+
for (let i = 0; i < x; i++) {
|
|
280
|
+
out = 'A' + out;
|
|
135
281
|
}
|
|
136
282
|
|
|
137
|
-
return out
|
|
283
|
+
return out;
|
|
138
284
|
}
|
|
139
285
|
|
|
140
286
|
export function intToB64b(n: number, l: number = 1): Uint8Array {
|
|
141
|
-
|
|
142
|
-
return b(s)
|
|
287
|
+
const s = intToB64(n, l);
|
|
288
|
+
return b(s);
|
|
143
289
|
}
|
|
144
290
|
|
|
145
291
|
export function b64ToInt(s: string): number {
|
|
146
292
|
if (s.length == 0) {
|
|
147
|
-
throw new Error(
|
|
293
|
+
throw new Error('Empty string, conversion undefined.');
|
|
148
294
|
}
|
|
149
295
|
|
|
150
|
-
let i = 0
|
|
151
|
-
|
|
296
|
+
let i = 0;
|
|
297
|
+
const rev = s.split('').reverse();
|
|
152
298
|
rev.forEach((c: string, e: number) => {
|
|
153
|
-
i |= B64IdxByChr.get(c)! << (e * 6)
|
|
154
|
-
})
|
|
299
|
+
i |= B64IdxByChr.get(c)! << (e * 6);
|
|
300
|
+
});
|
|
155
301
|
|
|
156
|
-
return i
|
|
302
|
+
return i;
|
|
157
303
|
}
|
|
158
304
|
|
|
159
305
|
export function b(s?: string): Uint8Array {
|
|
160
|
-
return encoder.encode(s)
|
|
306
|
+
return encoder.encode(s);
|
|
161
307
|
}
|
|
162
308
|
|
|
163
|
-
export function d(u
|
|
164
|
-
return decoder.decode(u)
|
|
309
|
+
export function d(u?: Uint8Array): string {
|
|
310
|
+
return decoder.decode(u);
|
|
165
311
|
}
|
|
166
312
|
|
|
313
|
+
export function concat(one: Uint8Array, two: Uint8Array): Uint8Array {
|
|
314
|
+
const out = new Uint8Array(one.length + two.length);
|
|
315
|
+
out.set(one);
|
|
316
|
+
out.set(two, one.length);
|
|
317
|
+
return out;
|
|
318
|
+
}
|
|
167
319
|
|
|
168
320
|
export function readInt(array: Uint8Array) {
|
|
169
321
|
let value = 0;
|
|
170
322
|
for (let i = 0; i < array.length; i++) {
|
|
171
|
-
value =
|
|
323
|
+
value = value * 256 + array[i];
|
|
172
324
|
}
|
|
173
325
|
return value;
|
|
174
|
-
}
|
|
326
|
+
}
|