+ uint8_t a[shares_required], x[total_shares], D[total_shares][secret_length];
+
+ // TODO: The following loop may take a long time and eat lots of /dev/random if total_shares is high
+ for (uint32_t i = 0; i < total_shares; i++) {
+ int32_t j = 0;
+ do {
+ assert(fread(&x[i], sizeof(uint8_t), 1, random) == 1);
+ if (x[i] == 0)
+ continue;
+ for (j = 0; j < i; j++)
+ if (x[j] == x[i])
+ break;
+ } while (j < i); // Inner loop will get to j = i when x[j] != x[i] for all j
+ if (i % 32 == 31)
+ printf("Finished picking X coordinates for %u shares\n", i+1);
+ }