mirror of https://github.com/oxen-io/lokinet
llarp_findOrCreateEncryption refactor, llarp_rc_set_pubkey(), llarp_rc_set_pubenckey(), llarp_rc_set_pubsigkey(), include more debug on sig verify failure
This commit is contained in:
parent
810c0c83bf
commit
f3f68e4bcb
145
llarp/router.cpp
145
llarp/router.cpp
|
@ -180,7 +180,7 @@ llarp_router::try_connect(fs::path rcfile)
|
|||
}
|
||||
}
|
||||
else
|
||||
llarp::Error("failed to verify signature of RC");
|
||||
llarp::Error("failed to verify signature of RC", rcfile);
|
||||
}
|
||||
else
|
||||
llarp::Error("failed to decode RC");
|
||||
|
@ -199,28 +199,8 @@ llarp_router::EnsureIdentity()
|
|||
bool
|
||||
llarp_router::EnsureEncryptionKey()
|
||||
{
|
||||
std::error_code ec;
|
||||
if(!fs::exists(encryption_keyfile, ec))
|
||||
{
|
||||
llarp::Info("generating encryption key");
|
||||
crypto.encryption_keygen(encryption);
|
||||
std::ofstream f(encryption_keyfile, std::ios::binary);
|
||||
if(!f.is_open())
|
||||
{
|
||||
llarp::Error("could not save encryption private key to ",
|
||||
encryption_keyfile, " ", ec);
|
||||
return false;
|
||||
}
|
||||
f.write((char *)encryption.data(), encryption.size());
|
||||
}
|
||||
std::ifstream f(encryption_keyfile, std::ios::binary);
|
||||
if(!f.is_open())
|
||||
{
|
||||
llarp::Error("could not read ", encryption_keyfile);
|
||||
return false;
|
||||
}
|
||||
f.read((char *)encryption.data(), encryption.size());
|
||||
return true;
|
||||
return llarp_findOrCreateEncryption(&crypto, encryption_keyfile.c_str(),
|
||||
&this->encryption);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -612,9 +592,20 @@ llarp_router::Run()
|
|||
link->get_our_address(link, &addr);
|
||||
llarp_ai_list_pushback(rc.addrs, &addr);
|
||||
};
|
||||
// set public keys
|
||||
memcpy(rc.enckey, llarp::seckey_topublic(encryption), PUBKEYSIZE);
|
||||
llarp_rc_set_pubkey(&rc, pubkey());
|
||||
// set public encryption key
|
||||
llarp_rc_set_pubenckey(&rc, llarp::seckey_topublic(encryption));
|
||||
|
||||
char ftmp[68] = {0};
|
||||
const char *hexKey = llarp::HexEncode< llarp::PubKey,
|
||||
decltype(ftmp) >(llarp::seckey_topublic(encryption),
|
||||
ftmp);
|
||||
llarp::Info("Your Encryption pubkey ", hexKey);
|
||||
// set public signing key
|
||||
llarp_rc_set_pubsigkey(&rc, llarp::seckey_topublic(identity));
|
||||
hexKey = llarp::HexEncode< llarp::PubKey,
|
||||
decltype(ftmp) >(llarp::seckey_topublic(identity),
|
||||
ftmp);
|
||||
llarp::Info("Your Identity pubkey ", hexKey);
|
||||
|
||||
llarp_rc_sign(&crypto, identity, &rc);
|
||||
|
||||
|
@ -826,39 +817,30 @@ llarp_rc_set_addrs(struct llarp_rc *rc, struct llarp_alloc *mem,
|
|||
}
|
||||
|
||||
void
|
||||
llarp_rc_set_pubkey(struct llarp_rc *rc, const uint8_t *pubkey)
|
||||
llarp_rc_set_pubenckey(struct llarp_rc *rc, const uint8_t *pubenckey)
|
||||
{
|
||||
// set public key
|
||||
memcpy(rc->pubkey, pubkey, 32);
|
||||
// set public encryption key
|
||||
memcpy(rc->enckey, pubenckey, PUBKEYSIZE);
|
||||
}
|
||||
|
||||
bool
|
||||
llarp_findOrCreateIdentity(llarp_crypto *crypto, const char *fpath,
|
||||
byte_t *secretkey)
|
||||
void
|
||||
llarp_rc_set_pubsigkey(struct llarp_rc *rc, const uint8_t *pubsigkey)
|
||||
{
|
||||
llarp::Debug("find or create ", fpath);
|
||||
fs::path path(fpath);
|
||||
std::error_code ec;
|
||||
if(!fs::exists(path, ec))
|
||||
{
|
||||
llarp::Info("regenerated identity key");
|
||||
crypto->identity_keygen(secretkey);
|
||||
std::ofstream f(path, std::ios::binary);
|
||||
if(f.is_open())
|
||||
{
|
||||
f.write((char *)secretkey, SECKEYSIZE);
|
||||
}
|
||||
}
|
||||
std::ifstream f(path, std::ios::binary);
|
||||
if(f.is_open())
|
||||
{
|
||||
f.read((char *)secretkey, SECKEYSIZE);
|
||||
return true;
|
||||
}
|
||||
llarp::Info("failed to get identity key");
|
||||
return false;
|
||||
// set public signing key
|
||||
memcpy(rc->pubkey, pubsigkey, PUBKEYSIZE);
|
||||
}
|
||||
|
||||
void
|
||||
llarp_rc_set_pubkey(struct llarp_rc *rc, const uint8_t *pubenckey,
|
||||
const uint8_t *pubsigkey)
|
||||
{
|
||||
// set public encryption key
|
||||
llarp_rc_set_pubenckey(rc, pubenckey);
|
||||
// set public signing key
|
||||
llarp_rc_set_pubsigkey(rc, pubsigkey);
|
||||
}
|
||||
|
||||
|
||||
struct llarp_rc *
|
||||
llarp_rc_read(const char *fpath)
|
||||
{
|
||||
|
@ -895,7 +877,7 @@ llarp_rc_read(const char *fpath)
|
|||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
llarp_rc_write(struct llarp_rc *rc, const char *fpath)
|
||||
{
|
||||
|
@ -965,6 +947,61 @@ llarp_router_override_path_selection(struct llarp_router *router,
|
|||
if(func)
|
||||
router->selectHopFunc = func;
|
||||
}
|
||||
|
||||
bool
|
||||
llarp_findOrCreateIdentity(llarp_crypto *crypto, const char *fpath,
|
||||
byte_t *secretkey)
|
||||
{
|
||||
llarp::Debug("find or create ", fpath);
|
||||
fs::path path(fpath);
|
||||
std::error_code ec;
|
||||
if(!fs::exists(path, ec))
|
||||
{
|
||||
llarp::Info("generating new identity key");
|
||||
crypto->identity_keygen(secretkey);
|
||||
std::ofstream f(path, std::ios::binary);
|
||||
if(f.is_open())
|
||||
{
|
||||
f.write((char *)secretkey, SECKEYSIZE);
|
||||
}
|
||||
}
|
||||
std::ifstream f(path, std::ios::binary);
|
||||
if(f.is_open())
|
||||
{
|
||||
f.read((char *)secretkey, SECKEYSIZE);
|
||||
return true;
|
||||
}
|
||||
llarp::Info("failed to get identity key");
|
||||
return false;
|
||||
}
|
||||
} // end extern C
|
||||
|
||||
// C++
|
||||
bool
|
||||
llarp_findOrCreateEncryption(llarp_crypto *crypto, const char *fpath,
|
||||
llarp::SecretKey *encryption)
|
||||
{
|
||||
llarp::Debug("find or create ", fpath);
|
||||
fs::path path(fpath);
|
||||
std::error_code ec;
|
||||
if(!fs::exists(path, ec))
|
||||
{
|
||||
llarp::Info("generating new encryption key");
|
||||
crypto->encryption_keygen(*encryption);
|
||||
std::ofstream f(path, std::ios::binary);
|
||||
if(f.is_open())
|
||||
{
|
||||
f.write((char *)encryption, SECKEYSIZE);
|
||||
}
|
||||
}
|
||||
std::ifstream f(path, std::ios::binary);
|
||||
if(f.is_open())
|
||||
{
|
||||
f.read((char *)encryption, SECKEYSIZE);
|
||||
return true;
|
||||
}
|
||||
llarp::Info("failed to get encryption key");
|
||||
return false;
|
||||
}
|
||||
|
||||
namespace llarp
|
||||
|
|
Loading…
Reference in New Issue