@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.
Files changed (133) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/dist/_shared/components.d.ts +207 -4
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/device/list/0.1/payload.d.ts +4 -4
  5. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  6. package/dist/device/list/0.1/payload.js +4 -2
  7. package/dist/device/list/0.1/payload.js.map +1 -1
  8. package/dist/device/list/0.2/payload.d.ts +4 -4
  9. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  10. package/dist/device/list/0.2/payload.js +4 -2
  11. package/dist/device/list/0.2/payload.js.map +1 -1
  12. package/dist/device/register/0.1/payload.d.ts +4 -4
  13. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  14. package/dist/device/register/0.1/payload.js +4 -2
  15. package/dist/device/register/0.1/payload.js.map +1 -1
  16. package/dist/device/register/0.2/payload.d.ts +4 -4
  17. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  18. package/dist/device/register/0.2/payload.js +4 -2
  19. package/dist/device/register/0.2/payload.js.map +1 -1
  20. package/dist/index.d.ts +14 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +14 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/voting/_shared/0.1/voting.d.ts +1 -1
  25. package/dist/voting/_shared/0.1/voting.d.ts.map +1 -1
  26. package/dist/voting/ballot/cast-encrypted/0.1/payload.d.ts +1166 -0
  27. package/dist/voting/ballot/cast-encrypted/0.1/payload.d.ts.map +1 -0
  28. package/dist/voting/ballot/cast-encrypted/0.1/payload.js +690 -0
  29. package/dist/voting/ballot/cast-encrypted/0.1/payload.js.map +1 -0
  30. package/dist/voting/board/read/0.1/payload.d.ts +2555 -719
  31. package/dist/voting/board/read/0.1/payload.d.ts.map +1 -1
  32. package/dist/voting/board/read/0.1/payload.js +1517 -391
  33. package/dist/voting/board/read/0.1/payload.js.map +1 -1
  34. package/dist/voting/election/register/0.1/payload.d.ts +4 -4
  35. package/dist/voting/election/register/0.1/payload.js +2 -2
  36. package/dist/voting/election/register/0.1/payload.js.map +1 -1
  37. package/dist/voting/election/show/0.1/payload.d.ts +4 -4
  38. package/dist/voting/election/show/0.1/payload.js +2 -2
  39. package/dist/voting/election/show/0.1/payload.js.map +1 -1
  40. package/dist/voting/trustees/confirm/0.1/payload.d.ts +620 -0
  41. package/dist/voting/trustees/confirm/0.1/payload.d.ts.map +1 -0
  42. package/dist/voting/trustees/confirm/0.1/payload.js +388 -0
  43. package/dist/voting/trustees/confirm/0.1/payload.js.map +1 -0
  44. package/dist/voting/trustees/deal/0.1/payload.d.ts +1032 -0
  45. package/dist/voting/trustees/deal/0.1/payload.d.ts.map +1 -0
  46. package/dist/voting/trustees/deal/0.1/payload.js +630 -0
  47. package/dist/voting/trustees/deal/0.1/payload.js.map +1 -0
  48. package/dist/voting/trustees/decrypt/0.1/payload.d.ts +1009 -0
  49. package/dist/voting/trustees/decrypt/0.1/payload.d.ts.map +1 -0
  50. package/dist/voting/trustees/decrypt/0.1/payload.js +623 -0
  51. package/dist/voting/trustees/decrypt/0.1/payload.js.map +1 -0
  52. package/dist/voting/trustees/enrol/0.1/payload.d.ts +792 -0
  53. package/dist/voting/trustees/enrol/0.1/payload.d.ts.map +1 -0
  54. package/dist/voting/trustees/enrol/0.1/payload.js +490 -0
  55. package/dist/voting/trustees/enrol/0.1/payload.js.map +1 -0
  56. package/dist/voting/trustees/justify/0.1/payload.d.ts +642 -0
  57. package/dist/voting/trustees/justify/0.1/payload.d.ts.map +1 -0
  58. package/dist/voting/trustees/justify/0.1/payload.js +402 -0
  59. package/dist/voting/trustees/justify/0.1/payload.js.map +1 -0
  60. package/dist/voting/trustees/status/0.1/payload.d.ts +1411 -0
  61. package/dist/voting/trustees/status/0.1/payload.d.ts.map +1 -0
  62. package/dist/voting/trustees/status/0.1/payload.js +822 -0
  63. package/dist/voting/trustees/status/0.1/payload.js.map +1 -0
  64. package/dist/vta/pcs/trustee/deal/0.1/payload.d.ts +2005 -0
  65. package/dist/vta/pcs/trustee/deal/0.1/payload.d.ts.map +1 -0
  66. package/dist/vta/pcs/trustee/deal/0.1/payload.js +1176 -0
  67. package/dist/vta/pcs/trustee/deal/0.1/payload.js.map +1 -0
  68. package/dist/vta/pcs/trustee/decrypt/0.1/payload.d.ts +736 -0
  69. package/dist/vta/pcs/trustee/decrypt/0.1/payload.d.ts.map +1 -0
  70. package/dist/vta/pcs/trustee/decrypt/0.1/payload.js +412 -0
  71. package/dist/vta/pcs/trustee/decrypt/0.1/payload.js.map +1 -0
  72. package/dist/vta/pcs/trustee/enrol/0.1/payload.d.ts +1756 -0
  73. package/dist/vta/pcs/trustee/enrol/0.1/payload.d.ts.map +1 -0
  74. package/dist/vta/pcs/trustee/enrol/0.1/payload.js +1040 -0
  75. package/dist/vta/pcs/trustee/enrol/0.1/payload.js.map +1 -0
  76. package/dist/vta/pcs/trustee/justify/0.1/payload.d.ts +504 -0
  77. package/dist/vta/pcs/trustee/justify/0.1/payload.d.ts.map +1 -0
  78. package/dist/vta/pcs/trustee/justify/0.1/payload.js +274 -0
  79. package/dist/vta/pcs/trustee/justify/0.1/payload.js.map +1 -0
  80. package/dist/vta/pcs/trustee/keys/0.1/payload.d.ts +2501 -0
  81. package/dist/vta/pcs/trustee/keys/0.1/payload.d.ts.map +1 -0
  82. package/dist/vta/pcs/trustee/keys/0.1/payload.js +1455 -0
  83. package/dist/vta/pcs/trustee/keys/0.1/payload.js.map +1 -0
  84. package/dist/vta/pcs/vote/0.1/payload.d.ts +4 -4
  85. package/dist/vta/pcs/vote/0.1/payload.js +2 -2
  86. package/dist/vta/pcs/vote/0.1/payload.js.map +1 -1
  87. package/dist/vta/pcs/vote-encrypted/0.1/payload.d.ts +2375 -0
  88. package/dist/vta/pcs/vote-encrypted/0.1/payload.d.ts.map +1 -0
  89. package/dist/vta/pcs/vote-encrypted/0.1/payload.js +1389 -0
  90. package/dist/vta/pcs/vote-encrypted/0.1/payload.js.map +1 -0
  91. package/dist/vta/pcs/voter/register/0.1/payload.d.ts +4 -4
  92. package/dist/vta/pcs/voter/register/0.1/payload.js +2 -2
  93. package/dist/vta/pcs/voter/register/0.1/payload.js.map +1 -1
  94. package/dist/vtc/config/did-hosting/list/0.1/payload.d.ts +339 -0
  95. package/dist/vtc/config/did-hosting/list/0.1/payload.d.ts.map +1 -0
  96. package/dist/vtc/config/did-hosting/list/0.1/payload.js +185 -0
  97. package/dist/vtc/config/did-hosting/list/0.1/payload.js.map +1 -0
  98. package/dist/vtc/elections/create/0.1/payload.d.ts +4 -4
  99. package/dist/vtc/elections/create/0.1/payload.js +2 -2
  100. package/dist/vtc/elections/create/0.1/payload.js.map +1 -1
  101. package/dist/vtc/elections/show/0.1/payload.d.ts +242 -6
  102. package/dist/vtc/elections/show/0.1/payload.d.ts.map +1 -1
  103. package/dist/vtc/elections/show/0.1/payload.js +132 -2
  104. package/dist/vtc/elections/show/0.1/payload.js.map +1 -1
  105. package/package.json +1 -1
  106. package/src/_shared/components.ts +222 -4
  107. package/src/device/list/0.1/payload.ts +4 -2
  108. package/src/device/list/0.2/payload.ts +4 -2
  109. package/src/device/register/0.1/payload.ts +4 -2
  110. package/src/device/register/0.2/payload.ts +4 -2
  111. package/src/index.ts +14 -0
  112. package/src/voting/_shared/0.1/voting.ts +1 -1
  113. package/src/voting/ballot/cast-encrypted/0.1/payload.ts +735 -0
  114. package/src/voting/board/read/0.1/payload.ts +1519 -393
  115. package/src/voting/election/register/0.1/payload.ts +2 -2
  116. package/src/voting/election/show/0.1/payload.ts +2 -2
  117. package/src/voting/trustees/confirm/0.1/payload.ts +429 -0
  118. package/src/voting/trustees/deal/0.1/payload.ts +665 -0
  119. package/src/voting/trustees/decrypt/0.1/payload.ts +663 -0
  120. package/src/voting/trustees/enrol/0.1/payload.ts +525 -0
  121. package/src/voting/trustees/justify/0.1/payload.ts +439 -0
  122. package/src/voting/trustees/status/0.1/payload.ts +890 -0
  123. package/src/vta/pcs/trustee/deal/0.1/payload.ts +1250 -0
  124. package/src/vta/pcs/trustee/decrypt/0.1/payload.ts +489 -0
  125. package/src/vta/pcs/trustee/enrol/0.1/payload.ts +1107 -0
  126. package/src/vta/pcs/trustee/justify/0.1/payload.ts +341 -0
  127. package/src/vta/pcs/trustee/keys/0.1/payload.ts +1545 -0
  128. package/src/vta/pcs/vote/0.1/payload.ts +2 -2
  129. package/src/vta/pcs/vote-encrypted/0.1/payload.ts +1455 -0
  130. package/src/vta/pcs/voter/register/0.1/payload.ts +2 -2
  131. package/src/vtc/config/did-hosting/list/0.1/payload.ts +233 -0
  132. package/src/vtc/elections/create/0.1/payload.ts +2 -2
  133. package/src/vtc/elections/show/0.1/payload.ts +138 -4
