X-Git-Url: http://git.bitcoin.ninja/index.cgi?p=shamirs;a=blobdiff_plain;f=main.c;h=42ec45ebcc4c17392bd2fa33e233f5b338b32843;hp=af352fd09fb692da34db9b573460410ff5fba4b7;hb=085515e769d794f70c3f9ae0c80902dd5a5eee09;hpb=471217f7f4a24a28b38fbafb7c257b6e0539811c
diff --git a/main.c b/main.c
index af352fd..42ec45e 100644
--- a/main.c
+++ b/main.c
@@ -32,16 +32,20 @@
#define MAX_LENGTH 1024
#define ERROREXIT(str...) {fprintf(stderr, str); exit(1);}
+#ifndef RAND_SOURCE
+#define RAND_SOURCE "/dev/random"
+#endif
+
#ifndef TEST
-static void derive_missing_part(uint8_t total_shares, uint8_t shares_required, bool parts_have[], uint8_t* split_version, uint8_t split_index, uint8_t split_size) {
- uint8_t (*D)[split_size] = (uint8_t (*)[split_size])split_version;
+static void derive_missing_part(uint8_t total_shares, uint8_t shares_required, bool parts_have[], const uint8_t* split_version, const uint8_t* split_x, uint8_t split_index, uint8_t split_size) {
+ const uint8_t (*D)[split_size] = (const uint8_t (*)[split_size])split_version;
uint8_t x[shares_required], q[shares_required];
// Fill in x/q with the selected shares
uint16_t x_pos = 0;
for (uint8_t i = 0; i < P-1; i++) {
if (parts_have[i]) {
- x[x_pos] = i+1;
+ x[x_pos] = split_x[i];
q[x_pos++] = D[i][split_index];
}
}
@@ -78,23 +82,23 @@ static void derive_missing_part(uint8_t total_shares, uint8_t shares_required, b
memset(q, 0, sizeof(q));
}
-static void check_possible_missing_part_derivations_intern(uint8_t total_shares, uint8_t shares_required, bool parts_have[], uint8_t parts_included, uint16_t progress, uint8_t* split_version, uint8_t split_index, uint8_t split_size) {
+static void check_possible_missing_part_derivations_intern(uint8_t total_shares, uint8_t shares_required, bool parts_have[], uint8_t parts_included, uint16_t progress, const uint8_t* split_version, const uint8_t* x, uint8_t split_index, uint8_t split_size) {
if (parts_included == shares_required-1)
- return derive_missing_part(total_shares, shares_required, parts_have, split_version, split_index, split_size);
+ return derive_missing_part(total_shares, shares_required, parts_have, split_version, x, split_index, split_size);
if (total_shares - progress < shares_required)
return;
- check_possible_missing_part_derivations_intern(total_shares, shares_required, parts_have, parts_included, progress+1, split_version, split_index, split_size);
+ check_possible_missing_part_derivations_intern(total_shares, shares_required, parts_have, parts_included, progress+1, split_version, x, split_index, split_size);
parts_have[progress] = 1;
- check_possible_missing_part_derivations_intern(total_shares, shares_required, parts_have, parts_included+1, progress+1, split_version, split_index, split_size);
+ check_possible_missing_part_derivations_intern(total_shares, shares_required, parts_have, parts_included+1, progress+1, split_version, x, split_index, split_size);
parts_have[progress] = 0;
}
-static void check_possible_missing_part_derivations(uint8_t total_shares, uint8_t shares_required, uint8_t* split_version, uint8_t split_index, uint8_t split_size) {
+static void check_possible_missing_part_derivations(uint8_t total_shares, uint8_t shares_required, const uint8_t* split_version, const uint8_t* x, uint8_t split_index, uint8_t split_size) {
bool parts_have[P];
memset(parts_have, 0, sizeof(parts_have));
- check_possible_missing_part_derivations_intern(total_shares, shares_required, parts_have, 0, 0, split_version, split_index, split_size);
+ check_possible_missing_part_derivations_intern(total_shares, shares_required, parts_have, 0, 0, split_version, x, split_index, split_size);
}
@@ -174,7 +178,7 @@ int main(int argc, char* argv[]) {
if (files_count != 0 || !in_file || !out_file_param)
ERROREXIT("Must specify -i and -o