pull/187/head
Jeff Becker 6 years ago
parent 6825cc0eec
commit 180ca69d02
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -621,6 +621,7 @@ set(TEST_SRC
test/test_llarp_queue_manager.cpp
test/test_llarp_queue.cpp
test/test_llarp_thread_pool.cpp
test/test_router_contact.cpp
test/test_service_address.cpp
test/traffic_transfer_unittest.cpp
)

@ -23,14 +23,15 @@ namespace llarp
/// 1 day for real network
llarp_time_t RouterContact::Lifetime = 24 * 60 * 60 * 1000;
#endif
NetID::NetID() : AlignedBuffer< 8 >(DefaultValue)
NetID::NetID() : AlignedBuffer< 8 >()
{
memcpy(data(), DefaultValue, strnlen((const char *)DefaultValue, size()));
}
bool
NetID::operator==(const NetID &other) const
{
return memcmp(data(), other.data(), size()) == 0;
return ToString() == other.ToString();
}
std::string
@ -47,7 +48,7 @@ namespace llarp
llarp_buffer_t strbuf;
if(!bencode_read_string(buf, &strbuf))
return false;
if(strbuf.sz > 8)
if(strbuf.sz > size())
return false;
memcpy(data(), strbuf.base, strbuf.sz);
return true;
@ -239,10 +240,17 @@ namespace llarp
bool
RouterContact::Verify(llarp::Crypto *crypto, llarp_time_t now) const
{
if(netID != NetID())
static const NetID networkNetID;
if(netID != networkNetID)
{
llarp::LogError("netid missmatch: '", netID, "' != '", networkNetID, "'");
return false;
}
if(IsExpired(now))
{
llarp::LogError("RC is expired");
return false;
}
for(const auto &a : addrs)
{
if(IsBogon(a.ip) && !IgnoreBogons)
@ -256,7 +264,12 @@ namespace llarp
if(IsBogonRange(exit.address, exit.netmask))
return false;
}
return VerifySignature(crypto);
if(!VerifySignature(crypto))
{
llarp::LogError("invalid signature");
return false;
}
return true;
}
bool
@ -328,6 +341,7 @@ namespace llarp
pubkey = other.pubkey;
nickname = other.nickname;
version = other.version;
netID = other.netID;
return *this;
}

@ -0,0 +1,43 @@
#include <gtest/gtest.h>
#include <router_contact.hpp>
#include <crypto.hpp>
struct RCTest : public ::testing::Test
{
using RC_t = llarp::RouterContact;
using SecKey_t = llarp::SecretKey;
RCTest() : crypto(llarp::Crypto::sodium{})
{
}
void
SetUp()
{
oldval = llarp::NetID::DefaultValue;
llarp::NetID::DefaultValue = (const byte_t*)"unittest";
rc.Clear();
}
void
TearDown()
{
llarp::NetID::DefaultValue = oldval;
}
RC_t rc;
llarp::Crypto crypto;
const byte_t* oldval = nullptr;
};
TEST_F(RCTest, TestSignVerify)
{
SecKey_t encr;
SecKey_t sign;
crypto.encryption_keygen(encr);
crypto.identity_keygen(sign);
rc.enckey = llarp::seckey_topublic(encr);
ASSERT_TRUE(rc.Sign(&crypto, sign));
ASSERT_TRUE(rc.Verify(&crypto, llarp::time_now_ms()));
}
Loading…
Cancel
Save