@@ -2,7 +2,7 @@
2
2
  * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
3
  * Source: specs/vtc/elections/show/0.1/payload.schema.json
4
4
  */
5
- import type { BoardHead, BoardVisibility, ChoiceQuestion, DigestMultibase, Disclosure, ElectionId, ElectionResult, Ext, Key_VotingV0_1 as Key, Manifest, Multibase_VotingV0_1 as Multibase, Question, QuestionOption, QuestionResult, RankingQuestion, Revote, RollRule, ScoreQuestion, SecrecyLevel, TextQuestion, Trustees, VotingParameters } from "../../../../_shared/components.js";
5
+ import type { BoardHead, BoardVisibility, ChoiceQuestion, DigestMultibase, Disclosure, ElectionId, ElectionKey, ElectionResult, Ext, GroupElement, Key_VotingV0_1 as Key, Manifest, Multibase_VotingV0_1 as Multibase, Question, QuestionOption, QuestionResult, RankingQuestion, Revote, RollRule, ScoreQuestion, SecrecyLevel, TextQuestion, TrusteeIndex, Trustees, VotingParameters } from "../../../../_shared/components.js";
6
6
  /**
7
7
  * An election's state as its registrar holds it: the ballot box's `ElectionState` once the ballot box has registered the election, or, before that, `pendingRegistration` (the community is still delivering the registration) or `registrationRefused` (the ballot box refused it on a later delivery, and only a cancellation clears it). The first six values are the ballot box's `ElectionState` (voting/_shared/0.1).
8
8
  */
