@openvtc/trust-tasks 0.26.29 → 0.27.1

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.
Files changed (73) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/_shared/components.d.ts +15 -1
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/index.d.ts +6 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +6 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/persona/contact/get/1.1/payload.d.ts +12 -5
  9. package/dist/persona/contact/get/1.1/payload.d.ts.map +1 -1
  10. package/dist/persona/contact/get/1.1/payload.js +4 -4
  11. package/dist/persona/contact/get/1.1/payload.js.map +1 -1
  12. package/dist/persona/contact/list/1.1/payload.d.ts +12 -5
  13. package/dist/persona/contact/list/1.1/payload.d.ts.map +1 -1
  14. package/dist/persona/contact/list/1.1/payload.js +4 -4
  15. package/dist/persona/contact/list/1.1/payload.js.map +1 -1
  16. package/dist/persona/contact/put/1.1/payload.d.ts +32 -6
  17. package/dist/persona/contact/put/1.1/payload.d.ts.map +1 -1
  18. package/dist/persona/contact/put/1.1/payload.js +32 -2
  19. package/dist/persona/contact/put/1.1/payload.js.map +1 -1
  20. package/dist/voting/_shared/0.1/voting.d.ts +1 -1
  21. package/dist/voting/_shared/0.1/voting.d.ts.map +1 -1
  22. package/dist/voting/board/read/0.1/payload.d.ts +58 -2
  23. package/dist/voting/board/read/0.1/payload.d.ts.map +1 -1
  24. package/dist/voting/board/read/0.1/payload.js +36 -0
  25. package/dist/voting/board/read/0.1/payload.js.map +1 -1
  26. package/dist/voting/trustees/authorize/0.1/payload.d.ts +617 -0
  27. package/dist/voting/trustees/authorize/0.1/payload.d.ts.map +1 -0
  28. package/dist/voting/trustees/authorize/0.1/payload.js +386 -0
  29. package/dist/voting/trustees/authorize/0.1/payload.js.map +1 -0
  30. package/dist/voting/trustees/status/0.1/payload.d.ts +106 -2
  31. package/dist/voting/trustees/status/0.1/payload.d.ts.map +1 -1
  32. package/dist/voting/trustees/status/0.1/payload.js +48 -0
  33. package/dist/voting/trustees/status/0.1/payload.js.map +1 -1
  34. package/dist/vta/pcs/trustee/deal/0.2/payload.d.ts +1832 -0
  35. package/dist/vta/pcs/trustee/deal/0.2/payload.d.ts.map +1 -0
  36. package/dist/vta/pcs/trustee/deal/0.2/payload.js +1077 -0
  37. package/dist/vta/pcs/trustee/deal/0.2/payload.js.map +1 -0
  38. package/dist/vta/pcs/trustee/decrypt/0.2/payload.d.ts +758 -0
  39. package/dist/vta/pcs/trustee/decrypt/0.2/payload.d.ts.map +1 -0
  40. package/dist/vta/pcs/trustee/decrypt/0.2/payload.js +423 -0
  41. package/dist/vta/pcs/trustee/decrypt/0.2/payload.js.map +1 -0
  42. package/dist/vta/pcs/trustee/justify/0.2/payload.d.ts +1867 -0
  43. package/dist/vta/pcs/trustee/justify/0.2/payload.d.ts.map +1 -0
  44. package/dist/vta/pcs/trustee/justify/0.2/payload.js +1095 -0
  45. package/dist/vta/pcs/trustee/justify/0.2/payload.js.map +1 -0
  46. package/dist/vta/pcs/trustee/keys/0.2/payload.d.ts +1912 -0
  47. package/dist/vta/pcs/trustee/keys/0.2/payload.d.ts.map +1 -0
  48. package/dist/vta/pcs/trustee/keys/0.2/payload.js +1115 -0
  49. package/dist/vta/pcs/trustee/keys/0.2/payload.js.map +1 -0
  50. package/dist/vta/pcs/vote-encrypted/0.2/payload.d.ts +2228 -0
  51. package/dist/vta/pcs/vote-encrypted/0.2/payload.d.ts.map +1 -0
  52. package/dist/vta/pcs/vote-encrypted/0.2/payload.js +1300 -0
  53. package/dist/vta/pcs/vote-encrypted/0.2/payload.js.map +1 -0
  54. package/dist/vtc/elections/show/0.1/payload.d.ts +86 -2
  55. package/dist/vtc/elections/show/0.1/payload.d.ts.map +1 -1
  56. package/dist/vtc/elections/show/0.1/payload.js +40 -0
  57. package/dist/vtc/elections/show/0.1/payload.js.map +1 -1
  58. package/package.json +1 -1
  59. package/src/_shared/components.ts +16 -1
  60. package/src/index.ts +6 -0
  61. package/src/persona/contact/get/1.1/payload.ts +8 -5
  62. package/src/persona/contact/list/1.1/payload.ts +8 -5
  63. package/src/persona/contact/put/1.1/payload.ts +34 -4
  64. package/src/voting/_shared/0.1/voting.ts +1 -1
  65. package/src/voting/board/read/0.1/payload.ts +38 -2
  66. package/src/voting/trustees/authorize/0.1/payload.ts +434 -0
  67. package/src/voting/trustees/status/0.1/payload.ts +58 -2
  68. package/src/vta/pcs/trustee/deal/0.2/payload.ts +1148 -0
  69. package/src/vta/pcs/trustee/decrypt/0.2/payload.ts +500 -0
  70. package/src/vta/pcs/trustee/justify/0.2/payload.ts +1167 -0
  71. package/src/vta/pcs/trustee/keys/0.2/payload.ts +1194 -0
  72. package/src/vta/pcs/vote-encrypted/0.2/payload.ts +1369 -0
  73. package/src/vtc/elections/show/0.1/payload.ts +46 -2
