/ src / tests / allocations.c
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  }