add dump-key to tools/dht_put.cpp.
This commit is contained in:
parent
50ccce6eed
commit
3a59d0995f
|
@ -65,6 +65,8 @@ void usage()
|
||||||
" item onto the DHT. The resulting target hash\n"
|
" item onto the DHT. The resulting target hash\n"
|
||||||
"gen-key <key-file> - generate ed25519 keypair and save it in\n"
|
"gen-key <key-file> - generate ed25519 keypair and save it in\n"
|
||||||
" the specified file\n"
|
" the specified file\n"
|
||||||
|
"dump-key <key-file> - dump ed25519 keypair from the specified key\n"
|
||||||
|
" file.\n"
|
||||||
"mput <key-file> <string> - puts the specified string as a mutable\n"
|
"mput <key-file> <string> - puts the specified string as a mutable\n"
|
||||||
" object under the public key in key-file\n"
|
" object under the public key in key-file\n"
|
||||||
"mget <public-key> - get a mutable object under the specified\n"
|
"mget <public-key> - get a mutable object under the specified\n"
|
||||||
|
@ -126,6 +128,111 @@ void bootstrap(lt::session& s)
|
||||||
{
|
{
|
||||||
printf("bootstrapping\n");
|
printf("bootstrapping\n");
|
||||||
wait_for_alert(s, dht_bootstrap_alert::alert_type);
|
wait_for_alert(s, dht_bootstrap_alert::alert_type);
|
||||||
|
printf("bootstrap done.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int dump_key(char *filename)
|
||||||
|
{
|
||||||
|
FILE* f = fopen(filename, "rb+");
|
||||||
|
if (f == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to open file \"%s\": (%d) %s\n"
|
||||||
|
, filename, errno, strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char seed[32];
|
||||||
|
int size = fread(seed, 1, 32, f);
|
||||||
|
if (size != 32)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "invalid key file.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
boost::array<char, 32> public_key;
|
||||||
|
boost::array<char, 64> private_key;
|
||||||
|
ed25519_create_keypair((unsigned char*)public_key.data()
|
||||||
|
, (unsigned char*)private_key.data(), seed);
|
||||||
|
|
||||||
|
printf("public key: %s\nprivate key: %s\n",
|
||||||
|
to_hex(std::string(public_key.data(), public_key.size())).c_str(),
|
||||||
|
to_hex(std::string(private_key.data(), private_key.size())).c_str());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int generate_key(char* filename)
|
||||||
|
{
|
||||||
|
unsigned char seed[32];
|
||||||
|
ed25519_create_seed(seed);
|
||||||
|
|
||||||
|
FILE* f = fopen(filename, "wb+");
|
||||||
|
if (f == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to open file for writing \"%s\": (%d) %s\n"
|
||||||
|
, filename, errno, strerror(errno));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int size = fwrite(seed, 1, 32, f);
|
||||||
|
if (size != 32)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to write key file.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void load_dht_state(lt::session& s)
|
||||||
|
{
|
||||||
|
FILE* f = fopen(".dht", "rb");
|
||||||
|
if (f == NULL) return;
|
||||||
|
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
int size = ftell(f);
|
||||||
|
fseek(f, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if (size > 0)
|
||||||
|
{
|
||||||
|
std::vector<char> state;
|
||||||
|
state.resize(size);
|
||||||
|
fread(&state[0], 1, state.size(), f);
|
||||||
|
|
||||||
|
bdecode_node e;
|
||||||
|
error_code ec;
|
||||||
|
bdecode(&state[0], &state[0] + state.size(), e, ec);
|
||||||
|
if (ec)
|
||||||
|
fprintf(stderr, "failed to parse .dht file: (%d) %s\n"
|
||||||
|
, ec.value(), ec.message().c_str());
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("load dht state from .dht\n");
|
||||||
|
s.load_state(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int save_dht_state(lt::session& s)
|
||||||
|
{
|
||||||
|
entry e;
|
||||||
|
s.save_state(e, session::save_dht_state);
|
||||||
|
std::vector<char> state;
|
||||||
|
bencode(std::back_inserter(state), e);
|
||||||
|
FILE* f = fopen(".dht", "wb+");
|
||||||
|
if (f == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to open file .dht for writing");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
fwrite(&state[0], 1, state.size(), f);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
|
@ -136,26 +243,22 @@ int main(int argc, char* argv[])
|
||||||
|
|
||||||
if (argc < 1) usage();
|
if (argc < 1) usage();
|
||||||
|
|
||||||
|
if (strcmp(argv[0], "dump-key") == 0)
|
||||||
|
{
|
||||||
|
++argv;
|
||||||
|
--argc;
|
||||||
|
if (argc < 1) usage();
|
||||||
|
|
||||||
|
return dump_key(argv[0]);
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(argv[0], "gen-key") == 0)
|
if (strcmp(argv[0], "gen-key") == 0)
|
||||||
{
|
{
|
||||||
++argv;
|
++argv;
|
||||||
--argc;
|
--argc;
|
||||||
if (argc < 1) usage();
|
if (argc < 1) usage();
|
||||||
|
|
||||||
unsigned char seed[32];
|
return generate_key(argv[0]);
|
||||||
ed25519_create_seed(seed);
|
|
||||||
|
|
||||||
FILE* f = fopen(argv[0], "wb+");
|
|
||||||
if (f == NULL)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "failed to open file for writing \"%s\": (%d) %s\n"
|
|
||||||
, argv[0], errno, strerror(errno));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fwrite(seed, 1, 32, f);
|
|
||||||
fclose(f);
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
settings_pack sett;
|
settings_pack sett;
|
||||||
|
@ -167,29 +270,7 @@ int main(int argc, char* argv[])
|
||||||
sett.set_bool(settings_pack::enable_dht, true);
|
sett.set_bool(settings_pack::enable_dht, true);
|
||||||
s.apply_settings(sett);
|
s.apply_settings(sett);
|
||||||
|
|
||||||
FILE* f = fopen(".dht", "rb");
|
load_dht_state(s);
|
||||||
if (f != NULL)
|
|
||||||
{
|
|
||||||
fseek(f, 0, SEEK_END);
|
|
||||||
int size = ftell(f);
|
|
||||||
fseek(f, 0, SEEK_SET);
|
|
||||||
if (size > 0)
|
|
||||||
{
|
|
||||||
std::vector<char> state;
|
|
||||||
state.resize(size);
|
|
||||||
fread(&state[0], 1, state.size(), f);
|
|
||||||
|
|
||||||
bdecode_node e;
|
|
||||||
error_code ec;
|
|
||||||
bdecode(&state[0], &state[0] + state.size(), e, ec);
|
|
||||||
if (ec)
|
|
||||||
fprintf(stderr, "failed to parse .dht file: (%d) %s\n"
|
|
||||||
, ec.value(), ec.message().c_str());
|
|
||||||
else
|
|
||||||
s.load_state(e);
|
|
||||||
}
|
|
||||||
fclose(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(argv[0], "get") == 0)
|
if (strcmp(argv[0], "get") == 0)
|
||||||
{
|
{
|
||||||
|
@ -320,18 +401,7 @@ int main(int argc, char* argv[])
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
|
|
||||||
entry e;
|
return save_dht_state(s);
|
||||||
s.save_state(e, lt::session::save_dht_state);
|
|
||||||
std::vector<char> state;
|
|
||||||
bencode(std::back_inserter(state), e);
|
|
||||||
f = fopen(".dht", "wb+");
|
|
||||||
if (f == NULL)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "failed to open file .dht for writing");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fwrite(&state[0], 1, state.size(), f);
|
|
||||||
fclose(f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue