@maci-protocol/website 0.0.0-ci.f9da2fc → 0.0.0-ci.fc91dc9

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 (36) hide show
  1. package/LICENSE +1 -2
  2. package/blog/2024-02-28-maci-v1.2.0.md +1 -1
  3. package/blog/2024-08-10-maci-v2.md +1 -1
  4. package/package.json +4 -4
  5. package/src/pages/roadmap.md +39 -80
  6. package/static/img/circuits/MACI-Circuits.excalidraw +28 -28
  7. package/static/img/circuits/ecdh.svg +1 -1
  8. package/static/img/circuits/messageToCommand.svg +1 -1
  9. package/static/img/circuits/messageValidator.svg +1 -1
  10. package/static/img/circuits/privToPubkey.svg +1 -1
  11. package/static/img/circuits/processMessages.svg +1 -1
  12. package/static/img/circuits/processMessagesInputHasher.svg +1 -1
  13. package/static/img/circuits/processMessages_2_0.svg +1 -1
  14. package/static/img/circuits/processOne.svg +1 -1
  15. package/static/img/circuits/processTopup.svg +1 -1
  16. package/static/img/circuits/tallyInputHasher.svg +1 -1
  17. package/static/img/circuits/verifySignature.svg +1 -1
  18. package/versioned_docs/version-v3.x/core-concepts/key-change.md +25 -25
  19. package/versioned_docs/version-v3.x/core-concepts/maci-keys.md +1 -1
  20. package/versioned_docs/version-v3.x/core-concepts/poll-types.md +2 -2
  21. package/versioned_docs/version-v3.x/core-concepts/polls.md +3 -3
  22. package/versioned_docs/version-v3.x/core-concepts/spec.md +33 -99
  23. package/versioned_docs/version-v3.x/guides/compile-circuits.md +7 -7
  24. package/versioned_docs/version-v3.x/guides/integrating.md +8 -8
  25. package/versioned_docs/version-v3.x/guides/testing/testing-in-detail.md +1 -1
  26. package/versioned_docs/version-v3.x/guides/troubleshooting.md +11 -11
  27. package/versioned_docs/version-v3.x/quick-start.md +6 -6
  28. package/versioned_docs/version-v3.x/supported-networks/deployed-contracts.md +2 -2
  29. package/versioned_docs/version-v3.x/technical-references/smart-contracts/MACI.md +5 -5
  30. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Poll.md +7 -7
  31. package/versioned_docs/version-v3.x/technical-references/smart-contracts/Tally.md +2 -2
  32. package/versioned_docs/version-v3.x/technical-references/smart-contracts/VkRegistry.md +5 -5
  33. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/joinPoll.md +3 -3
  34. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/processMessages.md +12 -12
  35. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/tallyVotes.md +2 -2
  36. package/versioned_docs/version-v3.x/technical-references/zk-snark-circuits/utilities.md +1 -1
package/LICENSE CHANGED
@@ -1,7 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020 Barry WhiteHat, Kendrick Tan, Kobi Gurkan, Kirill Goncharov
4
- Cory Dickson, Han Jian, Chih-Cheng Liang, and Koh Wei Jie
3
+ Copyright (c) 2025 Ethereum Foundation
5
4
 
6
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
7
6
  of this software and associated documentation files (the "Software"), to deal
@@ -106,7 +106,7 @@ For those looking to contribute directly, report bugs, or offer feedback, our [G
106
106
 
107
107
  For practical implementation insights, review our docs as well as the [clr.fund](https://github.com/clrfund/monorepo/) and [QF](https://github.com/quadratic-gardens/qfi) repositories as reference implementations. Both are quadratic funding implementations, a mechanism which otherwise is highly susceptible to collusion and bribery. Most notably, clr.fund is already working on integrating MACI v1.2.0, after having used v0.x until now. You can follow their development effort under this [GitHub branch](https://github.com/clrfund/monorepo/tree/feat/maci-v1).
108
108
 
109
- For any other questions or feedback, please reach out to us via [PSE's Discord](https://discord.com/invite/sF5CT5rzrR), in our [`#🗳️-maci` channel](https://https//discord.com/channels/943612659163602974/1164613809730748507). We're excited to connect and collaborate with you!
109
+ For any other questions or feedback, please reach out to us via [PSE's Discord](https://discord.com/invite/sF5CT5rzrR), in our [`#🗳️-maci` channel](https://discord.com/channels/943612659163602974/1164613809730748507). We're excited to connect and collaborate with you!
110
110
 
111
111
  ## References
112
112
 
@@ -84,7 +84,7 @@ For those looking to contribute directly, report bugs, or offer feedback, our [G
84
84
 
85
85
  For practical implementation insights, review our docs as well as the [clr.fund](https://github.com/clrfund/monorepo/), [Allo Stack with MACI](https://github.com/gitcoinco/MACI_QF), and [maci-platform](https://github.com/privacy-scaling-explorations/maci-platform) repositories as reference implementations. The first two integrations are quadratic funding implementations, a mechanism which otherwise is highly susceptible to collusion and bribery.
86
86
 
87
- For any other questions or feedback, please reach out to us via [PSE's Discord](https://discord.com/invite/sF5CT5rzrR), in our [`#🗳️-maci` channel](https://https//discord.com/channels/943612659163602974/1164613809730748507). We're excited to connect and collaborate with you!
87
+ For any other questions or feedback, please reach out to us via [PSE's Discord](https://discord.com/invite/sF5CT5rzrR), in our [`#🗳️-maci` channel](https://discord.com/channels/943612659163602974/1164613809730748507). We're excited to connect and collaborate with you!
88
88
 
89
89
  ## References
90
90
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maci-protocol/website",
3
- "version": "0.0.0-ci.f9da2fc",
3
+ "version": "0.0.0-ci.fc91dc9",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -41,8 +41,8 @@
41
41
  "@docusaurus/module-type-aliases": "^3.7.0",
42
42
  "@docusaurus/tsconfig": "^3.7.0",
43
43
  "@docusaurus/types": "^3.7.0",
44
- "@types/node": "^22.14.0",
45
- "@types/react": "^19.1.0",
44
+ "@types/node": "^22.14.1",
45
+ "@types/react": "^19.1.2",
46
46
  "ts-node": "^10.9.2",
47
47
  "typescript": "^5.8.3"
48
48
  },
@@ -61,5 +61,5 @@
61
61
  "engines": {
62
62
  "node": ">=18.0"
63
63
  },
64
- "gitHead": "6dbb127aeeb12898e9a75377c8a633a06b9a8132"
64
+ "gitHead": "cae5ed7363dca196c50b429e81c3d6c87c11ee39"
65
65
  }
@@ -8,14 +8,14 @@ description: An outline of the 2024 MACI team & product roadmap
8
8
  _This public roadmap is part of our core team's efforts to make our work more accessible and to foster more collaboration from our open source community. We plan to re-assess & iterate on our roadmap over time, and will update this document when we do._
9
9
 
10
10
  :::info
11
- This document aims to outline the 2024 MACI roadmap. Our roadmap is under constant discussion and evolution (e.g. see our [Q1](/blog/2024-team-roadmap) and [Q2](/blog/2024-q2-roadmap) updates) but we try our best to maintain this page to provide a high-level overview. Please join the conversation in our [latest GitHub discussion](https://github.com/privacy-scaling-explorations/maci/discussions/1381) if you have feedback!
11
+ This document aims to outline the 2025 MACI roadmap. Our roadmap is under constant discussion and evolution (e.g. see our [high level 2025 roadmap](/blog/2025-roadmap) updates) but we try our best to maintain this page to provide a high-level overview. Please join the conversation in our [discord server](https://discord.com/invite/sF5CT5rzrR) if you have feedback!
12
12
 
13
- **Last updated: 2024-04-16**
13
+ **Last updated: 2025-04-23**
14
14
  :::
15
15
 
16
16
  ## Team description
17
17
 
18
- The MACI core team is a small collaborative engineering team building various projects within [Privacy & Scaling Explorations (PSE)](https://pse.dev/). Our sustained focus is on MACI: an on-chain voting protocol that provides greatly increased collusion resistance & privacy. We also allocate a significant portion of our time to support the practical adoption of this technology by supporting community leaders to run democratic governance and public funding initiatives, like Quadratic Voting (QV), Quadratic Funding (QF), and Retroactive Public Goods Funding (RPGF) grant rounds.
18
+ The MACI core team is a small collaborative engineering team building various projects within [Privacy & Scaling Explorations (PSE)](https://pse.dev/). Our sustained focus is on MACI: an on-chain voting protocol that provides greatly increased collusion resistance & privacy. We also allocate a portion of our time to support the practical adoption of this technology by supporting community leaders to run democratic governance and public funding initiatives, like Quadratic Voting (QV), Quadratic Funding (QF), and Retroactive Public Goods Funding (RPGF) grant rounds.
19
19
 
20
20
  ## MACI mission & vision
21
21
 
@@ -29,8 +29,8 @@ Short term, our vision is to empower developers to build with MACI to create col
29
29
 
30
30
  1. ~~2021: MACI integrated by an ecosystem project~~ (✅, [clr.fund](https://github.com/clrfund/monorepo/))
31
31
  2. ~~2023: MACI integrated by a PSE project~~ (✅, [QF](https://github.com/privacy-scaling-explorations/qf))
32
- 3. 2024: MACI integrated by an additional external project
33
- 4. 2025: MACI used by multiple DAOs for governance applications & QF integrations
32
+ 3. ~~2024: MACI integrated by an additional external project~~ (✅, [PriVote](https://github.com/PriVote-Project), [Gitcoin](https://github.com/gitcoinco/MACI_QF))
33
+ 4. 2025: MACI used by multiple DAOs for governance applications
34
34
  5. 2028: MACI used in smaller municipal elections (counties, provinces, etc)
35
35
  6. 2030: MACI used in national elections
36
36
 
@@ -38,110 +38,69 @@ Short term, our vision is to empower developers to build with MACI to create col
38
38
 
39
39
  1. ~~2021: release MACI v1.0~~ (✅)
40
40
  2. ~~2023: build technical feasibility for 10K concurrent voters on the platform~~ (✅)
41
- 3. 2024 Q1: release MACI v1.2, with revamped documentation & educational resource
42
- 4. 2026: build technical feasibility for 100K concurrent voters on the platform
43
- 5. 2028: build technical feasibility for 1M concurrent voters on the platform
41
+ 3. 2024:
44
42
 
45
- # 2024 workstreams
43
+ - ~~Q1: release MACI v1.2, with revamped documentation & educational resource~~ (✅)
44
+ - ~~Q3: release MACI v2.0, with cleaner code and improved UX~~ (✅)
46
45
 
47
- _To achieve our mission, we’re focused on 4 major workstreams that comprise our roadmap._
46
+ 4. 2025: release MACI v3.0, with new features for a more scalable and flexible platform
47
+ 5. 2026: build technical feasibility for 100K concurrent voters on the platform
48
+ 6. 2028: build technical feasibility for 1M concurrent voters on the platform
48
49
 
49
- ## 1) MACI Developer Experience (DX)
50
+ # 2025 workstreams
50
51
 
51
- ~_50% of team’s total bandwidth_
52
+ In 2025, we are focusing on several initiatives to support the practical adoption of MACI.
52
53
 
53
- We believe that MACI is only useful to the extent that people use MACI & build on MACI.
54
+ ## 1) MACI v3.0
54
55
 
55
- Despite the power of MACI, not a single project has yet integrated MACI v1.x in a production environment. We view this as a failure, and we want to fix this. **The goal of this workstream is to make MACI as easy to understand and easy to integrate as possible.**
56
+ This new version comes with features that have been requested in the past, such as polls being more customisable, in terms of voice credits assigned to voters, and gatekeeping mechanisms.
56
57
 
57
- ### Initiatives within this workstream:
58
+ At a high level, the new features/improvements are:
58
59
 
59
- - Implement & release a MACI v1.2 ([#856](https://github.com/privacy-scaling-explorations/maci/issues/856))
60
- - Refactor the codebase for improved quality, readability & modularity
61
- - Add code comments (with [TypeDoc](https://typedoc.org/) & [NatSpec](https://docs.soliditylang.org/en/latest/natspec-format.html)) to improve productivity
62
- - Improve tooling (e.g. cross-platform support) for ease of integration & performance
63
- - Improve/create documentation for developer onboarding & education
64
- - Revamp documentation stack (via Docusaurus) with versioning & additional resources
65
- - Voter & coordinator guides to understand full poll lifecycle
66
- - Build app templates & tutorials that can serve as reference implementations
60
+ - Custom voice credits per poll
61
+ - Custom gatekeeping per poll
62
+ - Replacement of vote merkle trees for more efficient hash-chains
63
+ - Offchain voting via MACI's relayer service
67
64
 
68
- **References**
65
+ ## 2) Coordinator Service
69
66
 
70
- - [MACI v1.2 Refactoring Plan](https://github.com/privacy-scaling-explorations/maci/issues/856)
71
- - [MACI development team sprint board](https://github.com/orgs/privacy-scaling-explorations/projects/40)
72
- - [MACI v1.1.1 refactor milestone](https://github.com/privacy-scaling-explorations/maci/milestone/5)
67
+ The coordinator service is a service to automate MACI coordinator functionality. This includes:
73
68
 
74
- ## 2) MACI Community Engagement
69
+ - Contract deployment
70
+ - Subgraph deploying
71
+ - Proof generation
72
+ - Proof and results submission
75
73
 
76
- _~15% of team’s total bandwidth_
74
+ This service exposes a REST API, as well as some Websocket endpoints (for proof generation only). Our goal is to release an efficient and easy to use service that can be used by any application that builds atop of MACI.
77
75
 
78
- We want to proactively support adoption of MACI. **We’ll create an open source community where integrations & contributions are actively encouraged!**
76
+ ## 3) Integration with DAO's tooling provider
79
77
 
80
- This workstream relates closely to improving DX but focuses on areas that will require active maintenance, support & engagement from our team vs. improving code, documentation & educational resources that will be available online 24/7/365.
78
+ As an effort to support DAO governance, and help solve their issues with bribery and collusion, MACI is focusing on integrating with DAO's tooling providers.
81
79
 
82
- The hope here is that close interactions with integration developers & Ethereum community members will help us gather insightful user feedback so that we iterate faster to improve MACI as a product. We’ll be rolling out an agile scrum development workflow that should allow us to rapidly respond to input from the community to guide our roadmap & product direction.
80
+ To start with, MACI is integrating with [Aragon](https://aragon.org/) by building a voting [plugin](https://github.com/privacy-scaling-explorations/maci-voting-plugin).
83
81
 
84
- ### Initiatives within this workstream:
82
+ In the future, we plan to continue working with other partners such as [Agora](https://www.agora.xyz/), and help them offer DAOs secure and private voting.
85
83
 
86
- - Allocate team bandwidth to be available to respond to the community
87
- - Support MACI integrations (starting with [clr.fund](http://clr.fund/) v1.x integration)
88
- - Revamp GitHub repo maintenance ([MACI GH processes](https://github.com/privacy-scaling-explorations/maci/issues/757))
89
- - Establish & respond to public channels ([Discord](https://discord.com/invite/sF5CT5rzrR), [Twitter](https://twitter.com/zkMACI))
90
- - Proactively engage with the ecosystem to identify collaboration opportunities (conference talks, hackathon bounties, social media)
91
- - Update our development processes to quickly react to user needs & input
84
+ ## 4) Coordinator decentralisation
92
85
 
93
- ## 3) Quadratic Funding Experiments
86
+ It's no secret that one of MACI long standing issues has having a centralised coordinator. They are able to see all of the votes in cleartext, which allows them to collude with bribers themselves, as well as voters. As we look to tackle use cases such as DAO governance where large quantities of money are involved in proposals, we need to ensure that collusion between the coordinator and voters/bribers is reduced. This can be accomplished in several ways:
94
87
 
95
- _~30% of team’s total bandwidth_
88
+ - Use Multi Party Computation (MPC)
89
+ - Use Homomorphic Encryption (HE)
90
+ - Use a Trusted Execution Environment (TEE)
96
91
 
97
- We’re building technical infrastructure, operational expertise & a network of communities to create a scalable way to enable community organizers to run QF rounds. The mission of our QF project has been to serve as a reference implementation on how to integrate MACI as well as support the practical adoption of this community-funding technology.
98
-
99
- [Read more about our QF initiatives here](https://qf.pse.dev/about).
100
-
101
- ### 2024 goal
102
-
103
- - Help run 12 QF/QV rounds
104
-
105
- ### Initiatives within this workstream:
106
-
107
- - Build an evaluation framework of QF rounds, to increase our sophistication around how we measure success
108
- - Landscape analysis of QF & capital-allocation projects to better understand how our efforts fit in within the broader ecosystem
109
- - Update & expand our [QF website](https://qf.pse.dev/), with public launch to generate inbound interest
110
- - Explore community collaboration opportunities (running QF rounds)
111
- - Exploring project collaboration opportunities (supporting MACI/QF integrations)
112
-
113
- **References**
114
-
115
- - [GitHub](https://github.com/privacy-scaling-explorations/qf)
116
- - [Website](https://qf.pse.dev/)
92
+ We plan to research the best approach and start the implementation within the year.
117
93
 
118
94
  ## Future R&D
119
95
 
120
96
  While not prioritized as an upcoming workstream, we think it’s worth calling out important areas of research & development that we’re excited to work on in the future:
121
97
 
122
- ### MACI Coordinator Service
123
-
124
- - The primary responsibility of the Coordinator Service will be to:
125
- - offload and automate the tasks performed by the human coordinator
126
- - minimize proving time by parallelizing SNARK proof generation and making MACI easier to adopt
127
- - [GitHub repo](https://github.com/privacy-scaling-explorations/maci-coordinator)
128
-
129
- ### QF stack
130
-
131
- - To serve as a reference implementation on how to integrate MACI as well as support the practical adoption of this community-funding technology.
132
- - Improvements
133
- - Support QF (as of now only supports QV functionality)
134
- - Make it easier for operators to run rounds
135
- - Make it easier for end users to use
136
- - [GitHub repo](https://github.com/privacy-scaling-explorations/qf)
137
-
138
98
  ### MACI improvements
139
99
 
140
- - Unconditional Voter Privacy (e.g. [ElGamal Key Change Mechanism](https://github.com/privacy-scaling-explorations/maci/issues/796))
141
100
  - Scaling explorations, like SNARK Folding Schemes (e.g. [Nova integration](https://github.com/privacy-scaling-explorations/maci/issues/904))
142
101
  - Different matching mechanisms (e.g. [Group Wise Matching in Quadratic Funding](https://github.com/privacy-scaling-explorations/maci/issues/905))
143
- - Gas-less MACI for voters
144
- - Gas efficiency
102
+ - Re-implementation of previously removed features such as [Topup](https://github.com/privacy-scaling-explorations/maci/issues/1384) and [Subsidy](https://github.com/privacy-scaling-explorations/maci/issues/1348)
103
+ - [Benchmarks](https://github.com/privacy-scaling-explorations/maci/issues/1197) for the whole stack
145
104
 
146
105
  ## Feedback
147
106
 
@@ -5289,11 +5289,11 @@
5289
5289
  "locked": false,
5290
5290
  "fontSize": 20,
5291
5291
  "fontFamily": 1,
5292
- "text": "numSignups",
5292
+ "text": "totalSignups",
5293
5293
  "textAlign": "center",
5294
5294
  "verticalAlign": "middle",
5295
5295
  "containerId": "zPLc-i-Fpbnnrkdd8fSHG",
5296
- "originalText": "numSignups",
5296
+ "originalText": "totalSignups",
5297
5297
  "lineHeight": 1.25,
5298
5298
  "baseline": 18
5299
5299
  },
@@ -12077,11 +12077,11 @@
12077
12077
  "locked": false,
12078
12078
  "fontSize": 20,
12079
12079
  "fontFamily": 1,
12080
- "text": "pubKey * privateKey",
12080
+ "text": "publicKey * privateKey",
12081
12081
  "textAlign": "center",
12082
12082
  "verticalAlign": "middle",
12083
12083
  "containerId": "-XP_Ss-4GcmLnrhT4G7Mz",
12084
- "originalText": "pubKey * privateKey",
12084
+ "originalText": "publicKey * privateKey",
12085
12085
  "lineHeight": 1.25,
12086
12086
  "baseline": 18
12087
12087
  },
@@ -13949,11 +13949,11 @@
13949
13949
  "locked": false,
13950
13950
  "fontSize": 20,
13951
13951
  "fontFamily": 1,
13952
- "text": "newPubKey",
13952
+ "text": "newPublicKey",
13953
13953
  "textAlign": "center",
13954
13954
  "verticalAlign": "middle",
13955
13955
  "containerId": "49_rF-LPQl_dpoGGUf9YY",
13956
- "originalText": "newPubKey",
13956
+ "originalText": "newPublicKey",
13957
13957
  "lineHeight": 1.25,
13958
13958
  "baseline": 18
13959
13959
  },
@@ -15641,11 +15641,11 @@
15641
15641
  "locked": false,
15642
15642
  "fontSize": 20,
15643
15643
  "fontFamily": 1,
15644
- "text": "numSignups",
15644
+ "text": "totalSignups",
15645
15645
  "textAlign": "center",
15646
15646
  "verticalAlign": "middle",
15647
15647
  "containerId": "UBRUWhHbd13PNqp_i_KXY",
15648
- "originalText": "numSignups",
15648
+ "originalText": "totalSignups",
15649
15649
  "lineHeight": 1.25,
15650
15650
  "baseline": 18
15651
15651
  },
@@ -16735,11 +16735,11 @@
16735
16735
  "locked": false,
16736
16736
  "fontSize": 20,
16737
16737
  "fontFamily": 1,
16738
- "text": "stateTreeIndex <= \nnumSignups",
16738
+ "text": "stateTreeIndex <= \ntotalSignups",
16739
16739
  "textAlign": "center",
16740
16740
  "verticalAlign": "middle",
16741
16741
  "containerId": "GC1bto1WMtLIWxXD_2oHa",
16742
- "originalText": "stateTreeIndex <= numSignups",
16742
+ "originalText": "stateTreeIndex <= totalSignups",
16743
16743
  "lineHeight": 1.25,
16744
16744
  "baseline": 43
16745
16745
  },
@@ -18353,11 +18353,11 @@
18353
18353
  "locked": false,
18354
18354
  "fontSize": 20,
18355
18355
  "fontFamily": 1,
18356
- "text": "pubKey",
18356
+ "text": "publicKey",
18357
18357
  "textAlign": "center",
18358
18358
  "verticalAlign": "middle",
18359
18359
  "containerId": "8g5cRH2EYThfZ1CncZKDy",
18360
- "originalText": "pubKey",
18360
+ "originalText": "publicKey",
18361
18361
  "lineHeight": 1.25,
18362
18362
  "baseline": 18
18363
18363
  },
@@ -18547,11 +18547,11 @@
18547
18547
  "locked": false,
18548
18548
  "fontSize": 20,
18549
18549
  "fontFamily": 1,
18550
- "text": "privKey",
18550
+ "text": "privateKey",
18551
18551
  "textAlign": "center",
18552
18552
  "verticalAlign": "middle",
18553
18553
  "containerId": "5jFTlfr-jJodJNAsWRM2N",
18554
- "originalText": "privKey",
18554
+ "originalText": "privateKey",
18555
18555
  "lineHeight": 1.25,
18556
18556
  "baseline": 18
18557
18557
  },
@@ -19337,11 +19337,11 @@
19337
19337
  "locked": false,
19338
19338
  "fontSize": 20,
19339
19339
  "fontFamily": 1,
19340
- "text": "pubKey",
19340
+ "text": "publicKey",
19341
19341
  "textAlign": "center",
19342
19342
  "verticalAlign": "middle",
19343
19343
  "containerId": "_h_axBzjA0c2A7WRZMSud",
19344
- "originalText": "pubKey",
19344
+ "originalText": "publicKey",
19345
19345
  "lineHeight": 1.25,
19346
19346
  "baseline": 18
19347
19347
  },
@@ -24591,11 +24591,11 @@
24591
24591
  "locked": false,
24592
24592
  "fontSize": 20,
24593
24593
  "fontFamily": 1,
24594
- "text": "numSignups",
24594
+ "text": "totalSignups",
24595
24595
  "textAlign": "center",
24596
24596
  "verticalAlign": "middle",
24597
24597
  "containerId": "r1CQnQpfKBea8n3-0OaQq",
24598
- "originalText": "numSignups",
24598
+ "originalText": "totalSignups",
24599
24599
  "lineHeight": 1.25,
24600
24600
  "baseline": 18
24601
24601
  },
@@ -25255,11 +25255,11 @@
25255
25255
  "locked": false,
25256
25256
  "fontSize": 20,
25257
25257
  "fontFamily": 1,
25258
- "text": "Wire outputs to:\nmaxVoteOptions\nnumSignups\nbatchStartIndex\nbatchEndIndex",
25258
+ "text": "Wire outputs to:\nmaxVoteOptions\ntotalSignups\nbatchStartIndex\nbatchEndIndex",
25259
25259
  "textAlign": "center",
25260
25260
  "verticalAlign": "middle",
25261
25261
  "containerId": "qKhkOlI5kFc_Hayuh63D4",
25262
- "originalText": "Wire outputs to:\nmaxVoteOptions\nnumSignups\nbatchStartIndex\nbatchEndIndex",
25262
+ "originalText": "Wire outputs to:\nmaxVoteOptions\ntotalSignups\nbatchStartIndex\nbatchEndIndex",
25263
25263
  "lineHeight": 1.25,
25264
25264
  "baseline": 118
25265
25265
  },
@@ -25655,11 +25655,11 @@
25655
25655
  "locked": false,
25656
25656
  "fontSize": 20,
25657
25657
  "fontFamily": 1,
25658
- "text": "numSignups <= 5 ** \nstateTreeDepth",
25658
+ "text": "totalSignups <= 5 ** \nstateTreeDepth",
25659
25659
  "textAlign": "center",
25660
25660
  "verticalAlign": "middle",
25661
25661
  "containerId": "fah78VPNNwJ5gYazg1m5-",
25662
- "originalText": "numSignups <= 5 ** stateTreeDepth",
25662
+ "originalText": "totalSignups <= 5 ** stateTreeDepth",
25663
25663
  "lineHeight": 1.25,
25664
25664
  "baseline": 43
25665
25665
  },
@@ -33945,11 +33945,11 @@
33945
33945
  "locked": false,
33946
33946
  "fontSize": 20,
33947
33947
  "fontFamily": 1,
33948
- "text": "numSignups",
33948
+ "text": "totalSignups",
33949
33949
  "textAlign": "center",
33950
33950
  "verticalAlign": "middle",
33951
33951
  "containerId": "llBtJZSwqmz82SnCY1pTK",
33952
- "originalText": "numSignups",
33952
+ "originalText": "totalSignups",
33953
33953
  "lineHeight": 1.25,
33954
33954
  "baseline": 18
33955
33955
  },
@@ -34353,11 +34353,11 @@
34353
34353
  "locked": false,
34354
34354
  "fontSize": 20,
34355
34355
  "fontFamily": 1,
34356
- "text": "2. Check that stateIndex \n<= numSignups",
34356
+ "text": "2. Check that stateIndex \n<= totalSignups",
34357
34357
  "textAlign": "center",
34358
34358
  "verticalAlign": "middle",
34359
34359
  "containerId": "VP4MQeS3Rt20oj5ivVuE2",
34360
- "originalText": "2. Check that stateIndex <= numSignups",
34360
+ "originalText": "2. Check that stateIndex <= totalSignups",
34361
34361
  "lineHeight": 1.25,
34362
34362
  "baseline": 43
34363
34363
  },
@@ -35649,11 +35649,11 @@
35649
35649
  "locked": false,
35650
35650
  "fontSize": 20,
35651
35651
  "fontFamily": 1,
35652
- "text": "numSignups",
35652
+ "text": "totalSignups",
35653
35653
  "textAlign": "center",
35654
35654
  "verticalAlign": "middle",
35655
35655
  "containerId": "wTEyapXPW4Fun05sJ7Gg1",
35656
- "originalText": "numSignups",
35656
+ "originalText": "totalSignups",
35657
35657
  "lineHeight": 1.25,
35658
35658
  "baseline": 18
35659
35659
  },
@@ -18,4 +18,4 @@
18
18
  </style>
19
19
 
20
20
  </defs>
21
- <rect x="0" y="0" width="1083.2937218075292" height="395.3140739373331" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(141.5840218900487 153.8873057289922) rotate(0 114.33810379333897 33.80052213620306)"><path d="M16.9 0 C73.02 -2.42, 131.1 -1.65, 211.78 0 M16.9 0 C75.65 0.84, 135.27 0.54, 211.78 0 M211.78 0 C222.39 0.92, 229.73 5.59, 228.68 16.9 M211.78 0 C222.28 1.03, 228.23 5.62, 228.68 16.9 M228.68 16.9 C229.1 28.61, 229.5 41.98, 228.68 50.7 M228.68 16.9 C229.51 26.62, 229.06 36.14, 228.68 50.7 M228.68 50.7 C226.69 63.93, 223.2 65.9, 211.78 67.6 M228.68 50.7 C227.39 62.02, 223.33 67.86, 211.78 67.6 M211.78 67.6 C157.72 67.99, 100.44 67.37, 16.9 67.6 M211.78 67.6 C151.87 67.95, 92.8 69.76, 16.9 67.6 M16.9 67.6 C5.49 66.04, 1.94 61.58, 0 50.7 M16.9 67.6 C6.12 65.73, 0.64 60.75, 0 50.7 M0 50.7 C0.22 44.18, -0.78 34.23, 0 16.9 M0 50.7 C-1.14 43.1, 0.54 35.65, 0 16.9 M0 16.9 C-0.91 6.07, 6.95 1.44, 16.9 0 M0 16.9 C2 7.59, 7.2 1.25, 16.9 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(229.4321430784072 175.18782786519523) rotate(0 26.48998260498047 12.5)"><text x="26.48998260498047" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#e03131" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">ECDH</text></g><g stroke-linecap="round" transform="translate(270.60606759988264 10) rotate(0 110.05757116156974 32.177416550875904)"><path d="M16.09 0 C65.42 -0.18, 113.18 -0.2, 204.03 0 M16.09 0 C60.44 2.18, 105.98 1.7, 204.03 0 M204.03 0 C214.09 0.9, 219.73 5.35, 220.12 16.09 M204.03 0 C215.87 0.07, 219.21 5.84, 220.12 16.09 M220.12 16.09 C219.65 25.89, 220.87 36.7, 220.12 48.27 M220.12 16.09 C219.23 28.61, 220.3 38.32, 220.12 48.27 M220.12 48.27 C219 59.04, 215.01 64.58, 204.03 64.35 M220.12 48.27 C219.75 60.98, 213.57 65.83, 204.03 64.35 M204.03 64.35 C134.6 65.56, 66.28 63.67, 16.09 64.35 M204.03 64.35 C164.09 65.34, 125.27 65.92, 16.09 64.35 M16.09 64.35 C5.78 62.72, 0.56 57.93, 0 48.27 M16.09 64.35 C3.8 65.22, 1.21 59.39, 0 48.27 M0 48.27 C-1.54 38.24, 1.05 23.02, 0 16.09 M0 48.27 C-0.73 39.59, 0.39 31.21, 0 16.09 M0 16.09 C1.74 7.06, 6.73 1.08, 16.09 0 M0 16.09 C-0.07 7.63, 6.48 1.37, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(282.6637226847922 17.177416550875876) rotate(0 97.99991607666016 25)"><text x="97.99991607666016" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">publicKey (array of </text><text x="97.99991607666016" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">two elements)</text></g><g stroke-linecap="round"><g transform="translate(243.16721166972593 104.21769953343772) rotate(0 -0.44580281989499326 19.782500132839004)"><path d="M-0.05 -0.34 C-0.13 6.24, -0.35 32.37, -0.52 39.06 M-0.74 0.67 C-0.86 7.34, -0.63 33.13, -0.75 39.5" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(243.16721166972593 104.21769953343772) rotate(0 -0.44580281989499326 19.782500132839004)"><path d="M-7.45 20.88 C-6.18 27, -4.52 31.44, -0.75 39.5 M-7.45 20.88 C-5.25 27.55, -2.86 33.77, -0.75 39.5" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(243.16721166972593 104.21769953343772) rotate(0 -0.44580281989499326 19.782500132839004)"><path d="M6.08 20.93 C3.4 27.03, 1.11 31.45, -0.75 39.5 M6.08 20.93 C3.6 27.58, 1.3 33.79, -0.75 39.5" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(288.56892663291774 106.76455453228203) rotate(0 31.809967041015625 12.5)"><text x="0" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Inputs</text></g><g transform="translate(299.85516274492034 255.3314622387781) rotate(0 34.84996032714844 12.5)"><text x="0" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Output</text></g><g stroke-linecap="round"><g transform="translate(238.8742956262929 254.06110846868904) rotate(0 0.2229014099474398 20.511057519056408)"><path d="M-0.11 0 C0.04 6.8, 0.66 34.18, 0.71 41.04 M-0.82 -0.48 C-0.71 6.39, 0.32 34.7, 0.42 41.75" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(238.8742956262929 254.06110846868904) rotate(0 0.2229014099474398 20.511057519056408)"><path d="M-7.1 22.66 C-5.06 28.25, -3.02 32.46, 0.42 41.75 M-7.1 22.66 C-4.32 28.62, -2.21 35.04, 0.42 41.75" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(238.8742956262929 254.06110846868904) rotate(0 0.2229014099474398 20.511057519056408)"><path d="M6.92 22.29 C5.23 27.96, 3.52 32.28, 0.42 41.75 M6.92 22.29 C5.21 28.39, 2.82 34.94, 0.42 41.75" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(142.31464317820974 320.9592408355813) rotate(0 110.05757116156975 32.177416550875904)"><path d="M16.09 0 C68.92 -1.7, 122.04 -1, 204.03 0 M16.09 0 C80.29 0.87, 144.99 1.15, 204.03 0 M204.03 0 C215.43 1.95, 218.13 7.33, 220.12 16.09 M204.03 0 C214.93 -1.95, 218.83 5.42, 220.12 16.09 M220.12 16.09 C221.88 25.12, 221.43 37.61, 220.12 48.27 M220.12 16.09 C220.48 25.32, 219.54 32.41, 220.12 48.27 M220.12 48.27 C218.99 60.86, 214.61 62.8, 204.03 64.35 M220.12 48.27 C222.35 58.55, 215.24 62.48, 204.03 64.35 M204.03 64.35 C143.16 64.12, 81.14 64.4, 16.09 64.35 M204.03 64.35 C154.66 63.28, 102.7 62.58, 16.09 64.35 M16.09 64.35 C7.04 63.71, -0.91 59.43, 0 48.27 M16.09 64.35 C6.88 66.01, 2 60.95, 0 48.27 M0 48.27 C1.8 37.39, 1.02 23.4, 0 16.09 M0 48.27 C0.55 38.86, -0.04 28.98, 0 16.09 M0 16.09 C0.59 5.15, 5.12 -1.08, 16.09 0 M0 16.09 C1.24 6.73, 6 0.76, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(203.58225920061932 340.63665738645716) rotate(0 48.78995513916015 12.5)"><text x="48.789955139160156" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">sharedKey</text></g><g stroke-linecap="round" transform="translate(551.7094295497407 22.989525621383052) rotate(0 110.05757116156974 42.5)"><path d="M21.25 0 C73.2 -1.04, 126.96 0.24, 198.87 0 M21.25 0 C83.96 -0.75, 148.73 -2.58, 198.87 0 M198.87 0 C211.91 0.05, 220.37 7.31, 220.12 21.25 M198.87 0 C212.66 1.99, 218.93 8.56, 220.12 21.25 M220.12 21.25 C220.05 37.45, 221.24 51.28, 220.12 63.75 M220.12 21.25 C219.8 29.49, 220.85 39.09, 220.12 63.75 M220.12 63.75 C220.54 76.29, 213.59 83.94, 198.87 85 M220.12 63.75 C218.55 78.78, 214.24 85.4, 198.87 85 M198.87 85 C132.2 86.05, 69.77 82.61, 21.25 85 M198.87 85 C149.34 84.65, 101.39 85.15, 21.25 85 M21.25 85 C8.82 86.7, 1.36 79, 0 63.75 M21.25 85 C7.01 87.27, 1.12 79.29, 0 63.75 M0 63.75 C-0.27 54.51, 0.3 43.07, 0 21.25 M0 63.75 C-0.25 51.27, 0.42 40.46, 0 21.25 M0 21.25 C0.55 7.74, 8.6 -0.69, 21.25 0 M0 21.25 C-0.32 5.82, 5.22 -1.18, 21.25 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(560.0371041659002 27.989525621383052) rotate(0 101.72989654541016 37.5)"><text x="101.72989654541016" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">1. Convert the </text><text x="101.72989654541016" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">privateKey to its </text><text x="101.72989654541016" y="50" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">bytes representation</text></g><g stroke-linecap="round" transform="translate(550.1254502962602 136.86405287536127) rotate(0 110.05757116156974 32.177416550875904)"><path d="M16.09 0 C76.34 -0.8, 136.19 -3.46, 204.03 0 M16.09 0 C90.36 1.62, 165.88 1.71, 204.03 0 M204.03 0 C214.43 1.73, 219.08 6.64, 220.12 16.09 M204.03 0 C216.36 -0.75, 221 5.45, 220.12 16.09 M220.12 16.09 C218.56 25.39, 222.19 36.81, 220.12 48.27 M220.12 16.09 C220.64 22.42, 220.71 29.85, 220.12 48.27 M220.12 48.27 C218.75 59.74, 215.8 64.7, 204.03 64.35 M220.12 48.27 C221.63 58.24, 213.85 62.47, 204.03 64.35 M204.03 64.35 C130.72 64.45, 57.72 61.86, 16.09 64.35 M204.03 64.35 C144.44 66.56, 83.8 66.25, 16.09 64.35 M16.09 64.35 C5.3 66.33, 0.97 60.18, 0 48.27 M16.09 64.35 C4.01 64.28, -0.27 58.66, 0 48.27 M0 48.27 C-0.43 37.56, -0.26 25.45, 0 16.09 M0 48.27 C0.1 40.68, 0.58 32.08, 0 16.09 M0 16.09 C-0.28 4.26, 3.74 -1.02, 16.09 0 M0 16.09 C1.42 6.22, 4.93 1.22, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(567.1930922586112 144.04146942623714) rotate(0 92.98992919921875 25)"><text x="92.98992919921875" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">2. Perform scalar </text><text x="92.98992919921875" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">multiplication</text></g><g stroke-linecap="round" transform="translate(554.5545838679946 220.6873664272789) rotate(0 110.05757116156974 55)"><path d="M27.5 0 C84.61 1.79, 136.09 0.52, 192.62 0 M27.5 0 C77.26 0.68, 126.83 0.46, 192.62 0 M192.62 0 C212.34 -0.66, 220.88 9.24, 220.12 27.5 M192.62 0 C211.51 1.45, 218.5 7.15, 220.12 27.5 M220.12 27.5 C219.07 42.83, 220.24 54.71, 220.12 82.5 M220.12 27.5 C219.59 39.89, 220.79 51.71, 220.12 82.5 M220.12 82.5 C221.44 100.18, 210.16 108.36, 192.62 110 M220.12 82.5 C222.13 101.92, 209.01 109.45, 192.62 110 M192.62 110 C129.67 110.56, 67.31 110.98, 27.5 110 M192.62 110 C129.01 111.88, 65.95 111.49, 27.5 110 M27.5 110 C7.99 109.93, -0.23 100.54, 0 82.5 M27.5 110 C10.34 110.33, -0.18 100.4, 0 82.5 M0 82.5 C-1.02 65.47, 1.25 46.83, 0 27.5 M0 82.5 C-0.56 63.63, -1.23 45.36, 0 27.5 M0 27.5 C1.23 9.92, 8.79 1.06, 27.5 0 M0 27.5 C1.76 9.55, 7.64 0.54, 27.5 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(561.9422331545643 225.6873664272789) rotate(0 102.669921875 50)"><text x="102.669921875" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">3. Shared Key is the</text><text x="102.669921875" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">two output elements</text><text x="102.669921875" y="50" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">([0] and [1]) of the</text><text x="102.669921875" y="75" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">scalar multiplciation</text></g><g transform="translate(426.6654259855982 132.2871750764661) rotate(0 49.669944763183594 12.5)"><text x="0" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Processing</text></g><g stroke-linecap="round"><g transform="translate(409.4888137255391 192.9214962134585) rotate(0 54.0494641083767 -0.8482636989667753)"><path d="M-0.62 0.77 C17.57 0.25, 90.74 -1.69, 108.94 -2.09 M1.26 0.13 C19.38 0.29, 90.63 -0.69, 108.43 -0.76" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(409.4888137255391 192.9214962134585) rotate(0 54.0494641083767 -0.8482636989667753)"><path d="M80.33 9.76 C89.5 8.32, 95.54 4.7, 108.43 -0.76 M80.33 9.76 C88.14 5.51, 96.81 4.13, 108.43 -0.76" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(409.4888137255391 192.9214962134585) rotate(0 54.0494641083767 -0.8482636989667753)"><path d="M80.14 -10.76 C89.54 -6.38, 95.64 -4.16, 108.43 -0.76 M80.14 -10.76 C88.06 -8.78, 96.79 -3.92, 108.43 -0.76" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(10 10.18696194196309) rotate(0 110.05757116156975 32.177416550875904)"><path d="M16.09 0 C90.84 2.6, 160.34 1.58, 204.03 0 M16.09 0 C74.22 2.66, 130.74 1.2, 204.03 0 M204.03 0 C214.98 1.36, 220.66 7.29, 220.12 16.09 M204.03 0 C212.74 -1.44, 218.46 5.7, 220.12 16.09 M220.12 16.09 C219.26 27.12, 219.4 35.44, 220.12 48.27 M220.12 16.09 C220.75 24.26, 220.72 32.98, 220.12 48.27 M220.12 48.27 C221.99 60.05, 213.33 65.67, 204.03 64.35 M220.12 48.27 C220.16 59.75, 216.2 62.19, 204.03 64.35 M204.03 64.35 C146.1 66.61, 87 65.08, 16.09 64.35 M204.03 64.35 C159.86 64.34, 114.42 64.35, 16.09 64.35 M16.09 64.35 C7.16 64.43, -1.57 60.74, 0 48.27 M16.09 64.35 C3.11 64.28, -2.29 59.8, 0 48.27 M0 48.27 C1.5 42.64, -1.67 34.87, 0 16.09 M0 48.27 C-0.06 35.34, 0.59 24.06, 0 16.09 M0 16.09 C0.97 6.51, 6.83 0.74, 16.09 0 M0 16.09 C-2.09 5.03, 7.04 1.8, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(69.32762121039787 29.864378492838966) rotate(0 50.729949951171875 12.5)"><text x="50.729949951171875" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">privateKey</text></g><g stroke-linecap="round" transform="translate(853.1785794843897 135.00339353669267) rotate(0 110.05757116156974 32.177416550875904)"><path d="M16.09 0 C77.06 -3.77, 135.77 -3.55, 204.03 0 M16.09 0 C68.34 0.66, 118.92 -0.64, 204.03 0 M204.03 0 C216.21 1.54, 218.98 4.24, 220.12 16.09 M204.03 0 C215.69 -0.48, 218.55 6.74, 220.12 16.09 M220.12 16.09 C219.77 23.6, 221.41 34.51, 220.12 48.27 M220.12 16.09 C218.99 28.53, 220.27 40.67, 220.12 48.27 M220.12 48.27 C220.59 60.82, 213.59 63.68, 204.03 64.35 M220.12 48.27 C220.34 58.71, 212.98 64.53, 204.03 64.35 M204.03 64.35 C139.45 65.33, 76.5 65.74, 16.09 64.35 M204.03 64.35 C153.36 64.66, 103.01 62.9, 16.09 64.35 M16.09 64.35 C5.44 63.59, 0.99 60.43, 0 48.27 M16.09 64.35 C7.61 66.12, -0.1 57.42, 0 48.27 M0 48.27 C1.75 38.04, -1.57 26.6, 0 16.09 M0 48.27 C-0.28 35.55, -0.33 23.33, 0 16.09 M0 16.09 C1.6 3.86, 6.82 -1.51, 16.09 0 M0 16.09 C-0.19 6.45, 4.38 -0.43, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(865.3662394521118 154.6808100875686) rotate(0 97.86991119384766 12.5)"><text x="97.86991119384766" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">pubKey * privateKey</text></g><g stroke-linecap="round"><g transform="translate(785.6942556521292 169.49482019809443) rotate(0 18.9027027744238 -0.6071622858810883)"><path d="M0.23 -0.47 C6.59 -0.64, 31.7 -1.17, 37.96 -1.32 M-0.32 0.48 C6 0.42, 31.32 -0.45, 37.61 -0.68" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(785.6942556521292 169.49482019809443) rotate(0 18.9027027744238 -0.6071622858810883)"><path d="M20.08 6.41 C23.97 4.75, 29.27 2.55, 37.61 -0.68 M20.08 6.41 C24.5 4.41, 29.66 2.77, 37.61 -0.68" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(785.6942556521292 169.49482019809443) rotate(0 18.9027027744238 -0.6071622858810883)"><path d="M19.62 -6.52 C23.6 -4.73, 29.02 -3.48, 37.61 -0.68 M19.62 -6.52 C24.18 -5.12, 29.46 -3.36, 37.61 -0.68" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask></svg>
21
+ <rect x="0" y="0" width="1083.2937218075292" height="395.3140739373331" fill="#ffffff"></rect><g stroke-linecap="round" transform="translate(141.5840218900487 153.8873057289922) rotate(0 114.33810379333897 33.80052213620306)"><path d="M16.9 0 C73.02 -2.42, 131.1 -1.65, 211.78 0 M16.9 0 C75.65 0.84, 135.27 0.54, 211.78 0 M211.78 0 C222.39 0.92, 229.73 5.59, 228.68 16.9 M211.78 0 C222.28 1.03, 228.23 5.62, 228.68 16.9 M228.68 16.9 C229.1 28.61, 229.5 41.98, 228.68 50.7 M228.68 16.9 C229.51 26.62, 229.06 36.14, 228.68 50.7 M228.68 50.7 C226.69 63.93, 223.2 65.9, 211.78 67.6 M228.68 50.7 C227.39 62.02, 223.33 67.86, 211.78 67.6 M211.78 67.6 C157.72 67.99, 100.44 67.37, 16.9 67.6 M211.78 67.6 C151.87 67.95, 92.8 69.76, 16.9 67.6 M16.9 67.6 C5.49 66.04, 1.94 61.58, 0 50.7 M16.9 67.6 C6.12 65.73, 0.64 60.75, 0 50.7 M0 50.7 C0.22 44.18, -0.78 34.23, 0 16.9 M0 50.7 C-1.14 43.1, 0.54 35.65, 0 16.9 M0 16.9 C-0.91 6.07, 6.95 1.44, 16.9 0 M0 16.9 C2 7.59, 7.2 1.25, 16.9 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(229.4321430784072 175.18782786519523) rotate(0 26.48998260498047 12.5)"><text x="26.48998260498047" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#e03131" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">ECDH</text></g><g stroke-linecap="round" transform="translate(270.60606759988264 10) rotate(0 110.05757116156974 32.177416550875904)"><path d="M16.09 0 C65.42 -0.18, 113.18 -0.2, 204.03 0 M16.09 0 C60.44 2.18, 105.98 1.7, 204.03 0 M204.03 0 C214.09 0.9, 219.73 5.35, 220.12 16.09 M204.03 0 C215.87 0.07, 219.21 5.84, 220.12 16.09 M220.12 16.09 C219.65 25.89, 220.87 36.7, 220.12 48.27 M220.12 16.09 C219.23 28.61, 220.3 38.32, 220.12 48.27 M220.12 48.27 C219 59.04, 215.01 64.58, 204.03 64.35 M220.12 48.27 C219.75 60.98, 213.57 65.83, 204.03 64.35 M204.03 64.35 C134.6 65.56, 66.28 63.67, 16.09 64.35 M204.03 64.35 C164.09 65.34, 125.27 65.92, 16.09 64.35 M16.09 64.35 C5.78 62.72, 0.56 57.93, 0 48.27 M16.09 64.35 C3.8 65.22, 1.21 59.39, 0 48.27 M0 48.27 C-1.54 38.24, 1.05 23.02, 0 16.09 M0 48.27 C-0.73 39.59, 0.39 31.21, 0 16.09 M0 16.09 C1.74 7.06, 6.73 1.08, 16.09 0 M0 16.09 C-0.07 7.63, 6.48 1.37, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(282.6637226847922 17.177416550875876) rotate(0 97.99991607666016 25)"><text x="97.99991607666016" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">publicKey (array of </text><text x="97.99991607666016" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">two elements)</text></g><g stroke-linecap="round"><g transform="translate(243.16721166972593 104.21769953343772) rotate(0 -0.44580281989499326 19.782500132839004)"><path d="M-0.05 -0.34 C-0.13 6.24, -0.35 32.37, -0.52 39.06 M-0.74 0.67 C-0.86 7.34, -0.63 33.13, -0.75 39.5" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(243.16721166972593 104.21769953343772) rotate(0 -0.44580281989499326 19.782500132839004)"><path d="M-7.45 20.88 C-6.18 27, -4.52 31.44, -0.75 39.5 M-7.45 20.88 C-5.25 27.55, -2.86 33.77, -0.75 39.5" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(243.16721166972593 104.21769953343772) rotate(0 -0.44580281989499326 19.782500132839004)"><path d="M6.08 20.93 C3.4 27.03, 1.11 31.45, -0.75 39.5 M6.08 20.93 C3.6 27.58, 1.3 33.79, -0.75 39.5" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g transform="translate(288.56892663291774 106.76455453228203) rotate(0 31.809967041015625 12.5)"><text x="0" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Inputs</text></g><g transform="translate(299.85516274492034 255.3314622387781) rotate(0 34.84996032714844 12.5)"><text x="0" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Output</text></g><g stroke-linecap="round"><g transform="translate(238.8742956262929 254.06110846868904) rotate(0 0.2229014099474398 20.511057519056408)"><path d="M-0.11 0 C0.04 6.8, 0.66 34.18, 0.71 41.04 M-0.82 -0.48 C-0.71 6.39, 0.32 34.7, 0.42 41.75" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(238.8742956262929 254.06110846868904) rotate(0 0.2229014099474398 20.511057519056408)"><path d="M-7.1 22.66 C-5.06 28.25, -3.02 32.46, 0.42 41.75 M-7.1 22.66 C-4.32 28.62, -2.21 35.04, 0.42 41.75" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(238.8742956262929 254.06110846868904) rotate(0 0.2229014099474398 20.511057519056408)"><path d="M6.92 22.29 C5.23 27.96, 3.52 32.28, 0.42 41.75 M6.92 22.29 C5.21 28.39, 2.82 34.94, 0.42 41.75" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(142.31464317820974 320.9592408355813) rotate(0 110.05757116156975 32.177416550875904)"><path d="M16.09 0 C68.92 -1.7, 122.04 -1, 204.03 0 M16.09 0 C80.29 0.87, 144.99 1.15, 204.03 0 M204.03 0 C215.43 1.95, 218.13 7.33, 220.12 16.09 M204.03 0 C214.93 -1.95, 218.83 5.42, 220.12 16.09 M220.12 16.09 C221.88 25.12, 221.43 37.61, 220.12 48.27 M220.12 16.09 C220.48 25.32, 219.54 32.41, 220.12 48.27 M220.12 48.27 C218.99 60.86, 214.61 62.8, 204.03 64.35 M220.12 48.27 C222.35 58.55, 215.24 62.48, 204.03 64.35 M204.03 64.35 C143.16 64.12, 81.14 64.4, 16.09 64.35 M204.03 64.35 C154.66 63.28, 102.7 62.58, 16.09 64.35 M16.09 64.35 C7.04 63.71, -0.91 59.43, 0 48.27 M16.09 64.35 C6.88 66.01, 2 60.95, 0 48.27 M0 48.27 C1.8 37.39, 1.02 23.4, 0 16.09 M0 48.27 C0.55 38.86, -0.04 28.98, 0 16.09 M0 16.09 C0.59 5.15, 5.12 -1.08, 16.09 0 M0 16.09 C1.24 6.73, 6 0.76, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(203.58225920061932 340.63665738645716) rotate(0 48.78995513916015 12.5)"><text x="48.789955139160156" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#2f9e44" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">sharedKey</text></g><g stroke-linecap="round" transform="translate(551.7094295497407 22.989525621383052) rotate(0 110.05757116156974 42.5)"><path d="M21.25 0 C73.2 -1.04, 126.96 0.24, 198.87 0 M21.25 0 C83.96 -0.75, 148.73 -2.58, 198.87 0 M198.87 0 C211.91 0.05, 220.37 7.31, 220.12 21.25 M198.87 0 C212.66 1.99, 218.93 8.56, 220.12 21.25 M220.12 21.25 C220.05 37.45, 221.24 51.28, 220.12 63.75 M220.12 21.25 C219.8 29.49, 220.85 39.09, 220.12 63.75 M220.12 63.75 C220.54 76.29, 213.59 83.94, 198.87 85 M220.12 63.75 C218.55 78.78, 214.24 85.4, 198.87 85 M198.87 85 C132.2 86.05, 69.77 82.61, 21.25 85 M198.87 85 C149.34 84.65, 101.39 85.15, 21.25 85 M21.25 85 C8.82 86.7, 1.36 79, 0 63.75 M21.25 85 C7.01 87.27, 1.12 79.29, 0 63.75 M0 63.75 C-0.27 54.51, 0.3 43.07, 0 21.25 M0 63.75 C-0.25 51.27, 0.42 40.46, 0 21.25 M0 21.25 C0.55 7.74, 8.6 -0.69, 21.25 0 M0 21.25 C-0.32 5.82, 5.22 -1.18, 21.25 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(560.0371041659002 27.989525621383052) rotate(0 101.72989654541016 37.5)"><text x="101.72989654541016" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">1. Convert the </text><text x="101.72989654541016" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">privateKey to its </text><text x="101.72989654541016" y="50" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">bytes representation</text></g><g stroke-linecap="round" transform="translate(550.1254502962602 136.86405287536127) rotate(0 110.05757116156974 32.177416550875904)"><path d="M16.09 0 C76.34 -0.8, 136.19 -3.46, 204.03 0 M16.09 0 C90.36 1.62, 165.88 1.71, 204.03 0 M204.03 0 C214.43 1.73, 219.08 6.64, 220.12 16.09 M204.03 0 C216.36 -0.75, 221 5.45, 220.12 16.09 M220.12 16.09 C218.56 25.39, 222.19 36.81, 220.12 48.27 M220.12 16.09 C220.64 22.42, 220.71 29.85, 220.12 48.27 M220.12 48.27 C218.75 59.74, 215.8 64.7, 204.03 64.35 M220.12 48.27 C221.63 58.24, 213.85 62.47, 204.03 64.35 M204.03 64.35 C130.72 64.45, 57.72 61.86, 16.09 64.35 M204.03 64.35 C144.44 66.56, 83.8 66.25, 16.09 64.35 M16.09 64.35 C5.3 66.33, 0.97 60.18, 0 48.27 M16.09 64.35 C4.01 64.28, -0.27 58.66, 0 48.27 M0 48.27 C-0.43 37.56, -0.26 25.45, 0 16.09 M0 48.27 C0.1 40.68, 0.58 32.08, 0 16.09 M0 16.09 C-0.28 4.26, 3.74 -1.02, 16.09 0 M0 16.09 C1.42 6.22, 4.93 1.22, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(567.1930922586112 144.04146942623714) rotate(0 92.98992919921875 25)"><text x="92.98992919921875" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">2. Perform scalar </text><text x="92.98992919921875" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">multiplication</text></g><g stroke-linecap="round" transform="translate(554.5545838679946 220.6873664272789) rotate(0 110.05757116156974 55)"><path d="M27.5 0 C84.61 1.79, 136.09 0.52, 192.62 0 M27.5 0 C77.26 0.68, 126.83 0.46, 192.62 0 M192.62 0 C212.34 -0.66, 220.88 9.24, 220.12 27.5 M192.62 0 C211.51 1.45, 218.5 7.15, 220.12 27.5 M220.12 27.5 C219.07 42.83, 220.24 54.71, 220.12 82.5 M220.12 27.5 C219.59 39.89, 220.79 51.71, 220.12 82.5 M220.12 82.5 C221.44 100.18, 210.16 108.36, 192.62 110 M220.12 82.5 C222.13 101.92, 209.01 109.45, 192.62 110 M192.62 110 C129.67 110.56, 67.31 110.98, 27.5 110 M192.62 110 C129.01 111.88, 65.95 111.49, 27.5 110 M27.5 110 C7.99 109.93, -0.23 100.54, 0 82.5 M27.5 110 C10.34 110.33, -0.18 100.4, 0 82.5 M0 82.5 C-1.02 65.47, 1.25 46.83, 0 27.5 M0 82.5 C-0.56 63.63, -1.23 45.36, 0 27.5 M0 27.5 C1.23 9.92, 8.79 1.06, 27.5 0 M0 27.5 C1.76 9.55, 7.64 0.54, 27.5 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(561.9422331545643 225.6873664272789) rotate(0 102.669921875 50)"><text x="102.669921875" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">3. Shared Key is the</text><text x="102.669921875" y="25" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">two output elements</text><text x="102.669921875" y="50" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">([0] and [1]) of the</text><text x="102.669921875" y="75" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">scalar multiplciation</text></g><g transform="translate(426.6654259855982 132.2871750764661) rotate(0 49.669944763183594 12.5)"><text x="0" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">Processing</text></g><g stroke-linecap="round"><g transform="translate(409.4888137255391 192.9214962134585) rotate(0 54.0494641083767 -0.8482636989667753)"><path d="M-0.62 0.77 C17.57 0.25, 90.74 -1.69, 108.94 -2.09 M1.26 0.13 C19.38 0.29, 90.63 -0.69, 108.43 -0.76" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(409.4888137255391 192.9214962134585) rotate(0 54.0494641083767 -0.8482636989667753)"><path d="M80.33 9.76 C89.5 8.32, 95.54 4.7, 108.43 -0.76 M80.33 9.76 C88.14 5.51, 96.81 4.13, 108.43 -0.76" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(409.4888137255391 192.9214962134585) rotate(0 54.0494641083767 -0.8482636989667753)"><path d="M80.14 -10.76 C89.54 -6.38, 95.64 -4.16, 108.43 -0.76 M80.14 -10.76 C88.06 -8.78, 96.79 -3.92, 108.43 -0.76" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask><g stroke-linecap="round" transform="translate(10 10.18696194196309) rotate(0 110.05757116156975 32.177416550875904)"><path d="M16.09 0 C90.84 2.6, 160.34 1.58, 204.03 0 M16.09 0 C74.22 2.66, 130.74 1.2, 204.03 0 M204.03 0 C214.98 1.36, 220.66 7.29, 220.12 16.09 M204.03 0 C212.74 -1.44, 218.46 5.7, 220.12 16.09 M220.12 16.09 C219.26 27.12, 219.4 35.44, 220.12 48.27 M220.12 16.09 C220.75 24.26, 220.72 32.98, 220.12 48.27 M220.12 48.27 C221.99 60.05, 213.33 65.67, 204.03 64.35 M220.12 48.27 C220.16 59.75, 216.2 62.19, 204.03 64.35 M204.03 64.35 C146.1 66.61, 87 65.08, 16.09 64.35 M204.03 64.35 C159.86 64.34, 114.42 64.35, 16.09 64.35 M16.09 64.35 C7.16 64.43, -1.57 60.74, 0 48.27 M16.09 64.35 C3.11 64.28, -2.29 59.8, 0 48.27 M0 48.27 C1.5 42.64, -1.67 34.87, 0 16.09 M0 48.27 C-0.06 35.34, 0.59 24.06, 0 16.09 M0 16.09 C0.97 6.51, 6.83 0.74, 16.09 0 M0 16.09 C-2.09 5.03, 7.04 1.8, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(69.32762121039787 29.864378492838966) rotate(0 50.729949951171875 12.5)"><text x="50.729949951171875" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">privateKey</text></g><g stroke-linecap="round" transform="translate(853.1785794843897 135.00339353669267) rotate(0 110.05757116156974 32.177416550875904)"><path d="M16.09 0 C77.06 -3.77, 135.77 -3.55, 204.03 0 M16.09 0 C68.34 0.66, 118.92 -0.64, 204.03 0 M204.03 0 C216.21 1.54, 218.98 4.24, 220.12 16.09 M204.03 0 C215.69 -0.48, 218.55 6.74, 220.12 16.09 M220.12 16.09 C219.77 23.6, 221.41 34.51, 220.12 48.27 M220.12 16.09 C218.99 28.53, 220.27 40.67, 220.12 48.27 M220.12 48.27 C220.59 60.82, 213.59 63.68, 204.03 64.35 M220.12 48.27 C220.34 58.71, 212.98 64.53, 204.03 64.35 M204.03 64.35 C139.45 65.33, 76.5 65.74, 16.09 64.35 M204.03 64.35 C153.36 64.66, 103.01 62.9, 16.09 64.35 M16.09 64.35 C5.44 63.59, 0.99 60.43, 0 48.27 M16.09 64.35 C7.61 66.12, -0.1 57.42, 0 48.27 M0 48.27 C1.75 38.04, -1.57 26.6, 0 16.09 M0 48.27 C-0.28 35.55, -0.33 23.33, 0 16.09 M0 16.09 C1.6 3.86, 6.82 -1.51, 16.09 0 M0 16.09 C-0.19 6.45, 4.38 -0.43, 16.09 0" stroke="#1971c2" stroke-width="1" fill="none"></path></g><g transform="translate(865.3662394521118 154.6808100875686) rotate(0 97.86991119384766 12.5)"><text x="97.86991119384766" y="0" font-family="Virgil, Segoe UI Emoji" font-size="20px" fill="#1971c2" text-anchor="middle" style="white-space: pre;" direction="ltr" dominant-baseline="text-before-edge">publicKey * privateKey</text></g><g stroke-linecap="round"><g transform="translate(785.6942556521292 169.49482019809443) rotate(0 18.9027027744238 -0.6071622858810883)"><path d="M0.23 -0.47 C6.59 -0.64, 31.7 -1.17, 37.96 -1.32 M-0.32 0.48 C6 0.42, 31.32 -0.45, 37.61 -0.68" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(785.6942556521292 169.49482019809443) rotate(0 18.9027027744238 -0.6071622858810883)"><path d="M20.08 6.41 C23.97 4.75, 29.27 2.55, 37.61 -0.68 M20.08 6.41 C24.5 4.41, 29.66 2.77, 37.61 -0.68" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g><g transform="translate(785.6942556521292 169.49482019809443) rotate(0 18.9027027744238 -0.6071622858810883)"><path d="M19.62 -6.52 C23.6 -4.73, 29.02 -3.48, 37.61 -0.68 M19.62 -6.52 C24.18 -5.12, 29.46 -3.36, 37.61 -0.68" stroke="#1e1e1e" stroke-width="1" fill="none"></path></g></g><mask></mask></svg>