Skip to content

Commit 4dc55a7

Browse files
authored
Merge pull request ElementsProject#9 from sg777/master
memory optimization
2 parents f310ece + 58c173a commit 4dc55a7

File tree

1 file changed

+9
-83
lines changed

1 file changed

+9
-83
lines changed

privatebet/bet.c

Lines changed: 9 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ bits256 *allshares=NULL;
5252
uint8_t sharenrs[256];
5353
struct rpcrequest_info *LP_garbage_collector;
5454
struct enc_share { uint8_t share[sizeof(bits256)+crypto_box_NONCEBYTES+crypto_box_ZEROBYTES]; };
55-
//struct enc_share *g_shares=NULL;
56-
struct enc_share g_shares[CARDS777_MAXPLAYERS*CARDS777_MAXPLAYERS*CARDS777_MAXCARDS];
55+
struct enc_share *g_shares=NULL;
56+
//struct enc_share g_shares[CARDS777_MAXPLAYERS*CARDS777_MAXPLAYERS*CARDS777_MAXCARDS];
5757

5858
bits256 v_hash[CARDS777_MAXCARDS][CARDS777_MAXCARDS];
5959
bits256 g_hash[CARDS777_MAXPLAYERS][CARDS777_MAXCARDS];
@@ -307,67 +307,6 @@ int main(int argc,const char *argv[])
307307
else
308308
{
309309
printf("no argjson, default to testmode\n");
310-
311-
#if 1 //using threads
312-
pthread_t player_t[CARDS777_MAXPLAYERS],dcv_t,bvv_t;
313-
OS_randombytes((uint8_t *)&range,sizeof(range));
314-
OS_randombytes((uint8_t *)&numplayers,sizeof(numplayers));
315-
range = (range % 52) + 1;
316-
numplayers = (numplayers % (CARDS777_MAXPLAYERS-1)) + 2;
317-
printf("\nnumplayers=%d, numcards=%d\n",numplayers,range);
318-
319-
for(i=0;i<numplayers && 0;i++){
320-
if ( OS_thread_create(&player_t[i],NULL,(void *)BET_player,(void *)i) != 0 )
321-
{
322-
printf("error launching BET_clientloop\n");
323-
exit(-1);
324-
}
325-
printf("\n:%d",i);
326-
}
327-
i=0;
328-
if ( OS_thread_create(&player_t[i],NULL,(void *)BET_player,(void *)&i) != 0 )
329-
{
330-
printf("error launching BET_clientloop\n");
331-
exit(-1);
332-
}
333-
i=1;
334-
if ( OS_thread_create(&player_t[i],NULL,(void *)BET_player,(void *)&i) != 0 )
335-
{
336-
printf("error launching BET_clientloop\n");
337-
exit(-1);
338-
}
339-
/*
340-
if ( OS_thread_create(&dcv_t,NULL,(void *)BET_dcv,(void *)BET) != 0 )
341-
{
342-
printf("error launching BET_clientloop\n");
343-
exit(-1);
344-
}
345-
346-
347-
if ( OS_thread_create(&bvv_t,NULL,(void *)BET_bvv,(void *)BET) != 0 )
348-
{
349-
printf("error launching BET_clientloop\n");
350-
exit(-1);
351-
}
352-
*/
353-
for(i=0;i<numplayers;i++){
354-
if(pthread_join(player_t[i],NULL)){
355-
printf("\nError in joining the main thread for player thread %d",i);
356-
}
357-
}
358-
/*
359-
if(pthread_join(dcv_t,NULL)){
360-
printf("\nError in joining the main thread for DCV thread");
361-
}
362-
if(pthread_join(bvv_t,NULL)){
363-
printf("\nError in joining the main thread for BVV thread");
364-
}
365-
*/
366-
367-
368-
369-
#endif
370-
testmode=1;
371310
while ( testmode != 1 )
372311
{
373312

@@ -671,17 +610,14 @@ struct pair256 sg777_deckgen_vendor(int32_t playerid, bits256 *cardprods,bits256
671610

672611
bits256 sg777_player_decode(int32_t playerid,int32_t cardID,int numplayers,struct pair256 *keys,struct pair256 b_key,bits256 blindingval,bits256 blindedcard,bits256 *cardprods,bits256 *playerprivs,int32_t *permis,int32_t numcards)
673612
{
674-
bits256 decoded,tmp,xoverz,hash,fe,refval,basepoint,*cardshares; int32_t i,j,k,unpermi,M; char str[65];
675-
bits256 *recover=NULL;
613+
bits256 recover,decoded,tmp,xoverz,hash,fe,refval,basepoint,cardshares[CARDS777_MAXPLAYERS]; int32_t i,j,k,unpermi,M; char str[65];
676614
struct enc_share temp;
677615
uint8_t **shares,flag=0;
678616
shares=calloc(numplayers,sizeof(uint8_t*));
679617
for(i=0;i<numplayers;i++)
680618
shares[i]=calloc(sizeof(bits256),sizeof(uint8_t));
681619

682620
basepoint = curve25519_basepoint9();
683-
recover=calloc(1,sizeof(bits256));
684-
cardshares = calloc(numplayers,sizeof(bits256));
685621
uint8_t decipher[sizeof(bits256) + 1024],*ptr; int32_t recvlen;
686622
for (j=0; j<numplayers; j++)
687623
{
@@ -696,8 +632,8 @@ bits256 sg777_player_decode(int32_t playerid,int32_t cardID,int numplayers,struc
696632
for(i=0;i<M;i++) {
697633
memcpy(shares[i],cardshares[i].bytes,sizeof(bits256));
698634
}
699-
gfshare_recoverdata(shares,sharenrs, M,recover->bytes,sizeof(bits256),M);
700-
refval = fmul_donna(blindedcard,crecip_donna(*recover));
635+
gfshare_recoverdata(shares,sharenrs, M,recover.bytes,sizeof(bits256),M);
636+
refval = fmul_donna(blindedcard,crecip_donna(recover));
701637
#if 1
702638
for (i=0; i<numcards; i++)
703639
{
@@ -722,12 +658,10 @@ bits256 sg777_player_decode(int32_t playerid,int32_t cardID,int numplayers,struc
722658
}
723659
#endif
724660
end:
725-
free(recover);
726-
for(i=0;i<numplayers;i++){
661+
for(i=0;i<numplayers;i++){
727662
free(shares[i]);
728663
}
729664
free(shares);
730-
free(cardshares);
731665
if(!flag){
732666
memset(tmp.bytes,0,sizeof(tmp));
733667
printf("couldnt decode blindedcard %s\n",bits256_str(str,blindedcard));
@@ -737,13 +671,11 @@ bits256 sg777_player_decode(int32_t playerid,int32_t cardID,int numplayers,struc
737671

738672
struct pair256 sg777_blinding_vendor(struct pair256 *keys,struct pair256 b_key,bits256 *blindings,bits256 *blindedcards,bits256 *finalcards,int32_t numcards,int32_t numplayers,int32_t playerid,bits256 deckid)
739673
{
740-
int32_t i,j,k,M,permi,permis[256]; uint8_t space[8192]; bits256 *cardshares,*recover,basepoint,temp_hash[CARDS777_MAXCARDS];
674+
int32_t i,j,k,M,permi,permis[256]; uint8_t space[8192]; bits256 cardshares[CARDS777_MAXPLAYERS],basepoint,temp_hash[CARDS777_MAXCARDS];
741675

742676
struct enc_share temp;
743677

744678

745-
recover=calloc(1,sizeof(bits256));
746-
//optimization
747679
for (i=0; i<numcards; i++){
748680
temp_hash[i]=g_hash[playerid][i];
749681
}
@@ -757,11 +689,6 @@ struct pair256 sg777_blinding_vendor(struct pair256 *keys,struct pair256 b_key,b
757689
M = (numplayers/2) + 1;
758690

759691
gfshare_calc_sharenrs(sharenrs,numplayers,deckid.bytes,sizeof(deckid)); // same for all players for this round
760-
cardshares = calloc(numplayers,sizeof(bits256));
761-
/* if ( g_shares == 0)
762-
g_shares= calloc(numplayers,sizeof(struct enc_share) * numplayers * numcards);
763-
*/
764-
765692

766693
for (i=0; i<numcards; i++)
767694
{
@@ -773,8 +700,6 @@ struct pair256 sg777_blinding_vendor(struct pair256 *keys,struct pair256 b_key,b
773700
}
774701
}
775702
// when all players have submitted their finalcards, blinding vendor can send encrypted allshares for each player, see cards777.c
776-
free(recover);
777-
free(cardshares);
778703
return b_key;
779704
}
780705

@@ -794,6 +719,7 @@ void sg777_players_init(int32_t numplayers,int32_t numcards,bits256 deckid)
794719
sg777_deckgen_vendor(playerid,cardprods[playerid],finalcards[playerid],numcards,playercards[playerid],deckid);
795720
}
796721
b_key.priv=curve25519_keypair(&b_key.prod);
722+
g_shares=(struct enc_share*)malloc(CARDS777_MAXPLAYERS*CARDS777_MAXPLAYERS*CARDS777_MAXCARDS*sizeof(struct enc_share));
797723
for (playerid=0; playerid<numplayers; playerid++)
798724
{
799725
sg777_blinding_vendor(keys,b_key,blindingvals[playerid],blindedcards[playerid],finalcards[playerid],numcards,numplayers,playerid,deckid); // over network
@@ -840,5 +766,5 @@ void sg777_players_init(int32_t numplayers,int32_t numcards,bits256 deckid)
840766
}
841767
}
842768
printf("numplayers.%d numcards.%d deck %s -> playererrs.%d good.%d bad.%d decode.[good %d, bad %d]\n",numplayers,numcards,bits256_str(str,deckid),playererrs,good,bad,decodegood,decodebad);
843-
769+
free(g_shares);
844770
}

0 commit comments

Comments
 (0)