@@ -42,6 +42,10 @@ export interface VTCElectionsShowResponsePayload {
42
42
  * How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage.
43
43
  */
44
44
  ticketsIssued?: number;
45
+ /**
46
+ * The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6).
47
+ */
48
+ electionKey?: ElectionKey;
45
49
  certified?: Certification;
46
50
  ext?: Ext;
47
51
  }
@@ -67,7 +71,7 @@ export interface Certification {
67
71
  auditAttestations: {}[];
68
72
  }
69
73
  /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
70
- export type { BoardHead, BoardVisibility, ChoiceQuestion, DigestMultibase, Disclosure, ElectionId, ElectionResult, Ext, Key, Manifest, Multibase, Question, QuestionOption, QuestionResult, RankingQuestion, Revote, RollRule, ScoreQuestion, SecrecyLevel, TextQuestion, Trustees, VotingParameters };
74
+ export type { BoardHead, BoardVisibility, ChoiceQuestion, DigestMultibase, Disclosure, ElectionId, ElectionKey, ElectionResult, Ext, GroupElement, Key, Manifest, Multibase, Question, QuestionOption, QuestionResult, RankingQuestion, Revote, RollRule, ScoreQuestion, SecrecyLevel, TextQuestion, TrusteeIndex, Trustees, VotingParameters };
71
75
  /** Trust Task type URI. */
