@@ -52,8 +52,8 @@ bits256 *allshares=NULL;
5252uint8_t sharenrs [256 ];
5353struct rpcrequest_info * LP_garbage_collector ;
5454struct 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
5858bits256 v_hash [CARDS777_MAXCARDS ][CARDS777_MAXCARDS ];
5959bits256 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
672611bits256 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
738672struct 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