allocations.c
1 #include <stdio.h> 2 3 #include "stp-dkg.h" 4 #include "toprf-update.h" 5 #include "utils.h" 6 7 static size_t stp_peer_ctx_size(const size_t n, const size_t t) { 8 size_t ret = 0; 9 uint8_t peerids[n][crypto_generichash_BYTES]; 10 ret+=sizeof(peerids); 11 Noise_XK_session_t *noise_outs[n]; 12 ret+=sizeof(noise_outs); 13 Noise_XK_session_t *noise_ins[n]; 14 ret+=sizeof(noise_ins); 15 TOPRF_Share dealer_shares[n][2]; 16 ret+=sizeof(dealer_shares); 17 uint8_t encrypted_shares[n][noise_xk_handshake3_SIZE + stp_dkg_encrypted_share_SIZE]; 18 ret+=sizeof(encrypted_shares); 19 uint8_t dealer_commitments[n*n][crypto_core_ristretto255_BYTES]; 20 ret+=sizeof(dealer_commitments); 21 uint8_t share_macs[n*n][crypto_auth_hmacsha256_BYTES]; 22 ret+=sizeof(share_macs); 23 uint8_t peer_k_commitments[n][crypto_core_ristretto255_BYTES]; 24 ret+=sizeof(peer_k_commitments); 25 uint8_t commitments_hashes[n][stp_dkg_commitment_HASHBYTES]; 26 ret+=sizeof(commitments_hashes); 27 uint16_t peer_dealer_share_complaints[n*n]; 28 ret+=sizeof(peer_dealer_share_complaints); 29 uint8_t peer_my_dealer_share_complaints[n]; 30 ret+=sizeof(peer_my_dealer_share_complaints); 31 uint64_t peer_last_ts[n]; 32 ret+=sizeof(peer_last_ts); 33 STP_DKG_Cheater peer_cheaters[t*t - 1]; 34 ret+=sizeof(peer_cheaters); 35 return ret; 36 } 37 38 static size_t toprf_update_ctx_size(const size_t n, const size_t t) { 39 const uint8_t dealers = (t-1)*2 + 1; 40 size_t ret = 0; 41 42 TOPRF_Share k0_share[2] = {0}; 43 ret+=sizeof k0_share; 44 uint8_t k0_commitments[n][crypto_core_ristretto255_BYTES]; 45 ret+=sizeof k0_commitments; 46 ret+=sizeof k0_commitments; 47 uint8_t kid[toprf_keyid_SIZE]; 48 ret+=sizeof kid; 49 uint8_t lt_pks[n+1][crypto_sign_PUBLICKEYBYTES]; 50 ret+=sizeof lt_pks; 51 uint8_t lt_sks[crypto_sign_SECRETKEYBYTES]; 52 ret+=sizeof lt_sks; 53 uint8_t peers_noise_pks[n][crypto_scalarmult_BYTES]; 54 ret+=sizeof peers_noise_pks; 55 uint8_t peers_noise_sks[crypto_scalarmult_SCALARBYTES]; 56 ret+=sizeof peers_noise_sks; 57 uint8_t pkid[toprf_keyid_SIZE]; 58 ret+=sizeof pkid; 59 uint8_t stp_ltpk[crypto_sign_PUBLICKEYBYTES]; 60 ret+=sizeof stp_ltpk; 61 Noise_XK_session_t *noise_outs[n]; 62 ret+=sizeof noise_outs; 63 Noise_XK_session_t *noise_ins[n]; 64 ret+=sizeof noise_ins; 65 TOPRF_Share pshares[n][2]; 66 ret+=sizeof pshares; 67 uint8_t p_commitments[n*n][crypto_core_ristretto255_BYTES]; 68 ret+=sizeof p_commitments; 69 uint8_t p_commitments_hashes[n][toprf_update_commitment_HASHBYTES]; 70 ret+=sizeof p_commitments_hashes; 71 uint8_t peers_p_share_macs[n*n][crypto_auth_hmacsha256_BYTES]; 72 ret+=sizeof peers_p_share_macs; 73 uint16_t peer_p_complaints[n*n]; 74 ret+=sizeof peer_p_complaints; 75 uint8_t peer_my_p_complaints[n]; 76 ret+=sizeof peer_my_p_complaints; 77 uint8_t encrypted_shares[n][noise_xk_handshake3_SIZE + toprf_update_encrypted_shares_SIZE]; 78 ret+=sizeof encrypted_shares; 79 uint64_t peer_last_ts[n]; 80 ret+=sizeof peer_last_ts; 81 uint8_t lambdas[dealers][crypto_core_ristretto255_SCALARBYTES]; 82 ret+=sizeof lambdas; 83 TOPRF_Share k0p_shares[dealers][2]; 84 ret+=sizeof k0p_shares; 85 uint8_t k0p_commitments[dealers*(n+1)][crypto_core_ristretto255_BYTES]; 86 ret+=sizeof k0p_commitments; 87 uint8_t zk_challenge_nonce_commitments[n][crypto_scalarmult_ristretto255_BYTES]; 88 ret+=sizeof zk_challenge_nonce_commitments; 89 uint8_t zk_challenge_nonces[n][2][crypto_scalarmult_ristretto255_SCALARBYTES]; 90 ret+=sizeof zk_challenge_nonces; 91 uint8_t zk_challenge_commitments[dealers][3][crypto_scalarmult_ristretto255_SCALARBYTES]; 92 ret+=sizeof zk_challenge_commitments; 93 uint8_t zk_challenge_e_i[dealers][crypto_scalarmult_ristretto255_SCALARBYTES]; 94 ret+=sizeof zk_challenge_e_i; 95 TOPRF_Update_Cheater peer_cheaters[n*n - 1]; 96 ret+=sizeof peer_cheaters; 97 return ret; 98 } 99 100 static void stp_dkg(void) { 101 STP_DKG_PeerState ctx; 102 ctx.share_complaints_len=0; 103 for(ctx.t=2;ctx.t<64;ctx.t++) { 104 printf("t=%2d\n", ctx.t); 105 for(ctx.n=ctx.t+1;ctx.n<129;ctx.n++) { 106 ctx.step=0; 107 //ctx.share_complaints_len=ctx.t; 108 //ctx.my_share_complaints_len=ctx.t-1; 109 size_t itot=0, otot=0; 110 int i=0; 111 while(stp_dkg_peer_not_done(&ctx)) { 112 const size_t out_size = stp_dkg_peer_output_size(&ctx); 113 const size_t in_size = stp_dkg_peer_input_size(&ctx); 114 if(itot<in_size) itot=in_size; 115 if(otot<out_size) { 116 otot=out_size; 117 i=ctx.step; 118 } 119 ctx.step++; 120 } 121 const size_t ctx_size = stp_peer_ctx_size(ctx.n, ctx.t)+sizeof ctx; 122 const size_t total = (ctx_size+itot+otot) >> 10; 123 124 if(total<16) printf(GREEN); 125 else if(total>64) printf(RED); 126 printf("n=%3d total: %7ldKB ctx size: %7ldKB max: %6ldKB/%6ldKB %d"NORMAL"\n", ctx.n, total, ctx_size >> 10, itot >> 10, otot >> 10, i); 127 } 128 } 129 } 130 131 static void toprf_update(void) { 132 TOPRF_Update_PeerState ctx; 133 ctx.p_complaints_len = 0; 134 ctx.my_p_complaints_len = 0; 135 ctx.index = 1; 136 for(ctx.n=5;ctx.n<129;ctx.n++) { 137 printf("n=%2d\n", ctx.n); 138 for(ctx.t=2;ctx.t<=((ctx.n-1)>>1)+1;ctx.t++) { 139 ctx.step=0; 140 //ctx.p_complaints_len=ctx.n; 141 size_t itot=0, otot=0; 142 while(toprf_update_peer_not_done(&ctx)) { 143 const size_t out_size = toprf_update_peer_output_size(&ctx); 144 const size_t in_size = toprf_update_peer_input_size(&ctx); 145 if(in_size>itot) itot=in_size; 146 if(out_size>otot) otot=out_size; 147 ctx.step++; 148 } 149 const size_t ctx_size=toprf_update_ctx_size(ctx.n, ctx.t)+sizeof ctx; 150 const size_t total = (ctx_size+itot+otot) >> 10; 151 if(total<16) printf(GREEN); 152 else if(total>64) printf(RED); 153 printf("t=%3d total: %7ldKB ctx size: %7ldKB max: %6ldKB/%6ldKB"NORMAL"\n", ctx.t, total, ctx_size >> 10, itot >> 10, otot >> 10); 154 } 155 } 156 } 157 158 int main(void) { 159 //printf("xxx: %ld\n", 160 // (sizeof(STP_DKG_Message) /* header */ \ 161 // + noise_xk_handshake3_SIZE /* 4th&final noise handshake */ \ 162 // + sizeof(TOPRF_Share) /* msg: the noise_xk wrapped k share */ \ 163 // + sizeof(TOPRF_Share) /* msg: the noise_xk wrapped k blind */ \ 164 // + crypto_secretbox_xchacha20poly1305_MACBYTES /* mac of msg */ )); 165 printf("toprf-update allocations\n"); 166 toprf_update(); 167 printf("stp-dkg allocations\n"); 168 stp_dkg(); 169 return 0; 170 }