This repo contains the implementation of the paper DyCAPS: Asynchronous Proactive Secret Sharing for Dynamic Committees.
Three branches are included in this repo:
-
main
: evaluate the latency ofDyCAPS.Handoff
. -
byStep
: evaluate the latency of each step inDyCAPS.Handoff
, where the steps are executed sequentially. *Sequential execution consumes around 20% more seconds than concurrent execution. -
payload
: evaluate the latency and throughput ofDyCAPS.Handoff
with different payload sizes. Given a payload,DyCAPS.Handoff
serves as a dynamic-committee version of Dumbo. Besides, settingpayload=0
gives the same functionality asmain
.
In this repo, the shares are sent to the parties by a trusted dealer during the latency benchmark (just for simplicity).
- go v1.18 or later versions
- Reed-Solomon Erasure Coding in Go : klauspost/reedsolomon
- DEDIS Advanced Crypto Library for Go: drand/kyber
- KZG and FFT utils built on top of BLS12-381 (experimental)
Before executing DyCAPS, come into the directory ./cmd/DyCAPs/list
and configure the IP addresses and port numbers for parties in both the old committee and the new committee.
- Write
n
lines of IP addresses in fileipList
, whereline i
is forparty i
in the old committee, andn
denotes the maximum of parties in each committee. - Write
n
lines of port numbers in fileportList
. - Do the same in
ipListNext
andportListNext
for the new committee.
The IP addresses for all parties are 127.0.0.1
for local configuration (we use port numbers to identify the parties).
To run branch main
and byStep
, execute the following script in ./cmd/DyCAPs
:
./test_multiCommittee.sh <n> <f>
To run branch payload
:
./test_multiCommittee.sh <n> <f> <payloadSize>
where n
is the total number of parties in each committee, f
is the number of corrupted parties and payloadSize
is the size of payload (in Bytes).
We require n
and f
satisfies that n = 3f + 1
.
We recommand n=4,f=1
if you are using a laptop for local test.
Results can be found in ./cmd/DyCAPs/metadata
, where files named log*
show the latency information of the specified party and those named executingLog*
show the details of execution.