@openvtc/trust-tasks 0.26.25 → 0.26.27
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/CHANGELOG.md +92 -0
- package/dist/_shared/components.d.ts +207 -4
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.d.ts +4 -4
- package/dist/device/list/0.1/payload.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.js +4 -2
- package/dist/device/list/0.1/payload.js.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +4 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.1/payload.d.ts +4 -4
- package/dist/device/register/0.1/payload.d.ts.map +1 -1
- package/dist/device/register/0.1/payload.js +4 -2
- package/dist/device/register/0.1/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +4 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/voting/_shared/0.1/voting.d.ts +1 -1
- package/dist/voting/_shared/0.1/voting.d.ts.map +1 -1
- package/dist/voting/ballot/cast-encrypted/0.1/payload.d.ts +1166 -0
- package/dist/voting/ballot/cast-encrypted/0.1/payload.d.ts.map +1 -0
- package/dist/voting/ballot/cast-encrypted/0.1/payload.js +690 -0
- package/dist/voting/ballot/cast-encrypted/0.1/payload.js.map +1 -0
- package/dist/voting/board/read/0.1/payload.d.ts +2555 -719
- package/dist/voting/board/read/0.1/payload.d.ts.map +1 -1
- package/dist/voting/board/read/0.1/payload.js +1517 -391
- package/dist/voting/board/read/0.1/payload.js.map +1 -1
- package/dist/voting/election/register/0.1/payload.d.ts +4 -4
- package/dist/voting/election/register/0.1/payload.js +2 -2
- package/dist/voting/election/register/0.1/payload.js.map +1 -1
- package/dist/voting/election/show/0.1/payload.d.ts +4 -4
- package/dist/voting/election/show/0.1/payload.js +2 -2
- package/dist/voting/election/show/0.1/payload.js.map +1 -1
- package/dist/voting/trustees/confirm/0.1/payload.d.ts +620 -0
- package/dist/voting/trustees/confirm/0.1/payload.d.ts.map +1 -0
- package/dist/voting/trustees/confirm/0.1/payload.js +388 -0
- package/dist/voting/trustees/confirm/0.1/payload.js.map +1 -0
- package/dist/voting/trustees/deal/0.1/payload.d.ts +1032 -0
- package/dist/voting/trustees/deal/0.1/payload.d.ts.map +1 -0
- package/dist/voting/trustees/deal/0.1/payload.js +630 -0
- package/dist/voting/trustees/deal/0.1/payload.js.map +1 -0
- package/dist/voting/trustees/decrypt/0.1/payload.d.ts +1009 -0
- package/dist/voting/trustees/decrypt/0.1/payload.d.ts.map +1 -0
- package/dist/voting/trustees/decrypt/0.1/payload.js +623 -0
- package/dist/voting/trustees/decrypt/0.1/payload.js.map +1 -0
- package/dist/voting/trustees/enrol/0.1/payload.d.ts +792 -0
- package/dist/voting/trustees/enrol/0.1/payload.d.ts.map +1 -0
- package/dist/voting/trustees/enrol/0.1/payload.js +490 -0
- package/dist/voting/trustees/enrol/0.1/payload.js.map +1 -0
- package/dist/voting/trustees/justify/0.1/payload.d.ts +642 -0
- package/dist/voting/trustees/justify/0.1/payload.d.ts.map +1 -0
- package/dist/voting/trustees/justify/0.1/payload.js +402 -0
- package/dist/voting/trustees/justify/0.1/payload.js.map +1 -0
- package/dist/voting/trustees/status/0.1/payload.d.ts +1411 -0
- package/dist/voting/trustees/status/0.1/payload.d.ts.map +1 -0
- package/dist/voting/trustees/status/0.1/payload.js +822 -0
- package/dist/voting/trustees/status/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/trustee/deal/0.1/payload.d.ts +2005 -0
- package/dist/vta/pcs/trustee/deal/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/trustee/deal/0.1/payload.js +1176 -0
- package/dist/vta/pcs/trustee/deal/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/trustee/decrypt/0.1/payload.d.ts +736 -0
- package/dist/vta/pcs/trustee/decrypt/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/trustee/decrypt/0.1/payload.js +412 -0
- package/dist/vta/pcs/trustee/decrypt/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/trustee/enrol/0.1/payload.d.ts +1756 -0
- package/dist/vta/pcs/trustee/enrol/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/trustee/enrol/0.1/payload.js +1040 -0
- package/dist/vta/pcs/trustee/enrol/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/trustee/justify/0.1/payload.d.ts +504 -0
- package/dist/vta/pcs/trustee/justify/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/trustee/justify/0.1/payload.js +274 -0
- package/dist/vta/pcs/trustee/justify/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/trustee/keys/0.1/payload.d.ts +2501 -0
- package/dist/vta/pcs/trustee/keys/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/trustee/keys/0.1/payload.js +1455 -0
- package/dist/vta/pcs/trustee/keys/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/vote/0.1/payload.d.ts +4 -4
- package/dist/vta/pcs/vote/0.1/payload.js +2 -2
- package/dist/vta/pcs/vote/0.1/payload.js.map +1 -1
- package/dist/vta/pcs/vote-encrypted/0.1/payload.d.ts +2375 -0
- package/dist/vta/pcs/vote-encrypted/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/vote-encrypted/0.1/payload.js +1389 -0
- package/dist/vta/pcs/vote-encrypted/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/voter/register/0.1/payload.d.ts +4 -4
- package/dist/vta/pcs/voter/register/0.1/payload.js +2 -2
- package/dist/vta/pcs/voter/register/0.1/payload.js.map +1 -1
- package/dist/vtc/config/did-hosting/list/0.1/payload.d.ts +339 -0
- package/dist/vtc/config/did-hosting/list/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/config/did-hosting/list/0.1/payload.js +185 -0
- package/dist/vtc/config/did-hosting/list/0.1/payload.js.map +1 -0
- package/dist/vtc/elections/create/0.1/payload.d.ts +4 -4
- package/dist/vtc/elections/create/0.1/payload.js +2 -2
- package/dist/vtc/elections/create/0.1/payload.js.map +1 -1
- package/dist/vtc/elections/show/0.1/payload.d.ts +242 -6
- package/dist/vtc/elections/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/elections/show/0.1/payload.js +132 -2
- package/dist/vtc/elections/show/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +222 -4
- package/src/device/list/0.1/payload.ts +4 -2
- package/src/device/list/0.2/payload.ts +4 -2
- package/src/device/register/0.1/payload.ts +4 -2
- package/src/device/register/0.2/payload.ts +4 -2
- package/src/index.ts +14 -0
- package/src/voting/_shared/0.1/voting.ts +1 -1
- package/src/voting/ballot/cast-encrypted/0.1/payload.ts +735 -0
- package/src/voting/board/read/0.1/payload.ts +1519 -393
- package/src/voting/election/register/0.1/payload.ts +2 -2
- package/src/voting/election/show/0.1/payload.ts +2 -2
- package/src/voting/trustees/confirm/0.1/payload.ts +429 -0
- package/src/voting/trustees/deal/0.1/payload.ts +665 -0
- package/src/voting/trustees/decrypt/0.1/payload.ts +663 -0
- package/src/voting/trustees/enrol/0.1/payload.ts +525 -0
- package/src/voting/trustees/justify/0.1/payload.ts +439 -0
- package/src/voting/trustees/status/0.1/payload.ts +890 -0
- package/src/vta/pcs/trustee/deal/0.1/payload.ts +1250 -0
- package/src/vta/pcs/trustee/decrypt/0.1/payload.ts +489 -0
- package/src/vta/pcs/trustee/enrol/0.1/payload.ts +1107 -0
- package/src/vta/pcs/trustee/justify/0.1/payload.ts +341 -0
- package/src/vta/pcs/trustee/keys/0.1/payload.ts +1545 -0
- package/src/vta/pcs/vote/0.1/payload.ts +2 -2
- package/src/vta/pcs/vote-encrypted/0.1/payload.ts +1455 -0
- package/src/vta/pcs/voter/register/0.1/payload.ts +2 -2
- package/src/vtc/config/did-hosting/list/0.1/payload.ts +233 -0
- package/src/vtc/elections/create/0.1/payload.ts +2 -2
- package/src/vtc/elections/show/0.1/payload.ts +138 -4
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,98 @@ The package versions over **its own API** — what a consumer compiles against
|
|
|
11
11
|
not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
|
|
12
12
|
component.
|
|
13
13
|
|
|
14
|
+
## 0.26.27 — 2026-10-21
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **vtc/config**: Did-hosting/list 0.1 — the hosting servers the community's VTA can publish its identities through (#849)
|
|
20
|
+
|
|
21
|
+
A community's administrator chooses where the identities it mints (its groups'
|
|
22
|
+
and its own rooms') are published. The community either serves each `did:webvh`
|
|
23
|
+
log itself, or has its VTA publish it on a hosting server registered there.
|
|
24
|
+
Without a list of those servers the choice is typed blind.
|
|
25
|
+
|
|
26
|
+
- vtc/config/did-hosting/list/0.1: for holders of `vtc.config.admin`. The
|
|
27
|
+
community asks its own VTA (`vta/webvh/servers/list`), as itself, over the
|
|
28
|
+
link it keeps to it. It answers with each server's `id`, `did` and `label`,
|
|
29
|
+
and nothing else of the VTA's record. A server whose id the configuration
|
|
30
|
+
could not name is left out.
|
|
31
|
+
- Codes: noKeyHolder (no VTA link), keyHolderUnavailable (no answer,
|
|
32
|
+
retryable), keyHolderRefused (the VTA's own code and message in `details`).
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- **voting**: Encrypted elections on a private board — trustees read their ceremony, voters get the key from vtc/elections/show (#852)
|
|
39
|
+
|
|
40
|
+
On a private board the ballot box answered voting/trustees/status only to the community and
|
|
41
|
+
its auditors, so no trustee could take its next step (transport keys, dealings and targets are
|
|
42
|
+
read from status) and no voter could obtain the election key: a sealed or tallied-encrypted
|
|
43
|
+
election on a private board could not run.
|
|
44
|
+
|
|
45
|
+
- CONVENTIONS §4 gains the rows the trustee tasks were missing; voting/trustees/status
|
|
46
|
+
answers every trustee the manifest names on any board. Nothing the ceremony publishes is
|
|
47
|
+
secret (§9.6, "Who reads the ceremony").
|
|
48
|
+
- vtc/elections/show carries electionKey (optional, appended) once formed, read from the
|
|
49
|
+
ballot box and refused unless the qualified dealings in the same answer form it. A voter
|
|
50
|
+
gets it from the community it already asks for its ticket.
|
|
51
|
+
|
|
52
|
+
## 0.26.26 — 2026-10-20
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- **rooms**: Rooms/keys/read repairs before refusing — catches up on commits and fetches links, then cannotOpen with a reason (#848)
|
|
58
|
+
|
|
59
|
+
A key holder misses an epoch key in two ordinary ways — behind by a commit after any
|
|
60
|
+
membership change, or joined late and holding nothing older — and the member's surface
|
|
61
|
+
reaches only their agent, so the agent is the one party that can repair either.
|
|
62
|
+
|
|
63
|
+
The recipient now SHOULD, before answering cannotOpen, fetch the commits the host relays
|
|
64
|
+
(rooms/epoch/commits) and apply them in order, or fetch the epoch links as backfill does,
|
|
65
|
+
from the same host, as the same principal, under the same read grant; at most once per
|
|
66
|
+
request, serialised per member, never for a removed principal. cannotOpen carries
|
|
67
|
+
details.reason (notDelivered / beyondChain / removed) in rooms/keys/open 0.2's words.
|
|
68
|
+
sideEffects becomes mutating: the room is unchanged, the recipient's key state is not.
|
|
69
|
+
|
|
70
|
+
- **voting**: Sealed and tallied-encrypted elections — trustees, encrypted casts, VTA trustee role (#845)
|
|
71
|
+
|
|
72
|
+
* feat(voting): sealed and tallied-encrypted elections — voting/trustees/*, voting/ballot/cast-encrypted, vta/pcs/trustee/* and vta/pcs/vote-encrypted
|
|
73
|
+
|
|
74
|
+
The encrypted secrecy levels (VTI-VOT-060 – 064). CONVENTIONS §9 fixes the
|
|
75
|
+
cryptography: Ristretto255, exponential ElGamal under a threshold key, and
|
|
76
|
+
Fiat–Shamir Schnorr, Chaum–Pedersen and disjunctive proofs with their domains.
|
|
77
|
+
|
|
78
|
+
The trustees generate the election key on the board (Pedersen DKG with
|
|
79
|
+
Belenios-style complaints): enrol a transport key, deal (Feldman commitments
|
|
80
|
+
plus every share sealed to its recipient), confirm or complain, and a dealer
|
|
81
|
+
complained of justifies by revealing the share. The key forms from the
|
|
82
|
+
qualified dealers. After close, each trustee publishes partial decryptions of
|
|
83
|
+
every sealed cast's KEM, or of every option's homomorphic total, with
|
|
84
|
+
Chaum–Pedersen proofs; voting/trustees/status tells everyone what is left.
|
|
85
|
+
|
|
86
|
+
voting/ballot/cast-encrypted admits a cast whose attestation binds the sealed
|
|
87
|
+
payload or the encrypted ballot, the latter with 0/1 proofs per option and a
|
|
88
|
+
proof that each question's count is admissible.
|
|
89
|
+
|
|
90
|
+
vta/pcs/trustee/{enrol,deal,keys,justify,decrypt} make the trustee's VTA the
|
|
91
|
+
custodian of its transport key and key share, signing only the task's own
|
|
92
|
+
document as the trustee; vta/pcs/vote-encrypted is vta/pcs/vote for the
|
|
93
|
+
encrypted levels. The new capability pcsTrustee / pcs-trustee is appended to
|
|
94
|
+
both device/_shared Capability enums.
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
### Fixed
|
|
99
|
+
|
|
100
|
+
- **vtc/elections**: Create serves the encrypted levels a community certifies (#847)
|
|
101
|
+
|
|
102
|
+
* fix(vtc/elections): create serves the encrypted levels a community certifies, and holds them to their trustee rules
|
|
103
|
+
|
|
104
|
+
Item 3: unsupportedSecrecy names a level the community does not serve; a community serving sealed or talliedEncrypted refuses a manifest that breaks the trustee rules with invalidManifest.
|
|
105
|
+
|
|
14
106
|
## 0.26.25 — 2026-10-20
|
|
15
107
|
|
|
16
108
|
|
|
@@ -388,7 +388,7 @@ export type BlobRef = DigestMultibase;
|
|
|
388
388
|
/**
|
|
389
389
|
* One leaf of a board. A leaf's hash is the RFC 9162 leaf hash of the JCS canonicalization of this object. Entries carry no time of arrival: the order is the board's, and a timestamp would hand anyone who reads the board the timing the registrar's log would need to pair a ticket with its cast.
|
|
390
390
|
*/
|
|
391
|
-
export type BoardEntry = CastEntry | ReplacementEntry | LifecycleEntry | ResultEntry;
|
|
391
|
+
export type BoardEntry = CastEntry | ReplacementEntry | LifecycleEntry | ResultEntry | EncryptedCastEntry | TransportKeyEntry | DealingEntry | ConfirmationEntry | JustificationEntry | ElectionKeyEntry | PartialDecryptionsEntry | UnsealedEntry | SpoiledEntry;
|
|
392
392
|
/**
|
|
393
393
|
* `public`: anyone reads the board. `private`: the community, the auditors the manifest names and, for one cast's inclusion, the holder of its receipt (VTI-VOT-052).
|
|
394
394
|
*/
|
|
@@ -416,11 +416,11 @@ export type Capability_AclV0_2 = string;
|
|
|
416
416
|
/**
|
|
417
417
|
* Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
|
|
418
418
|
*/
|
|
419
|
-
export type Capability_DeviceV0_1 = "vault-read" | "vault-write" | "proxy-login" | "fill-release" | "policy-admin" | "device-admin" | "sign" | "key-mint" | "sign-trust-task" | "credential-write" | "memory-read" | "memory-write" | "room-present" | "room-open" | "key-export" | "sign-sshsig" | "sign-jws" | "sign-csr" | "sign-document" | "external-accounts-manage" | "external-auth-use" | "pcs-vetter" | "pcs-applicant" | "witness-request" | "pcs-voter";
|
|
419
|
+
export type Capability_DeviceV0_1 = "vault-read" | "vault-write" | "proxy-login" | "fill-release" | "policy-admin" | "device-admin" | "sign" | "key-mint" | "sign-trust-task" | "credential-write" | "memory-read" | "memory-write" | "room-present" | "room-open" | "key-export" | "sign-sshsig" | "sign-jws" | "sign-csr" | "sign-document" | "external-accounts-manage" | "external-auth-use" | "pcs-vetter" | "pcs-applicant" | "witness-request" | "pcs-voter" | "pcs-trustee";
|
|
420
420
|
/**
|
|
421
421
|
* Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
|
|
422
422
|
*/
|
|
423
|
-
export type Capability_DeviceV0_2 = "vaultRead" | "vaultWrite" | "proxyLogin" | "fillRelease" | "policyAdmin" | "deviceAdmin" | "sign" | "keyMint" | "signTrustTask" | "credentialWrite" | "memoryRead" | "memoryWrite" | "roomPresent" | "roomOpen" | "keyExport" | "signSshsig" | "signJws" | "signCsr" | "signDocument" | "externalAccountsManage" | "externalAuthUse" | "pcsVetter" | "pcsApplicant" | "witnessRequest" | "pcsVoter";
|
|
423
|
+
export type Capability_DeviceV0_2 = "vaultRead" | "vaultWrite" | "proxyLogin" | "fillRelease" | "policyAdmin" | "deviceAdmin" | "sign" | "keyMint" | "signTrustTask" | "credentialWrite" | "memoryRead" | "memoryWrite" | "roomPresent" | "roomOpen" | "keyExport" | "signSshsig" | "signJws" | "signCsr" | "signDocument" | "externalAccountsManage" | "externalAuthUse" | "pcsVetter" | "pcsApplicant" | "witnessRequest" | "pcsVoter" | "pcsTrustee";
|
|
424
424
|
/**
|
|
425
425
|
* Number of chunks in the bundle, equal to ceil(expectedSizeBytes / chunkSize). Bounded at 4096 so that the manifest itself — one digest per chunk — fits in the single document that carries it under the same message-size reasoning as a chunk.
|
|
426
426
|
*/
|
|
@@ -514,6 +514,12 @@ export type DataCommitment = DigestMultibase;
|
|
|
514
514
|
* The approver's answer. `deny` aborts the pending request; a subsequent submit of the same task starts a fresh one.
|
|
515
515
|
*/
|
|
516
516
|
export type Decision = "approve" | "deny";
|
|
517
|
+
/**
|
|
518
|
+
* What a partial decryption decrypts: the sealed cast at a board leaf, or the total of one option of one question.
|
|
519
|
+
*/
|
|
520
|
+
export type DecryptionTarget = {
|
|
521
|
+
[k: string]: unknown | undefined;
|
|
522
|
+
};
|
|
517
523
|
/**
|
|
518
524
|
* `queued`: stored and not yet handed to the recipient. `delivered`: handed to the recipient (pickup or live stream) but not yet deleted by it — the recipient has not acknowledged it.
|
|
519
525
|
*/
|
|
@@ -556,6 +562,13 @@ export type DigestMultibase = string;
|
|
|
556
562
|
* A community directory entry's identifier, exactly as that community's directory returned it. Opaque and community-scoped: the agent stores and compares it as a string, never parses it, and never treats the same value under two communities as the same entry.
|
|
557
563
|
*/
|
|
558
564
|
export type DirectoryEntryId = string;
|
|
565
|
+
/**
|
|
566
|
+
* A disjunctive proof that a ciphertext encrypts one value of a public list: one `(c, z)` per value, in the list's order (CONVENTIONS §9.3).
|
|
567
|
+
*
|
|
568
|
+
* @minItems 1
|
|
569
|
+
* @maxItems 65
|
|
570
|
+
*/
|
|
571
|
+
export type DisjunctiveProof = [SigmaProof, ...SigmaProof[]];
|
|
559
572
|
/**
|
|
560
573
|
* The kinds of drift, named so that a task can select a drift item by kind. The same values, with the same meanings, as `DriftItem`'s `type`, which keeps its own inline list so that `DriftItem` stays textually identical to 0.1; the two lists change together. `roleAdded` — someone holds a forge role the projection does not give them. `roleRemoved` — a projected role is missing. `roleChanged` — a projected role is present at another level. `requiredCheckMissing` — the verify-trust check is no longer required. `protectionWeakened` — branch protection or a ruleset is weaker than the projection in another way (force-push allowed, bypass actors added). `bootstrapMissing` — a bootstrap file or variable is gone.
|
|
561
574
|
*/
|
|
@@ -581,6 +594,12 @@ export type ElectionState = "registered" | "registration" | "voting" | "closed"
|
|
|
581
594
|
* The three rights that carry authority over other people's rights: `git.ns.admin`, `git.repo.create` (which makes its holder the owner of every repository they create) and `git.repo.own`. Separation of duties applies to these: nobody grants one to themselves through git-ns/right/grant, or records one for themselves through any other task that grants on the actor's own authority. The explicit self-grant is git-ns/right/break-glass. `git.repo.maintain` and `git.commit.sign` are not elevated.
|
|
582
595
|
*/
|
|
583
596
|
export type ElevatedRight = "git.ns.admin" | "git.repo.create" | "git.repo.own";
|
|
597
|
+
/**
|
|
598
|
+
* A cast of a sealed or tallied-encrypted election: exactly one of `sealed` (the Ballot's JCS bytes sealed to the election key) or `encrypted`, with the tag and the attestation over the JCS bytes of whichever is present (CONVENTIONS §3.6, §9.5).
|
|
599
|
+
*/
|
|
600
|
+
export type EncryptedCast = {
|
|
601
|
+
[k: string]: unknown | undefined;
|
|
602
|
+
};
|
|
584
603
|
/**
|
|
585
604
|
* The anchor the binding rested on, recorded so an incident review can see how each factor came to exist. `install`: claimed with the community's install token (vtc/install/claim/finish/0.3). `invite`: redeemed from an administrator's invite (auth/step-up/approver/redeem/finish/0.1). `selfService`: added by the subject behind a factor they already held (auth/step-up/approver/enroll/0.1). `offline`: redeemed from an invite minted by the operator with host access while the service was stopped — an `invite`-shaped redemption whose issuer was the host rather than an administrator.
|
|
586
605
|
*/
|
|
@@ -704,6 +723,10 @@ export type GroupCredentialId = string;
|
|
|
704
723
|
* What the group is for. Plain text; a reader MUST NOT treat it as instructions. Same placement rules as `GroupName`.
|
|
705
724
|
*/
|
|
706
725
|
export type GroupDescription = string;
|
|
726
|
+
/**
|
|
727
|
+
* A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).
|
|
728
|
+
*/
|
|
729
|
+
export type GroupElement = string;
|
|
707
730
|
/**
|
|
708
731
|
* Opaque identifier of a community group: `grp_` followed by 16 to 64 base64url characters. Random and community-scoped; not the group's DID.
|
|
709
732
|
*/
|
|
@@ -716,6 +739,10 @@ export type GroupKind = "static" | "dynamic";
|
|
|
716
739
|
* The group's name, shown to those who may see the group. The community's own record: never in the group's DID document or its credentials' subject beyond the group's DID. Plain text.
|
|
717
740
|
*/
|
|
718
741
|
export type GroupName = string;
|
|
742
|
+
/**
|
|
743
|
+
* A scalar mod the Ristretto group order: 32 canonical little-endian bytes, multibase base58btc (CONVENTIONS §9.1).
|
|
744
|
+
*/
|
|
745
|
+
export type GroupScalar = string;
|
|
719
746
|
/**
|
|
720
747
|
* The Farm-generated handle of one reservation: 16 to 32 bytes from a cryptographically secure random source, written as unpadded base64url (22 to 43 characters; 16 bytes, 22 characters, is what VTI-LNK-116 recommends). It is the `_id` of the trigger link (VTI-LNK-033) and is compared as a string. In a claim it MUST equal the document's `parentThreadId`. It confers no authority on its holder beyond the right to make one claim.
|
|
721
748
|
*/
|
|
@@ -1379,7 +1406,7 @@ export type SealedEnvelope_VaultV0_2 = DidcommAuthcryptEnvelope_VaultV0_2 | Hpke
|
|
|
1379
1406
|
*/
|
|
1380
1407
|
export type SealedTransferBundle = string;
|
|
1381
1408
|
/**
|
|
1382
|
-
* `open`: ballots are recorded on the board as cast. `sealed`: ballots are encrypted to a jointly generated election key and decrypted after voting closes. `talliedEncrypted`: ballots are encrypted and only the totals are ever decrypted (VTI-VOT-060).
|
|
1409
|
+
* `open`: ballots are recorded on the board as cast. `sealed`: ballots are encrypted to a jointly generated election key and decrypted after voting closes. `talliedEncrypted`: ballots are encrypted and only the totals are ever decrypted (VTI-VOT-060). The encrypted levels are cast with `voting/ballot/cast-encrypted/0.1`, under an election key the trustees generate with `voting/trustees/*` (CONVENTIONS §9).
|
|
1383
1410
|
*/
|
|
1384
1411
|
export type SecrecyLevel = "open" | "sealed" | "talliedEncrypted";
|
|
1385
1412
|
/**
|
|
@@ -1545,6 +1572,14 @@ export type TransferId = string;
|
|
|
1545
1572
|
* How a blob's bytes move. `proxied`: through the host, as chunk documents (rooms/blobs/upload/chunk, rooms/blobs/chunk). `direct`: straight between the member and the storage the room is assigned to, over time-limited URLs the host issues for one object and one method each; the host authorizes every object and verifies every upload, and never carries a byte. Which mode applies is the host's answer, from what the producer accepts, what the room's storage can do, and the room's tier.
|
|
1546
1573
|
*/
|
|
1547
1574
|
export type TransferMode = "direct" | "proxied";
|
|
1575
|
+
/**
|
|
1576
|
+
* A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.
|
|
1577
|
+
*/
|
|
1578
|
+
export type TrusteeIndex = number;
|
|
1579
|
+
/**
|
|
1580
|
+
* `enrolling`: transport keys are being published. `dealing`: dealings are. `confirming`: each trustee confirms or complains. `keyed`: the election key is formed. `decrypting`: voting has closed and partial decryptions are being published. `done`: every target is decrypted. `failed`: the key could not be formed in time.
|
|
1581
|
+
*/
|
|
1582
|
+
export type TrusteePhase = "enrolling" | "dealing" | "confirming" | "keyed" | "decrypting" | "done" | "failed";
|
|
1548
1583
|
/**
|
|
1549
1584
|
* A ULID in Crockford base32, uppercase. Used for `attributeId` and `profileId`. Chosen over a UUID because the leading 48 bits are a timestamp, so a key-ordered scan of the store is also creation-ordered and a `list` needs no secondary sort. Server-assigned on create; a producer MAY supply one to make a create idempotent, and a maintainer MUST reject a supplied value that already exists rather than silently overwriting.
|
|
1550
1585
|
*/
|
|
@@ -4535,6 +4570,57 @@ export interface ResultEntry {
|
|
|
4535
4570
|
kind: "result";
|
|
4536
4571
|
result: ElectionResult;
|
|
4537
4572
|
}
|
|
4573
|
+
export interface EncryptedCastEntry {
|
|
4574
|
+
kind: "encryptedCast";
|
|
4575
|
+
cast: EncryptedCast;
|
|
4576
|
+
}
|
|
4577
|
+
export interface TransportKeyEntry {
|
|
4578
|
+
kind: "transportKey";
|
|
4579
|
+
transportKey: TransportKey;
|
|
4580
|
+
}
|
|
4581
|
+
export interface DealingEntry {
|
|
4582
|
+
kind: "dealing";
|
|
4583
|
+
dealing: Dealing;
|
|
4584
|
+
}
|
|
4585
|
+
export interface ConfirmationEntry {
|
|
4586
|
+
kind: "confirmation";
|
|
4587
|
+
trustee: TrusteeIndex;
|
|
4588
|
+
/**
|
|
4589
|
+
* @maxItems 64
|
|
4590
|
+
*/
|
|
4591
|
+
complaints: TrusteeIndex[];
|
|
4592
|
+
}
|
|
4593
|
+
export interface JustificationEntry {
|
|
4594
|
+
kind: "justification";
|
|
4595
|
+
dealer: TrusteeIndex;
|
|
4596
|
+
recipient: TrusteeIndex;
|
|
4597
|
+
share: GroupScalar;
|
|
4598
|
+
}
|
|
4599
|
+
export interface ElectionKeyEntry {
|
|
4600
|
+
kind: "electionKey";
|
|
4601
|
+
electionKey: ElectionKey;
|
|
4602
|
+
}
|
|
4603
|
+
export interface PartialDecryptionsEntry {
|
|
4604
|
+
kind: "partials";
|
|
4605
|
+
trustee: TrusteeIndex;
|
|
4606
|
+
/**
|
|
4607
|
+
* @minItems 1
|
|
4608
|
+
* @maxItems 100000
|
|
4609
|
+
*/
|
|
4610
|
+
partials: [PartialDecryption, ...PartialDecryption[]];
|
|
4611
|
+
}
|
|
4612
|
+
export interface UnsealedEntry {
|
|
4613
|
+
kind: "unsealed";
|
|
4614
|
+
leafIndex: number;
|
|
4615
|
+
ballot: Ballot;
|
|
4616
|
+
}
|
|
4617
|
+
/**
|
|
4618
|
+
* A sealed cast that did not open, or opened to no valid ballot: not counted (CONVENTIONS §9.7).
|
|
4619
|
+
*/
|
|
4620
|
+
export interface SpoiledEntry {
|
|
4621
|
+
kind: "spoiled";
|
|
4622
|
+
leafIndex: number;
|
|
4623
|
+
}
|
|
4538
4624
|
/**
|
|
4539
4625
|
* A board's tree head (RFC 9162 §2.1). A head is signed by being carried in a document the ballot box signs; whoever keeps a head keeps that whole document.
|
|
4540
4626
|
*/
|
|
@@ -5379,6 +5465,23 @@ export interface DataIntegrityProof {
|
|
|
5379
5465
|
export interface DcqlQuery {
|
|
5380
5466
|
[k: string]: unknown | undefined;
|
|
5381
5467
|
}
|
|
5468
|
+
/**
|
|
5469
|
+
* A trustee's contribution to the election key: Feldman commitments to its polynomial, a proof of knowledge of the constant term, and one share per trustee sealed to that trustee's transport key (CONVENTIONS §9.6).
|
|
5470
|
+
*/
|
|
5471
|
+
export interface Dealing {
|
|
5472
|
+
dealer: TrusteeIndex;
|
|
5473
|
+
/**
|
|
5474
|
+
* @minItems 2
|
|
5475
|
+
* @maxItems 64
|
|
5476
|
+
*/
|
|
5477
|
+
commitments: [GroupElement, GroupElement, ...GroupElement[]];
|
|
5478
|
+
pok: SigmaProof;
|
|
5479
|
+
/**
|
|
5480
|
+
* @minItems 2
|
|
5481
|
+
* @maxItems 64
|
|
5482
|
+
*/
|
|
5483
|
+
shares: [SealedShare, SealedShare, ...SealedShare[]];
|
|
5484
|
+
}
|
|
5382
5485
|
/**
|
|
5383
5486
|
* One presentation request awaiting the holder's decision, as the approver sees it.
|
|
5384
5487
|
*
|
|
@@ -6297,6 +6400,44 @@ export interface EffectiveLimits {
|
|
|
6297
6400
|
*/
|
|
6298
6401
|
hostCeilingBytes?: number;
|
|
6299
6402
|
}
|
|
6403
|
+
/**
|
|
6404
|
+
* `(a, b) = (r·G, M + r·Y)` under the election key `Y` (CONVENTIONS §9.2).
|
|
6405
|
+
*/
|
|
6406
|
+
export interface ElGamalCiphertext {
|
|
6407
|
+
a: GroupElement;
|
|
6408
|
+
b: GroupElement;
|
|
6409
|
+
}
|
|
6410
|
+
/**
|
|
6411
|
+
* The election key and each trustee's public verification key, computed from the qualified dealings (CONVENTIONS §9.6). Anyone can recompute it from the board.
|
|
6412
|
+
*/
|
|
6413
|
+
export interface ElectionKey {
|
|
6414
|
+
key: GroupElement;
|
|
6415
|
+
/**
|
|
6416
|
+
* The dealers whose dealings the key is formed from.
|
|
6417
|
+
*
|
|
6418
|
+
* @minItems 1
|
|
6419
|
+
* @maxItems 64
|
|
6420
|
+
*/
|
|
6421
|
+
qualified: [TrusteeIndex, ...TrusteeIndex[]];
|
|
6422
|
+
/**
|
|
6423
|
+
* @minItems 2
|
|
6424
|
+
* @maxItems 64
|
|
6425
|
+
*/
|
|
6426
|
+
verification: [
|
|
6427
|
+
{
|
|
6428
|
+
trustee: TrusteeIndex;
|
|
6429
|
+
key: GroupElement;
|
|
6430
|
+
},
|
|
6431
|
+
{
|
|
6432
|
+
trustee: TrusteeIndex;
|
|
6433
|
+
key: GroupElement;
|
|
6434
|
+
},
|
|
6435
|
+
...{
|
|
6436
|
+
trustee: TrusteeIndex;
|
|
6437
|
+
key: GroupElement;
|
|
6438
|
+
}[]
|
|
6439
|
+
];
|
|
6440
|
+
}
|
|
6300
6441
|
/**
|
|
6301
6442
|
* An election's result, computable by anyone who can read its board from the board and the registration alone (VTI-VOT-070).
|
|
6302
6443
|
*/
|
|
@@ -6324,6 +6465,34 @@ export interface ElectionSummary {
|
|
|
6324
6465
|
ballotsAdmitted: number;
|
|
6325
6466
|
head: BoardHead;
|
|
6326
6467
|
}
|
|
6468
|
+
/**
|
|
6469
|
+
* A tallied-encrypted ballot: one EncryptedQuestion per manifest question, in the manifest's order. Never decrypted (VTI-VOT-064).
|
|
6470
|
+
*/
|
|
6471
|
+
export interface EncryptedBallot {
|
|
6472
|
+
electionId: ElectionId;
|
|
6473
|
+
manifestDigest: DigestMultibase;
|
|
6474
|
+
/**
|
|
6475
|
+
* @minItems 1
|
|
6476
|
+
* @maxItems 64
|
|
6477
|
+
*/
|
|
6478
|
+
questions: [EncryptedQuestion, ...EncryptedQuestion[]];
|
|
6479
|
+
}
|
|
6480
|
+
export interface EncryptedOption {
|
|
6481
|
+
ciphertext: ElGamalCiphertext;
|
|
6482
|
+
proof: DisjunctiveProof;
|
|
6483
|
+
}
|
|
6484
|
+
/**
|
|
6485
|
+
* One choice question of a tallied-encrypted ballot: per option, in the manifest's order, an encryption of 0 or 1 with its proof; and a proof that the selections sum to a count the question admits (CONVENTIONS §9.5).
|
|
6486
|
+
*/
|
|
6487
|
+
export interface EncryptedQuestion {
|
|
6488
|
+
question: Key_VotingV0_1;
|
|
6489
|
+
/**
|
|
6490
|
+
* @minItems 1
|
|
6491
|
+
* @maxItems 64
|
|
6492
|
+
*/
|
|
6493
|
+
options: [EncryptedOption, ...EncryptedOption[]];
|
|
6494
|
+
sumProof: DisjunctiveProof;
|
|
6495
|
+
}
|
|
6327
6496
|
export interface EncryptionParams {
|
|
6328
6497
|
/**
|
|
6329
6498
|
* AEAD identifier, e.g. `aes-256-gcm`.
|
|
@@ -7900,6 +8069,14 @@ export interface PartPlan {
|
|
|
7900
8069
|
*/
|
|
7901
8070
|
partDigests: [DigestMultibase, ...DigestMultibase[]];
|
|
7902
8071
|
}
|
|
8072
|
+
/**
|
|
8073
|
+
* Trustee `trustee`'s share of one decryption, `d = x_j·a`, with a Chaum–Pedersen proof against its verification key (CONVENTIONS §9.7).
|
|
8074
|
+
*/
|
|
8075
|
+
export interface PartialDecryption {
|
|
8076
|
+
target: DecryptionTarget;
|
|
8077
|
+
d: GroupElement;
|
|
8078
|
+
proof: SigmaProof;
|
|
8079
|
+
}
|
|
7903
8080
|
export interface PasskeyVerificationMethod {
|
|
7904
8081
|
/**
|
|
7905
8082
|
* The verificationMethod id as it appears in the DID document: `<did>#passkey-<base64url(sha256(credentialId))>`. The fragment is content-derived so a verifier can locate this VM by recomputing `sha256(credential.id)`.
|
|
@@ -9517,6 +9694,13 @@ export interface Context_VtaV0_1 {
|
|
|
9517
9694
|
type: "context";
|
|
9518
9695
|
contextId: string;
|
|
9519
9696
|
}
|
|
9697
|
+
/**
|
|
9698
|
+
* Bytes sealed to a key: a random group element encrypted as `kem`, and the bytes under ChaCha20-Poly1305 with a key derived from it, multibase base58btc (CONVENTIONS §9.4).
|
|
9699
|
+
*/
|
|
9700
|
+
export interface SealedPayload {
|
|
9701
|
+
kem: ElGamalCiphertext;
|
|
9702
|
+
body: string;
|
|
9703
|
+
}
|
|
9520
9704
|
/**
|
|
9521
9705
|
* A record as a host stores it on an `attributed` or `private` room. Title, description, body, author and tags are sealed together in one blob rather than separately: splitting them would let a host learn the shape of the material from ciphertext lengths, for no benefit, since a reader decrypts the whole record either way.
|
|
9522
9706
|
*/
|
|
@@ -9542,6 +9726,10 @@ export interface SealedRecord {
|
|
|
9542
9726
|
*/
|
|
9543
9727
|
version?: number;
|
|
9544
9728
|
}
|
|
9729
|
+
export interface SealedShare {
|
|
9730
|
+
recipient: TrusteeIndex;
|
|
9731
|
+
share: SealedPayload;
|
|
9732
|
+
}
|
|
9545
9733
|
/**
|
|
9546
9734
|
* Who the service says it is.
|
|
9547
9735
|
*/
|
|
@@ -9803,6 +9991,13 @@ export interface Session_AuthV0_3 {
|
|
|
9803
9991
|
*/
|
|
9804
9992
|
ext?: Ext;
|
|
9805
9993
|
}
|
|
9994
|
+
/**
|
|
9995
|
+
* A non-interactive sigma proof as its challenge and response `(c, z)` (Schnorr or Chaum–Pedersen; CONVENTIONS §9.3).
|
|
9996
|
+
*/
|
|
9997
|
+
export interface SigmaProof {
|
|
9998
|
+
c: GroupScalar;
|
|
9999
|
+
z: GroupScalar;
|
|
10000
|
+
}
|
|
9806
10001
|
/**
|
|
9807
10002
|
* One signing-key delegation, as its holder sees it. A delegation confers nothing of its own: it names an identity that already holds whatever standing it holds, and a document signed by the key is authorized by that identity's standing read at execution time.
|
|
9808
10003
|
*/
|
|
@@ -10323,6 +10518,14 @@ export interface TransferTarget {
|
|
|
10323
10518
|
*/
|
|
10324
10519
|
expiresAt: string;
|
|
10325
10520
|
}
|
|
10521
|
+
/**
|
|
10522
|
+
* The group element a trustee's shares are sealed to, with a Schnorr proof of knowledge of its discrete log (CONVENTIONS §9.6).
|
|
10523
|
+
*/
|
|
10524
|
+
export interface TransportKey {
|
|
10525
|
+
trustee: TrusteeIndex;
|
|
10526
|
+
key: GroupElement;
|
|
10527
|
+
pok: SigmaProof;
|
|
10528
|
+
}
|
|
10326
10529
|
export interface TransportObservation {
|
|
10327
10530
|
/**
|
|
10328
10531
|
* The binding the document actually travelled on.
|