72
76
  export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/elections/show/0.1";
73
77
  /** Stable alias for this specification's request payload shape. */
@@ -188,6 +192,10 @@ export declare const PAYLOAD_SCHEMA: {
188
192
  readonly minimum: 0;
189
193
  readonly description: "How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage.";
190
194
  };
195
+ readonly electionKey: {
196
+ readonly $ref: "#/$defs/ElectionKey";
197
+ readonly description: "The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6).";
198
+ };
191
199
  readonly certified: {
192
200
  readonly $ref: "#/$defs/Certification";
193
201
  readonly description: "Present once the community has certified the result.";
@@ -207,6 +215,60 @@ export declare const PAYLOAD_SCHEMA: {
207
215
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
208
216
  };
209
217
  };
218
+ readonly ElectionKey: {
219
+ readonly title: "ElectionKey";
220
+ readonly description: "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.";
221
+ readonly type: "object";
222
+ readonly additionalProperties: false;
223
+ readonly required: readonly ["key", "qualified", "verification"];
224
+ readonly properties: {
225
+ readonly key: {
226
+ readonly $ref: "#/$defs/GroupElement";
227
+ };
228
+ readonly qualified: {
229
+ readonly type: "array";
230
+ readonly minItems: 1;
231
+ readonly maxItems: 64;
232
+ readonly items: {
233
+ readonly $ref: "#/$defs/TrusteeIndex";
234
+ };
235
+ readonly description: "The dealers whose dealings the key is formed from.";
236
+ };
237
+ readonly verification: {
238
+ readonly type: "array";
239
+ readonly minItems: 2;
240
+ readonly maxItems: 64;
241
+ readonly items: {
242
+ readonly type: "object";
243
+ readonly additionalProperties: false;
244
+ readonly required: readonly ["trustee", "key"];
245
+ readonly properties: {
246
+ readonly trustee: {
247
+ readonly $ref: "#/$defs/TrusteeIndex";
248
+ };
249
+ readonly key: {
250
+ readonly $ref: "#/$defs/GroupElement";
251
+ };
252
+ };
253
+ };
254
+ };
255
+ };
256
+ };
257
+ readonly GroupElement: {
258
+ readonly title: "GroupElement";
259
+ readonly description: "A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).";
260
+ readonly type: "string";
261
+ readonly minLength: 2;
262
+ readonly maxLength: 64;
263
+ readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
264
+ };
265
+ readonly TrusteeIndex: {
266
+ readonly title: "TrusteeIndex";
267
+ readonly description: "A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.";
268
+ readonly type: "integer";
269
+ readonly minimum: 1;
270
+ readonly maximum: 64;
271
+ };
210
272
  readonly Disclosure: {
211
273
  readonly title: "Disclosure";
212
274
  readonly description: "The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.";
@@ -444,7 +506,7 @@ export declare const PAYLOAD_SCHEMA: {
444
506
  };
445
507
  readonly SecrecyLevel: {
446
508
  readonly title: "SecrecyLevel";
447
- readonly description: "`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). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.";
509
+ readonly description: "`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).";
448
510
  readonly type: "string";
449
511
  readonly enum: readonly ["open", "sealed", "talliedEncrypted"];
450
512
  };
@@ -826,6 +888,10 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
826
888
  readonly minimum: 0;
827
889
  readonly description: "How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage.";
828
890
  };
