@bitgo-beta/sdk-lib-mpc 8.2.0-beta.203 → 8.2.0-beta.2030
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/curves/ed25519.d.ts +0 -1
- package/dist/src/curves/ed25519.d.ts.map +1 -1
- package/dist/src/curves/ed25519.js +12 -12
- package/dist/src/curves/ed25519Bip32HdTree.js +14 -14
- package/dist/src/curves/index.js +6 -2
- package/dist/src/curves/secp256k1.d.ts +0 -1
- package/dist/src/curves/secp256k1.d.ts.map +1 -1
- package/dist/src/curves/secp256k1.js +22 -38
- package/dist/src/curves/secp256k1Bip32HdTree.js +10 -10
- package/dist/src/curves/types.d.ts +2 -3
- package/dist/src/curves/types.d.ts.map +1 -1
- package/dist/src/curves/util.d.ts +2 -0
- package/dist/src/curves/util.d.ts.map +1 -1
- package/dist/src/curves/util.js +34 -3
- package/dist/src/hashCommitment.d.ts +0 -1
- package/dist/src/hashCommitment.d.ts.map +1 -1
- package/dist/src/hashCommitment.js +7 -8
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -10
- package/dist/src/openssl/index.js +6 -2
- package/dist/src/openssl/openssl.d.ts +1 -2
- package/dist/src/openssl/openssl.d.ts.map +1 -1
- package/dist/src/openssl/openssl.js +4 -12
- package/dist/src/safePrime.d.ts +3 -0
- package/dist/src/safePrime.d.ts.map +1 -0
- package/dist/src/safePrime.js +19 -0
- package/dist/src/schnorrProof.d.ts +0 -1
- package/dist/src/schnorrProof.d.ts.map +1 -1
- package/dist/src/schnorrProof.js +8 -9
- package/dist/src/shamir/index.js +6 -2
- package/dist/src/shamir/shamir.js +2 -2
- package/dist/src/shamir/types.d.ts +1 -1
- package/dist/src/shamir/types.d.ts.map +1 -1
- 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/index.js +23 -9
- package/dist/src/tss/ecdsa/paillierproof.js +10 -10
- package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +108 -118
- package/dist/src/tss/ecdsa/types.d.ts +28 -17
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/types.js +29 -31
- package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
- package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/zkVProof.js +9 -10
- package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +69 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.js +268 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts +64 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dkg.js +334 -0
- package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
- package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dsg.js +271 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/index.js +42 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts +128 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/types.js +175 -0
- package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
- package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/util.js +276 -0
- package/dist/src/tss/eddsa-mps/commsLayer.d.ts +30 -0
- package/dist/src/tss/eddsa-mps/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/commsLayer.js +96 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts +109 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/dkg.js +303 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts +96 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/dsg.js +346 -0
- package/dist/src/tss/eddsa-mps/index.d.ts +7 -0
- package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/index.js +42 -0
- package/dist/src/tss/eddsa-mps/types.d.ts +76 -0
- package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/types.js +105 -0
- package/dist/src/tss/eddsa-mps/util.d.ts +33 -0
- package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/util.js +94 -0
- package/dist/src/tss/index.d.ts +4 -0
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +10 -2
- 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/dkg.d.ts +105 -0
- package/dist/src/tss/redpallas-mps/dkg.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/dkg.js +290 -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 +7 -0
- package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/index.js +42 -0
- package/dist/src/tss/redpallas-mps/types.d.ts +85 -0
- package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/types.js +112 -0
- package/dist/src/tss/redpallas-mps/util.d.ts +46 -0
- package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/util.js +150 -0
- package/dist/src/types.d.ts +0 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/util.d.ts +0 -1
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +21 -22
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +42 -5
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -340
- package/dist/src/openssl/opensslbytes.d.ts +0 -4
- package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
- package/dist/src/openssl/opensslbytes.js +0 -20
|
@@ -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,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
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);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
11
15
|
}) : function(o, v) {
|
|
12
16
|
o["default"] = v;
|
|
13
17
|
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
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
|
+
})();
|
|
21
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
36
|
exports.minModulusBitLength = exports.EcdsaZkVProof = exports.EcdsaPaillierProof = exports.EcdsaRangeProof = exports.EcdsaTypes = void 0;
|
|
23
37
|
exports.EcdsaTypes = __importStar(require("./types"));
|
|
@@ -25,4 +39,4 @@ exports.EcdsaRangeProof = __importStar(require("./rangeproof"));
|
|
|
25
39
|
exports.EcdsaPaillierProof = __importStar(require("./paillierproof"));
|
|
26
40
|
exports.EcdsaZkVProof = __importStar(require("./zkVProof"));
|
|
27
41
|
exports.minModulusBitLength = 3072;
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFzQztBQUN0QyxnRUFBZ0Q7QUFDaEQsc0VBQXNEO0FBQ3RELDREQUE0QztBQUUvQixRQUFBLG1CQUFtQixHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIEVjZHNhVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBFY2RzYVJhbmdlUHJvb2YgZnJvbSAnLi9yYW5nZXByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhUGFpbGxpZXJQcm9vZiBmcm9tICcuL3BhaWxsaWVycHJvb2YnO1xuZXhwb3J0ICogYXMgRWNkc2Faa1ZQcm9vZiBmcm9tICcuL3prVlByb29mJztcblxuZXhwb3J0IGNvbnN0IG1pbk1vZHVsdXNCaXRMZW5ndGggPSAzMDcyO1xuIl19
|