dfns / cggmp21

State-of-art threshold ECDSA in Rust
Apache License 2.0
43 stars 6 forks source link

Full serde support #37

Closed survived closed 1 year ago

github-actions[bot] commented 1 year ago

Crate direct deps

Direct deps ```text digest v0.10.6 futures v0.3.24 generic-ec v0.0.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) generic-ec-zkp v0.1.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) hex v0.4.3 paillier-zk v0.1.0 (https://github.com/dfns-labs/paillier-zk?branch=m#caa26aec) rand_chacha v0.3.1 rand_core v0.6.4 round-based v0.2.0 (https://github.com/Zengo-X/round-based-protocol?branch=round-based2#16bb42a4) serde v1.0.160 serde_json v1.0.89 serde_with v2.0.1 sha2 v0.10.6 thiserror v1.0.37 ```

Compared to base branch

Diff ```text --- direct-deps-base 2023-05-11 11:39:40.561767773 +0000 +++ direct-deps-pr 2023-05-11 11:39:41.321825293 +0000 @@ -1 +0,0 @@ -cggmp21 v0.0.0 (/home/runner/work/cggmp21/cggmp21/base_branch/cggmp21) @@ -7 +6 @@ -paillier-zk v0.1.0 (https://github.com/dfns-labs/paillier-zk?branch=m#72f8eda3) +paillier-zk v0.1.0 (https://github.com/dfns-labs/paillier-zk?branch=m#caa26aec) @@ -11 +10 @@ -serde v1.0.145 +serde v1.0.160 ```

All deps

cargo tree ```text cggmp21 v0.0.0 (/home/runner/work/cggmp21/cggmp21/pr_branch/cggmp21) ├── digest v0.10.6 │ ├── block-buffer v0.10.3 │ │ └── generic-array v0.14.6 │ │ ├── serde v1.0.160 │ │ │ └── serde_derive v1.0.160 (proc-macro) │ │ │ ├── proc-macro2 v1.0.56 │ │ │ │ └── unicode-ident v1.0.4 │ │ │ ├── quote v1.0.26 │ │ │ │ └── proc-macro2 v1.0.56 (*) │ │ │ └── syn v2.0.15 │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── unicode-ident v1.0.4 │ │ └── typenum v1.15.0 │ └── crypto-common v0.1.6 │ ├── generic-array v0.14.6 (*) │ └── typenum v1.15.0 ├── futures v0.3.24 │ ├── futures-channel v0.3.24 │ │ ├── futures-core v0.3.24 │ │ └── futures-sink v0.3.24 │ ├── futures-core v0.3.24 │ ├── futures-executor v0.3.24 │ │ ├── futures-core v0.3.24 │ │ ├── futures-task v0.3.24 │ │ └── futures-util v0.3.24 │ │ ├── futures-channel v0.3.24 (*) │ │ ├── futures-core v0.3.24 │ │ ├── futures-io v0.3.24 │ │ ├── futures-macro v0.3.24 (proc-macro) │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── syn v1.0.101 │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── unicode-ident v1.0.4 │ │ ├── futures-sink v0.3.24 │ │ ├── futures-task v0.3.24 │ │ ├── memchr v2.5.0 │ │ ├── pin-project-lite v0.2.9 │ │ ├── pin-utils v0.1.0 │ │ └── slab v0.4.7 │ ├── futures-io v0.3.24 │ ├── futures-sink v0.3.24 │ ├── futures-task v0.3.24 │ └── futures-util v0.3.24 (*) ├── generic-ec v0.0.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) │ ├── generic-ec-core v0.1.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) │ │ ├── generic-array v0.14.6 (*) │ │ ├── rand_core v0.6.4 │ │ │ └── getrandom v0.2.8 │ │ │ ├── cfg-if v1.0.0 │ │ │ └── libc v0.2.134 │ │ ├── serde v1.0.160 (*) │ │ ├── subtle v2.4.1 │ │ └── zeroize v1.5.7 │ │ └── zeroize_derive v1.3.2 (proc-macro) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ ├── syn v1.0.101 (*) │ │ └── synstructure v0.12.6 │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ ├── syn v1.0.101 (*) │ │ └── unicode-xid v0.2.4 │ ├── hex v0.4.3 │ │ └── serde v1.0.160 (*) │ ├── phantom-type v0.4.2 │ │ └── educe v0.4.19 (proc-macro) │ │ ├── enum-ordinalize v3.1.11 (proc-macro) │ │ │ ├── num-bigint v0.4.3 │ │ │ │ ├── num-integer v0.1.45 │ │ │ │ │ └── num-traits v0.2.15 │ │ │ │ └── num-traits v0.2.15 │ │ │ ├── num-traits v0.2.15 │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── syn v1.0.101 (*) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ └── syn v1.0.101 (*) │ ├── rand_core v0.6.4 (*) │ ├── serde v1.0.160 (*) │ ├── serde_with v2.0.1 │ │ ├── serde v1.0.160 (*) │ │ └── serde_with_macros v2.0.1 (proc-macro) │ │ ├── darling v0.14.1 │ │ │ ├── darling_core v0.14.1 │ │ │ │ ├── fnv v1.0.7 │ │ │ │ ├── ident_case v1.0.1 │ │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ │ ├── quote v1.0.26 (*) │ │ │ │ ├── strsim v0.10.0 │ │ │ │ └── syn v1.0.101 (*) │ │ │ └── darling_macro v0.14.1 (proc-macro) │ │ │ ├── darling_core v0.14.1 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── syn v1.0.101 (*) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ └── syn v1.0.101 (*) │ ├── subtle v2.4.1 │ └── zeroize v1.5.7 (*) ├── generic-ec-zkp v0.1.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) │ ├── digest v0.10.6 (*) │ ├── generic-array v0.14.6 (*) │ ├── generic-ec v0.0.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) (*) │ ├── rand_core v0.6.4 (*) │ ├── serde v1.0.160 (*) │ └── subtle v2.4.1 ├── hex v0.4.3 (*) ├── paillier-zk v0.1.0 (https://github.com/dfns-labs/paillier-zk?branch=m#caa26aec) │ ├── generic-ec v0.0.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) (*) │ ├── generic-ec-core v0.1.0 (https://github.com/dfns-labs/generic-ec?branch=d#a65125af) (*) │ ├── libpaillier v0.5.0 │ │ ├── digest v0.10.6 (*) │ │ ├── serde v1.0.160 (*) │ │ ├── serde_bare v0.5.0 │ │ │ └── serde v1.0.160 (*) │ │ ├── unknown_order v0.6.0 │ │ │ ├── digest v0.9.0 │ │ │ │ └── generic-array v0.14.6 (*) │ │ │ ├── hex v0.4.3 (*) │ │ │ ├── num-traits v0.2.15 │ │ │ ├── rand v0.8.5 │ │ │ │ ├── libc v0.2.134 │ │ │ │ ├── rand_chacha v0.3.1 │ │ │ │ │ ├── ppv-lite86 v0.2.17 │ │ │ │ │ └── rand_core v0.6.4 (*) │ │ │ │ └── rand_core v0.6.4 (*) │ │ │ ├── rug v1.18.0 │ │ │ │ ├── az v1.2.1 │ │ │ │ ├── gmp-mpfr-sys v1.4.12 │ │ │ │ │ └── libc v0.2.134 │ │ │ │ ├── libc v0.2.134 │ │ │ │ ├── num-integer v0.1.45 (*) │ │ │ │ └── num-traits v0.2.15 │ │ │ ├── serde v1.0.160 (*) │ │ │ ├── subtle v2.4.1 │ │ │ └── zeroize v1.5.7 (*) │ │ └── zeroize v1.5.7 (*) │ ├── rand_chacha v0.3.1 (*) │ ├── rand_core v0.6.4 (*) │ ├── serde v1.0.160 (*) │ ├── serde_with v3.0.0 │ │ ├── serde v1.0.160 (*) │ │ └── serde_with_macros v3.0.0 (proc-macro) │ │ ├── darling v0.20.1 │ │ │ ├── darling_core v0.20.1 │ │ │ │ ├── fnv v1.0.7 │ │ │ │ ├── ident_case v1.0.1 │ │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ │ ├── quote v1.0.26 (*) │ │ │ │ ├── strsim v0.10.0 │ │ │ │ └── syn v2.0.15 (*) │ │ │ └── darling_macro v0.20.1 (proc-macro) │ │ │ ├── darling_core v0.20.1 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── syn v2.0.15 (*) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ └── syn v2.0.15 (*) │ ├── sha2 v0.10.6 │ │ ├── cfg-if v1.0.0 │ │ ├── cpufeatures v0.2.5 │ │ └── digest v0.10.6 (*) │ ├── subtle v2.4.1 │ ├── thiserror v1.0.37 │ │ └── thiserror-impl v1.0.37 (proc-macro) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ └── syn v1.0.101 (*) │ └── zeroize v1.5.7 (*) ├── rand_chacha v0.3.1 (*) ├── rand_core v0.6.4 (*) ├── round-based v0.2.0 (https://github.com/Zengo-X/round-based-protocol?branch=round-based2#16bb42a4) │ ├── async-stream v0.3.3 │ │ ├── async-stream-impl v0.3.3 (proc-macro) │ │ │ ├── proc-macro2 v1.0.56 (*) │ │ │ ├── quote v1.0.26 (*) │ │ │ └── syn v1.0.101 (*) │ │ └── futures-core v0.3.24 │ ├── bincode v1.3.3 │ │ └── serde v1.0.160 (*) │ ├── futures v0.3.24 (*) │ ├── never v0.1.0 │ ├── phantom-type v0.3.1 │ │ └── educe v0.4.19 (proc-macro) (*) │ ├── round-based-derive v0.1.0 (proc-macro) (https://github.com/Zengo-X/round-based-protocol?branch=round-based2#16bb42a4) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ └── syn v1.0.101 (*) │ ├── serde v1.0.160 (*) │ ├── thiserror v1.0.37 (*) │ ├── tokio v1.21.2 │ │ └── pin-project-lite v0.2.9 │ ├── tokio-stream v0.1.10 │ │ ├── futures-core v0.3.24 │ │ ├── pin-project-lite v0.2.9 │ │ ├── tokio v1.21.2 (*) │ │ └── tokio-util v0.7.4 │ │ ├── bytes v1.2.1 │ │ ├── futures-core v0.3.24 │ │ ├── futures-sink v0.3.24 │ │ ├── pin-project-lite v0.2.9 │ │ └── tokio v1.21.2 (*) │ └── tracing v0.1.36 │ ├── cfg-if v1.0.0 │ ├── pin-project-lite v0.2.9 │ ├── tracing-attributes v0.1.22 (proc-macro) │ │ ├── proc-macro2 v1.0.56 (*) │ │ ├── quote v1.0.26 (*) │ │ └── syn v1.0.101 (*) │ └── tracing-core v0.1.29 │ └── once_cell v1.17.0 ├── serde v1.0.160 (*) ├── serde_json v1.0.89 │ ├── itoa v1.0.4 │ ├── ryu v1.0.11 │ └── serde v1.0.160 (*) ├── serde_with v2.0.1 (*) ├── sha2 v0.10.6 (*) └── thiserror v1.0.37 (*) ```