891
+ readonly electionKey: {
892
+ readonly $ref: "#/$defs/ElectionKey";
893
+ readonly description: "The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6).";
894
+ };
829
895
  readonly certified: {
830
896
  readonly $ref: "#/$defs/Certification";
831
897
  readonly description: "Present once the community has certified the result.";
@@ -845,6 +911,60 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
845
911
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
846
912
  };
847
913
  };
914
+ readonly ElectionKey: {
915
+ readonly title: "ElectionKey";
916
+ readonly description: "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.";
917
+ readonly type: "object";
918
+ readonly additionalProperties: false;
919
+ readonly required: readonly ["key", "qualified", "verification"];
920
+ readonly properties: {
921
+ readonly key: {
922
+ readonly $ref: "#/$defs/GroupElement";
923
+ };
924
+ readonly qualified: {
925
+ readonly type: "array";
926
+ readonly minItems: 1;
927
+ readonly maxItems: 64;
928
+ readonly items: {
929
+ readonly $ref: "#/$defs/TrusteeIndex";
930
+ };
931
+ readonly description: "The dealers whose dealings the key is formed from.";
932
+ };
933
+ readonly verification: {
934
+ readonly type: "array";
935
+ readonly minItems: 2;
936
+ readonly maxItems: 64;
937
+ readonly items: {
938
+ readonly type: "object";
939
+ readonly additionalProperties: false;
940
+ readonly required: readonly ["trustee", "key"];
941
+ readonly properties: {
942
+ readonly trustee: {
943
+ readonly $ref: "#/$defs/TrusteeIndex";
944
+ };
945
+ readonly key: {
946
+ readonly $ref: "#/$defs/GroupElement";
947
+ };
948
+ };
949
+ };
950
+ };
951
+ };
952
+ };
953
+ readonly GroupElement: {
954
+ readonly title: "GroupElement";
955
+ readonly description: "A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).";
956
+ readonly type: "string";
957
+ readonly minLength: 2;
958
+ readonly maxLength: 64;
959
+ readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
960
+ };
961
+ readonly TrusteeIndex: {
962
+ readonly title: "TrusteeIndex";
963
+ readonly description: "A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.";
964
+ readonly type: "integer";
965
+ readonly minimum: 1;
966
+ readonly maximum: 64;
967
+ };
848
968
  readonly Disclosure: {
849
969
  readonly title: "Disclosure";
850
970
  readonly description: "The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.";
@@ -1082,7 +1202,7 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
1082
1202
  };
1083
1203
  readonly SecrecyLevel: {
1084
1204
  readonly title: "SecrecyLevel";
1085
- readonly description: "`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). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.";
1205
+ readonly description: "`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).";
1086
1206
  readonly type: "string";
1087
1207
  readonly enum: readonly ["open", "sealed", "talliedEncrypted"];
1088
1208
  };
@@ -1488,6 +1608,10 @@ export declare const SPEC: {
1488
1608
  readonly minimum: 0;
1489
1609
  readonly description: "How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage.";
1490
1610
  };
1611
+ readonly electionKey: {
1612
+ readonly $ref: "#/$defs/ElectionKey";
1613
+ readonly description: "The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6).";
1614
+ };
1491
1615
  readonly certified: {
1492
1616
  readonly $ref: "#/$defs/Certification";
1493
1617
  readonly description: "Present once the community has certified the result.";
@@ -1507,6 +1631,60 @@ export declare const SPEC: {
1507
1631
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
1508
1632
  };
1509
1633
  };
