mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-29 22:55:06 +03:00
1. added multipath protocol and schema suport
2. added SCTP protocol and schema support 3. added set of NAS models support (Asustor, ReadyNAS, Drobo, QNAP, WD, Synology, Terramaster) 4. moved to fc00::/7 private segment 5. added Windows, MacOS and Linux UI for peers edit and current status
This commit is contained in:
parent
cfa293d189
commit
d8a4000141
198 changed files with 8589 additions and 697 deletions
106
contrib/mesh-brute-simple/mesh-brute-multi-ed25519.c
Normal file
106
contrib/mesh-brute-simple/mesh-brute-multi-ed25519.c
Normal file
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
seed: 32 random bytes
|
||||
sk: sha512(seed)
|
||||
sk[0] &= 248
|
||||
sk[31] &= 127
|
||||
sk[31] |= 64
|
||||
|
||||
pk: scalarmult_ed25519_base(sk)
|
||||
|
||||
|
||||
increment seed
|
||||
generate sk
|
||||
generate pk
|
||||
hash = sha512(mypub)
|
||||
|
||||
if besthash:
|
||||
bestseed = seed
|
||||
bestseckey = sk
|
||||
bestpubkey = pk
|
||||
besthash = hash
|
||||
*/
|
||||
|
||||
#include "mesh-brute.h"
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int i;
|
||||
int j;
|
||||
time_t starttime;
|
||||
time_t requestedtime;
|
||||
|
||||
unsigned char bestsklist[NUMKEYS][64]; /* sk contains pk */
|
||||
unsigned char besthashlist[NUMKEYS][64];
|
||||
|
||||
unsigned char seed[32];
|
||||
unsigned char sk[64];
|
||||
unsigned char pk[32];
|
||||
unsigned char hash[64];
|
||||
|
||||
unsigned int runs = 0;
|
||||
int where;
|
||||
|
||||
if (argc != 2) {
|
||||
fprintf(stderr, "usage: ./mesh-brute-multi-curve25519 <seconds>\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (sodium_init() < 0) {
|
||||
/* panic! the library couldn't be initialized, it is not safe to use */
|
||||
printf("sodium init failed!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
starttime = time(NULL);
|
||||
requestedtime = atoi(argv[1]);
|
||||
|
||||
if (requestedtime < 0) requestedtime = 0;
|
||||
fprintf(stderr, "Searching for mesh ed25519 keys (this will take slightly longer than %ld seconds)\n", requestedtime);
|
||||
|
||||
sodium_memzero(bestsklist, NUMKEYS * 64);
|
||||
sodium_memzero(besthashlist, NUMKEYS * 64);
|
||||
randombytes_buf(seed, 32);
|
||||
|
||||
do {
|
||||
/* generate pubkey, hash, compare, increment secret.
|
||||
* this loop should take 4 seconds on modern hardware */
|
||||
for (i = 0; i < (1 << 17); ++i) {
|
||||
++runs;
|
||||
crypto_hash_sha512(sk, seed, 32);
|
||||
|
||||
if (crypto_scalarmult_ed25519_base(pk, sk) != 0) {
|
||||
printf("scalarmult to create pub failed!\n");
|
||||
return 1;
|
||||
}
|
||||
memcpy(sk + 32, pk, 32);
|
||||
|
||||
crypto_hash_sha512(hash, pk, 32);
|
||||
|
||||
/* insert into local list of good key */
|
||||
where = find_where(hash, besthashlist);
|
||||
if (where >= 0) {
|
||||
insert_64(bestsklist, sk, where);
|
||||
insert_64(besthashlist, hash, where);
|
||||
randombytes_buf(seed, 32);
|
||||
}
|
||||
for (j = 1; j < 31; ++j) if (++seed[j]) break;
|
||||
}
|
||||
} while (time(NULL) - starttime < requestedtime || runs < NUMKEYS);
|
||||
|
||||
fprintf(stderr, "!! Secret key is seed concatenated with public !!\n");
|
||||
fprintf(stderr, "---hash--- ------------------------------seed------------------------------ -----------------------------public-----------------------------\n");
|
||||
for (i = 0; i < NUMKEYS; ++i) {
|
||||
for (j = 0; j < 5; ++j) printf("%02x", besthashlist[i][j]);
|
||||
printf(" ");
|
||||
for (j = 0; j < 32; ++j) printf("%02x", bestsklist[i][j]);
|
||||
printf(" ");
|
||||
for (j = 32; j < 64; ++j) printf("%02x", bestsklist[i][j]);
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
sodium_memzero(bestsklist, NUMKEYS * 64);
|
||||
sodium_memzero(sk, 64);
|
||||
sodium_memzero(seed, 32);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue