@bitgo/sdk-lib-mpc 10.17.0 → 10.19.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/dist/src/tss/dkls-vrf/dkg.d.ts +91 -0
- package/dist/src/tss/dkls-vrf/dkg.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/dkg.js +278 -0
- package/dist/src/tss/dkls-vrf/index.d.ts +4 -0
- package/dist/src/tss/dkls-vrf/index.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/index.js +40 -0
- package/dist/src/tss/dkls-vrf/types.d.ts +28 -0
- package/dist/src/tss/dkls-vrf/types.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/types.js +23 -0
- package/dist/src/tss/dkls-vrf/util.d.ts +9 -0
- package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/util.js +52 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts +3 -1
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -1
- package/dist/src/tss/ecdsa-dkls/dkg.js +1 -1
- package/dist/src/tss/eddsa-mps/dkg.d.ts +3 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/dkg.js +1 -1
- package/dist/src/tss/index.d.ts +1 -0
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +2 -1
- package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
- package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
- package/dist/src/tss/redpallas-mps/dsg.d.ts +108 -0
- package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/dsg.js +355 -0
- package/dist/src/tss/redpallas-mps/index.d.ts +3 -0
- package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/index.js +4 -2
- package/dist/src/tss/redpallas-mps/types.d.ts +45 -0
- package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/types.js +25 -2
- package/dist/src/tss/redpallas-mps/util.d.ts +28 -0
- package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/util.js +95 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -4
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { VrfKeygenSession, VrfKeyshare as DklsVrfKeyshare } from '@silencelaboratories/dkls-wasm-ll-vrf-node';
|
|
2
|
+
import type { VrfKeygenSession as VrfWebKeygenSession } from '@silencelaboratories/dkls-wasm-ll-vrf-web';
|
|
3
|
+
import { Buffer } from 'buffer';
|
|
4
|
+
import { DeserializedMessages } from '../ecdsa-dkls/types';
|
|
5
|
+
import { VrfDkgSessionData, VrfDkgState } from './types';
|
|
6
|
+
type NodeVrfWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-vrf-node');
|
|
7
|
+
type WebVrfWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-vrf-web');
|
|
8
|
+
type BundlerVrfWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-vrf-bundler');
|
|
9
|
+
type VrfWasm = NodeVrfWasmer | WebVrfWasmer | BundlerVrfWasmer;
|
|
10
|
+
/**
|
|
11
|
+
* Round driver for the DKLS VRF DKG, which produces a Ristretto VRF keyshare.
|
|
12
|
+
*
|
|
13
|
+
* Two rounds, all broadcast: round 1 exchanges commitments (VrfKeygenMsg1), round 2
|
|
14
|
+
* exchanges openings (VrfKeygenMsg2, emitted per recipient) and the DKG finalizes
|
|
15
|
+
* locally. There is no chain-code commitment step, unlike the signing DKG.
|
|
16
|
+
*
|
|
17
|
+
* Callers pass every message they hold; this class routes them internally. Round 1
|
|
18
|
+
* must exclude the party's own commitment (the wasm rejects a sender set containing
|
|
19
|
+
* it) and round 2 consumes the openings addressed to this party, own included.
|
|
20
|
+
*
|
|
21
|
+
* Party indices follow the MPCv2 convention: 0 = user, 1 = backup, 2 = bitgo.
|
|
22
|
+
*/
|
|
23
|
+
export declare class VrfDkg {
|
|
24
|
+
protected vrfSession: VrfKeygenSession | VrfWebKeygenSession | undefined;
|
|
25
|
+
protected vrfSessionBytes: Uint8Array;
|
|
26
|
+
protected vrfKeyShare: DklsVrfKeyshare | undefined;
|
|
27
|
+
protected keyShareBuff: Buffer | undefined;
|
|
28
|
+
protected publicKey: Buffer | undefined;
|
|
29
|
+
protected keyId: Buffer | undefined;
|
|
30
|
+
protected rootChainCode: Buffer | undefined;
|
|
31
|
+
protected n: number;
|
|
32
|
+
protected t: number;
|
|
33
|
+
protected partyIdx: number;
|
|
34
|
+
protected seed: Buffer | undefined;
|
|
35
|
+
protected vrfState: VrfDkgState;
|
|
36
|
+
protected vrfWasm: VrfWasm | null;
|
|
37
|
+
constructor(n: number, t: number, partyIdx: number, seed?: Buffer, vrfWasm?: BundlerVrfWasmer);
|
|
38
|
+
private loadVrfWasm;
|
|
39
|
+
private getVrfWasm;
|
|
40
|
+
private _restoreSession;
|
|
41
|
+
/**
|
|
42
|
+
* Re-derive the round state from the wasm session bytes instead of trusting a
|
|
43
|
+
* caller-supplied enum. The wasm embeds a round tag for exactly this reason; this
|
|
44
|
+
* is what lets a stateless server resume mid-protocol.
|
|
45
|
+
*/
|
|
46
|
+
private _deserializeState;
|
|
47
|
+
/**
|
|
48
|
+
* Create this party's VRF DKG commitment (VrfKeygenMsg1, broadcast).
|
|
49
|
+
*/
|
|
50
|
+
initDkg(): Promise<DeserializedMessages>;
|
|
51
|
+
/**
|
|
52
|
+
* Process the messages this party holds for the current round and return this
|
|
53
|
+
* party's messages for the next round. Callers pass everything they hold; the
|
|
54
|
+
* round routing happens here:
|
|
55
|
+
*
|
|
56
|
+
* - Round 1 (WaitMsg1): consumes the other parties' commitments (own excluded —
|
|
57
|
+
* the wasm rejects a sender set containing the party's own Msg1) and emits this
|
|
58
|
+
* party's openings (VrfKeygenMsg2), one broadcast message per recipient.
|
|
59
|
+
* - Round 2 (WaitMsg2): consumes the openings addressed to this party (own
|
|
60
|
+
* self-addressed opening included) and finalizes the DKG, returning no messages.
|
|
61
|
+
*/
|
|
62
|
+
handleIncomingMessages(messagesForIthRound: DeserializedMessages): Promise<DeserializedMessages>;
|
|
63
|
+
/**
|
|
64
|
+
* Get the VRF keyshare bytes (CBOR VrfKeyshare) once the DKG is complete.
|
|
65
|
+
* This buffer is private key material.
|
|
66
|
+
*/
|
|
67
|
+
getKeyShare(): Buffer;
|
|
68
|
+
/** 32-byte compressed Ristretto VRF public key, available once the DKG is complete. */
|
|
69
|
+
getPublicKey(): Buffer;
|
|
70
|
+
/** 32-byte VRF key identifier, available once the DKG is complete. */
|
|
71
|
+
getKeyId(): Buffer;
|
|
72
|
+
/** 32-byte VRF root chain code, available once the DKG is complete. */
|
|
73
|
+
getRootChainCode(): Buffer;
|
|
74
|
+
/**
|
|
75
|
+
* Get the current session data that can be used to restore the session later.
|
|
76
|
+
*
|
|
77
|
+
* The returned session bytes are secret key material — they carry this party's
|
|
78
|
+
* secret polynomial share. They must never be logged or persisted in the clear;
|
|
79
|
+
* the caller encrypts them exactly like the key share itself.
|
|
80
|
+
*/
|
|
81
|
+
getSessionData(): VrfDkgSessionData;
|
|
82
|
+
/**
|
|
83
|
+
* Restore a VRF DKG session from previous session data.
|
|
84
|
+
* Note: This should not be used for Round 1 as that's the initialization phase.
|
|
85
|
+
* The round state is re-derived from the wasm session bytes, not trusted from the
|
|
86
|
+
* caller-supplied enum, so a tampered `vrfState` cannot steer the protocol.
|
|
87
|
+
*/
|
|
88
|
+
static restoreSession(n: number, t: number, partyIdx: number, sessionData: VrfDkgSessionData, seed?: Buffer, vrfWasm?: BundlerVrfWasmer): Promise<VrfDkg>;
|
|
89
|
+
}
|
|
90
|
+
export {};
|
|
91
|
+
//# sourceMappingURL=dkg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/dkg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,WAAW,IAAI,eAAe,EAC/B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEzG,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAMzD,KAAK,aAAa,GAAG,cAAc,4CAA4C,CAAC,CAAC;AACjF,KAAK,YAAY,GAAG,cAAc,2CAA2C,CAAC,CAAC;AAC/E,KAAK,gBAAgB,GAAG,cAAc,+CAA+C,CAAC,CAAC;AAEvF,KAAK,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,qBAAa,MAAM;IACjB,SAAS,CAAC,UAAU,EAAE,gBAAgB,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACzE,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;IACtC,SAAS,CAAC,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAA6B;IAC5D,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;gBAEtB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB;YAQ/E,WAAW;IAMzB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,eAAe;IAMvB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAwC9C;;;;;;;;;;OAUG;IACG,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwDtG;;;OAGG;IACH,WAAW,IAAI,MAAM;IAOrB,uFAAuF;IACvF,YAAY,IAAI,MAAM;IAOtB,sEAAsE;IACtE,QAAQ,IAAI,MAAM;IAOlB,uEAAuE;IACvE,gBAAgB,IAAI,MAAM;IAO1B;;;;;;OAMG;IACH,cAAc,IAAI,iBAAiB;IAWnC;;;;;OAKG;WACU,cAAc,CACzB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,iBAAiB,EAC9B,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,MAAM,CAAC;CAanB"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.VrfDkg = void 0;
|
|
37
|
+
const cbor_x_1 = require("cbor-x");
|
|
38
|
+
const buffer_1 = require("buffer");
|
|
39
|
+
const types_1 = require("./types");
|
|
40
|
+
/**
|
|
41
|
+
* Round driver for the DKLS VRF DKG, which produces a Ristretto VRF keyshare.
|
|
42
|
+
*
|
|
43
|
+
* Two rounds, all broadcast: round 1 exchanges commitments (VrfKeygenMsg1), round 2
|
|
44
|
+
* exchanges openings (VrfKeygenMsg2, emitted per recipient) and the DKG finalizes
|
|
45
|
+
* locally. There is no chain-code commitment step, unlike the signing DKG.
|
|
46
|
+
*
|
|
47
|
+
* Callers pass every message they hold; this class routes them internally. Round 1
|
|
48
|
+
* must exclude the party's own commitment (the wasm rejects a sender set containing
|
|
49
|
+
* it) and round 2 consumes the openings addressed to this party, own included.
|
|
50
|
+
*
|
|
51
|
+
* Party indices follow the MPCv2 convention: 0 = user, 1 = backup, 2 = bitgo.
|
|
52
|
+
*/
|
|
53
|
+
class VrfDkg {
|
|
54
|
+
constructor(n, t, partyIdx, seed, vrfWasm) {
|
|
55
|
+
this.vrfState = types_1.VrfDkgState.Uninitialized;
|
|
56
|
+
this.n = n;
|
|
57
|
+
this.t = t;
|
|
58
|
+
this.partyIdx = partyIdx;
|
|
59
|
+
this.seed = seed;
|
|
60
|
+
this.vrfWasm = vrfWasm ?? null;
|
|
61
|
+
}
|
|
62
|
+
async loadVrfWasm() {
|
|
63
|
+
if (!this.vrfWasm) {
|
|
64
|
+
this.vrfWasm = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-vrf-node')));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
getVrfWasm() {
|
|
68
|
+
if (!this.vrfWasm) {
|
|
69
|
+
throw Error('VRF wasm not loaded');
|
|
70
|
+
}
|
|
71
|
+
return this.vrfWasm;
|
|
72
|
+
}
|
|
73
|
+
_restoreSession() {
|
|
74
|
+
if (!this.vrfSession) {
|
|
75
|
+
this.vrfSession = this.getVrfWasm().VrfKeygenSession.fromBytes(this.vrfSessionBytes);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Re-derive the round state from the wasm session bytes instead of trusting a
|
|
80
|
+
* caller-supplied enum. The wasm embeds a round tag for exactly this reason; this
|
|
81
|
+
* is what lets a stateless server resume mid-protocol.
|
|
82
|
+
*/
|
|
83
|
+
_deserializeState() {
|
|
84
|
+
if (!this.vrfSession) {
|
|
85
|
+
throw Error('Session not initialized');
|
|
86
|
+
}
|
|
87
|
+
const round = (0, cbor_x_1.decode)(this.vrfSession.toBytes()).round;
|
|
88
|
+
if (round === 'Init') {
|
|
89
|
+
this.vrfState = types_1.VrfDkgState.Uninitialized;
|
|
90
|
+
}
|
|
91
|
+
else if (round === 'WaitMsg1') {
|
|
92
|
+
this.vrfState = types_1.VrfDkgState.Round1;
|
|
93
|
+
}
|
|
94
|
+
else if (round === 'WaitMsg2') {
|
|
95
|
+
this.vrfState = types_1.VrfDkgState.Round2;
|
|
96
|
+
}
|
|
97
|
+
else if (typeof round === 'object' && round !== null && 'Share' in round) {
|
|
98
|
+
this.vrfState = types_1.VrfDkgState.Complete;
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.vrfState = types_1.VrfDkgState.InvalidState;
|
|
102
|
+
throw Error(`Invalid State: ${JSON.stringify(round)}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create this party's VRF DKG commitment (VrfKeygenMsg1, broadcast).
|
|
107
|
+
*/
|
|
108
|
+
async initDkg() {
|
|
109
|
+
if (!this.vrfWasm) {
|
|
110
|
+
await this.loadVrfWasm();
|
|
111
|
+
}
|
|
112
|
+
if (this.t > this.n || this.partyIdx >= this.n) {
|
|
113
|
+
throw Error('Invalid parameters for VRF DKG');
|
|
114
|
+
}
|
|
115
|
+
if (this.vrfState != types_1.VrfDkgState.Uninitialized) {
|
|
116
|
+
throw Error('VRF DKG session already initialized');
|
|
117
|
+
}
|
|
118
|
+
if (typeof window !== 'undefined' &&
|
|
119
|
+
/* checks for electron processes */
|
|
120
|
+
!window.process &&
|
|
121
|
+
!window.process?.['type']) {
|
|
122
|
+
/* This is only needed for browsers/web because it uses fetch to resolve the wasm asset for the web */
|
|
123
|
+
const initVrf = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-vrf-web')));
|
|
124
|
+
await initVrf.default();
|
|
125
|
+
}
|
|
126
|
+
if (this.seed && this.seed.length !== 32) {
|
|
127
|
+
throw Error(`Seed should be 32 bytes, got ${this.seed.length}.`);
|
|
128
|
+
}
|
|
129
|
+
const { VrfKeygenSession } = this.getVrfWasm();
|
|
130
|
+
this.vrfSession = this.seed
|
|
131
|
+
? new VrfKeygenSession(this.n, this.t, this.partyIdx, new Uint8Array(this.seed))
|
|
132
|
+
: new VrfKeygenSession(this.n, this.t, this.partyIdx);
|
|
133
|
+
try {
|
|
134
|
+
const message = this.vrfSession.createFirstMessage();
|
|
135
|
+
// Copy the payload out before freeing the wasm message object.
|
|
136
|
+
const payload = new Uint8Array(message.payload);
|
|
137
|
+
message.free();
|
|
138
|
+
this.vrfSessionBytes = this.vrfSession.toBytes();
|
|
139
|
+
this._deserializeState();
|
|
140
|
+
return { broadcastMessages: [{ payload, from: this.partyIdx }], p2pMessages: [] };
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
throw Error(`Error while creating the first VRF message from party ${this.partyIdx}: ${e}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Process the messages this party holds for the current round and return this
|
|
148
|
+
* party's messages for the next round. Callers pass everything they hold; the
|
|
149
|
+
* round routing happens here:
|
|
150
|
+
*
|
|
151
|
+
* - Round 1 (WaitMsg1): consumes the other parties' commitments (own excluded —
|
|
152
|
+
* the wasm rejects a sender set containing the party's own Msg1) and emits this
|
|
153
|
+
* party's openings (VrfKeygenMsg2), one broadcast message per recipient.
|
|
154
|
+
* - Round 2 (WaitMsg2): consumes the openings addressed to this party (own
|
|
155
|
+
* self-addressed opening included) and finalizes the DKG, returning no messages.
|
|
156
|
+
*/
|
|
157
|
+
async handleIncomingMessages(messagesForIthRound) {
|
|
158
|
+
this._restoreSession();
|
|
159
|
+
if (!this.vrfSession) {
|
|
160
|
+
throw Error('Session not initialized');
|
|
161
|
+
}
|
|
162
|
+
const { Message: VrfMessage } = this.getVrfWasm();
|
|
163
|
+
let nextRoundMessages = [];
|
|
164
|
+
const nextRoundDeserializedMessages = { broadcastMessages: [], p2pMessages: [] };
|
|
165
|
+
try {
|
|
166
|
+
switch (this.vrfState) {
|
|
167
|
+
case types_1.VrfDkgState.Round1: {
|
|
168
|
+
const othersCommitments = messagesForIthRound.broadcastMessages.filter((m) => m.from !== this.partyIdx);
|
|
169
|
+
nextRoundMessages = this.vrfSession.handleMessages(othersCommitments.map((m) => new VrfMessage(m.payload, m.from)));
|
|
170
|
+
this._deserializeState();
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case types_1.VrfDkgState.Round2: {
|
|
174
|
+
const openingsForMe = messagesForIthRound.p2pMessages.filter((m) => m.to === this.partyIdx);
|
|
175
|
+
nextRoundMessages = this.vrfSession.handleMessages(openingsForMe.map((m) => new VrfMessage(m.payload, m.from, m.to)));
|
|
176
|
+
// vrfKeyshare() consumes (and deallocates) the session in all cases.
|
|
177
|
+
const vrfKeyShare = this.vrfSession.vrfKeyshare();
|
|
178
|
+
this.vrfKeyShare = vrfKeyShare;
|
|
179
|
+
this.keyShareBuff = buffer_1.Buffer.from(vrfKeyShare.toBytes());
|
|
180
|
+
this.publicKey = buffer_1.Buffer.from(vrfKeyShare.publicKey);
|
|
181
|
+
this.keyId = buffer_1.Buffer.from(vrfKeyShare.keyId);
|
|
182
|
+
this.rootChainCode = buffer_1.Buffer.from(vrfKeyShare.rootChainCode);
|
|
183
|
+
vrfKeyShare.free();
|
|
184
|
+
this.vrfState = types_1.VrfDkgState.Complete;
|
|
185
|
+
return nextRoundDeserializedMessages;
|
|
186
|
+
}
|
|
187
|
+
default:
|
|
188
|
+
throw Error(`Invalid VRF DKG state: ${this.vrfState}`);
|
|
189
|
+
}
|
|
190
|
+
nextRoundDeserializedMessages.broadcastMessages = nextRoundMessages
|
|
191
|
+
.filter((m) => m.to_id === undefined)
|
|
192
|
+
.map((m) => ({ payload: new Uint8Array(m.payload), from: m.from_id }));
|
|
193
|
+
nextRoundDeserializedMessages.p2pMessages = nextRoundMessages
|
|
194
|
+
.filter((m) => m.to_id !== undefined)
|
|
195
|
+
.map((m) => ({ payload: new Uint8Array(m.payload), from: m.from_id, to: m.to_id }));
|
|
196
|
+
return nextRoundDeserializedMessages;
|
|
197
|
+
}
|
|
198
|
+
catch (e) {
|
|
199
|
+
throw Error(`Error while creating VRF messages from party ${this.partyIdx}, state ${this.vrfState}: ${e}`);
|
|
200
|
+
}
|
|
201
|
+
finally {
|
|
202
|
+
nextRoundMessages.forEach((m) => m.free());
|
|
203
|
+
if (this.vrfState !== types_1.VrfDkgState.Complete) {
|
|
204
|
+
this.vrfSessionBytes = this.vrfSession.toBytes();
|
|
205
|
+
this.vrfSession = undefined;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get the VRF keyshare bytes (CBOR VrfKeyshare) once the DKG is complete.
|
|
211
|
+
* This buffer is private key material.
|
|
212
|
+
*/
|
|
213
|
+
getKeyShare() {
|
|
214
|
+
if (!this.keyShareBuff) {
|
|
215
|
+
throw Error('Can not get key share, VRF DKG is not complete yet.');
|
|
216
|
+
}
|
|
217
|
+
return this.keyShareBuff;
|
|
218
|
+
}
|
|
219
|
+
/** 32-byte compressed Ristretto VRF public key, available once the DKG is complete. */
|
|
220
|
+
getPublicKey() {
|
|
221
|
+
if (!this.publicKey) {
|
|
222
|
+
throw Error('Can not get public key, VRF DKG is not complete yet.');
|
|
223
|
+
}
|
|
224
|
+
return this.publicKey;
|
|
225
|
+
}
|
|
226
|
+
/** 32-byte VRF key identifier, available once the DKG is complete. */
|
|
227
|
+
getKeyId() {
|
|
228
|
+
if (!this.keyId) {
|
|
229
|
+
throw Error('Can not get key id, VRF DKG is not complete yet.');
|
|
230
|
+
}
|
|
231
|
+
return this.keyId;
|
|
232
|
+
}
|
|
233
|
+
/** 32-byte VRF root chain code, available once the DKG is complete. */
|
|
234
|
+
getRootChainCode() {
|
|
235
|
+
if (!this.rootChainCode) {
|
|
236
|
+
throw Error('Can not get root chain code, VRF DKG is not complete yet.');
|
|
237
|
+
}
|
|
238
|
+
return this.rootChainCode;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get the current session data that can be used to restore the session later.
|
|
242
|
+
*
|
|
243
|
+
* The returned session bytes are secret key material — they carry this party's
|
|
244
|
+
* secret polynomial share. They must never be logged or persisted in the clear;
|
|
245
|
+
* the caller encrypts them exactly like the key share itself.
|
|
246
|
+
*/
|
|
247
|
+
getSessionData() {
|
|
248
|
+
const sessionData = {
|
|
249
|
+
vrfSessionBytes: this.vrfSessionBytes,
|
|
250
|
+
vrfState: this.vrfState,
|
|
251
|
+
};
|
|
252
|
+
if (this.keyShareBuff) {
|
|
253
|
+
sessionData.keyShareBuff = this.keyShareBuff;
|
|
254
|
+
}
|
|
255
|
+
return sessionData;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Restore a VRF DKG session from previous session data.
|
|
259
|
+
* Note: This should not be used for Round 1 as that's the initialization phase.
|
|
260
|
+
* The round state is re-derived from the wasm session bytes, not trusted from the
|
|
261
|
+
* caller-supplied enum, so a tampered `vrfState` cannot steer the protocol.
|
|
262
|
+
*/
|
|
263
|
+
static async restoreSession(n, t, partyIdx, sessionData, seed, vrfWasm) {
|
|
264
|
+
const vrfDkg = new VrfDkg(n, t, partyIdx, seed, vrfWasm);
|
|
265
|
+
if (!vrfDkg.vrfWasm) {
|
|
266
|
+
await vrfDkg.loadVrfWasm();
|
|
267
|
+
}
|
|
268
|
+
vrfDkg.vrfSessionBytes = sessionData.vrfSessionBytes;
|
|
269
|
+
vrfDkg._restoreSession();
|
|
270
|
+
vrfDkg._deserializeState();
|
|
271
|
+
if (sessionData.keyShareBuff) {
|
|
272
|
+
vrfDkg.keyShareBuff = sessionData.keyShareBuff;
|
|
273
|
+
}
|
|
274
|
+
return vrfDkg;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
exports.VrfDkg = VrfDkg;
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9ka2xzLXZyZi9ka2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsbUNBQWdDO0FBQ2hDLG1DQUFnQztBQUVoQyxtQ0FBeUQ7QUFZekQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxNQUFNO0lBZWpCLFlBQVksQ0FBUyxFQUFFLENBQVMsRUFBRSxRQUFnQixFQUFFLElBQWEsRUFBRSxPQUEwQjtRQUhuRixhQUFRLEdBQWdCLG1CQUFXLENBQUMsYUFBYSxDQUFDO1FBSTFELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyx3REFBYSw0Q0FBNEMsR0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGdC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QUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUNyRCxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUEvUEQsd0JBK1BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBNZXNzYWdlIGFzIFZyZldhc21NZXNzYWdlLFxuICBWcmZLZXlnZW5TZXNzaW9uLFxuICBWcmZLZXlzaGFyZSBhcyBEa2xzVnJmS2V5c2hhcmUsXG59IGZyb20gJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IFZyZktleWdlblNlc3Npb24gYXMgVnJmV2ViS2V5Z2VuU2Vzc2lvbiB9IGZyb20gJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtd2ViJztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZXMgfSBmcm9tICcuLi9lY2RzYS1ka2xzL3R5cGVzJztcbmltcG9ydCB7IFZyZkRrZ1Nlc3Npb25EYXRhLCBWcmZEa2dTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBQbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzIHRoYXQgZG8gbm90IGV4aXN0IGV2ZXJ5d2hlcmU6IHRoZSBub2RlL3dlYi9idW5kbGVyIHdhc21cbi8vIHZhcmlhbnRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIHNlbGVjdGVkIGF0IHJ1bnRpbWUgKG5vZGUgcHJvY2VzcyB2cyBicm93c2VyIHZzXG4vLyBidW5kbGVyKS4gU3RhdGljIGltcG9ydHMgd291bGQgbG9hZCB0aGUgd3JvbmcgcGxhdGZvcm0ncyB3YXNtIGJpbmRpbmcsIHNvIGJvdGggdGhlXG4vLyB0eXBlIGFsaWFzZXMgYmVsb3cgYW5kIHRoZSBsYXp5IGBhd2FpdCBpbXBvcnQoKWAgY2FsbHMgYXJlIGRlbGliZXJhdGUuXG50eXBlIE5vZGVWcmZXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLW5vZGUnKTtcbnR5cGUgV2ViVnJmV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXZyZi13ZWInKTtcbnR5cGUgQnVuZGxlclZyZldhc21lciA9IHR5cGVvZiBpbXBvcnQoJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtYnVuZGxlcicpO1xuXG50eXBlIFZyZldhc20gPSBOb2RlVnJmV2FzbWVyIHwgV2ViVnJmV2FzbWVyIHwgQnVuZGxlclZyZldhc21lcjtcblxuLyoqXG4gKiBSb3VuZCBkcml2ZXIgZm9yIHRoZSBES0xTIFZSRiBES0csIHdoaWNoIHByb2R1Y2VzIGEgUmlzdHJldHRvIFZSRiBrZXlzaGFyZS5cbiAqXG4gKiBUd28gcm91bmRzLCBhbGwgYnJvYWRjYXN0OiByb3VuZCAxIGV4Y2hhbmdlcyBjb21taXRtZW50cyAoVnJmS2V5Z2VuTXNnMSksIHJvdW5kIDJcbiAqIGV4Y2hhbmdlcyBvcGVuaW5ncyAoVnJmS2V5Z2VuTXNnMiwgZW1pdHRlZCBwZXIgcmVjaXBpZW50KSBhbmQgdGhlIERLRyBmaW5hbGl6ZXNcbiAqIGxvY2FsbHkuIFRoZXJlIGlzIG5vIGNoYWluLWNvZGUgY29tbWl0bWVudCBzdGVwLCB1bmxpa2UgdGhlIHNpZ25pbmcgREtHLlxuICpcbiAqIENhbGxlcnMgcGFzcyBldmVyeSBtZXNzYWdlIHRoZXkgaG9sZDsgdGhpcyBjbGFzcyByb3V0ZXMgdGhlbSBpbnRlcm5hbGx5LiBSb3VuZCAxXG4gKiBtdXN0IGV4Y2x1ZGUgdGhlIHBhcnR5J3Mgb3duIGNvbW1pdG1lbnQgKHRoZSB3YXNtIHJlamVjdHMgYSBzZW5kZXIgc2V0IGNvbnRhaW5pbmdcbiAqIGl0KSBhbmQgcm91bmQgMiBjb25zdW1lcyB0aGUgb3BlbmluZ3MgYWRkcmVzc2VkIHRvIHRoaXMgcGFydHksIG93biBpbmNsdWRlZC5cbiAqXG4gKiBQYXJ0eSBpbmRpY2VzIGZvbGxvdyB0aGUgTVBDdjIgY29udmVudGlvbjogMCA9IHVzZXIsIDEgPSBiYWNrdXAsIDIgPSBiaXRnby5cbiAqL1xuZXhwb3J0IGNsYXNzIFZyZkRrZyB7XG4gIHByb3RlY3RlZCB2cmZTZXNzaW9uOiBWcmZLZXlnZW5TZXNzaW9uIHwgVnJmV2ViS2V5Z2VuU2Vzc2lvbiB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHZyZlNlc3Npb25CeXRlczogVWludDhBcnJheTtcbiAgcHJvdGVjdGVkIHZyZktleVNoYXJlOiBEa2xzVnJmS2V5c2hhcmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ1ZmY6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHB1YmxpY0tleTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQga2V5SWQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJvb3RDaGFpbkNvZGU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIG46IG51bWJlcjtcbiAgcHJvdGVjdGVkIHQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHBhcnR5SWR4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBzZWVkOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCB2cmZTdGF0ZTogVnJmRGtnU3RhdGUgPSBWcmZEa2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuICBwcm90ZWN0ZWQgdnJmV2FzbTogVnJmV2FzbSB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IobjogbnVtYmVyLCB0OiBudW1iZXIsIHBhcnR5SWR4OiBudW1iZXIsIHNlZWQ/OiBCdWZmZXIsIHZyZldhc20/OiBCdW5kbGVyVnJmV2FzbWVyKSB7XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLnQgPSB0O1xuICAgIHRoaXMucGFydHlJZHggPSBwYXJ0eUlkeDtcbiAgICB0aGlzLnNlZWQgPSBzZWVkO1xuICAgIHRoaXMudnJmV2FzbSA9IHZyZldhc20gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFZyZldhc20oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnZyZldhc20pIHtcbiAgICAgIHRoaXMudnJmV2FzbSA9IGF3YWl0IGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXZyZi1ub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWcmZXYXNtKCkge1xuICAgIGlmICghdGhpcy52cmZXYXNtKSB7XG4gICAgICB0aHJvdyBFcnJvcignVlJGIHdhc20gbm90IGxvYWRlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52cmZXYXNtO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZVNlc3Npb24oKSB7XG4gICAgaWYgKCF0aGlzLnZyZlNlc3Npb24pIHtcbiAgICAgIHRoaXMudnJmU2Vzc2lvbiA9IHRoaXMuZ2V0VnJmV2FzbSgpLlZyZktleWdlblNlc3Npb24uZnJvbUJ5dGVzKHRoaXMudnJmU2Vzc2lvbkJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmUtZGVyaXZlIHRoZSByb3VuZCBzdGF0ZSBmcm9tIHRoZSB3YXNtIHNlc3Npb24gYnl0ZXMgaW5zdGVhZCBvZiB0cnVzdGluZyBhXG4gICAqIGNhbGxlci1zdXBwbGllZCBlbnVtLiBUaGUgd2FzbSBlbWJlZHMgYSByb3VuZCB0YWcgZm9yIGV4YWN0bHkgdGhpcyByZWFzb247IHRoaXNcbiAgICogaXMgd2hhdCBsZXRzIGEgc3RhdGVsZXNzIHNlcnZlciByZXN1bWUgbWlkLXByb3RvY29sLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGVzZXJpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMudnJmU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJvdW5kID0gZGVjb2RlKHRoaXMudnJmU2Vzc2lvbi50b0J5dGVzKCkpLnJvdW5kO1xuICAgIGlmIChyb3VuZCA9PT0gJ0luaXQnKSB7XG4gICAgICB0aGlzLnZyZlN0YXRlID0gVnJmRGtnU3RhdGUuVW5pbml0aWFsaXplZDtcbiAgICB9IGVsc2UgaWYgKHJvdW5kID09PSAnV2FpdE1zZzEnKSB7XG4gICAgICB0aGlzLnZyZlN0YXRlID0gVnJmRGtnU3RhdGUuUm91bmQxO1xuICAgIH0gZWxzZSBpZiAocm91bmQgPT09ICdXYWl0TXNnMicpIHtcbiAgICAgIHRoaXMudnJmU3RhdGUgPSBWcmZEa2dTdGF0ZS5Sb3VuZDI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygcm91bmQgPT09ICdvYmplY3QnICYmIHJvdW5kICE9PSBudWxsICYmICdTaGFyZScgaW4gcm91bmQpIHtcbiAgICAgIHRoaXMudnJmU3RhdGUgPSBWcmZEa2dTdGF0ZS5Db21wbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52cmZTdGF0ZSA9IFZyZkRrZ1N0YXRlLkludmFsaWRTdGF0ZTtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIFN0YXRlOiAke0pTT04uc3RyaW5naWZ5KHJvdW5kKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoaXMgcGFydHkncyBWUkYgREtHIGNvbW1pdG1lbnQgKFZyZktleWdlbk1zZzEsIGJyb2FkY2FzdCkuXG4gICAqL1xuICBhc3luYyBpbml0RGtnKCk6IFByb21pc2U8RGVzZXJpYWxpemVkTWVzc2FnZXM+IHtcbiAgICBpZiAoIXRoaXMudnJmV2FzbSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkVnJmV2FzbSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ID4gdGhpcy5uIHx8IHRoaXMucGFydHlJZHggPj0gdGhpcy5uKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXJzIGZvciBWUkYgREtHJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZyZlN0YXRlICE9IFZyZkRrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdWUkYgREtHIHNlc3Npb24gYWxyZWFkeSBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgLyogY2hlY2tzIGZvciBlbGVjdHJvbiBwcm9jZXNzZXMgKi9cbiAgICAgICF3aW5kb3cucHJvY2VzcyAmJlxuICAgICAgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICkge1xuICAgICAgLyogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgYnJvd3NlcnMvd2ViIGJlY2F1c2UgaXQgdXNlcyBmZXRjaCB0byByZXNvbHZlIHRoZSB3YXNtIGFzc2V0IGZvciB0aGUgd2ViICovXG4gICAgICBjb25zdCBpbml0VnJmID0gYXdhaXQgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLXdlYicpO1xuICAgICAgYXdhaXQgaW5pdFZyZi5kZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlZWQgJiYgdGhpcy5zZWVkLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IEVycm9yKGBTZWVkIHNob3VsZCBiZSAzMiBieXRlcywgZ290ICR7dGhpcy5zZWVkLmxlbmd0aH0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgVnJmS2V5Z2VuU2Vzc2lvbiB9ID0gdGhpcy5nZXRWcmZXYXNtKCk7XG4gICAgdGhpcy52cmZTZXNzaW9uID0gdGhpcy5zZWVkXG4gICAgICA/IG5ldyBWcmZLZXlnZW5TZXNzaW9uKHRoaXMubiwgdGhpcy50LCB0aGlzLnBhcnR5SWR4LCBuZXcgVWludDhBcnJheSh0aGlzLnNlZWQpKVxuICAgICAgOiBuZXcgVnJmS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnZyZlNlc3Npb24uY3JlYXRlRmlyc3RNZXNzYWdlKCk7XG4gICAgICAvLyBDb3B5IHRoZSBwYXlsb2FkIG91dCBiZWZvcmUgZnJlZWluZyB0aGUgd2FzbSBtZXNzYWdlIG9iamVjdC5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgVWludDhBcnJheShtZXNzYWdlLnBheWxvYWQpO1xuICAgICAgbWVzc2FnZS5mcmVlKCk7XG4gICAgICB0aGlzLnZyZlNlc3Npb25CeXRlcyA9IHRoaXMudnJmU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICByZXR1cm4geyBicm9hZGNhc3RNZXNzYWdlczogW3sgcGF5bG9hZCwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XSwgcDJwTWVzc2FnZXM6IFtdIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBmaXJzdCBWUkYgbWVzc2FnZSBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH06ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgbWVzc2FnZXMgdGhpcyBwYXJ0eSBob2xkcyBmb3IgdGhlIGN1cnJlbnQgcm91bmQgYW5kIHJldHVybiB0aGlzXG4gICAqIHBhcnR5J3MgbWVzc2FnZXMgZm9yIHRoZSBuZXh0IHJvdW5kLiBDYWxsZXJzIHBhc3MgZXZlcnl0aGluZyB0aGV5IGhvbGQ7IHRoZVxuICAgKiByb3VuZCByb3V0aW5nIGhhcHBlbnMgaGVyZTpcbiAgICpcbiAgICogLSBSb3VuZCAxIChXYWl0TXNnMSk6IGNvbnN1bWVzIHRoZSBvdGhlciBwYXJ0aWVzJyBjb21taXRtZW50cyAob3duIGV4Y2x1ZGVkIOKAlFxuICAgKiAgIHRoZSB3YXNtIHJlamVjdHMgYSBzZW5kZXIgc2V0IGNvbnRhaW5pbmcgdGhlIHBhcnR5J3Mgb3duIE1zZzEpIGFuZCBlbWl0cyB0aGlzXG4gICAqICAgcGFydHkncyBvcGVuaW5ncyAoVnJmS2V5Z2VuTXNnMiksIG9uZSBicm9hZGNhc3QgbWVzc2FnZSBwZXIgcmVjaXBpZW50LlxuICAgKiAtIFJvdW5kIDIgKFdhaXRNc2cyKTogY29uc3VtZXMgdGhlIG9wZW5pbmdzIGFkZHJlc3NlZCB0byB0aGlzIHBhcnR5IChvd25cbiAgICogICBzZWxmLWFkZHJlc3NlZCBvcGVuaW5nIGluY2x1ZGVkKSBhbmQgZmluYWxpemVzIHRoZSBES0csIHJldHVybmluZyBubyBtZXNzYWdlcy5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBQcm9taXNlPERlc2VyaWFsaXplZE1lc3NhZ2VzPiB7XG4gICAgdGhpcy5fcmVzdG9yZVNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMudnJmU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgTWVzc2FnZTogVnJmTWVzc2FnZSB9ID0gdGhpcy5nZXRWcmZXYXNtKCk7XG4gICAgbGV0IG5leHRSb3VuZE1lc3NhZ2VzOiBWcmZXYXNtTWVzc2FnZVtdID0gW107XG4gICAgY29uc3QgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM6IERlc2VyaWFsaXplZE1lc3NhZ2VzID0geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudnJmU3RhdGUpIHtcbiAgICAgICAgY2FzZSBWcmZEa2dTdGF0ZS5Sb3VuZDE6IHtcbiAgICAgICAgICBjb25zdCBvdGhlcnNDb21taXRtZW50cyA9IG1lc3NhZ2VzRm9ySXRoUm91bmQuYnJvYWRjYXN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLmZyb20gIT09IHRoaXMucGFydHlJZHgpO1xuICAgICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy52cmZTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgICAgb3RoZXJzQ29tbWl0bWVudHMubWFwKChtKSA9PiBuZXcgVnJmTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBWcmZEa2dTdGF0ZS5Sb3VuZDI6IHtcbiAgICAgICAgICBjb25zdCBvcGVuaW5nc0Zvck1lID0gbWVzc2FnZXNGb3JJdGhSb3VuZC5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IHRoaXMucGFydHlJZHgpO1xuICAgICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy52cmZTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgICAgb3BlbmluZ3NGb3JNZS5tYXAoKG0pID0+IG5ldyBWcmZNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCBtLnRvKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIHZyZktleXNoYXJlKCkgY29uc3VtZXMgKGFuZCBkZWFsbG9jYXRlcykgdGhlIHNlc3Npb24gaW4gYWxsIGNhc2VzLlxuICAgICAgICAgIGNvbnN0IHZyZktleVNoYXJlID0gdGhpcy52cmZTZXNzaW9uLnZyZktleXNoYXJlKCk7XG4gICAgICAgICAgdGhpcy52cmZLZXlTaGFyZSA9IHZyZktleVNoYXJlO1xuICAgICAgICAgIHRoaXMua2V5U2hhcmVCdWZmID0gQnVmZmVyLmZyb20odnJmS2V5U2hhcmUudG9CeXRlcygpKTtcbiAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHZyZktleVNoYXJlLnB1YmxpY0tleSk7XG4gICAgICAgICAgdGhpcy5rZXlJZCA9IEJ1ZmZlci5mcm9tKHZyZktleVNoYXJlLmtleUlkKTtcbiAgICAgICAgICB0aGlzLnJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuZnJvbSh2cmZLZXlTaGFyZS5yb290Q2hhaW5Db2RlKTtcbiAgICAgICAgICB2cmZLZXlTaGFyZS5mcmVlKCk7XG4gICAgICAgICAgdGhpcy52cmZTdGF0ZSA9IFZyZkRrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICAgIHJldHVybiBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIFZSRiBES0cgc3RhdGU6ICR7dGhpcy52cmZTdGF0ZX1gKTtcbiAgICAgIH1cblxuICAgICAgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMgPSBuZXh0Um91bmRNZXNzYWdlc1xuICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkID09PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoKG0pID0+ICh7IHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KG0ucGF5bG9hZCksIGZyb206IG0uZnJvbV9pZCB9KSk7XG4gICAgICBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcy5wMnBNZXNzYWdlcyA9IG5leHRSb3VuZE1lc3NhZ2VzXG4gICAgICAgIC5maWx0ZXIoKG0pID0+IG0udG9faWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgobSkgPT4gKHsgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkobS5wYXlsb2FkKSwgZnJvbTogbS5mcm9tX2lkLCB0bzogbS50b19pZCEgfSkpO1xuICAgICAgcmV0dXJuIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBWUkYgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCBzdGF0ZSAke3RoaXMudnJmU3RhdGV9OiAke2V9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5leHRSb3VuZE1lc3NhZ2VzLmZvckVhY2goKG0pID0+IG0uZnJlZSgpKTtcbiAgICAgIGlmICh0aGlzLnZyZlN0YXRlICE9PSBWcmZEa2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgICB0aGlzLnZyZlNlc3Npb25CeXRlcyA9IHRoaXMudnJmU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICAgIHRoaXMudnJmU2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBWUkYga2V5c2hhcmUgYnl0ZXMgKENCT1IgVnJmS2V5c2hhcmUpIG9uY2UgdGhlIERLRyBpcyBjb21wbGV0ZS5cbiAgICogVGhpcyBidWZmZXIgaXMgcHJpdmF0ZSBrZXkgbWF0ZXJpYWwuXG4gICAqL1xuICBnZXRLZXlTaGFyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBrZXkgc2hhcmUsIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5U2hhcmVCdWZmO1xuICB9XG5cbiAgLyoqIDMyLWJ5dGUgY29tcHJlc3NlZCBSaXN0cmV0dG8gVlJGIHB1YmxpYyBrZXksIGF2YWlsYWJsZSBvbmNlIHRoZSBES0cgaXMgY29tcGxldGUuICovXG4gIGdldFB1YmxpY0tleSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5wdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBwdWJsaWMga2V5LCBWUkYgREtHIGlzIG5vdCBjb21wbGV0ZSB5ZXQuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnB1YmxpY0tleTtcbiAgfVxuXG4gIC8qKiAzMi1ieXRlIFZSRiBrZXkgaWRlbnRpZmllciwgYXZhaWxhYmxlIG9uY2UgdGhlIERLRyBpcyBjb21wbGV0ZS4gKi9cbiAgZ2V0S2V5SWQoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMua2V5SWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBrZXkgaWQsIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5SWQ7XG4gIH1cblxuICAvKiogMzItYnl0ZSBWUkYgcm9vdCBjaGFpbiBjb2RlLCBhdmFpbGFibGUgb25jZSB0aGUgREtHIGlzIGNvbXBsZXRlLiAqL1xuICBnZXRSb290Q2hhaW5Db2RlKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLnJvb3RDaGFpbkNvZGUpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCByb290IGNoYWluIGNvZGUsIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucm9vdENoYWluQ29kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgc2Vzc2lvbiBsYXRlci5cbiAgICpcbiAgICogVGhlIHJldHVybmVkIHNlc3Npb24gYnl0ZXMgYXJlIHNlY3JldCBrZXkgbWF0ZXJpYWwg4oCUIHRoZXkgY2FycnkgdGhpcyBwYXJ0eSdzXG4gICAqIHNlY3JldCBwb2x5bm9taWFsIHNoYXJlLiBUaGV5IG11c3QgbmV2ZXIgYmUgbG9nZ2VkIG9yIHBlcnNpc3RlZCBpbiB0aGUgY2xlYXI7XG4gICAqIHRoZSBjYWxsZXIgZW5jcnlwdHMgdGhlbSBleGFjdGx5IGxpa2UgdGhlIGtleSBzaGFyZSBpdHNlbGYuXG4gICAqL1xuICBnZXRTZXNzaW9uRGF0YSgpOiBWcmZEa2dTZXNzaW9uRGF0YSB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGE6IFZyZkRrZ1Nlc3Npb25EYXRhID0ge1xuICAgICAgdnJmU2Vzc2lvbkJ5dGVzOiB0aGlzLnZyZlNlc3Npb25CeXRlcyxcbiAgICAgIHZyZlN0YXRlOiB0aGlzLnZyZlN0YXRlLFxuICAgIH07XG4gICAgaWYgKHRoaXMua2V5U2hhcmVCdWZmKSB7XG4gICAgICBzZXNzaW9uRGF0YS5rZXlTaGFyZUJ1ZmYgPSB0aGlzLmtleVNoYXJlQnVmZjtcbiAgICB9XG4gICAgcmV0dXJuIHNlc3Npb25EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgYSBWUkYgREtHIHNlc3Npb24gZnJvbSBwcmV2aW91cyBzZXNzaW9uIGRhdGEuXG4gICAqIE5vdGU6IFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBSb3VuZCAxIGFzIHRoYXQncyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UuXG4gICAqIFRoZSByb3VuZCBzdGF0ZSBpcyByZS1kZXJpdmVkIGZyb20gdGhlIHdhc20gc2Vzc2lvbiBieXRlcywgbm90IHRydXN0ZWQgZnJvbSB0aGVcbiAgICogY2FsbGVyLXN1cHBsaWVkIGVudW0sIHNvIGEgdGFtcGVyZWQgYHZyZlN0YXRlYCBjYW5ub3Qgc3RlZXIgdGhlIHByb3RvY29sLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlc3RvcmVTZXNzaW9uKFxuICAgIG46IG51bWJlcixcbiAgICB0OiBudW1iZXIsXG4gICAgcGFydHlJZHg6IG51bWJlcixcbiAgICBzZXNzaW9uRGF0YTogVnJmRGtnU2Vzc2lvbkRhdGEsXG4gICAgc2VlZD86IEJ1ZmZlcixcbiAgICB2cmZXYXNtPzogQnVuZGxlclZyZldhc21lclxuICApOiBQcm9taXNlPFZyZkRrZz4ge1xuICAgIGNvbnN0IHZyZkRrZyA9IG5ldyBWcmZEa2cobiwgdCwgcGFydHlJZHgsIHNlZWQsIHZyZldhc20pO1xuICAgIGlmICghdnJmRGtnLnZyZldhc20pIHtcbiAgICAgIGF3YWl0IHZyZkRrZy5sb2FkVnJmV2FzbSgpO1xuICAgIH1cbiAgICB2cmZEa2cudnJmU2Vzc2lvbkJ5dGVzID0gc2Vzc2lvbkRhdGEudnJmU2Vzc2lvbkJ5dGVzO1xuICAgIHZyZkRrZy5fcmVzdG9yZVNlc3Npb24oKTtcbiAgICB2cmZEa2cuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICBpZiAoc2Vzc2lvbkRhdGEua2V5U2hhcmVCdWZmKSB7XG4gICAgICB2cmZEa2cua2V5U2hhcmVCdWZmID0gc2Vzc2lvbkRhdGEua2V5U2hhcmVCdWZmO1xuICAgIH1cbiAgICByZXR1cm4gdnJmRGtnO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,YAAY,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DklsVrfUtils = exports.DklsVrfTypes = exports.DklsVrf = void 0;
|
|
37
|
+
exports.DklsVrf = __importStar(require("./dkg"));
|
|
38
|
+
exports.DklsVrfTypes = __importStar(require("./types"));
|
|
39
|
+
exports.DklsVrfUtils = __importStar(require("./util"));
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2RrbHMtdnJmL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFpQztBQUNqQyx3REFBd0M7QUFDeEMsdURBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgRGtsc1ZyZiBmcm9tICcuL2RrZyc7XG5leHBvcnQgKiBhcyBEa2xzVnJmVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBEa2xzVnJmVXRpbHMgZnJvbSAnLi91dGlsJztcbiJdfQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* States of the VRF DKG state machine: a two-round, commit-then-open distributed
|
|
3
|
+
* key generation. Kept separate from `ecdsa-dkls`'s `DkgState` because the round
|
|
4
|
+
* counts differ (2 vs 4).
|
|
5
|
+
*
|
|
6
|
+
* The wasm session bytes embed a round tag (`Init` / `WaitMsg1` / `WaitMsg2` /
|
|
7
|
+
* `{Share: …}`); `VrfDkg` re-derives this state from the bytes rather than
|
|
8
|
+
* trusting a caller-supplied value.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum VrfDkgState {
|
|
11
|
+
Uninitialized = 0,
|
|
12
|
+
/** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
|
|
13
|
+
Round1 = 1,
|
|
14
|
+
/** Openings created and broadcast; waiting for the other parties' VrfKeygenMsg2. */
|
|
15
|
+
Round2 = 2,
|
|
16
|
+
Complete = 3,
|
|
17
|
+
InvalidState = 4
|
|
18
|
+
}
|
|
19
|
+
export interface VrfDkgSessionData {
|
|
20
|
+
/**
|
|
21
|
+
* Serialized wasm session. Secret key material — it carries the party's
|
|
22
|
+
* secret polynomial share. Never log it or persist it in the clear.
|
|
23
|
+
*/
|
|
24
|
+
vrfSessionBytes: Uint8Array;
|
|
25
|
+
vrfState: VrfDkgState;
|
|
26
|
+
keyShareBuff?: Buffer;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,oBAAY,WAAW;IACrB,aAAa,IAAI;IACjB,sFAAsF;IACtF,MAAM,IAAA;IACN,oFAAoF;IACpF,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,YAAY,IAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,eAAe,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VrfDkgState = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* States of the VRF DKG state machine: a two-round, commit-then-open distributed
|
|
6
|
+
* key generation. Kept separate from `ecdsa-dkls`'s `DkgState` because the round
|
|
7
|
+
* counts differ (2 vs 4).
|
|
8
|
+
*
|
|
9
|
+
* The wasm session bytes embed a round tag (`Init` / `WaitMsg1` / `WaitMsg2` /
|
|
10
|
+
* `{Share: …}`); `VrfDkg` re-derives this state from the bytes rather than
|
|
11
|
+
* trusting a caller-supplied value.
|
|
12
|
+
*/
|
|
13
|
+
var VrfDkgState;
|
|
14
|
+
(function (VrfDkgState) {
|
|
15
|
+
VrfDkgState[VrfDkgState["Uninitialized"] = 0] = "Uninitialized";
|
|
16
|
+
/** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
|
|
17
|
+
VrfDkgState[VrfDkgState["Round1"] = 1] = "Round1";
|
|
18
|
+
/** Openings created and broadcast; waiting for the other parties' VrfKeygenMsg2. */
|
|
19
|
+
VrfDkgState[VrfDkgState["Round2"] = 2] = "Round2";
|
|
20
|
+
VrfDkgState[VrfDkgState["Complete"] = 3] = "Complete";
|
|
21
|
+
VrfDkgState[VrfDkgState["InvalidState"] = 4] = "InvalidState";
|
|
22
|
+
})(VrfDkgState || (exports.VrfDkgState = VrfDkgState = {}));
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2RrbHMtdnJmL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsSUFBWSxXQVFYO0FBUkQsV0FBWSxXQUFXO0lBQ3JCLCtEQUFpQixDQUFBO0lBQ2pCLHNGQUFzRjtJQUN0RixpREFBTSxDQUFBO0lBQ04sb0ZBQW9GO0lBQ3BGLGlEQUFNLENBQUE7SUFDTixxREFBUSxDQUFBO0lBQ1IsNkRBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxXQUFXLDJCQUFYLFdBQVcsUUFRdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YXRlcyBvZiB0aGUgVlJGIERLRyBzdGF0ZSBtYWNoaW5lOiBhIHR3by1yb3VuZCwgY29tbWl0LXRoZW4tb3BlbiBkaXN0cmlidXRlZFxuICoga2V5IGdlbmVyYXRpb24uIEtlcHQgc2VwYXJhdGUgZnJvbSBgZWNkc2EtZGtsc2AncyBgRGtnU3RhdGVgIGJlY2F1c2UgdGhlIHJvdW5kXG4gKiBjb3VudHMgZGlmZmVyICgyIHZzIDQpLlxuICpcbiAqIFRoZSB3YXNtIHNlc3Npb24gYnl0ZXMgZW1iZWQgYSByb3VuZCB0YWcgKGBJbml0YCAvIGBXYWl0TXNnMWAgLyBgV2FpdE1zZzJgIC9cbiAqIGB7U2hhcmU6IOKApn1gKTsgYFZyZkRrZ2AgcmUtZGVyaXZlcyB0aGlzIHN0YXRlIGZyb20gdGhlIGJ5dGVzIHJhdGhlciB0aGFuXG4gKiB0cnVzdGluZyBhIGNhbGxlci1zdXBwbGllZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGVudW0gVnJmRGtnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgLyoqIENvbW1pdG1lbnQgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMS4gKi9cbiAgUm91bmQxLFxuICAvKiogT3BlbmluZ3MgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMi4gKi9cbiAgUm91bmQyLFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZyZkRrZ1Nlc3Npb25EYXRhIHtcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZWQgd2FzbSBzZXNzaW9uLiBTZWNyZXQga2V5IG1hdGVyaWFsIOKAlCBpdCBjYXJyaWVzIHRoZSBwYXJ0eSdzXG4gICAqIHNlY3JldCBwb2x5bm9taWFsIHNoYXJlLiBOZXZlciBsb2cgaXQgb3IgcGVyc2lzdCBpdCBpbiB0aGUgY2xlYXIuXG4gICAqL1xuICB2cmZTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIHZyZlN0YXRlOiBWcmZEa2dTdGF0ZTtcbiAga2V5U2hhcmVCdWZmPzogQnVmZmVyO1xufVxuIl19
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Buffer } from 'buffer';
|
|
2
|
+
import { VrfDkg } from './dkg';
|
|
3
|
+
/**
|
|
4
|
+
* Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
|
|
5
|
+
* returns the three completed VrfDkg sessions, mirroring `generateDKGKeyShares` from
|
|
6
|
+
* `ecdsa-dkls/util.ts` so VRF tests read like the existing DKLS ones.
|
|
7
|
+
*/
|
|
8
|
+
export declare function generateVrfDKGKeyShares(seedUser?: Buffer, seedBackup?: Buffer, seedBitgo?: Buffer): Promise<[VrfDkg, VrfDkg, VrfDkg]>;
|
|
9
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CA0CnC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateVrfDKGKeyShares = generateVrfDKGKeyShares;
|
|
4
|
+
const dkg_1 = require("./dkg");
|
|
5
|
+
/**
|
|
6
|
+
* Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
|
|
7
|
+
* returns the three completed VrfDkg sessions, mirroring `generateDKGKeyShares` from
|
|
8
|
+
* `ecdsa-dkls/util.ts` so VRF tests read like the existing DKLS ones.
|
|
9
|
+
*/
|
|
10
|
+
async function generateVrfDKGKeyShares(seedUser, seedBackup, seedBitgo) {
|
|
11
|
+
const user = new dkg_1.VrfDkg(3, 2, 0, seedUser);
|
|
12
|
+
const backup = new dkg_1.VrfDkg(3, 2, 1, seedBackup);
|
|
13
|
+
const bitgo = new dkg_1.VrfDkg(3, 2, 2, seedBitgo);
|
|
14
|
+
// #region round 1
|
|
15
|
+
const userRound1Messages = await user.initDkg();
|
|
16
|
+
const backupRound1Messages = await backup.initDkg();
|
|
17
|
+
const bitgoRound1Messages = await bitgo.initDkg();
|
|
18
|
+
const bitgoRound2Messages = await bitgo.handleIncomingMessages({
|
|
19
|
+
p2pMessages: [],
|
|
20
|
+
broadcastMessages: [...userRound1Messages.broadcastMessages, ...backupRound1Messages.broadcastMessages],
|
|
21
|
+
});
|
|
22
|
+
// #endregion
|
|
23
|
+
// #region round 2
|
|
24
|
+
const userRound2Messages = await user.handleIncomingMessages({
|
|
25
|
+
p2pMessages: [],
|
|
26
|
+
broadcastMessages: [...bitgoRound1Messages.broadcastMessages, ...backupRound1Messages.broadcastMessages],
|
|
27
|
+
});
|
|
28
|
+
const backupRound2Messages = await backup.handleIncomingMessages({
|
|
29
|
+
p2pMessages: [],
|
|
30
|
+
broadcastMessages: [...userRound1Messages.broadcastMessages, ...bitgoRound1Messages.broadcastMessages],
|
|
31
|
+
});
|
|
32
|
+
await bitgo.handleIncomingMessages({
|
|
33
|
+
p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
|
|
34
|
+
.flatMap((m) => m.p2pMessages)
|
|
35
|
+
.filter((m) => m.to === 2),
|
|
36
|
+
broadcastMessages: [],
|
|
37
|
+
});
|
|
38
|
+
await user.handleIncomingMessages({
|
|
39
|
+
p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
|
|
40
|
+
.flatMap((m) => m.p2pMessages)
|
|
41
|
+
.filter((m) => m.to === 0),
|
|
42
|
+
broadcastMessages: [],
|
|
43
|
+
});
|
|
44
|
+
await backup.handleIncomingMessages({
|
|
45
|
+
p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
|
|
46
|
+
.flatMap((m) => m.p2pMessages)
|
|
47
|
+
.filter((m) => m.to === 1),
|
|
48
|
+
broadcastMessages: [],
|
|
49
|
+
});
|
|
50
|
+
return [user, backup, bitgo];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZGtscy12cmYvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDBEQThDQztBQXJERCwrQkFBK0I7QUFFL0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsUUFBaUIsRUFDakIsVUFBbUIsRUFDbkIsU0FBa0I7SUFFbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0Msa0JBQWtCO0lBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDN0QsV0FBVyxFQUFFLEVBQUU7UUFDZixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUN4RyxDQUFDLENBQUM7SUFDSCxhQUFhO0lBRWIsa0JBQWtCO0lBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDM0QsV0FBVyxFQUFFLEVBQUU7UUFDZixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUN6RyxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQy9ELFdBQVcsRUFBRSxFQUFFO1FBQ2YsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7S0FDdkcsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDakMsV0FBVyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUM7YUFDekUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsaUJBQWlCLEVBQUUsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUNoQyxXQUFXLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQzthQUN6RSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7YUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixpQkFBaUIsRUFBRSxFQUFFO0tBQ3RCLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQ2xDLFdBQVcsRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDO2FBQ3pFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzthQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGlCQUFpQixFQUFFLEVBQUU7S0FDdEIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBWcmZEa2cgfSBmcm9tICcuL2RrZyc7XG5cbi8qKlxuICogUnVucyBhIGxvY2FsIDItb2YtMyBWUkYgREtHIGFjcm9zcyB1c2VyICgwKSwgYmFja3VwICgxKSBhbmQgYml0Z28gKDIpIHBhcnRpZXMgYW5kXG4gKiByZXR1cm5zIHRoZSB0aHJlZSBjb21wbGV0ZWQgVnJmRGtnIHNlc3Npb25zLCBtaXJyb3JpbmcgYGdlbmVyYXRlREtHS2V5U2hhcmVzYCBmcm9tXG4gKiBgZWNkc2EtZGtscy91dGlsLnRzYCBzbyBWUkYgdGVzdHMgcmVhZCBsaWtlIHRoZSBleGlzdGluZyBES0xTIG9uZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVZyZkRLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBCdWZmZXIsXG4gIHNlZWRCYWNrdXA/OiBCdWZmZXIsXG4gIHNlZWRCaXRnbz86IEJ1ZmZlclxuKTogUHJvbWlzZTxbVnJmRGtnLCBWcmZEa2csIFZyZkRrZ10+IHtcbiAgY29uc3QgdXNlciA9IG5ldyBWcmZEa2coMywgMiwgMCwgc2VlZFVzZXIpO1xuICBjb25zdCBiYWNrdXAgPSBuZXcgVnJmRGtnKDMsIDIsIDEsIHNlZWRCYWNrdXApO1xuICBjb25zdCBiaXRnbyA9IG5ldyBWcmZEa2coMywgMiwgMiwgc2VlZEJpdGdvKTtcbiAgLy8gI3JlZ2lvbiByb3VuZCAxXG4gIGNvbnN0IHVzZXJSb3VuZDFNZXNzYWdlcyA9IGF3YWl0IHVzZXIuaW5pdERrZygpO1xuICBjb25zdCBiYWNrdXBSb3VuZDFNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cC5pbml0RGtnKCk7XG4gIGNvbnN0IGJpdGdvUm91bmQxTWVzc2FnZXMgPSBhd2FpdCBiaXRnby5pbml0RGtnKCk7XG4gIGNvbnN0IGJpdGdvUm91bmQyTWVzc2FnZXMgPSBhd2FpdCBiaXRnby5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi51c2VyUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsIC4uLmJhY2t1cFJvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzXSxcbiAgfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJvdW5kIDJcbiAgY29uc3QgdXNlclJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi5iaXRnb1JvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLCAuLi5iYWNrdXBSb3VuZDFNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlc10sXG4gIH0pO1xuICBjb25zdCBiYWNrdXBSb3VuZDJNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi51c2VyUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsIC4uLmJpdGdvUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNdLFxuICB9KTtcbiAgYXdhaXQgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtiaXRnb1JvdW5kMk1lc3NhZ2VzLCB1c2VyUm91bmQyTWVzc2FnZXMsIGJhY2t1cFJvdW5kMk1lc3NhZ2VzXVxuICAgICAgLmZsYXRNYXAoKG0pID0+IG0ucDJwTWVzc2FnZXMpXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLnRvID09PSAyKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICBhd2FpdCB1c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDJNZXNzYWdlcywgdXNlclJvdW5kMk1lc3NhZ2VzLCBiYWNrdXBSb3VuZDJNZXNzYWdlc11cbiAgICAgIC5mbGF0TWFwKChtKSA9PiBtLnAycE1lc3NhZ2VzKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS50byA9PT0gMCksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgYXdhaXQgYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDJNZXNzYWdlcywgdXNlclJvdW5kMk1lc3NhZ2VzLCBiYWNrdXBSb3VuZDJNZXNzYWdlc11cbiAgICAgIC5mbGF0TWFwKChtKSA9PiBtLnAycE1lc3NhZ2VzKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS50byA9PT0gMSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cbiJdfQ==
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { KeygenSession, Keyshare } from '@silencelaboratories/dkls-wasm-ll-node';
|
|
2
|
+
import type { VrfKeygenSession as DklsVrfKeygenSession } from '@silencelaboratories/dkls-wasm-ll-vrf-node';
|
|
3
|
+
import type { VrfKeygenSession as DklsVrfWebKeygenSession } from '@silencelaboratories/dkls-wasm-ll-vrf-web';
|
|
2
4
|
import { DeserializedBroadcastMessage, DeserializedMessages, DkgState, RetrofitData } from './types';
|
|
3
5
|
type NodeWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-node');
|
|
4
6
|
type WebWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-web');
|
|
5
7
|
type BundlerWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-bundler');
|
|
6
8
|
type DklsWasm = NodeWasmer | WebWasmer | BundlerWasmer;
|
|
9
|
+
export type { DklsVrfKeygenSession, DklsVrfWebKeygenSession };
|
|
7
10
|
export interface DkgSessionData {
|
|
8
11
|
dkgSessionBytes: Uint8Array;
|
|
9
12
|
dkgState: DkgState;
|
|
@@ -58,5 +61,4 @@ export declare class Dkg {
|
|
|
58
61
|
*/
|
|
59
62
|
static restoreSession(n: number, t: number, partyIdx: number, sessionData: DkgSessionData, seed?: Buffer, retrofitData?: RetrofitData, dklsWasm?: BundlerWasmer): Promise<Dkg>;
|
|
60
63
|
}
|
|
61
|
-
export {};
|
|
62
64
|
//# sourceMappingURL=dkg.d.ts.map
|