Compared to base branch

Diff ```text --- all-deps-base 2023-05-11 11:39:40.837788662 +0000 +++ all-deps-pr 2023-05-11 11:39:41.593845878 +0000 @@ -10,0 +11 @@ +darling v0.20.1 @@ -11,0 +13 @@ +darling_core v0.20.1 @@ -12,0 +15 @@ +darling_macro v0.20.1 (proc-macro) @@ -44 +47 @@ -paillier-zk v0.1.0 (https://github.com/dfns-labs/paillier-zk?branch=m#72f8eda3) +paillier-zk v0.1.0 (https://github.com/dfns-labs/paillier-zk?branch=m#caa26aec) @@ -50,2 +53,2 @@ -proc-macro2 v1.0.46 -quote v1.0.21 +proc-macro2 v1.0.56 +quote v1.0.26 @@ -59 +62 @@ -serde v1.0.145 +serde v1.0.160 @@ -61 +64 @@ -serde_derive v1.0.145 (proc-macro) +serde_derive v1.0.160 (proc-macro) @@ -63,0 +67 @@ +serde_with v3.0.0 @@ -64,0 +69 @@ +serde_with_macros v3.0.0 (proc-macro) @@ -69,0 +75 @@ +syn v2.0.15 ```
github-actions[bot] commented 1 year ago

Benchmark Result