1634
+ readonly ElectionKey: {
1635
+ readonly title: "ElectionKey";
1636
+ readonly description: "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.";
1637
+ readonly type: "object";
1638
+ readonly additionalProperties: false;
1639
+ readonly required: readonly ["key", "qualified", "verification"];
1640
+ readonly properties: {
1641
+ readonly key: {
1642
+ readonly $ref: "#/$defs/GroupElement";
1643
+ };
1644
+ readonly qualified: {
1645
+ readonly type: "array";
1646
+ readonly minItems: 1;
1647
+ readonly maxItems: 64;
1648
+ readonly items: {
1649
+ readonly $ref: "#/$defs/TrusteeIndex";
1650
+ };
1651
+ readonly description: "The dealers whose dealings the key is formed from.";
1652
+ };
1653
+ readonly verification: {
1654
+ readonly type: "array";
1655
+ readonly minItems: 2;
1656
+ readonly maxItems: 64;
1657
+ readonly items: {
1658
+ readonly type: "object";
1659
+ readonly additionalProperties: false;
1660
+ readonly required: readonly ["trustee", "key"];
1661
+ readonly properties: {
1662
+ readonly trustee: {
1663
+ readonly $ref: "#/$defs/TrusteeIndex";
1664
+ };
1665
+ readonly key: {
1666
+ readonly $ref: "#/$defs/GroupElement";
1667
+ };
1668
+ };
1669
+ };
1670
+ };
1671
+ };
1672
+ };
1673
+ readonly GroupElement: {
1674
+ readonly title: "GroupElement";
1675
+ readonly description: "A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).";
1676
+ readonly type: "string";
1677
+ readonly minLength: 2;
1678
+ readonly maxLength: 64;
1679
+ readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
1680
+ };
1681
+ readonly TrusteeIndex: {
1682
+ readonly title: "TrusteeIndex";
1683
+ readonly description: "A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.";
1684
+ readonly type: "integer";
1685
+ readonly minimum: 1;
1686
+ readonly maximum: 64;
1687
+ };
1510
1688
  readonly Disclosure: {
1511
1689
  readonly title: "Disclosure";
1512
1690
  readonly description: "The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.";
@@ -1744,7 +1922,7 @@ export declare const SPEC: {
1744
1922
  };
1745
1923
  readonly SecrecyLevel: {
1746
1924
  readonly title: "SecrecyLevel";
1747
- readonly description: "`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). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.";
1925
+ readonly description: "`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).";
1748
1926
  readonly type: "string";
1749
1927
  readonly enum: readonly ["open", "sealed", "talliedEncrypted"];
1750
1928
  };
@@ -2137,6 +2315,10 @@ export declare const RESPONSE_SPEC: {
2137
2315
  readonly minimum: 0;
2138
2316
  readonly description: "How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage.";
2139
2317
  };
2318
+ readonly electionKey: {
2319
+ readonly $ref: "#/$defs/ElectionKey";
2320
+ readonly description: "The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6).";
2321
+ };
2140
2322
  readonly certified: {
2141
2323
  readonly $ref: "#/$defs/Certification";
2142
2324
  readonly description: "Present once the community has certified the result.";
@@ -2156,6 +2338,60 @@ export declare const RESPONSE_SPEC: {
2156
2338
  readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
2157
2339
  };
2158
2340
  };
2341
+ readonly ElectionKey: {
2342
+ readonly title: "ElectionKey";
2343
+ readonly description: "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.";
2344
+ readonly type: "object";
2345
+ readonly additionalProperties: false;
2346
+ readonly required: readonly ["key", "qualified", "verification"];
2347
+ readonly properties: {
2348
+ readonly key: {
2349
+ readonly $ref: "#/$defs/GroupElement";
2350
+ };
2351
+ readonly qualified: {
2352
+ readonly type: "array";
2353
+ readonly minItems: 1;
2354
+ readonly maxItems: 64;
2355
+ readonly items: {
2356
+ readonly $ref: "#/$defs/TrusteeIndex";
2357
+ };
2358
+ readonly description: "The dealers whose dealings the key is formed from.";
2359
+ };
2360
+ readonly verification: {
2361
+ readonly type: "array";
2362
+ readonly minItems: 2;
2363
+ readonly maxItems: 64;
2364
+ readonly items: {
2365
+ readonly type: "object";
2366
+ readonly additionalProperties: false;
2367
+ readonly required: readonly ["trustee", "key"];
2368
+ readonly properties: {
2369
+ readonly trustee: {
2370
+ readonly $ref: "#/$defs/TrusteeIndex";
2371
+ };
2372
+ readonly key: {
2373
+ readonly $ref: "#/$defs/GroupElement";
2374
+ };
2375
+ };
2376
+ };
2377
+ };
2378
+ };
2379
+ };
2380
+ readonly GroupElement: {
2381
+ readonly title: "GroupElement";
2382
+ readonly description: "A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).";
2383
+ readonly type: "string";
2384
+ readonly minLength: 2;
2385
+ readonly maxLength: 64;
2386
+ readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
2387
+ };
2388
+ readonly TrusteeIndex: {
2389
+ readonly title: "TrusteeIndex";
2390
+ readonly description: "A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.";
2391
+ readonly type: "integer";
2392
+ readonly minimum: 1;
2393
+ readonly maximum: 64;
2394
+ };
2159
2395
  readonly Disclosure: {
2160
2396
  readonly title: "Disclosure";
2161
2397
  readonly description: "The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.";
@@ -2393,7 +2629,7 @@ export declare const RESPONSE_SPEC: {
2393
2629
  };
2394
2630
  readonly SecrecyLevel: {
2395
2631
  readonly title: "SecrecyLevel";
2396
- readonly description: "`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). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.";
2632
+ readonly description: "`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).";
2397
2633
  readonly type: "string";
2398
2634
  readonly enum: readonly ["open", "sealed", "talliedEncrypted"];
2399
2635
  };
@@ -1 +1 @@
1
- {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/vtc/elections/show/0.1/payload.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuvB1B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOP,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhB,CAAC"}
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/vtc/elections/show/0.1/payload.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOP,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhB,CAAC"}
@@ -143,6 +143,10 @@ export const PAYLOAD_SCHEMA = {
143
143
  "minimum": 0,
144
144
  "description": "How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage."
145
145
  },
146
+ "electionKey": {
147
+ "$ref": "#/$defs/ElectionKey",
148
+ "description": "The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6)."
149
+ },
146
150
  "certified": {
147
151
  "$ref": "#/$defs/Certification",
148
152
  "description": "Present once the community has certified the result."
@@ -162,6 +166,67 @@ export const PAYLOAD_SCHEMA = {
162
166
  "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
163
167
  }
164
168
  },
169
+ "ElectionKey": {
170
+ "title": "ElectionKey",
171
+ "description": "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.",
172
+ "type": "object",
173
+ "additionalProperties": false,
174
+ "required": [
175
+ "key",
176
+ "qualified",
177
+ "verification"
178
+ ],
179
+ "properties": {
180
+ "key": {
181
+ "$ref": "#/$defs/GroupElement"
182
+ },
183
+ "qualified": {
184
+ "type": "array",
185
+ "minItems": 1,
186
+ "maxItems": 64,
187
+ "items": {
188
+ "$ref": "#/$defs/TrusteeIndex"
189
+ },
190
+ "description": "The dealers whose dealings the key is formed from."
191
+ },
192
+ "verification": {
193
+ "type": "array",
194
+ "minItems": 2,
195
+ "maxItems": 64,
196
+ "items": {
197
+ "type": "object",
198
+ "additionalProperties": false,
199
+ "required": [
200
+ "trustee",
201
+ "key"
202
+ ],
203
+ "properties": {
204
+ "trustee": {
205
+ "$ref": "#/$defs/TrusteeIndex"
206
+ },
207
+ "key": {
208
+ "$ref": "#/$defs/GroupElement"
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }
214
+ },
215
+ "GroupElement": {
216
+ "title": "GroupElement",
217
+ "description": "A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).",
218
+ "type": "string",
219
+ "minLength": 2,
220
+ "maxLength": 64,
221
+ "pattern": "^z[1-9A-HJ-NP-Za-km-z]+$"
222
+ },
223
+ "TrusteeIndex": {
224
+ "title": "TrusteeIndex",
225
+ "description": "A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.",
226
+ "type": "integer",
227
+ "minimum": 1,
228
+ "maximum": 64
229
+ },
165
230
  "Disclosure": {
166
231
  "title": "Disclosure",
167
232
  "description": "The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.",
@@ -446,7 +511,7 @@ export const PAYLOAD_SCHEMA = {
446
511
  },
447
512
  "SecrecyLevel": {
448
513
  "title": "SecrecyLevel",
449
- "description": "`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). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.",
514
+ "description": "`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).",
450
515
  "type": "string",
451
516
  "enum": [
452
517
  "open",
@@ -904,6 +969,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
904
969
  "minimum": 0,
905
970
  "description": "How many tickets the community has issued for the election. Present only to a caller holding vtc.elections.manage."
906
971
  },
972
+ "electionKey": {
973
+ "$ref": "#/$defs/ElectionKey",
974
+ "description": "The key a sealed or tallied-encrypted election's ballots are encrypted under, once its trustees have formed it (CONVENTIONS §9.6)."
975
+ },
907
976
  "certified": {
908
977
  "$ref": "#/$defs/Certification",
909
978
  "description": "Present once the community has certified the result."
@@ -923,6 +992,67 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
923
992
  "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
924
993
  }
925
994
  },
995
+ "ElectionKey": {
996
+ "title": "ElectionKey",
997
+ "description": "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.",
998
+ "type": "object",
999
+ "additionalProperties": false,
1000
+ "required": [
1001
+ "key",
1002
+ "qualified",
1003
+ "verification"
1004
+ ],
1005
+ "properties": {
1006
+ "key": {
1007
+ "$ref": "#/$defs/GroupElement"
1008
+ },
1009
+ "qualified": {
1010
+ "type": "array",
1011
+ "minItems": 1,
1012
+ "maxItems": 64,
1013
+ "items": {
1014
+ "$ref": "#/$defs/TrusteeIndex"
1015
+ },
1016
+ "description": "The dealers whose dealings the key is formed from."
1017
+ },
1018
+ "verification": {
1019
+ "type": "array",
1020
+ "minItems": 2,
1021
+ "maxItems": 64,
1022
+ "items": {
1023
+ "type": "object",
1024
+ "additionalProperties": false,
1025
+ "required": [
1026
+ "trustee",
1027
+ "key"
1028
+ ],
1029
+ "properties": {
1030
+ "trustee": {
1031
+ "$ref": "#/$defs/TrusteeIndex"
1032
+ },
1033
+ "key": {
1034
+ "$ref": "#/$defs/GroupElement"
1035
+ }
1036
+ }
1037
+ }
1038
+ }
1039
+ }
1040
+ },
1041
+ "GroupElement": {
1042
+ "title": "GroupElement",
1043
+ "description": "A Ristretto group element: its 32-byte compression, multibase base58btc. Never the identity (CONVENTIONS §9.1).",
1044
+ "type": "string",
1045
+ "minLength": 2,
1046
+ "maxLength": 64,
1047
+ "pattern": "^z[1-9A-HJ-NP-Za-km-z]+$"
1048
+ },
1049
+ "TrusteeIndex": {
1050
+ "title": "TrusteeIndex",
1051
+ "description": "A trustee's index: its position in the manifest's `trustees.dids`, counting from 1.",
1052
+ "type": "integer",
1053
+ "minimum": 1,
1054
+ "maximum": 64
1055
+ },
926
1056
  "Disclosure": {
927
1057
  "title": "Disclosure",
928
1058
  "description": "The statement a community publishes, and shows a member before they request a ticket, about how one election is run (VTI-VOT-090). Generated from the election's manifest and the community's configuration, never written by hand.",
@@ -1207,7 +1337,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
1207
1337
  },
1208
1338
  "SecrecyLevel": {
1209
1339
  "title": "SecrecyLevel",
1210
- "description": "`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). Version 0.1 of the voting tasks carries open ballots only; a ballot box refuses to register any other level with `voting/election/register:unsupportedSecrecy` until the trustee tasks are specified.",
1340
+ "description": "`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).",
1211
1341
  "type": "string",
1212
1342
  "enum": [
1213
1343
  "open",