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
package/src/keri/core/salter.ts
CHANGED
|
@@ -1,36 +1,47 @@
|
|
|
1
|
-
import {Signer} from
|
|
1
|
+
import { Signer } from './signer';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import libsodium from 'libsodium-wrappers-sumo';
|
|
3
|
+
import { Matter, MtrDex } from './matter';
|
|
4
|
+
import { EmptyMaterialError } from './kering';
|
|
5
|
+
import libsodium from 'libsodium-wrappers-sumo';
|
|
7
6
|
|
|
8
|
-
export
|
|
9
|
-
low =
|
|
10
|
-
med =
|
|
11
|
-
high =
|
|
7
|
+
export enum Tier {
|
|
8
|
+
low = 'low',
|
|
9
|
+
med = 'med',
|
|
10
|
+
high = 'high',
|
|
12
11
|
}
|
|
13
12
|
|
|
14
13
|
interface SalterArgs {
|
|
15
|
-
raw?: Uint8Array | undefined
|
|
16
|
-
code
|
|
17
|
-
tier?:
|
|
18
|
-
qb64b
|
|
19
|
-
qb64?: string
|
|
20
|
-
qb2?: Uint8Array | undefined
|
|
14
|
+
raw?: Uint8Array | undefined;
|
|
15
|
+
code?: string;
|
|
16
|
+
tier?: Tier;
|
|
17
|
+
qb64b?: Uint8Array | undefined;
|
|
18
|
+
qb64?: string;
|
|
19
|
+
qb2?: Uint8Array | undefined;
|
|
21
20
|
}
|
|
22
21
|
export class Salter extends Matter {
|
|
22
|
+
private readonly _tier: Tier | null;
|
|
23
23
|
|
|
24
|
-
constructor({
|
|
24
|
+
constructor({
|
|
25
|
+
raw,
|
|
26
|
+
code = MtrDex.Salt_128,
|
|
27
|
+
tier = Tier.low,
|
|
28
|
+
qb64,
|
|
29
|
+
qb64b,
|
|
30
|
+
qb2,
|
|
31
|
+
}: SalterArgs) {
|
|
25
32
|
try {
|
|
26
|
-
super({raw, code, qb64, qb64b, qb2});
|
|
33
|
+
super({ raw, code, qb64, qb64b, qb2 });
|
|
27
34
|
} catch (e) {
|
|
28
|
-
if(e instanceof EmptyMaterialError) {
|
|
35
|
+
if (e instanceof EmptyMaterialError) {
|
|
29
36
|
if (code == MtrDex.Salt_128) {
|
|
30
|
-
|
|
31
|
-
|
|
37
|
+
const salt = libsodium.randombytes_buf(
|
|
38
|
+
libsodium.crypto_pwhash_SALTBYTES
|
|
39
|
+
);
|
|
40
|
+
super({ raw: salt, code: code });
|
|
32
41
|
} else {
|
|
33
|
-
throw new Error(
|
|
42
|
+
throw new Error(
|
|
43
|
+
'invalid code for Salter, only Salt_128 accepted'
|
|
44
|
+
);
|
|
34
45
|
}
|
|
35
46
|
} else {
|
|
36
47
|
throw e;
|
|
@@ -38,48 +49,72 @@ export class Salter extends Matter {
|
|
|
38
49
|
}
|
|
39
50
|
|
|
40
51
|
if (this.code != MtrDex.Salt_128) {
|
|
41
|
-
throw new Error(
|
|
52
|
+
throw new Error('invalid code for Salter, only Salt_128 accepted');
|
|
42
53
|
}
|
|
43
54
|
|
|
44
|
-
this.
|
|
55
|
+
this._tier = tier !== null ? tier : Tier.low;
|
|
45
56
|
}
|
|
46
57
|
|
|
47
|
-
private stretch(
|
|
58
|
+
private stretch(
|
|
59
|
+
size: number = 32,
|
|
60
|
+
path: string = '',
|
|
61
|
+
tier: Tier | null = null,
|
|
62
|
+
temp: boolean = false
|
|
63
|
+
): Uint8Array {
|
|
48
64
|
tier = tier == null ? this.tier : tier;
|
|
49
65
|
|
|
50
|
-
let opslimit: number, memlimit: number
|
|
66
|
+
let opslimit: number, memlimit: number;
|
|
51
67
|
|
|
68
|
+
// Harcoded values based on keripy
|
|
52
69
|
if (temp) {
|
|
53
|
-
opslimit = libsodium.crypto_pwhash_OPSLIMIT_MIN
|
|
54
|
-
memlimit = libsodium.crypto_pwhash_MEMLIMIT_MIN
|
|
55
|
-
|
|
70
|
+
opslimit = 1; //libsodium.crypto_pwhash_OPSLIMIT_MIN
|
|
71
|
+
memlimit = 8192; //libsodium.crypto_pwhash_MEMLIMIT_MIN
|
|
56
72
|
} else {
|
|
57
73
|
switch (tier) {
|
|
58
74
|
case Tier.low:
|
|
59
|
-
opslimit = libsodium.crypto_pwhash_OPSLIMIT_INTERACTIVE
|
|
60
|
-
memlimit = libsodium.crypto_pwhash_MEMLIMIT_INTERACTIVE
|
|
75
|
+
opslimit = 2; //libsodium.crypto_pwhash_OPSLIMIT_INTERACTIVE
|
|
76
|
+
memlimit = 67108864; //libsodium.crypto_pwhash_MEMLIMIT_INTERACTIVE
|
|
61
77
|
break;
|
|
62
78
|
case Tier.med:
|
|
63
|
-
opslimit = libsodium.crypto_pwhash_OPSLIMIT_MODERATE
|
|
64
|
-
memlimit = libsodium.crypto_pwhash_MEMLIMIT_MODERATE
|
|
79
|
+
opslimit = 3; //libsodium.crypto_pwhash_OPSLIMIT_MODERATE
|
|
80
|
+
memlimit = 268435456; //libsodium.crypto_pwhash_MEMLIMIT_MODERATE
|
|
65
81
|
break;
|
|
66
82
|
case Tier.high:
|
|
67
|
-
opslimit = libsodium.crypto_pwhash_OPSLIMIT_SENSITIVE
|
|
68
|
-
memlimit = libsodium.crypto_pwhash_MEMLIMIT_SENSITIVE
|
|
83
|
+
opslimit = 4; //libsodium.crypto_pwhash_OPSLIMIT_SENSITIVE
|
|
84
|
+
memlimit = 1073741824; //libsodium.crypto_pwhash_MEMLIMIT_SENSITIVE
|
|
69
85
|
break;
|
|
70
86
|
default:
|
|
71
|
-
throw new Error(`Unsupported security tier = ${tier}.`)
|
|
87
|
+
throw new Error(`Unsupported security tier = ${tier}.`);
|
|
72
88
|
}
|
|
73
89
|
}
|
|
74
90
|
|
|
75
|
-
return libsodium.crypto_pwhash(
|
|
91
|
+
return libsodium.crypto_pwhash(
|
|
92
|
+
size,
|
|
93
|
+
path,
|
|
94
|
+
this.raw,
|
|
95
|
+
opslimit,
|
|
96
|
+
memlimit,
|
|
97
|
+
libsodium.crypto_pwhash_ALG_ARGON2ID13
|
|
98
|
+
);
|
|
76
99
|
}
|
|
77
100
|
|
|
78
|
-
signer(
|
|
79
|
-
|
|
80
|
-
|
|
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);
|
|
81
109
|
|
|
82
|
-
return new Signer({
|
|
110
|
+
return new Signer({
|
|
111
|
+
raw: seed,
|
|
112
|
+
code: code,
|
|
113
|
+
transferable: transferable,
|
|
114
|
+
});
|
|
83
115
|
}
|
|
84
116
|
|
|
85
|
-
|
|
117
|
+
get tier(): Tier | null {
|
|
118
|
+
return this._tier;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Matter, MatterArgs, MtrDex } from './matter';
|
|
2
|
+
import { intToBytes, bytesToInt } from './utils';
|
|
3
|
+
/**
|
|
4
|
+
* @description Seqner: subclass of Matter, cryptographic material, for ordinal numbers
|
|
5
|
+
* such as sequence numbers or first seen ordering numbers.
|
|
6
|
+
* Seqner provides fully qualified format for ordinals (sequence numbers etc)
|
|
7
|
+
* when provided as attached cryptographic material elements.
|
|
8
|
+
*/
|
|
9
|
+
export class Seqner extends Matter {
|
|
10
|
+
constructor({
|
|
11
|
+
raw,
|
|
12
|
+
code = MtrDex.Salt_128,
|
|
13
|
+
qb64,
|
|
14
|
+
qb64b,
|
|
15
|
+
qb2,
|
|
16
|
+
sn,
|
|
17
|
+
snh,
|
|
18
|
+
...kwa
|
|
19
|
+
}: MatterArgs & { sn?: number; snh?: string }) {
|
|
20
|
+
if (!raw && !qb64b && !qb64 && !qb2) {
|
|
21
|
+
if (sn === undefined) {
|
|
22
|
+
if (snh === undefined) {
|
|
23
|
+
sn = 0;
|
|
24
|
+
} else {
|
|
25
|
+
sn = parseInt(snh, 16);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
raw = intToBytes(sn, Matter._rawSize(MtrDex.Salt_128));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
super({ raw, code, qb64, qb64b, qb2, ...kwa });
|
|
33
|
+
|
|
34
|
+
if (this.code !== MtrDex.Salt_128) {
|
|
35
|
+
throw new Error(`Invalid code = ${this.code} for Seqner.`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get sn(): number {
|
|
40
|
+
return bytesToInt(this.raw); //To check if other readUInt64 is needed
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
get snh(): string {
|
|
44
|
+
return this.sn.toString(16);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
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
|
+
}
|
package/src/keri/core/siger.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {IdxSigDex, Indexer, IndexerArgs} from
|
|
2
|
-
import {Verfer} from
|
|
1
|
+
import { IdxSigDex, Indexer, IndexerArgs } from './indexer';
|
|
2
|
+
import { Verfer } from './verfer';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
Siger is subclass of Indexer, indexed signature material,
|
|
@@ -17,23 +17,24 @@ import {Verfer} from "./verfer";
|
|
|
17
17
|
**/
|
|
18
18
|
|
|
19
19
|
export class Siger extends Indexer {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
private _verfer?: Verfer;
|
|
21
|
+
constructor(
|
|
22
|
+
{ raw, code, index, ondex, qb64, qb64b, qb2 }: IndexerArgs,
|
|
23
|
+
verfer?: Verfer
|
|
24
|
+
) {
|
|
25
|
+
super({ raw, code, index, ondex, qb64, qb64b, qb2 });
|
|
26
|
+
|
|
27
|
+
if (!IdxSigDex.has(this.code)) {
|
|
28
|
+
throw new Error(`Invalid code = ${this.code} for Siger.`);
|
|
29
|
+
}
|
|
30
|
+
this._verfer = verfer;
|
|
27
31
|
}
|
|
28
|
-
this._verfer = verfer
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
get verfer(): Verfer | undefined {
|
|
32
|
-
return this._verfer;
|
|
33
|
-
}
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
get verfer(): Verfer | undefined {
|
|
34
|
+
return this._verfer;
|
|
35
|
+
}
|
|
38
36
|
|
|
37
|
+
set verfer(verfer: Verfer | undefined) {
|
|
38
|
+
this._verfer = verfer;
|
|
39
|
+
}
|
|
39
40
|
}
|
package/src/keri/core/signer.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import {EmptyMaterialError} from
|
|
1
|
+
import { EmptyMaterialError } from './kering';
|
|
2
2
|
|
|
3
3
|
export {};
|
|
4
4
|
import libsodium from 'libsodium-wrappers-sumo';
|
|
5
|
-
import {Matter} from './matter';
|
|
6
|
-
import {MtrDex} from './matter';
|
|
7
|
-
import {Verfer} from
|
|
8
|
-
import {Cigar} from
|
|
9
|
-
import {Siger} from
|
|
10
|
-
import {IdrDex} from
|
|
11
|
-
|
|
5
|
+
import { Matter } from './matter';
|
|
6
|
+
import { MtrDex } from './matter';
|
|
7
|
+
import { Verfer } from './verfer';
|
|
8
|
+
import { Cigar } from './cigar';
|
|
9
|
+
import { Siger } from './siger';
|
|
10
|
+
import { IdrDex } from './indexer';
|
|
11
|
+
import { Buffer } from 'buffer';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @description Signer is Matter subclass with method to create signature of serialization
|
|
@@ -19,48 +19,57 @@ import {IdrDex} from "./indexer";
|
|
|
19
19
|
as cipher suite for creating key-pair.
|
|
20
20
|
*/
|
|
21
21
|
interface SignerArgs {
|
|
22
|
-
raw?: Uint8Array | undefined
|
|
23
|
-
code?: string
|
|
24
|
-
qb64b?: Uint8Array | undefined
|
|
25
|
-
qb64?: string
|
|
26
|
-
qb2?: Uint8Array | undefined
|
|
27
|
-
transferable?: boolean
|
|
22
|
+
raw?: Uint8Array | undefined;
|
|
23
|
+
code?: string;
|
|
24
|
+
qb64b?: Uint8Array | undefined;
|
|
25
|
+
qb64?: string;
|
|
26
|
+
qb2?: Uint8Array | undefined;
|
|
27
|
+
transferable?: boolean;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export class Signer extends Matter {
|
|
31
|
-
private readonly _sign
|
|
32
|
-
private readonly _verfer: Verfer
|
|
33
|
-
|
|
34
|
-
constructor({
|
|
31
|
+
private readonly _sign: Function;
|
|
32
|
+
private readonly _verfer: Verfer;
|
|
33
|
+
|
|
34
|
+
constructor({
|
|
35
|
+
raw,
|
|
36
|
+
code = MtrDex.Ed25519_Seed,
|
|
37
|
+
qb64,
|
|
38
|
+
qb64b,
|
|
39
|
+
qb2,
|
|
40
|
+
transferable = true,
|
|
41
|
+
}: SignerArgs) {
|
|
35
42
|
try {
|
|
36
|
-
super({raw, code, qb64, qb64b, qb2})
|
|
43
|
+
super({ raw, code, qb64, qb64b, qb2 });
|
|
37
44
|
} catch (e) {
|
|
38
45
|
if (e instanceof EmptyMaterialError) {
|
|
39
46
|
if (code == MtrDex.Ed25519_Seed) {
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
const raw = libsodium.randombytes_buf(
|
|
48
|
+
libsodium.crypto_sign_SEEDBYTES
|
|
49
|
+
);
|
|
50
|
+
super({ raw, code, qb64, qb64b, qb2 });
|
|
42
51
|
} else {
|
|
43
|
-
throw new Error(`Unsupported signer code = ${code}.`)
|
|
52
|
+
throw new Error(`Unsupported signer code = ${code}.`);
|
|
44
53
|
}
|
|
45
54
|
} else {
|
|
46
|
-
throw e
|
|
55
|
+
throw e;
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
|
-
let verfer
|
|
58
|
+
let verfer;
|
|
50
59
|
if (this.code == MtrDex.Ed25519_Seed) {
|
|
51
|
-
this._sign = this._ed25519
|
|
52
|
-
const keypair = libsodium.crypto_sign_seed_keypair(this.raw)
|
|
53
|
-
verfer = new Verfer({
|
|
54
|
-
|
|
60
|
+
this._sign = this._ed25519;
|
|
61
|
+
const keypair = libsodium.crypto_sign_seed_keypair(this.raw);
|
|
62
|
+
verfer = new Verfer({
|
|
63
|
+
raw: keypair.publicKey,
|
|
64
|
+
code: transferable ? MtrDex.Ed25519 : MtrDex.Ed25519N,
|
|
65
|
+
});
|
|
55
66
|
} else {
|
|
56
|
-
throw new Error(`Unsupported signer code = ${this.code}.`)
|
|
67
|
+
throw new Error(`Unsupported signer code = ${this.code}.`);
|
|
57
68
|
}
|
|
58
69
|
|
|
59
|
-
this._verfer = verfer
|
|
60
|
-
|
|
70
|
+
this._verfer = verfer;
|
|
61
71
|
}
|
|
62
72
|
|
|
63
|
-
|
|
64
73
|
/**
|
|
65
74
|
* @description Property verfer:
|
|
66
75
|
Returns Verfer instance
|
|
@@ -70,43 +79,55 @@ export class Signer extends Matter {
|
|
|
70
79
|
return this._verfer;
|
|
71
80
|
}
|
|
72
81
|
|
|
73
|
-
sign(
|
|
74
|
-
|
|
82
|
+
sign(
|
|
83
|
+
ser: Uint8Array,
|
|
84
|
+
index: number | null = null,
|
|
85
|
+
only: boolean = false,
|
|
86
|
+
ondex: number | undefined = undefined
|
|
87
|
+
): Siger | Cigar {
|
|
88
|
+
return this._sign(ser, this.raw, this.verfer, index, only, ondex);
|
|
75
89
|
}
|
|
76
90
|
|
|
77
|
-
_ed25519(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
91
|
+
_ed25519(
|
|
92
|
+
ser: Uint8Array,
|
|
93
|
+
seed: Uint8Array,
|
|
94
|
+
verfer: Verfer,
|
|
95
|
+
index: number | null,
|
|
96
|
+
only: boolean = false,
|
|
97
|
+
ondex: number | undefined
|
|
98
|
+
) {
|
|
99
|
+
const sig = libsodium.crypto_sign_detached(
|
|
81
100
|
ser,
|
|
82
|
-
Buffer.concat([seed, verfer.raw])
|
|
101
|
+
Buffer.concat([seed, verfer.raw])
|
|
83
102
|
);
|
|
84
103
|
|
|
85
104
|
if (index == null) {
|
|
86
|
-
return new Cigar({raw: sig, code: MtrDex.Ed25519_Sig}, verfer);
|
|
105
|
+
return new Cigar({ raw: sig, code: MtrDex.Ed25519_Sig }, verfer);
|
|
87
106
|
} else {
|
|
88
107
|
let code;
|
|
89
108
|
if (only) {
|
|
90
|
-
ondex = undefined
|
|
109
|
+
ondex = undefined;
|
|
91
110
|
if (index <= 63) {
|
|
92
|
-
code = IdrDex.Ed25519_Crt_Sig
|
|
111
|
+
code = IdrDex.Ed25519_Crt_Sig;
|
|
93
112
|
} else {
|
|
94
|
-
code = IdrDex.Ed25519_Big_Crt_Sig
|
|
113
|
+
code = IdrDex.Ed25519_Big_Crt_Sig;
|
|
95
114
|
}
|
|
96
115
|
} else {
|
|
97
|
-
if(ondex == undefined) {
|
|
98
|
-
ondex = index
|
|
116
|
+
if (ondex == undefined) {
|
|
117
|
+
ondex = index;
|
|
99
118
|
}
|
|
100
119
|
|
|
101
|
-
if (ondex == index && index <= 63)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
120
|
+
if (ondex == index && index <= 63)
|
|
121
|
+
// both same and small
|
|
122
|
+
code = IdrDex.Ed25519_Sig; // use small both same
|
|
123
|
+
// otherwise big or both not same so use big both
|
|
124
|
+
else code = IdrDex.Ed25519_Big_Sig; // use use big both
|
|
106
125
|
}
|
|
107
126
|
|
|
108
|
-
return new Siger(
|
|
127
|
+
return new Siger(
|
|
128
|
+
{ raw: sig, code: code, index: index, ondex: ondex },
|
|
129
|
+
verfer
|
|
130
|
+
);
|
|
109
131
|
}
|
|
110
|
-
|
|
111
132
|
}
|
|
112
|
-
}
|
|
133
|
+
}
|