| #include <doctest/doctest.h> |
| #include <openssl/crypto.h> |
| #include <openssl/err.h> |
| |
| #include <header.h> |
| |
| #include "common.h" |
| |
| #include <map> // for map |
| #include <stdexcept> // for invalid_argument |
| |
| using namespace sframe; |
| |
| TEST_CASE("Header Known-Answer") |
| { |
| struct KnownAnswerTest |
| { |
| uint64_t key_id; |
| uint64_t counter; |
| bytes encoding; |
| }; |
| |
| const auto cases = std::vector<KnownAnswerTest>{ |
| { 0, 0, from_hex("00") }, |
| { 0, 7, from_hex("07") }, |
| { 7, 0, from_hex("70") }, |
| { 7, 7, from_hex("77") }, |
| { 0, 8, from_hex("0808") }, |
| { 8, 0, from_hex("8008") }, |
| { 8, 8, from_hex("880808") }, |
| { 0xffffffffffffffff, 0, from_hex("f0ffffffffffffffff") }, |
| { 0, 0xffffffffffffffff, from_hex("0fffffffffffffffff") }, |
| { 0xffffffffffffffff, |
| 0xffffffffffffffff, |
| from_hex("ffffffffffffffffffffffffffffffffff") }, |
| }; |
| |
| for (const auto& tc : cases) { |
| // Decode |
| const auto decoded = Header::parse(tc.encoding); |
| REQUIRE(decoded.key_id == tc.key_id); |
| REQUIRE(decoded.counter == tc.counter); |
| REQUIRE(decoded.size() == tc.encoding.size()); |
| |
| // Encode |
| const auto to_encode = Header{ tc.key_id, tc.counter }; |
| const auto encoded = to_bytes(to_encode.encoded()); |
| REQUIRE(encoded == tc.encoding); |
| } |
| } |