package/CHANGELOG.md CHANGED
@@ -11,6 +11,70 @@ 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.27.1 — 2026-10-21
15
+
16
+
17
+ ### Fixed
18
+
19
+ - **voting**: Trustees and voters act only on signed evidence; the community authorizes decryption; the key needs t dealers; ballots bind their tag (#860)
20
+
21
+ * fix(voting): trustees and voters act only on signed evidence; the community authorizes what is decrypted; the key needs t dealers; ballots bind their tag; the board is in order
22
+
23
+ An adversarial review of community voting found that a dishonest ballot box could take the
24
+ trustees' place, and a single corrupt trustee could hold the election key.
25
+
26
+ - **The box could feed the trustees' VTAs.** They acted on values voting/trustees/status reported,
27
+ which carry no trustee's proof. The box could:
28
+ - substitute transport keys, and open the shares sealed to them;
29
+ - invent complaints, and collect the shares revealed in answer;
30
+ - replace dealings, and overwrite a key share;
31
+ - list one voter's ciphertexts as a "total", or a cast before the close, and collect honest
32
+ trustees' partials of it.
33
+ - **One trustee could hold the key.** The key formed from a single qualified dealer, so a corrupt
34
+ trustee complaining of every other dealer at the last moment was left holding it alone.
35
+ - **The voter's VTA took any key.** It encrypted under whatever key it was handed, so a community
36
+ could give one member a key it held.
37
+ - **Ballots could be copied.** Nothing bound a ballot to its cast: a voter could re-cast another's
38
+ encrypted ballot verbatim under their own tag (Cortier–Smyth).
39
+ - **Certification ignored the lifecycle.** It accepted casts after close, a result before it, and
40
+ an early close a manifest forbade.
41
+
42
+ The changes:
43
+
44
+ - **vta/pcs/trustee/{deal,keys,justify,decrypt}/0.2 and vta/pcs/vote-encrypted/0.2** (the 0.1
45
+ versions retire) take the ceremony as its signed steps, which status now carries as `steps`. The
46
+ VTA verifies each step itself (CONVENTIONS §9.6). In particular:
47
+ - deal pins the transport keys it dealt to;
48
+ - justify needs the complainant's own confirm;
49
+ - keys never replaces a held share;
50
+ - the voter's VTA forms the key itself;
51
+ - vtc/elections/show carries `ceremony` for it.
52
+ - **voting/trustees/authorize/0.1 (new).** After close the community computes the decryption
53
+ targets from the board it checked, and signs their digest under the closing head. The box
54
+ accepts it only if its own targets match, and appends a `decryptionAuthorized` entry. A
55
+ trustee's VTA decrypts only an authorized set, once (decrypt/0.2). The box refuses partials
56
+ before an authorization.
57
+ - **CONVENTIONS §9.6 item 5:** the key forms only from at least t qualified dealers, with at least
58
+ t confirmations.
59
+ - **§9.3/§9.4:** an encrypted form's proofs, and a sealed form's AAD, bind the cast's tag. The box
60
+ refuses a form whose ciphertexts are already on the board under another tag.
61
+ - **§3.9 (new):** the board's order — opened, casts, close, authorization, partials, one result
62
+ whose head is the board before it — enforced at certification (`orderInvalid`,
63
+ `ceremonyInvalid` appended to boardInconsistent's faults).
64
+
65
+ ## 0.27.0 — 2026-10-21
66
+
67
+
68
+ ### Added
69
+
70
+ - **persona**: Star a directory member whose DID you have not been shown — persona/contact/put/1.1 linking form (#858)
71
+
72
+ A community directory shows members' DIDs to other members only where each member chooses to, so most entries a holder reads carry no DID to file a contact under, and persona/contact/put/1.1 required one (subjectDid) to keep a star, a petname or a list on anyone.
73
+
74
+ put/1.1 gains a third form, LINKING: directoryRef + knownByPersona, without contactId, subjectDid, document or credentialRefs. The agent finds the contact it keeps for that directory entry and persona, or makes one (rev 1, an empty document, no subjectDid), and appends no revision. A later filing naming the member's DID is a contact of its own and is not merged with the linked one (item 4, extended). Two invalid examples pin the form's edges.
75
+
76
+ get/1.1 and list/1.1 responses: subjectDid is no longer required — absent for a linked contact.
77
+
14
78
  ## 0.26.29 — 2026-10-21
15
79
 
16
80
 
@@ -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 | EncryptedCastEntry | TransportKeyEntry | DealingEntry | ConfirmationEntry | JustificationEntry | ElectionKeyEntry | PartialDecryptionsEntry | UnsealedEntry | SpoiledEntry | TrusteeStepEntry;
391
+ export type BoardEntry = CastEntry | ReplacementEntry | LifecycleEntry | ResultEntry | EncryptedCastEntry | TransportKeyEntry | DealingEntry | ConfirmationEntry | JustificationEntry | ElectionKeyEntry | PartialDecryptionsEntry | UnsealedEntry | SpoiledEntry | TrusteeStepEntry | DecryptionAuthorizedEntry;
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
  */
@@ -1572,6 +1572,13 @@ export type TransferId = string;
1572
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.
1573
1573
  */
1574
1574
  export type TransferMode = "direct" | "proxied";
1575
+ /**
1576
+ * The trustees' ceremony as the board holds it: the `request` of every `trusteeStep` entry, in board order, each exactly as the ballot box received it (CONVENTIONS §9.6). Whoever acts on it verifies each step as its trustee's before taking it; nothing in it is believed for having been passed along.
1577
+ *
1578
+ * @minItems 1
1579
+ * @maxItems 4224
1580
+ */
1581
+ export type TrusteeCeremony = [SignedRequest, ...SignedRequest[]];
1575
1582
  /**
1576
1583
  * A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.
1577
1584
  */
@@ -4640,6 +4647,13 @@ export interface TrusteeStepEntry {
4640
4647
  kind: "trusteeStep";
4641
4648
  request: SignedRequest;
4642
4649
  }
4650
+ /**
4651
+ * The community's voting/trustees/authorize request, exactly as the ballot box received it: the decryption targets of a closed election, pinned by digest to a head of the board (CONVENTIONS §9.7).
4652
+ */
4653
+ export interface DecryptionAuthorizedEntry {
4654
+ kind: "decryptionAuthorized";
4655
+ request: SignedRequest;
4656
+ }
4643
4657
  /**
4644
4658
  * 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.
4645
4659
  */