@brightchain/brightchain-lib 0.29.17 → 0.29.21
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/package.json +1 -1
- package/src/browser.d.ts +12 -0
- package/src/browser.d.ts.map +1 -1
- package/src/browser.js +16 -1
- package/src/browser.js.map +1 -1
- package/src/lib/errors/ledgerError.d.ts +7 -1
- package/src/lib/errors/ledgerError.d.ts.map +1 -1
- package/src/lib/errors/ledgerError.js +6 -0
- package/src/lib/errors/ledgerError.js.map +1 -1
- package/src/lib/interfaces/ledger/authorizedSigner.d.ts +17 -0
- package/src/lib/interfaces/ledger/authorizedSigner.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/authorizedSigner.js +11 -0
- package/src/lib/interfaces/ledger/authorizedSigner.js.map +1 -0
- package/src/lib/interfaces/ledger/governanceAction.d.ts +46 -0
- package/src/lib/interfaces/ledger/governanceAction.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/governanceAction.js +22 -0
- package/src/lib/interfaces/ledger/governanceAction.js.map +1 -0
- package/src/lib/interfaces/ledger/governancePayload.d.ts +19 -0
- package/src/lib/interfaces/ledger/governancePayload.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/governancePayload.js +11 -0
- package/src/lib/interfaces/ledger/governancePayload.js.map +1 -0
- package/src/lib/interfaces/ledger/index.d.ts +8 -0
- package/src/lib/interfaces/ledger/index.d.ts.map +1 -1
- package/src/lib/interfaces/ledger/index.js +10 -0
- package/src/lib/interfaces/ledger/index.js.map +1 -1
- package/src/lib/interfaces/ledger/quorumPolicy.d.ts +19 -0
- package/src/lib/interfaces/ledger/quorumPolicy.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/quorumPolicy.js +18 -0
- package/src/lib/interfaces/ledger/quorumPolicy.js.map +1 -0
- package/src/lib/interfaces/ledger/signerRole.d.ts +14 -0
- package/src/lib/interfaces/ledger/signerRole.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/signerRole.js +18 -0
- package/src/lib/interfaces/ledger/signerRole.js.map +1 -0
- package/src/lib/interfaces/ledger/signerStatus.d.ts +15 -0
- package/src/lib/interfaces/ledger/signerStatus.d.ts.map +1 -0
- package/src/lib/interfaces/ledger/signerStatus.js +19 -0
- package/src/lib/interfaces/ledger/signerStatus.js.map +1 -0
- package/src/lib/interfaces/ledger/validationResult.d.ts +1 -1
- package/src/lib/interfaces/ledger/validationResult.d.ts.map +1 -1
- package/src/lib/ledger/authorizedSignerSet.d.ts +47 -0
- package/src/lib/ledger/authorizedSignerSet.d.ts.map +1 -0
- package/src/lib/ledger/authorizedSignerSet.js +287 -0
- package/src/lib/ledger/authorizedSignerSet.js.map +1 -0
- package/src/lib/ledger/browserSignatureVerifier.d.ts +18 -0
- package/src/lib/ledger/browserSignatureVerifier.d.ts.map +1 -0
- package/src/lib/ledger/browserSignatureVerifier.js +35 -0
- package/src/lib/ledger/browserSignatureVerifier.js.map +1 -0
- package/src/lib/ledger/governancePayloadSerializer.d.ts +70 -0
- package/src/lib/ledger/governancePayloadSerializer.d.ts.map +1 -0
- package/src/lib/ledger/governancePayloadSerializer.js +499 -0
- package/src/lib/ledger/governancePayloadSerializer.js.map +1 -0
- package/src/lib/ledger/ledger.d.ts +58 -8
- package/src/lib/ledger/ledger.d.ts.map +1 -1
- package/src/lib/ledger/ledger.js +217 -45
- package/src/lib/ledger/ledger.js.map +1 -1
- package/src/lib/ledger/ledgerChainValidator.d.ts +30 -4
- package/src/lib/ledger/ledgerChainValidator.d.ts.map +1 -1
- package/src/lib/ledger/ledgerChainValidator.js +155 -4
- package/src/lib/ledger/ledgerChainValidator.js.map +1 -1
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview In-memory state tracker for the authorized signer set.
|
|
4
|
+
*
|
|
5
|
+
* Maintains the current set of authorized signers, their roles, lifecycle
|
|
6
|
+
* statuses, and metadata. Reconstructed during load() by replaying
|
|
7
|
+
* governance entries from genesis to head.
|
|
8
|
+
*
|
|
9
|
+
* @see Design: AuthorizedSignerSet
|
|
10
|
+
* @see Requirements 12.2-12.8, 14.1-14.7, 15.1-15.5, 17.1-17.9, 18.1-18.8
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.AuthorizedSignerSet = void 0;
|
|
14
|
+
const governanceAction_1 = require("../interfaces/ledger/governanceAction");
|
|
15
|
+
const quorumPolicy_1 = require("../interfaces/ledger/quorumPolicy");
|
|
16
|
+
const signerRole_1 = require("../interfaces/ledger/signerRole");
|
|
17
|
+
const signerStatus_1 = require("../interfaces/ledger/signerStatus");
|
|
18
|
+
const ledgerError_1 = require("../errors/ledgerError");
|
|
19
|
+
/**
|
|
20
|
+
* Convert a Uint8Array public key to a hex string for use as a Map key.
|
|
21
|
+
*/
|
|
22
|
+
function pubKeyToHex(publicKey) {
|
|
23
|
+
return Array.from(publicKey)
|
|
24
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
25
|
+
.join('');
|
|
26
|
+
}
|
|
27
|
+
class AuthorizedSignerSet {
|
|
28
|
+
signers;
|
|
29
|
+
_quorumPolicy;
|
|
30
|
+
_activeAdminCount;
|
|
31
|
+
constructor(initialSigners, initialQuorum) {
|
|
32
|
+
this.signers = new Map();
|
|
33
|
+
this._activeAdminCount = 0;
|
|
34
|
+
for (const signer of initialSigners) {
|
|
35
|
+
const hex = pubKeyToHex(signer.publicKey);
|
|
36
|
+
this.signers.set(hex, {
|
|
37
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
38
|
+
role: signer.role,
|
|
39
|
+
status: signer.status,
|
|
40
|
+
metadata: new Map(signer.metadata),
|
|
41
|
+
});
|
|
42
|
+
if (signer.status === signerStatus_1.SignerStatus.Active &&
|
|
43
|
+
signer.role === signerRole_1.SignerRole.Admin) {
|
|
44
|
+
this._activeAdminCount++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
this._quorumPolicy = { ...initialQuorum };
|
|
48
|
+
}
|
|
49
|
+
/** Check if a public key is authorized to append (active + admin or writer). */
|
|
50
|
+
canAppend(publicKey) {
|
|
51
|
+
const signer = this.signers.get(pubKeyToHex(publicKey));
|
|
52
|
+
if (!signer)
|
|
53
|
+
return false;
|
|
54
|
+
return (signer.status === signerStatus_1.SignerStatus.Active &&
|
|
55
|
+
(signer.role === signerRole_1.SignerRole.Admin || signer.role === signerRole_1.SignerRole.Writer));
|
|
56
|
+
}
|
|
57
|
+
/** Check if a public key is an active admin. */
|
|
58
|
+
isActiveAdmin(publicKey) {
|
|
59
|
+
const signer = this.signers.get(pubKeyToHex(publicKey));
|
|
60
|
+
if (!signer)
|
|
61
|
+
return false;
|
|
62
|
+
return (signer.status === signerStatus_1.SignerStatus.Active &&
|
|
63
|
+
signer.role === signerRole_1.SignerRole.Admin);
|
|
64
|
+
}
|
|
65
|
+
/** Get signer info by public key, or undefined if not found. */
|
|
66
|
+
getSigner(publicKey) {
|
|
67
|
+
return this.signers.get(pubKeyToHex(publicKey));
|
|
68
|
+
}
|
|
69
|
+
/** Get all signers (all statuses). */
|
|
70
|
+
getAllSigners() {
|
|
71
|
+
return Array.from(this.signers.values());
|
|
72
|
+
}
|
|
73
|
+
/** Get current active admin count. */
|
|
74
|
+
get activeAdminCount() {
|
|
75
|
+
return this._activeAdminCount;
|
|
76
|
+
}
|
|
77
|
+
/** Get current quorum policy. */
|
|
78
|
+
get quorumPolicy() {
|
|
79
|
+
return this._quorumPolicy;
|
|
80
|
+
}
|
|
81
|
+
/** Compute the required number of signatures for governance. */
|
|
82
|
+
get requiredSignatures() {
|
|
83
|
+
switch (this._quorumPolicy.type) {
|
|
84
|
+
case quorumPolicy_1.QuorumType.Unanimous:
|
|
85
|
+
return this._activeAdminCount;
|
|
86
|
+
case quorumPolicy_1.QuorumType.Majority:
|
|
87
|
+
return Math.floor(this._activeAdminCount / 2) + 1;
|
|
88
|
+
case quorumPolicy_1.QuorumType.Threshold:
|
|
89
|
+
return this._quorumPolicy.threshold ?? 1;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Validate and apply a governance action. Throws LedgerError on safety violation. */
|
|
93
|
+
applyAction(action) {
|
|
94
|
+
switch (action.type) {
|
|
95
|
+
case governanceAction_1.GovernanceActionType.AddSigner:
|
|
96
|
+
this.applyAddSigner(action);
|
|
97
|
+
break;
|
|
98
|
+
case governanceAction_1.GovernanceActionType.RemoveSigner:
|
|
99
|
+
this.applyRemoveSigner(action);
|
|
100
|
+
break;
|
|
101
|
+
case governanceAction_1.GovernanceActionType.ChangeRole:
|
|
102
|
+
this.applyChangeRole(action);
|
|
103
|
+
break;
|
|
104
|
+
case governanceAction_1.GovernanceActionType.UpdateQuorum:
|
|
105
|
+
this.applyUpdateQuorum(action);
|
|
106
|
+
break;
|
|
107
|
+
case governanceAction_1.GovernanceActionType.SuspendSigner:
|
|
108
|
+
this.applySuspendSigner(action);
|
|
109
|
+
break;
|
|
110
|
+
case governanceAction_1.GovernanceActionType.ReactivateSigner:
|
|
111
|
+
this.applyReactivateSigner(action);
|
|
112
|
+
break;
|
|
113
|
+
case governanceAction_1.GovernanceActionType.SetMemberData:
|
|
114
|
+
this.applySetMemberData(action);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** Verify that a set of cosigner public keys satisfies the current quorum. */
|
|
119
|
+
verifyQuorum(signerPublicKeys) {
|
|
120
|
+
let validCount = 0;
|
|
121
|
+
for (const pk of signerPublicKeys) {
|
|
122
|
+
if (this.isActiveAdmin(pk)) {
|
|
123
|
+
validCount++;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return validCount >= this.requiredSignatures;
|
|
127
|
+
}
|
|
128
|
+
/** Clone the current state (for speculative validation). */
|
|
129
|
+
clone() {
|
|
130
|
+
const clonedSigners = [];
|
|
131
|
+
for (const signer of this.signers.values()) {
|
|
132
|
+
clonedSigners.push({
|
|
133
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
134
|
+
role: signer.role,
|
|
135
|
+
status: signer.status,
|
|
136
|
+
metadata: new Map(signer.metadata),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
const cloned = new AuthorizedSignerSet(clonedSigners, {
|
|
140
|
+
...this._quorumPolicy,
|
|
141
|
+
});
|
|
142
|
+
return cloned;
|
|
143
|
+
}
|
|
144
|
+
// ── Private action handlers ─────────────────────────────────────
|
|
145
|
+
applyAddSigner(action) {
|
|
146
|
+
const hex = pubKeyToHex(action.publicKey);
|
|
147
|
+
const existing = this.signers.get(hex);
|
|
148
|
+
if (existing && existing.status !== signerStatus_1.SignerStatus.Retired) {
|
|
149
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidStateTransition, `Signer ${hex} already exists and is not retired`);
|
|
150
|
+
}
|
|
151
|
+
const newSigner = {
|
|
152
|
+
publicKey: new Uint8Array(action.publicKey),
|
|
153
|
+
role: action.role,
|
|
154
|
+
status: signerStatus_1.SignerStatus.Active,
|
|
155
|
+
metadata: new Map(action.metadata ?? []),
|
|
156
|
+
};
|
|
157
|
+
this.signers.set(hex, newSigner);
|
|
158
|
+
if (action.role === signerRole_1.SignerRole.Admin) {
|
|
159
|
+
this._activeAdminCount++;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
applyRemoveSigner(action) {
|
|
163
|
+
const hex = pubKeyToHex(action.publicKey);
|
|
164
|
+
const signer = this.signers.get(hex);
|
|
165
|
+
if (!signer) {
|
|
166
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidGovernanceTarget, `Signer ${hex} not found`);
|
|
167
|
+
}
|
|
168
|
+
if (signer.status === signerStatus_1.SignerStatus.Retired) {
|
|
169
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidStateTransition, `Signer ${hex} is already retired`);
|
|
170
|
+
}
|
|
171
|
+
// Safety: check if removing an active admin
|
|
172
|
+
if (signer.status === signerStatus_1.SignerStatus.Active &&
|
|
173
|
+
signer.role === signerRole_1.SignerRole.Admin) {
|
|
174
|
+
if (this._activeAdminCount - 1 < 1) {
|
|
175
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, 'Cannot remove the last active admin');
|
|
176
|
+
}
|
|
177
|
+
if (this._activeAdminCount - 1 < this.requiredSignatures) {
|
|
178
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, 'Removing this admin would drop below quorum threshold');
|
|
179
|
+
}
|
|
180
|
+
this._activeAdminCount--;
|
|
181
|
+
}
|
|
182
|
+
this.signers.set(hex, {
|
|
183
|
+
...signer,
|
|
184
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
185
|
+
metadata: new Map(signer.metadata),
|
|
186
|
+
status: signerStatus_1.SignerStatus.Retired,
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
applyChangeRole(action) {
|
|
190
|
+
const hex = pubKeyToHex(action.publicKey);
|
|
191
|
+
const signer = this.signers.get(hex);
|
|
192
|
+
if (!signer || signer.status === signerStatus_1.SignerStatus.Retired) {
|
|
193
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidGovernanceTarget, `Signer ${hex} not found or retired`);
|
|
194
|
+
}
|
|
195
|
+
// Safety: demoting the last active admin
|
|
196
|
+
if (signer.status === signerStatus_1.SignerStatus.Active &&
|
|
197
|
+
signer.role === signerRole_1.SignerRole.Admin &&
|
|
198
|
+
action.newRole !== signerRole_1.SignerRole.Admin) {
|
|
199
|
+
if (this._activeAdminCount - 1 < 1) {
|
|
200
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, 'Cannot demote the last active admin');
|
|
201
|
+
}
|
|
202
|
+
if (this._activeAdminCount - 1 < this.requiredSignatures) {
|
|
203
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, 'Demoting this admin would drop below quorum threshold');
|
|
204
|
+
}
|
|
205
|
+
this._activeAdminCount--;
|
|
206
|
+
}
|
|
207
|
+
else if (signer.status === signerStatus_1.SignerStatus.Active &&
|
|
208
|
+
signer.role !== signerRole_1.SignerRole.Admin &&
|
|
209
|
+
action.newRole === signerRole_1.SignerRole.Admin) {
|
|
210
|
+
this._activeAdminCount++;
|
|
211
|
+
}
|
|
212
|
+
this.signers.set(hex, {
|
|
213
|
+
...signer,
|
|
214
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
215
|
+
metadata: new Map(signer.metadata),
|
|
216
|
+
role: action.newRole,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
applyUpdateQuorum(action) {
|
|
220
|
+
const newPolicy = action.newPolicy;
|
|
221
|
+
if (newPolicy.type === quorumPolicy_1.QuorumType.Threshold) {
|
|
222
|
+
if ((newPolicy.threshold ?? 1) > this._activeAdminCount) {
|
|
223
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, `Threshold ${newPolicy.threshold} exceeds active admin count ${this._activeAdminCount}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
this._quorumPolicy = { ...newPolicy };
|
|
227
|
+
}
|
|
228
|
+
applySuspendSigner(action) {
|
|
229
|
+
const hex = pubKeyToHex(action.publicKey);
|
|
230
|
+
const signer = this.signers.get(hex);
|
|
231
|
+
if (!signer) {
|
|
232
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidGovernanceTarget, `Signer ${hex} not found`);
|
|
233
|
+
}
|
|
234
|
+
if (signer.status !== signerStatus_1.SignerStatus.Active) {
|
|
235
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidStateTransition, `Signer ${hex} is not active (status: ${signer.status})`);
|
|
236
|
+
}
|
|
237
|
+
// Safety: suspending an active admin
|
|
238
|
+
if (signer.role === signerRole_1.SignerRole.Admin) {
|
|
239
|
+
if (this._activeAdminCount - 1 < 1) {
|
|
240
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, 'Cannot suspend the last active admin');
|
|
241
|
+
}
|
|
242
|
+
if (this._activeAdminCount - 1 < this.requiredSignatures) {
|
|
243
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.GovernanceSafetyViolation, 'Suspending this admin would drop below quorum threshold');
|
|
244
|
+
}
|
|
245
|
+
this._activeAdminCount--;
|
|
246
|
+
}
|
|
247
|
+
this.signers.set(hex, {
|
|
248
|
+
...signer,
|
|
249
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
250
|
+
metadata: new Map(signer.metadata),
|
|
251
|
+
status: signerStatus_1.SignerStatus.Suspended,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
applyReactivateSigner(action) {
|
|
255
|
+
const hex = pubKeyToHex(action.publicKey);
|
|
256
|
+
const signer = this.signers.get(hex);
|
|
257
|
+
if (!signer) {
|
|
258
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidGovernanceTarget, `Signer ${hex} not found`);
|
|
259
|
+
}
|
|
260
|
+
if (signer.status !== signerStatus_1.SignerStatus.Suspended) {
|
|
261
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidStateTransition, `Signer ${hex} is not suspended (status: ${signer.status})`);
|
|
262
|
+
}
|
|
263
|
+
this.signers.set(hex, {
|
|
264
|
+
...signer,
|
|
265
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
266
|
+
metadata: new Map(signer.metadata),
|
|
267
|
+
status: signerStatus_1.SignerStatus.Active,
|
|
268
|
+
});
|
|
269
|
+
if (signer.role === signerRole_1.SignerRole.Admin) {
|
|
270
|
+
this._activeAdminCount++;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
applySetMemberData(action) {
|
|
274
|
+
const hex = pubKeyToHex(action.publicKey);
|
|
275
|
+
const signer = this.signers.get(hex);
|
|
276
|
+
if (!signer || signer.status === signerStatus_1.SignerStatus.Retired) {
|
|
277
|
+
throw new ledgerError_1.LedgerError(ledgerError_1.LedgerErrorType.InvalidGovernanceTarget, `Signer ${hex} not found or retired`);
|
|
278
|
+
}
|
|
279
|
+
this.signers.set(hex, {
|
|
280
|
+
...signer,
|
|
281
|
+
publicKey: new Uint8Array(signer.publicKey),
|
|
282
|
+
metadata: new Map(action.metadata),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
exports.AuthorizedSignerSet = AuthorizedSignerSet;
|
|
287
|
+
//# sourceMappingURL=authorizedSignerSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorizedSignerSet.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/authorizedSignerSet.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAGH,4EAG+C;AAC/C,oEAA8E;AAC9E,gEAA6D;AAC7D,oEAAiE;AACjE,uDAAqE;AAErE;;GAEG;AACH,SAAS,WAAW,CAAC,SAAqB;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,MAAa,mBAAmB;IACtB,OAAO,CAAiC;IACxC,aAAa,CAAgB;IAC7B,iBAAiB,CAAS;IAElC,YACE,cAAmC,EACnC,aAA4B;QAE5B,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpB,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;aACnC,CAAC,CAAC;YACH,IACE,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM;gBACrC,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,EAChC,CAAC;gBACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IAC5C,CAAC;IAED,gFAAgF;IAChF,SAAS,CAAC,SAAqB;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM;YACrC,CAAC,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,MAAM,CAAC,CACxE,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,aAAa,CAAC,SAAqB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,OAAO,CACL,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM;YACrC,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,CACjC,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,SAAS,CAAC,SAAqB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,sCAAsC;IACtC,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,sCAAsC;IACtC,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,gEAAgE;IAChE,IAAI,kBAAkB;QACpB,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAChC,KAAK,yBAAU,CAAC,SAAS;gBACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;YAChC,KAAK,yBAAU,CAAC,QAAQ;gBACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACpD,KAAK,yBAAU,CAAC,SAAS;gBACvB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,WAAW,CAAC,MAAyB;QACnC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,uCAAoB,CAAC,SAAS;gBACjC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,uCAAoB,CAAC,YAAY;gBACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,uCAAoB,CAAC,UAAU;gBAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,uCAAoB,CAAC,YAAY;gBACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,uCAAoB,CAAC,aAAa;gBACrC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,uCAAoB,CAAC,gBAAgB;gBACxC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,uCAAoB,CAAC,aAAa;gBACrC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM;QACV,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,YAAY,CAAC,gBAA8B;QACzC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC3B,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC;IAC/C,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACH,MAAM,aAAa,GAAwB,EAAE,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC;gBACjB,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;aACnC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,aAAa,EAAE;YACpD,GAAG,IAAI,CAAC,aAAa;SACtB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mEAAmE;IAE3D,cAAc,CACpB,MAGC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,2BAAY,CAAC,OAAO,EAAE,CAAC;YACzD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,sBAAsB,EACtC,UAAU,GAAG,oCAAoC,CAClD,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAsB;YACnC,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,2BAAY,CAAC,MAAM;YAC3B,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;SACzC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,iBAAiB,CACvB,MAGC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,uBAAuB,EACvC,UAAU,GAAG,YAAY,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,OAAO,EAAE,CAAC;YAC3C,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,sBAAsB,EACtC,UAAU,GAAG,qBAAqB,CACnC,CAAC;QACJ,CAAC;QACD,4CAA4C;QAC5C,IACE,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM;YACrC,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,EAChC,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,qCAAqC,CACtC,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACzD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,uDAAuD,CACxD,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,2BAAY,CAAC,OAAO;SAC7B,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CACrB,MAGC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,uBAAuB,EACvC,UAAU,GAAG,uBAAuB,CACrC,CAAC;QACJ,CAAC;QACD,yCAAyC;QACzC,IACE,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM;YACrC,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK;YAChC,MAAM,CAAC,OAAO,KAAK,uBAAU,CAAC,KAAK,EACnC,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,qCAAqC,CACtC,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACzD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,uDAAuD,CACxD,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;aAAM,IACL,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM;YACrC,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK;YAChC,MAAM,CAAC,OAAO,KAAK,uBAAU,CAAC,KAAK,EACnC,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,OAAO;SACrB,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CACvB,MAGC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,SAAS,CAAC,IAAI,KAAK,yBAAU,CAAC,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,aAAa,SAAS,CAAC,SAAS,+BAA+B,IAAI,CAAC,iBAAiB,EAAE,CACxF,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IACxC,CAAC;IAEO,kBAAkB,CACxB,MAGC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,uBAAuB,EACvC,UAAU,GAAG,YAAY,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,sBAAsB,EACtC,UAAU,GAAG,2BAA2B,MAAM,CAAC,MAAM,GAAG,CACzD,CAAC;QACJ,CAAC;QACD,qCAAqC;QACrC,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,sCAAsC,CACvC,CAAC;YACJ,CAAC;YACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACzD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,yBAAyB,EACzC,yDAAyD,CAC1D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,2BAAY,CAAC,SAAS;SAC/B,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAC3B,MAGC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,uBAAuB,EACvC,UAAU,GAAG,YAAY,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,sBAAsB,EACtC,UAAU,GAAG,8BAA8B,MAAM,CAAC,MAAM,GAAG,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,MAAM,EAAE,2BAAY,CAAC,MAAM;SAC5B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,KAAK,uBAAU,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,kBAAkB,CACxB,MAGC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,2BAAY,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,IAAI,yBAAW,CACnB,6BAAe,CAAC,uBAAuB,EACvC,UAAU,GAAG,uBAAuB,CACrC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3C,QAAQ,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;CACF;AApXD,kDAoXC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview BrowserSignatureVerifier — lightweight ILedgerSignatureVerifier.
|
|
3
|
+
*
|
|
4
|
+
* Calls @noble/curves secp256k1 directly to verify compact ECDSA signatures
|
|
5
|
+
* without requiring an ECIESService instance. Useful in browser contexts
|
|
6
|
+
* (e.g. the showcase demo) where you want minimal dependencies.
|
|
7
|
+
*
|
|
8
|
+
* EciesSignatureVerifier is the full-featured alternative that wraps
|
|
9
|
+
* ECIESService.verifyMessage().
|
|
10
|
+
*
|
|
11
|
+
* @see eciesSignatureVerifier.ts for the ECIESService-backed version
|
|
12
|
+
*/
|
|
13
|
+
import type { SignatureUint8Array } from '@digitaldefiance/ecies-lib';
|
|
14
|
+
import type { ILedgerSignatureVerifier } from '../interfaces/ledger/ledgerSignatureVerifier';
|
|
15
|
+
export declare class BrowserSignatureVerifier implements ILedgerSignatureVerifier {
|
|
16
|
+
verify(publicKey: Uint8Array, data: Uint8Array, signature: SignatureUint8Array): boolean;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=browserSignatureVerifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserSignatureVerifier.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/browserSignatureVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAE7F,qBAAa,wBAAyB,YAAW,wBAAwB;IACvE,MAAM,CACJ,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,mBAAmB,GAC7B,OAAO;CAYX"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview BrowserSignatureVerifier — lightweight ILedgerSignatureVerifier.
|
|
4
|
+
*
|
|
5
|
+
* Calls @noble/curves secp256k1 directly to verify compact ECDSA signatures
|
|
6
|
+
* without requiring an ECIESService instance. Useful in browser contexts
|
|
7
|
+
* (e.g. the showcase demo) where you want minimal dependencies.
|
|
8
|
+
*
|
|
9
|
+
* EciesSignatureVerifier is the full-featured alternative that wraps
|
|
10
|
+
* ECIESService.verifyMessage().
|
|
11
|
+
*
|
|
12
|
+
* @see eciesSignatureVerifier.ts for the ECIESService-backed version
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.BrowserSignatureVerifier = void 0;
|
|
16
|
+
const secp256k1_1 = require("@noble/curves/secp256k1");
|
|
17
|
+
const sha2_1 = require("@noble/hashes/sha2");
|
|
18
|
+
class BrowserSignatureVerifier {
|
|
19
|
+
verify(publicKey, data, signature) {
|
|
20
|
+
try {
|
|
21
|
+
if (!signature || signature.length !== 64)
|
|
22
|
+
return false;
|
|
23
|
+
const hash = (0, sha2_1.sha256)(data);
|
|
24
|
+
return secp256k1_1.secp256k1.verify(signature, hash, publicKey, {
|
|
25
|
+
prehash: false,
|
|
26
|
+
format: 'compact',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.BrowserSignatureVerifier = BrowserSignatureVerifier;
|
|
35
|
+
//# sourceMappingURL=browserSignatureVerifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserSignatureVerifier.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/browserSignatureVerifier.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAGH,uDAAoD;AACpD,6CAA4C;AAG5C,MAAa,wBAAwB;IACnC,MAAM,CACJ,SAAqB,EACrB,IAAgB,EAChB,SAA8B;QAE9B,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAC;YACxD,MAAM,IAAI,GAAG,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,qBAAS,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;gBAClD,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF;AAjBD,4DAiBC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Governance payload serializer for the blockchain ledger.
|
|
3
|
+
*
|
|
4
|
+
* Handles deterministic binary serialization of governance payloads,
|
|
5
|
+
* including the 0x01 type prefix that distinguishes governance entries
|
|
6
|
+
* from regular (0x00) entries.
|
|
7
|
+
*
|
|
8
|
+
* Binary format (after 0x01 type prefix):
|
|
9
|
+
* - 1 byte: subtype (0x00 = genesis, 0x01 = amendment)
|
|
10
|
+
* - For genesis: quorum policy + initial signer list
|
|
11
|
+
* - 2 bytes: actionCount (uint16 BE)
|
|
12
|
+
* - variable: serialized actions
|
|
13
|
+
* - 2 bytes: cosignatureCount (uint16 BE)
|
|
14
|
+
* - variable: cosignatures
|
|
15
|
+
*
|
|
16
|
+
* @see Design: Governance Payload Serialization Format
|
|
17
|
+
* @see Requirements 13.9
|
|
18
|
+
*/
|
|
19
|
+
import { IGovernanceAction } from '../interfaces/ledger/governanceAction';
|
|
20
|
+
import { IGovernancePayload } from '../interfaces/ledger/governancePayload';
|
|
21
|
+
import { IQuorumPolicy } from '../interfaces/ledger/quorumPolicy';
|
|
22
|
+
import { IAuthorizedSigner } from '../interfaces/ledger/authorizedSigner';
|
|
23
|
+
/**
|
|
24
|
+
* Genesis initialization data embedded in the genesis governance payload.
|
|
25
|
+
*/
|
|
26
|
+
export interface IGenesisPayloadData {
|
|
27
|
+
readonly quorumPolicy: IQuorumPolicy;
|
|
28
|
+
readonly signers: readonly IAuthorizedSigner[];
|
|
29
|
+
}
|
|
30
|
+
export declare class GovernancePayloadSerializer {
|
|
31
|
+
/**
|
|
32
|
+
* Check if a payload Uint8Array is a governance payload (starts with 0x01).
|
|
33
|
+
*/
|
|
34
|
+
static isGovernancePayload(payload: Uint8Array): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Serialize a governance payload into a Uint8Array with 0x01 prefix.
|
|
37
|
+
* This produces an amendment-subtype payload.
|
|
38
|
+
*/
|
|
39
|
+
serialize(payload: IGovernancePayload): Uint8Array;
|
|
40
|
+
/**
|
|
41
|
+
* Serialize a genesis governance payload with initial signer set and quorum policy.
|
|
42
|
+
*/
|
|
43
|
+
serializeGenesis(data: IGenesisPayloadData): Uint8Array;
|
|
44
|
+
/**
|
|
45
|
+
* Deserialize a Uint8Array (with 0x01 prefix) back into an IGovernancePayload.
|
|
46
|
+
* For genesis payloads, also returns the genesis data.
|
|
47
|
+
*/
|
|
48
|
+
deserialize(data: Uint8Array): IGovernancePayload & {
|
|
49
|
+
genesis?: IGenesisPayloadData;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Serialize the governance actions only (without cosignatures) for hashing/signing by co-signers.
|
|
53
|
+
*/
|
|
54
|
+
serializeActionsForSigning(actions: readonly IGovernanceAction[]): Uint8Array;
|
|
55
|
+
private serializeActions;
|
|
56
|
+
private serializeAction;
|
|
57
|
+
private serializeQuorumPolicy;
|
|
58
|
+
private serializeMetadata;
|
|
59
|
+
private serializeSignerList;
|
|
60
|
+
private serializeCosignatures;
|
|
61
|
+
private deserializeGenesis;
|
|
62
|
+
private deserializeAmendment;
|
|
63
|
+
private deserializeAction;
|
|
64
|
+
private deserializeQuorumPolicy;
|
|
65
|
+
private deserializeMetadata;
|
|
66
|
+
private deserializeSigner;
|
|
67
|
+
private deserializeCosignatures;
|
|
68
|
+
private ensureBytes;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=governancePayloadSerializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governancePayloadSerializer.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/ledger/governancePayloadSerializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAEL,iBAAiB,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAc,MAAM,mCAAmC,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAyE1E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAChD;AAED,qBAAa,2BAA2B;IACtC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAIxD;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU;IAgClD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,UAAU;IAgCvD;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB,GAAG;QAAE,OAAO,CAAC,EAAE,mBAAmB,CAAA;KAAE;IA+BrF;;OAEG;IACH,0BAA0B,CAAC,OAAO,EAAE,SAAS,iBAAiB,EAAE,GAAG,UAAU;IAY7E,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,oBAAoB;IA4B5B,OAAO,CAAC,iBAAiB;IAwFzB,OAAO,CAAC,uBAAuB;IAwB/B,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,uBAAuB;IA2B/B,OAAO,CAAC,WAAW;CAapB"}
|