From 796abd6e65e8dc0d5e5db9934065c6366afc3c21 Mon Sep 17 00:00:00 2001 From: Arun M Date: Thu, 9 Nov 2017 23:42:04 +0530 Subject: [PATCH] Implement verify. Part 1 --- include/jwt/.algorithm.hpp.swp | Bin 0 -> 24576 bytes include/jwt/algorithm.hpp | 165 +++-------------------- include/jwt/base64.hpp | 30 +++++ include/jwt/detail/meta.hpp | 38 +++++- include/jwt/impl/algorithm.ipp | 194 ++++++++++++++++++++++++++++ include/jwt/impl/jwt.ipp | 84 +++++++++++- include/jwt/jwt.hpp | 93 ++++++++++++- include/jwt/test/test_jwt_decode | Bin 0 -> 431004 bytes include/jwt/test/test_jwt_decode.cc | 27 ++++ include/jwt/test/test_jwt_header.cc | 2 +- 10 files changed, 473 insertions(+), 160 deletions(-) create mode 100644 include/jwt/.algorithm.hpp.swp create mode 100644 include/jwt/impl/algorithm.ipp create mode 100755 include/jwt/test/test_jwt_decode create mode 100644 include/jwt/test/test_jwt_decode.cc diff --git a/include/jwt/.algorithm.hpp.swp b/include/jwt/.algorithm.hpp.swp new file mode 100644 index 0000000000000000000000000000000000000000..914ea7dcab392b36d65b59d6884857da3a5322de GIT binary patch literal 24576 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 b=WRUkcU}-svPH5~0~vf1SNZZ`?$-Q2N2VXD literal 0 HcmV?d00001 diff --git a/include/jwt/algorithm.hpp b/include/jwt/algorithm.hpp index 46721d4..f0ed116 100644 --- a/include/jwt/algorithm.hpp +++ b/include/jwt/algorithm.hpp @@ -19,9 +19,14 @@ namespace jwt { /// The result type of the signing function using sign_result_t = std::pair; /// The result type of verification function -using verify_result_t = std::pair; +using verify_result_t = std::pair; /// The function pointer type of the signing function -using sign_func_t = sign_result_t (*) (string_view key, string_view data); +using sign_func_t = sign_result_t (*) (const string_view key, + const string_view data); +/// +using verify_func_t = verify_result_t (*) (const string_view key, + const string_view header, + const string_view jwt_sign); namespace algo { @@ -156,7 +161,7 @@ struct HMACSign /*! */ - static sign_result_t sign(string_view key, string_view data) + static sign_result_t sign(const string_view key, const string_view data) { std::string sign; sign.resize(EVP_MAX_MD_SIZE); @@ -183,13 +188,7 @@ struct HMACSign /*! */ static verify_result_t - verify(string_view key, string_view head, string_view sign) - { - int compare_res = 0; - std::error_code ec{}; - - return {compare_res, ec}; - } + verify(const string_view key, const string_view head, const string_view sign); }; @@ -202,7 +201,7 @@ struct HMACSign /*! */ - static sign_result_t sign(string_view key, string_view data) + static sign_result_t sign(const string_view key, const string_view data) { std::string sign; std::error_code ec{}; @@ -214,7 +213,7 @@ struct HMACSign /*! */ static verify_result_t - verify(string_view key, string_view head, string_view sign) + verify(const string_view key, const string_view head, const string_view sign) { int compare_res = 0; std::error_code ec{}; @@ -237,7 +236,7 @@ public: /*! */ - static sign_result_t sign(string_view key, string_view data) + static sign_result_t sign(const string_view key, const string_view data) { std::error_code ec{}; @@ -272,145 +271,15 @@ public: private: /*! */ - static EVP_PKEY* load_key(const string_view key) - { - auto bio_deletor = [](BIO* ptr) { - if (ptr) BIO_free(ptr); - }; - - std::unique_ptr - bio_ptr{BIO_new_mem_buf((void*)key.data(), key.length()), bio_deletor}; - - if (!bio_ptr) { - return nullptr; - } - - EVP_PKEY* pkey = PEM_read_bio_PrivateKey(bio_ptr.get(), nullptr, nullptr, nullptr); - if (!pkey) { - return nullptr; - } - - return pkey; - } + static EVP_PKEY* load_key(const string_view key); /*! */ - static std::string evp_digest(EVP_PKEY* pkey, const string_view data, std::error_code& ec) - { - auto md_deletor = [](EVP_MD_CTX* ptr) { - if (ptr) EVP_MD_CTX_destroy(ptr); - }; - - std::unique_ptr - mdctx_ptr{EVP_MD_CTX_create(), md_deletor}; - - if (!mdctx_ptr) { - //TODO: set appropriate error_code - return std::string{}; - } - - //Initialiaze the digest algorithm - if (EVP_DigestSignInit( - mdctx_ptr.get(), nullptr, Hasher{}(), nullptr, pkey) != 1) { - //TODO: set appropriate error_code - return std::string{}; - } - - //Update the digest with the input data - if (EVP_DigestSignUpdate(mdctx_ptr.get(), data.data(), data.length()) != 1) { - //TODO: set appropriate error_code - return std::string{}; - } - - unsigned long len = 0; - - if (EVP_DigestSignFinal(mdctx_ptr.get(), nullptr, &len) != 1) { - //TODO: set appropriate error_code - return std::string{}; - } - - std::string sign; - sign.resize(len); - - //Get the signature - if (EVP_DigestSignFinal(mdctx_ptr.get(), (unsigned char*)&sign[0], &len) != 1) { - //TODO: set appropriate error_code - return std::string{}; - } - - return sign; - } - - - static std::string public_key_ser(EVP_PKEY* pkey, string_view sign, std::error_code& ec) - { - // Get the EC_KEY representing a public key and - // (optionaly) an associated private key - std::string new_sign; - - static auto eckey_deletor = [](EC_KEY* ptr) { - if (ptr) EC_KEY_free(ptr); - }; - - static auto ecsig_deletor = [](ECDSA_SIG* ptr) { - if (ptr) ECDSA_SIG_free(ptr); - }; - - std::unique_ptr - ec_key{EVP_PKEY_get1_EC_KEY(pkey), eckey_deletor}; - - if (!ec_key) { - //TODO set a valid error code - return std::string{}; - } - - uint32_t degree = EC_GROUP_get_degree(EC_KEY_get0_group(ec_key.get())); - - - std::unique_ptr - ec_sig{d2i_ECDSA_SIG(nullptr, - (const unsigned char**)&sign[0], - sign.length()), - ecsig_deletor}; - - if (!ec_sig) { - //TODO set a valid error code - return std::string{}; - } - - const BIGNUM* ec_sig_r = nullptr; - const BIGNUM* ec_sig_s = nullptr; - -#if 1 - //Taken from https://github.com/nginnever/zogminer/issues/39 - auto ECDSA_SIG_get0 = [](const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) - { - if (pr != nullptr) *pr = sig->r; - if (ps != nullptr) *ps = sig->s; - }; - -#endif - - ECDSA_SIG_get0(ec_sig.get(), &ec_sig_r, &ec_sig_s); - - auto r_len = BN_num_bytes(ec_sig_r); - auto s_len = BN_num_bytes(ec_sig_s); - auto bn_len = (degree + 7) / 8; - - if ((r_len > bn_len) || (s_len > bn_len)) { - //TODO set a valid error code - return std::string{}; - } - - auto buf_len = 2 * bn_len; - new_sign.resize(buf_len); - - BN_bn2bin(ec_sig_r, (unsigned char*)&new_sign[0] + bn_len - r_len); - BN_bn2bin(ec_sig_s, (unsigned char*)&new_sign[0] + buf_len - s_len); - - return new_sign; - } + static std::string evp_digest(EVP_PKEY* pkey, const string_view data, std::error_code& ec); + /*! + */ + static std::string public_key_ser(EVP_PKEY* pkey, string_view sign, std::error_code& ec); }; } // END namespace jwt diff --git a/include/jwt/base64.hpp b/include/jwt/base64.hpp index 552ec4c..77833ba 100644 --- a/include/jwt/base64.hpp +++ b/include/jwt/base64.hpp @@ -212,6 +212,36 @@ void base64_uri_encode(char* data, size_t len) noexcept return; } +/*! + */ +std::string base64_uri_decode(const char* data, size_t len) +{ + std::string uri_dec; + uri_dec.resize(len + 4); + + for (size_t i = 0; i < len; ++i) { + switch (data[i]) { + case '-': + uri_dec[i] = '+'; + break; + case '_': + uri_dec[i] = '/'; + break; + default: + uri_dec[i] = data[i]; + }; + } + + size_t trailer = 4 - (i % 4); + if (trailer && trailer < 4) { + while (trailer--) { + uri_dec[i++] = '='; + } + } + + return base64_decode(uri_dec.c_str(), uri_dec.length()); +} + } // END namespace jwt diff --git a/include/jwt/detail/meta.hpp b/include/jwt/detail/meta.hpp index 4626c82..c02642b 100644 --- a/include/jwt/detail/meta.hpp +++ b/include/jwt/detail/meta.hpp @@ -1,10 +1,42 @@ -#ifndef JWT_META_HPP -#define JWT_META_HPP +#ifndef CPP_JWT_META_HPP +#define CPP_JWT_META_HPP + +#include namespace jwt { namespace detail { +namespace meta { -} +template +struct make_void +{ + using type = void; +}; + +template +using void_t = typename make_void::type; + + +template +struct has_create_json_obj_member: std::false_type +{ +}; + +template +struct has_create_json_obj_member.create_json_obj(), + (void)0 + ) + > + >: std::true_type +{ +}; + + +} // END namespace meta +} // END namespace detail } // END namespace jwt #endif diff --git a/include/jwt/impl/algorithm.ipp b/include/jwt/impl/algorithm.ipp new file mode 100644 index 0000000..b6ec42b --- /dev/null +++ b/include/jwt/impl/algorithm.ipp @@ -0,0 +1,194 @@ +#ifndef CPP_JWT_ALGORITHM_IPP +#define CPP_JWT_ALGORITHM_IPP + +namespace jwt { + +template +verify_result_t HMACSign::verify( + const string_view key, + const string_view head, + const string_view jwt_sign) +{ + std::error_code ec{}; + static auto bio_deletor = [](BIO* ptr) { + if (ptr) BIO_free_all(ptr); + }; + + using bio_deletor_t = decltype(bio_deletor); + using BIO_unique_ptr = std::unique_ptr; + + BIO_unique_ptr b64{BIO_new(BIO_f_base64())}; + if (!b64) { + //TODO: set error code + return {false, ec}; + } + + BIO* bmem = BIO_new(BIO_s_mem()); + if (!bmem) { + //TODO: set error code + return {false, ec}; + } + + BIO_push(b64, bmem); + BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL); + + unsigned char enc_buf[EVP_MAX_MD_SIZE]; + + unsigned char* res = HMAC(Hasher{}(), + key.data(), + key.length(), + reinterpret_cast(head.data()), + head.length(), + enc_buf, + &enc_buf_len); + + return {true, ec}; +} + +template +sign_result_t PEMSign::load_key(const string_view key) +{ + auto bio_deletor = [](BIO* ptr) { + if (ptr) BIO_free(ptr); + }; + + std::unique_ptr + bio_ptr{BIO_new_mem_buf((void*)key.data(), key.length()), bio_deletor}; + + if (!bio_ptr) { + return nullptr; + } + + EVP_PKEY* pkey = PEM_read_bio_PrivateKey(bio_ptr.get(), nullptr, nullptr, nullptr); + if (!pkey) { + return nullptr; + } + + return pkey; +} + +template +std::string PEMSign::evp_digest( + EVP_PKEY* pkey, + const string_view data, + std::error_code& ec) +{ + auto md_deletor = [](EVP_MD_CTX* ptr) { + if (ptr) EVP_MD_CTX_destroy(ptr); + }; + + std::unique_ptr + mdctx_ptr{EVP_MD_CTX_create(), md_deletor}; + + if (!mdctx_ptr) { + //TODO: set appropriate error_code + return std::string{}; + } + + //Initialiaze the digest algorithm + if (EVP_DigestSignInit( + mdctx_ptr.get(), nullptr, Hasher{}(), nullptr, pkey) != 1) { + //TODO: set appropriate error_code + return std::string{}; + } + + //Update the digest with the input data + if (EVP_DigestSignUpdate(mdctx_ptr.get(), data.data(), data.length()) != 1) { + //TODO: set appropriate error_code + return std::string{}; + } + + unsigned long len = 0; + + if (EVP_DigestSignFinal(mdctx_ptr.get(), nullptr, &len) != 1) { + //TODO: set appropriate error_code + return std::string{}; + } + + std::string sign; + sign.resize(len); + + //Get the signature + if (EVP_DigestSignFinal(mdctx_ptr.get(), (unsigned char*)&sign[0], &len) != 1) { + //TODO: set appropriate error_code + return std::string{}; + } + + return sign; +} + +template +std::string PEMSign::public_key_ser( + EVP_PKEY* pkey, + string_view sign, + std::error_code& ec) +{ + // Get the EC_KEY representing a public key and + // (optionaly) an associated private key + std::string new_sign; + + static auto eckey_deletor = [](EC_KEY* ptr) { + if (ptr) EC_KEY_free(ptr); + }; + + static auto ecsig_deletor = [](ECDSA_SIG* ptr) { + if (ptr) ECDSA_SIG_free(ptr); + }; + + std::unique_ptr + ec_key{EVP_PKEY_get1_EC_KEY(pkey), eckey_deletor}; + + if (!ec_key) { + //TODO set a valid error code + return std::string{}; + } + + uint32_t degree = EC_GROUP_get_degree(EC_KEY_get0_group(ec_key.get())); + + std::unique_ptr + ec_sig{d2i_ECDSA_SIG(nullptr, + (const unsigned char**)&sign[0], + sign.length()), + ecsig_deletor}; + + if (!ec_sig) { + //TODO set a valid error code + return std::string{}; + } + + const BIGNUM* ec_sig_r = nullptr; + const BIGNUM* ec_sig_s = nullptr; + +#if 1 + //Taken from https://github.com/nginnever/zogminer/issues/39 + auto ECDSA_SIG_get0 = [](const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) + { + if (pr != nullptr) *pr = sig->r; + if (ps != nullptr) *ps = sig->s; + }; + +#endif + + ECDSA_SIG_get0(ec_sig.get(), &ec_sig_r, &ec_sig_s); + + auto r_len = BN_num_bytes(ec_sig_r); + auto s_len = BN_num_bytes(ec_sig_s); + auto bn_len = (degree + 7) / 8; + + if ((r_len > bn_len) || (s_len > bn_len)) { + //TODO set a valid error code + return std::string{}; + } + + auto buf_len = 2 * bn_len; + new_sign.resize(buf_len); + + BN_bn2bin(ec_sig_r, (unsigned char*)&new_sign[0] + bn_len - r_len); + BN_bn2bin(ec_sig_s, (unsigned char*)&new_sign[0] + buf_len - s_len); + + return new_sign; +} + +} // END namespace jwt + +#endif diff --git a/include/jwt/impl/jwt.ipp b/include/jwt/impl/jwt.ipp index 134142d..fb4c27a 100644 --- a/include/jwt/impl/jwt.ipp +++ b/include/jwt/impl/jwt.ipp @@ -1,6 +1,8 @@ #ifndef JWT_IPP #define JWT_IPP +#include "jwt/detail/meta.hpp" + namespace jwt { template @@ -23,13 +25,54 @@ std::ostream& write(std::ostream& os, const T& obj, bool pretty) } -template +template {}>::type> std::ostream& operator<< (std::ostream& os, const T& obj) { os << obj.create_json_obj(); return os; } +//======================================================================== + +void jwt_header::decode(const string_view enc_str) +{ + std::string json_str = base64_decode(enc_str); + json_t obj = json_t::parse(std::move(json_str)); + + //Look for the algorithm field + auto alg_itr = obj.find("alg"); + assert (alg_itr != obj.end() && "Algorithm header is missing"); + std::error_code ec; + + alg_ = str_to_alg(alg_itr.value().get()); + + if (alg_ != algorithm::NONE) { + auto itr = obj.find("typ"); + if (itr == obj.end()) { + //TODO: set error code + return; + } + auto typ = itr.value().get(); + if (strcasecmp(typ.c_str(), "JWT")) { + //TODO: set error code + return; + } + typ_ = str_to_type(typ); + } + + return; +} + + +void jwt_payload::decode(const string_view enc_str) +{ + std::string json_str = base64_decode(enc_str); + payload_ = json_t::parse(std::move(json_str)); + return; +} + std::string jwt_signature::encode(const jwt_header& header, const jwt_payload& payload) { @@ -41,9 +84,6 @@ std::string jwt_signature::encode(const jwt_header& header, std::string hdr_sign = header.base64_encode(); std::string pld_sign = payload.base64_encode(); - base64_uri_encode(&hdr_sign[0], hdr_sign.length()); - base64_uri_encode(&pld_sign[0], pld_sign.length()); - std::string data = hdr_sign + '.' + pld_sign; auto res = sign_fn(key_, data); @@ -55,6 +95,15 @@ std::string jwt_signature::encode(const jwt_header& header, return jwt_msg; } +bool jwt_signature::verify(const jwt_header& header, + const string_view hdr_pld_sign, + const srting_view jwt_sign) +{ + //TODO: is bool the right choice ? + + return true; +} + sign_func_t jwt_signature::get_algorithm_impl(const jwt_header& hdr) const noexcept @@ -99,6 +148,33 @@ jwt_signature::get_algorithm_impl(const jwt_header& hdr) const noexcept return ret; } +//==================================================================== + +void jwt_decode(string_view encoded_str, string_view key, bool validate) +{ + //TODO: implement error_code + size_t fpos = encoded_str.find_first_of('.'); + assert (fpos != string_view::npos); + + string_view head{&encoded_str[0], fpos}; + std::cout << "Head: " << head << std::endl; + jwt_header hdr; + hdr.decode(head); + + size_t spos = encoded_str.find_first_of('.', fpos + 1); + if (spos == string_view::npos) { + //TODO: Check for none algorithm + } + string_view body{&encoded_str[fpos + 1], spos - fpos - 1}; + std::cout << "Body: " << body << std::endl; + + //Json objects or claims get set in the decode + jwt_payload pld; + pld.decode(body); + + +} + } // END namespace jwt diff --git a/include/jwt/jwt.hpp b/include/jwt/jwt.hpp index 1d1e2cc..ae76d40 100644 --- a/include/jwt/jwt.hpp +++ b/include/jwt/jwt.hpp @@ -10,7 +10,6 @@ #include "jwt/base64.hpp" #include "jwt/algorithm.hpp" #include "jwt/string_view.hpp" -#include "jwt/detail/meta.hpp" #include "jwt/json/json.hpp" // For convenience @@ -59,6 +58,25 @@ string_view alg_to_str(enum algorithm alg) noexcept assert (0 && "Code not reached"); } +/*! + */ +enum algorithm str_to_alg(const string_view alg) noexcept +{ + if (!alg.length()) return algorithm::NONE; + + if (!strcasecmp(alg.data(), "none")) return algorithm::NONE; + if (!strcasecmp(alg.data(), "hs256")) return algorithm::HS256; + if (!strcasecmp(alg.data(), "hs384")) return algorithm::HS384; + if (!strcasecmp(alg.data(), "hs512")) return algorithm::HS512; + if (!strcasecmp(alg.data(), "rs256")) return algorithm::RS256; + if (!strcasecmp(alg.data(), "rs384")) return algorithm::RS384; + if (!strcasecmp(alg.data(), "rs512")) return algorithm::RS512; + if (!strcasecmp(alg.data(), "es256")) return algorithm::ES256; + if (!strcasecmp(alg.data(), "es384")) return algorithm::ES384; + if (!strcasecmp(alg.data(), "es512")) return algorithm::ES512; + + assert (0 && "Code not reached"); +} /*! */ @@ -67,6 +85,17 @@ enum class type JWT = 0, }; +/*! + */ +enum type str_to_type(const string_view typ) noexcept +{ + assert (typ.length() && "Empty type string"); + + if (!strcasecmp(typ.data(), "jwt")) return type::JWT; + + assert (0 && "Code not reached"); +} + /*! */ @@ -160,18 +189,28 @@ template struct base64_enc_dec { /*! + * Does URL safe base64 encoding */ std::string base64_encode(bool with_pretty = false) const { std::string jstr = to_json_str(*static_cast(this), with_pretty); - return jwt::base64_encode(jstr.c_str(), jstr.length()); + std::string b64_str = jwt::base64_encode(jstr.c_str(), jstr.length()); + size_t rpos = b64_str.length(); + while(b64_str[rpos-1] == '=') rpos--; + // Remove the '=' characters + b64_str.resize(rpos); + // Do the URI safe encoding + jwt::base64_uri_encode(&b64_str[0], b64_str.length()); + + return b64_str; } /*! + * Does URL safe base64 decoding. */ - static std::string base64_decode(const std::string& encoded_str) + std::string base64_decode(const string_view encoded_str) { - return jwt::base64_decode(encoded_str.c_str(), encoded_str.length()); + return jwt::base64_uri_decode(encoded_str.data(), encoded_str.length()); } }; @@ -235,6 +274,18 @@ public: // Exposed APIs return typ_; } + /*! + */ + //TODO: error code ? + std::string encode(bool pprint = false) + { + return base64_encode(pprint); + } + + /*! + */ + void decode(const string_view enc_str); + /*! */ json_t create_json_obj() const @@ -315,6 +366,18 @@ public: // Exposed APIs return (cvalue == payload_[cname]); } + /*! + */ + std::string encode(bool pprint = false) + { + return base64_encode(pprint); + } + + /*! + */ + //TODO: what about error_code ? + void decode(const string_view enc_str); + /*! */ const json_t& create_json_obj() const @@ -366,6 +429,12 @@ public: // Exposed APIs std::string encode(const jwt_header& header, const jwt_payload& payload); + /*! + */ + bool verify(const jwt_header& header, + const string_view hdr_pld_sign, + const string_view jwt_sign); + private: // Private implementation /*! */ @@ -381,8 +450,24 @@ private: // Data members; */ class jwt_object { +public: // 'tors + jwt_object() = default; + +public: // Exposed APIs + +private: // Data Members + + /// JWT header section + jwt_header header_; + /// JWT payload section + jwt_payload payload_; + }; +/*! + */ +void jwt_decode(string_view encoded_str, string_view key, bool validate=true); + } // END namespace jwt diff --git a/include/jwt/test/test_jwt_decode b/include/jwt/test/test_jwt_decode new file mode 100755 index 0000000000000000000000000000000000000000..09497169bab592dd3e0749a77465899c480f05f2 GIT binary patch literal 431004 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�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 literal 0 HcmV?d00001 diff --git a/include/jwt/test/test_jwt_decode.cc b/include/jwt/test/test_jwt_decode.cc new file mode 100644 index 0000000..b3bb737 --- /dev/null +++ b/include/jwt/test/test_jwt_decode.cc @@ -0,0 +1,27 @@ +#include +#include "jwt/jwt.hpp" + +void basic_decode_test() +{ + // Create header + jwt::jwt_header hdr; + hdr = jwt::jwt_header{jwt::algorithm::HS256}; + + // Create payload + jwt::jwt_payload jp; + jp.add_claim("sub", "1234567890"); + jp.add_claim("name", "John Doe"); + jp.add_claim("admin", true); + + jwt::jwt_signature sgn{"secret"}; + auto res = sgn.encode(hdr, jp); + std::cout << res << std::endl; + + std::cout << "DECODE: \n"; + jwt::jwt_decode(res, "secret"); +} + +int main() { + basic_decode_test(); + return 0; +} diff --git a/include/jwt/test/test_jwt_header.cc b/include/jwt/test/test_jwt_header.cc index 5f79b38..64e9792 100644 --- a/include/jwt/test/test_jwt_header.cc +++ b/include/jwt/test/test_jwt_header.cc @@ -10,7 +10,7 @@ void test_basic_header() std::string enc_str = hdr.base64_encode(); std::cout << "Base64: " << enc_str << std::endl; - std::cout << "Decoded: " << jwt::jwt_header::base64_decode(enc_str) << std::endl; + std::cout << "Decoded: " << hdr.base64_decode(enc_str) << std::endl; } int main() {