lokinet/test/crypto/test_llarp_crypto.cpp

50 lines
1.1 KiB
C++
Raw Normal View History

#include <crypto/crypto_libsodium.hpp>
2019-01-13 14:00:50 +00:00
#include <iostream>
2021-03-01 21:07:32 +00:00
#include <catch2/catch.hpp>
2019-01-13 14:00:50 +00:00
2021-03-01 21:07:32 +00:00
using namespace llarp;
2021-03-01 21:07:32 +00:00
TEST_CASE("Identity key")
{
llarp::sodium::CryptoLibSodium crypto;
SecretKey secret;
crypto.identity_keygen(secret);
2021-03-01 21:07:32 +00:00
SECTION("Keygen")
2019-10-23 12:43:37 +00:00
{
2021-03-01 21:07:32 +00:00
REQUIRE_FALSE(secret.IsZero());
2019-10-23 12:43:37 +00:00
}
2021-03-01 21:07:32 +00:00
SECTION("Sign-verify")
{
2021-03-01 21:07:32 +00:00
AlignedBuffer<128> random;
random.Randomize();
Signature sig;
2019-10-30 16:45:51 +00:00
const PubKey pk = secret.toPublic();
2019-02-02 23:12:42 +00:00
const llarp_buffer_t buf(random.data(), random.size());
2021-03-01 21:07:32 +00:00
REQUIRE(crypto.sign(sig, secret, buf));
REQUIRE(crypto.verify(pk, buf, sig));
2019-03-28 19:15:20 +00:00
random.Randomize();
// mangle body
2021-03-01 21:07:32 +00:00
REQUIRE_FALSE(crypto.verify(pk, buf, sig));
}
2021-03-01 21:07:32 +00:00
}
2021-03-01 21:07:32 +00:00
TEST_CASE("PQ crypto")
{
llarp::sodium::CryptoLibSodium crypto;
PQKeyPair keys;
crypto.pqe_keygen(keys);
PQCipherBlock block;
SharedSecret shared, otherShared;
auto c = &crypto;
REQUIRE(keys.size() == PQ_KEYPAIRSIZE);
REQUIRE(c->pqe_encrypt(block, shared, PQPubKey(pq_keypair_to_public(keys))));
REQUIRE(c->pqe_decrypt(block, otherShared, pq_keypair_to_secret(keys)));
REQUIRE(otherShared == shared);
}