Benchmarks ```text RUST_TESTS_SEED=589a15de65e7e69038b3097a4fddf177f9537fae34082af2a2ee2456407f89e8 n = 3 Key refresh protocol Protocol Performance: - Protocol took 3.08s to complete In particular: - Setup: 45.20µs - Retrieve auxiliary data: 1.10µs (2.4%) - Setup networking: 20.30µs (44.9%) - Precompute execution id and shared state: 23.60µs (52.2%) - Unstaged: 200.00ns (0.4%) - Round 1: 360.88ms - Retrieve primes (p and q): 400.00ns (0.0%) - Compute paillier decryption key (N): 20.96ms (5.8%) - Generate secret x_i and public X_i: 635.60µs (0.2%) - Generate auxiliary params r, λ, t, s: 5.19ms (1.4%) - Prove Πprm (ψˆ_i): 333.14ms (92.3%) - Compute schnorr commitment τ_j: 559.80µs (0.2%) - Sample random bytes: 300.00ns (0.0%) - Compute hash commitment and sample decommitment: 390.60µs (0.1%) - Unstaged: 200.00ns (0.0%) - Round 2: 5.50µs - Hash received msgs (reliability check): 5.00µs (90.9%) - Unstaged: 500.00ns (9.1%) - Round 3: 500.00ns - Assert other parties hashed messages (reliability check): 300.00ns (60.0%) - Unstaged: 200.00ns (40.0%) - Round 4: 1.84s - Validate round 1 decommitments: 1.14ms (0.1%) - Validate data sizes: 500.00ns (0.0%) - Validate П_prm (ψ_i): 635.29ms (34.5%) - Validate X_i: 39.40µs (0.0%) - Compute paillier encryption keys: 13.20µs (0.0%) - Add together shared random bytes: 3.80µs (0.0%) - Compute П_mod (ψ_i): 1.02s (55.4%) - Assemble security params for П_fac (ф_i): 2.31ms (0.1%) - Compute schnorr proof ψ_i^j: 11.20µs (0.0%) - Prepare auxiliary params and security level for proofs: 500.00ns (0.0%) - Paillier encryption of x_i^j: 42.23ms (2.3%) - Compute П_fac (ф_i^j): 140.54ms (7.6%) - Unstaged: 1.70µs (0.0%) - Round 5: 881.11ms - Paillier decrypt x_j^i from C_j^i: 38.20ms (4.3%) - Validate shares: 471.20µs (0.1%) - Validate schnorr proofs п_j and ψ_j^k: 2.75ms (0.3%) - Validate ψ_j (П_mod): 691.10ms (78.4%) - Validate ф_j (П_fac): 148.55ms (16.9%) - Calculate new x_i: 1.90µs (0.0%) - Calculate new X_i: 28.60µs (0.0%) - Assemble new core share: 1.10µs (0.0%) - Assemble auxiliary info: 5.10µs (0.0%) - Unstaged: 1.10µs (0.0%) Signing protocol Protocol Performance: - Protocol took 2.11s to complete In particular: - Setup: 26.00ms - Map t-out-of-n protocol to t-out-of-t: 6.70µs (0.0%) - Retrieve auxiliary data: 25.98ms (99.9%) - Precompute execution id and security params: 10.40µs (0.0%) - Setup networking: 7.60µs (0.0%) - Unstaged: 200.00ns (0.0%) - Round 1: 165.44ms - Generate local ephemeral secrets (k_i, y_i, p_i, v_i): 45.30µs (0.0%) - Encrypt G_i and K_i: 42.48ms (25.7%) - Prove ψ0_j: 122.91ms (74.3%) - Unstaged: 2.10µs (0.0%) - Round 2: 64.10µs - Hash received msgs (reliability check): 63.60µs (99.2%) - Unstaged: 500.00ns (0.8%) - Round 3: 1.03s - Assert other parties hashed messages (reliability check): 1.30µs (0.0%) - Verify psi0 proofs: 105.57ms (10.3%) - Sample random r, hat_r, s, hat_s, beta, hat_beta: 78.60µs (0.0%) - Encrypt D_ji: 68.29ms (6.7%) - Encrypt F_ji: 67.53ms (6.6%) - Encrypt hat_D_ji: 69.67ms (6.8%) - Encrypt hat_F_ji: 63.46ms (6.2%) - Prove psi_ji: 268.08ms (26.1%) - Prove psiˆ_ji: 264.92ms (25.8%) - Prove psi_prime_ji : 118.50ms (11.5%) - Unstaged: 4.80µs (0.0%) - Round 4: 788.90ms - Retrieve auxiliary data: 8.80µs (0.0%) - Validate psi: 241.62ms (30.6%) - Validate hat_psi: 240.83ms (30.5%) - Validate psi_prime: 101.42ms (12.9%) - Compute Gamma, Delta_i, delta_i, chi_i: 80.33ms (10.2%) - Prove psi_prime_prime: 124.68ms (15.8%) - Unstaged: 1.20µs (0.0%) - Presig output: 106.95ms - Validate psi_prime_prime: 106.39ms (99.5%) - Calculate presignature: 558.60µs (0.5%) - Unstaged: 1.80µs (0.0%) - Partial signing: 11.90µs - Signature reconstruction: 895.60µs ```