|
|
@ -259,94 +259,6 @@ void calc_shares(uint8_t *shares,uint8_t *secret,int32_t size,int32_t width,int3 |
|
|
|
free(buffer); |
|
|
|
} |
|
|
|
|
|
|
|
int32_t init_sharenrs(uint8_t sharenrs[255],uint8_t *orig,int32_t m,int32_t n) |
|
|
|
{ |
|
|
|
uint8_t *randvals,valid[255]; |
|
|
|
int32_t i,j,r,remains,orign; |
|
|
|
if ( m > n || n >= 0xff ) // reserve 255 for illegal sharei
|
|
|
|
{ |
|
|
|
printf("illegal M.%d of N.%d\n",m,n); |
|
|
|
return(-1); |
|
|
|
} |
|
|
|
randvals = calloc(1,65536); |
|
|
|
OS_randombytes(randvals,65536); |
|
|
|
memset(sharenrs,0,n); |
|
|
|
if ( orig == 0 && n == m ) |
|
|
|
{ |
|
|
|
for (i=0; i<255; i++) |
|
|
|
valid[i] = (i + 1); |
|
|
|
remains = orign = 255; |
|
|
|
for (i=0; i<n; i++) |
|
|
|
{ |
|
|
|
r = (randvals[i] % remains); |
|
|
|
sharenrs[i] = valid[r]; |
|
|
|
printf("%d ",sharenrs[i]); |
|
|
|
valid[r] = valid[--remains]; |
|
|
|
} |
|
|
|
printf("FULL SET\n"); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
remains = n; |
|
|
|
orign = n; |
|
|
|
memcpy(valid,sharenrs,n); |
|
|
|
i = j = 0; |
|
|
|
memset(sharenrs,0,n); |
|
|
|
for (i=0; i<m; i++) |
|
|
|
{ |
|
|
|
r = (rand() >> 8) % remains; |
|
|
|
sharenrs[i] = valid[r]; |
|
|
|
valid[r] = valid[--remains]; |
|
|
|
} |
|
|
|
/*while ( i < m )
|
|
|
|
{ |
|
|
|
if ( j >= 65536 ) |
|
|
|
{ |
|
|
|
gfshare_fill_rand(randvals,65536); |
|
|
|
printf("refill j.%d\n",j); |
|
|
|
j = 0; |
|
|
|
} |
|
|
|
r = (randvals[j++] % n); |
|
|
|
if ( valid[r] != 0 ) |
|
|
|
{ |
|
|
|
remains--; |
|
|
|
i++; |
|
|
|
sharenrs[r] = valid[r]; |
|
|
|
//printf("%d ",sharenrs[i]);
|
|
|
|
valid[r] = 0; |
|
|
|
} |
|
|
|
}*/ |
|
|
|
for (i=0; i<n; i++) |
|
|
|
printf("%d ",valid[i]); |
|
|
|
printf("valid\n"); |
|
|
|
for (i=0; i<m; i++) |
|
|
|
printf("%d ",sharenrs[i]); |
|
|
|
printf("sharenrs vals m.%d of n.%d\n",m,n); |
|
|
|
//getchar();
|
|
|
|
} |
|
|
|
free(randvals); |
|
|
|
//printf("sharenrs m.%d of n.%d\n",m,n);
|
|
|
|
if ( remains != (orign - m) ) |
|
|
|
{ |
|
|
|
printf("remains algo error??\n"); |
|
|
|
return(-1); |
|
|
|
} |
|
|
|
for (i=0; i<m; i++) |
|
|
|
{ |
|
|
|
for (j=0; j<m; j++) |
|
|
|
{ |
|
|
|
if ( i == j ) |
|
|
|
continue; |
|
|
|
if ( sharenrs[i] != 0 && sharenrs[i] == sharenrs[j] ) |
|
|
|
{ |
|
|
|
printf("FATAL: duplicate entry sharenrs[%d] %d vs %d sharenrs[%d]\n",i,sharenrs[i],sharenrs[j],j); |
|
|
|
return(-1); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return(0); |
|
|
|
} |
|
|
|
|
|
|
|
// ----------------------------------------------------[ Recombination ]----
|
|
|
|
|
|
|
|
// Inform a recombination context of a change in share indexes
|
|
|
|