From f13d6d7fb724cce2ac810221d9f5ed1620b49209 Mon Sep 17 00:00:00 2001 From: Arun M Date: Fri, 29 Dec 2017 15:21:16 +0530 Subject: [PATCH] Added tests for ES algorithm support --- tests/CMakeLists.txt | 3 + tests/certs/ec_certs/ec384_priv.pem | 6 ++ tests/certs/ec_certs/ec384_pub.pem | 5 + tests/certs/rsa_certs/rsa_key_i37-pub.pem | 9 -- tests/test_jwt_es.cc | 118 ++++++++++++++++++++++ 5 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 tests/certs/ec_certs/ec384_priv.pem create mode 100644 tests/certs/ec_certs/ec384_pub.pem delete mode 100644 tests/certs/rsa_certs/rsa_key_i37-pub.pem create mode 100644 tests/test_jwt_es.cc diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 6196207..c27feb2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,3 +19,6 @@ target_link_libraries(test_jwt_decode_verifiy_with_exception ssl crypto gtest) add_executable(test_jwt_rsa test_jwt_rsa.cc) target_link_libraries(test_jwt_rsa ssl crypto gtest) + +add_executable(test_jwt_es test_jwt_es.cc) +target_link_libraries(test_jwt_es ssl crypto gtest) diff --git a/tests/certs/ec_certs/ec384_priv.pem b/tests/certs/ec_certs/ec384_priv.pem new file mode 100644 index 0000000..f704c4b --- /dev/null +++ b/tests/certs/ec_certs/ec384_priv.pem @@ -0,0 +1,6 @@ +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDBeLCgapjZmvTatMHaYX3A02+0Ys3Tr8kda+E9DFnmCSiCOEig519fT +13edeU8YdDugBwYFK4EEACKhZANiAASibEL3JxzwCRdLBZCm7WQ3kWaDL+wP8omo +3e2VJmZQRnfDdzopgl8r3s8w5JlBpR17J0Gir8g6CVBA6PzMuq5urkilppSINDnR +4mDv0+9e4uJVQf3xwEv+jywNUH+wbPM= +-----END EC PRIVATE KEY----- diff --git a/tests/certs/ec_certs/ec384_pub.pem b/tests/certs/ec_certs/ec384_pub.pem new file mode 100644 index 0000000..13e9199 --- /dev/null +++ b/tests/certs/ec_certs/ec384_pub.pem @@ -0,0 +1,5 @@ +-----BEGIN PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEomxC9ycc8AkXSwWQpu1kN5Fmgy/sD/KJ +qN3tlSZmUEZ3w3c6KYJfK97PMOSZQaUdeydBoq/IOglQQOj8zLqubq5IpaaUiDQ5 +0eJg79PvXuLiVUH98cBL/o8sDVB/sGzz +-----END PUBLIC KEY----- diff --git a/tests/certs/rsa_certs/rsa_key_i37-pub.pem b/tests/certs/rsa_certs/rsa_key_i37-pub.pem deleted file mode 100644 index 7b6d728..0000000 --- a/tests/certs/rsa_certs/rsa_key_i37-pub.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn/7RTQX1xlllgo+aqo5z -d/+wqaRZwFWp3JJIUXryJ4d153J1gEYdz4RkjFO0X8kpv8qb5hdzWhhZHSItD+07 -LaQXP4lSUuiK1lJAT/YW51D37nCkWm839gAqEGdsWsYQCvqJKSJr4pWCZTEx2MEf -ikmmnaXPR/VOVgZSj9kIoKo+kFwlw9LGVBHYAeR/W+l5DJQK6Yha8Igi36hnvZqq -HcQ4gkGUqEc//Tq2nyYNwvAN3ieZvtvL71rFW26FnuA4OwDER+TYSkAr8Z4wH2Ed -Gno1GZQAegIm+yWblleCaBVOnlk8VcDO9PecTiAFjjWAbQiaFKlkf/plD7KE4tAa -mQIDAQAB ------END PUBLIC KEY----- diff --git a/tests/test_jwt_es.cc b/tests/test_jwt_es.cc new file mode 100644 index 0000000..3390d84 --- /dev/null +++ b/tests/test_jwt_es.cc @@ -0,0 +1,118 @@ +#include +#include +#include +#include + +#include "gtest/gtest.h" +#include "jwt/jwt.hpp" + +#define EC384_PUB_KEY CERT_ROOT_DIR "/ec_certs/ec384_pub.pem" +#define EC384_PRIV_KEY CERT_ROOT_DIR "/ec_certs/ec384_priv.pem" + +std::string read_from_file(const std::string& path) +{ + std::string contents; + std::ifstream is{path, std::ifstream::binary}; + + if (is) { + // get length of file: + is.seekg (0, is.end); + auto length = is.tellg(); + is.seekg (0, is.beg); + contents.resize(length); + + is.read(&contents[0], length); + if (!is) { + is.close(); + return {}; + } + } + + is.close(); + return contents; +} + +TEST (ESAlgo, ES256EncodingDecodingTest) +{ + using namespace jwt::params; + + std::string key = read_from_file(EC384_PRIV_KEY); + ASSERT_TRUE (key.length()); + + jwt::jwt_object obj{algorithm("ES256"), secret(key)}; + + obj.add_claim("iss", "arun.muralidharan") + .add_claim("aud", "all") + .add_claim("exp", 1513862371) + ; + + std::error_code ec; + auto enc_str = obj.signature(ec); + EXPECT_FALSE (ec); + + key = read_from_file(EC384_PUB_KEY); + ASSERT_TRUE (key.length()); + + auto dec_obj = jwt::decode(enc_str, algorithms({"es256"}), ec, verify(false), secret(key)); + EXPECT_FALSE (ec); + + EXPECT_EQ (dec_obj.header().algo(), jwt::algorithm::ES256); + EXPECT_TRUE (dec_obj.has_claim("iss")); + EXPECT_TRUE (dec_obj.has_claim("aud")); + EXPECT_TRUE (dec_obj.has_claim("exp")); + + EXPECT_FALSE (dec_obj.has_claim("sub")); +} + +TEST (ESAlgo, ES384EncodingDecodingTest) +{ + using namespace jwt::params; + + std::string key = read_from_file(EC384_PRIV_KEY); + ASSERT_TRUE (key.length()); + + jwt::jwt_object obj{algorithm("ES384"), secret(key)}; + + obj.add_claim("iss", "arun.muralidharan") + .add_claim("aud", "all") + .add_claim("exp", 1513862371) + ; + + auto enc_str = obj.signature(); + + key = read_from_file(EC384_PUB_KEY); + ASSERT_TRUE (key.length()); + + auto dec_obj = jwt::decode(enc_str, algorithms({"es384"}), verify(false), secret(key)); + + EXPECT_EQ (dec_obj.header().algo(), jwt::algorithm::ES384); +} + +TEST (ESAlgo, ES512EncodingDecodingTest) +{ + using namespace jwt::params; + + std::string key = read_from_file(EC384_PRIV_KEY); + ASSERT_TRUE (key.length()); + + jwt::jwt_object obj{algorithm("ES512"), secret(key)}; + + obj.add_claim("iss", "arun.muralidharan") + .add_claim("aud", "all") + .add_claim("exp", 1513862371) + ; + + auto enc_str = obj.signature(); + + key = read_from_file(EC384_PUB_KEY); + ASSERT_TRUE (key.length()); + + auto dec_obj = jwt::decode(enc_str, algorithms({"es512"}), verify(false), secret(key)); + + EXPECT_EQ (dec_obj.header().algo(), jwt::algorithm::ES512); +} + +int main(int argc, char* argv[]) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}