mirror of
https://github.com/arun11299/cpp-jwt.git
synced 2025-05-14 16:58:34 +00:00
Merge pull request #18 from TheQuantumPhysicist/master
Make it possible to only include base64.hpp without everything
This commit is contained in:
commit
1aaffabe90
6 changed files with 43 additions and 41 deletions
|
@ -219,7 +219,7 @@ enum class algorithm
|
||||||
* Convert the algorithm enum class type to
|
* Convert the algorithm enum class type to
|
||||||
* its stringified form.
|
* its stringified form.
|
||||||
*/
|
*/
|
||||||
jwt::string_view alg_to_str(enum algorithm alg) noexcept
|
inline jwt::string_view alg_to_str(enum algorithm alg) noexcept
|
||||||
{
|
{
|
||||||
switch (alg) {
|
switch (alg) {
|
||||||
case algorithm::HS256: return "HS256";
|
case algorithm::HS256: return "HS256";
|
||||||
|
@ -243,7 +243,7 @@ jwt::string_view alg_to_str(enum algorithm alg) noexcept
|
||||||
* Convert stringified algorithm to enum class.
|
* Convert stringified algorithm to enum class.
|
||||||
* The string comparison is case insesitive.
|
* The string comparison is case insesitive.
|
||||||
*/
|
*/
|
||||||
enum algorithm str_to_alg(const jwt::string_view alg) noexcept
|
inline enum algorithm str_to_alg(const jwt::string_view alg) noexcept
|
||||||
{
|
{
|
||||||
if (!alg.length()) return algorithm::NONE;
|
if (!alg.length()) return algorithm::NONE;
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@ SOFTWARE.
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <cstring>
|
||||||
|
#include <ostream>
|
||||||
#include "jwt/string_view.hpp"
|
#include "jwt/string_view.hpp"
|
||||||
|
|
||||||
namespace jwt {
|
namespace jwt {
|
||||||
|
@ -84,7 +86,7 @@ private:
|
||||||
* @in : Input byte string to be encoded.
|
* @in : Input byte string to be encoded.
|
||||||
* @len : Length of the input byte string.
|
* @len : Length of the input byte string.
|
||||||
*/
|
*/
|
||||||
std::string base64_encode(const char* in, size_t len)
|
inline std::string base64_encode(const char* in, size_t len)
|
||||||
{
|
{
|
||||||
std::string result;
|
std::string result;
|
||||||
const auto encoded_siz = encoding_size(len);
|
const auto encoded_siz = encoding_size(len);
|
||||||
|
@ -187,7 +189,7 @@ private:
|
||||||
* @in : Encoded base64 byte string.
|
* @in : Encoded base64 byte string.
|
||||||
* @len : Length of the encoded input byte string.
|
* @len : Length of the encoded input byte string.
|
||||||
*/
|
*/
|
||||||
std::string base64_decode(const char* in, size_t len)
|
inline std::string base64_decode(const char* in, size_t len)
|
||||||
{
|
{
|
||||||
std::string result;
|
std::string result;
|
||||||
const auto decoded_siz = decoding_size(len);
|
const auto decoded_siz = decoding_size(len);
|
||||||
|
@ -264,7 +266,7 @@ std::string base64_decode(const char* in, size_t len)
|
||||||
* Returns:
|
* Returns:
|
||||||
* Length of the URL safe base64 encoded byte string.
|
* Length of the URL safe base64 encoded byte string.
|
||||||
*/
|
*/
|
||||||
size_t base64_uri_encode(char* data, size_t len) noexcept
|
inline size_t base64_uri_encode(char* data, size_t len) noexcept
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
size_t j = 0;
|
size_t j = 0;
|
||||||
|
@ -297,7 +299,7 @@ size_t base64_uri_encode(char* data, size_t len) noexcept
|
||||||
* @data : URL safe base64 encoded byte string.
|
* @data : URL safe base64 encoded byte string.
|
||||||
* @len : Length of the input byte string.
|
* @len : Length of the input byte string.
|
||||||
*/
|
*/
|
||||||
std::string base64_uri_decode(const char* data, size_t len)
|
inline std::string base64_uri_decode(const char* data, size_t len)
|
||||||
{
|
{
|
||||||
std::string uri_dec;
|
std::string uri_dec;
|
||||||
uri_dec.resize(len + 4);
|
uri_dec.resize(len + 4);
|
||||||
|
|
|
@ -141,17 +141,17 @@ const VerificationErrorCategory theVerificationErrorCategory {};
|
||||||
|
|
||||||
|
|
||||||
// Create the AlgorithmErrc error code
|
// Create the AlgorithmErrc error code
|
||||||
std::error_code make_error_code(AlgorithmErrc err)
|
inline std::error_code make_error_code(AlgorithmErrc err)
|
||||||
{
|
{
|
||||||
return { static_cast<int>(err), theAlgorithmErrCategory };
|
return { static_cast<int>(err), theAlgorithmErrCategory };
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code make_error_code(DecodeErrc err)
|
inline std::error_code make_error_code(DecodeErrc err)
|
||||||
{
|
{
|
||||||
return { static_cast<int>(err), theDecodeErrorCategory };
|
return { static_cast<int>(err), theDecodeErrorCategory };
|
||||||
}
|
}
|
||||||
|
|
||||||
std::error_code make_error_code(VerificationErrc err)
|
inline std::error_code make_error_code(VerificationErrc err)
|
||||||
{
|
{
|
||||||
return { static_cast<int>(err), theVerificationErrorCategory };
|
return { static_cast<int>(err), theVerificationErrorCategory };
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ std::ostream& operator<< (std::ostream& os, const T& obj)
|
||||||
|
|
||||||
//========================================================================
|
//========================================================================
|
||||||
|
|
||||||
void jwt_header::decode(const jwt::string_view enc_str, std::error_code& ec)
|
inline void jwt_header::decode(const jwt::string_view enc_str, std::error_code& ec)
|
||||||
{
|
{
|
||||||
ec.clear();
|
ec.clear();
|
||||||
std::string json_str = base64_decode(enc_str);
|
std::string json_str = base64_decode(enc_str);
|
||||||
|
@ -114,7 +114,7 @@ void jwt_header::decode(const jwt::string_view enc_str, std::error_code& ec)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void jwt_header::decode(const jwt::string_view enc_str)
|
inline void jwt_header::decode(const jwt::string_view enc_str)
|
||||||
{
|
{
|
||||||
std::error_code ec;
|
std::error_code ec;
|
||||||
decode(enc_str, ec);
|
decode(enc_str, ec);
|
||||||
|
@ -124,7 +124,7 @@ void jwt_header::decode(const jwt::string_view enc_str)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void jwt_payload::decode(const jwt::string_view enc_str, std::error_code& ec)
|
inline void jwt_payload::decode(const jwt::string_view enc_str, std::error_code& ec)
|
||||||
{
|
{
|
||||||
ec.clear();
|
ec.clear();
|
||||||
std::string json_str = base64_decode(enc_str);
|
std::string json_str = base64_decode(enc_str);
|
||||||
|
@ -146,7 +146,7 @@ void jwt_payload::decode(const jwt::string_view enc_str, std::error_code& ec)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void jwt_payload::decode(const jwt::string_view enc_str)
|
inline void jwt_payload::decode(const jwt::string_view enc_str)
|
||||||
{
|
{
|
||||||
std::error_code ec;
|
std::error_code ec;
|
||||||
decode(enc_str, ec);
|
decode(enc_str, ec);
|
||||||
|
@ -156,7 +156,7 @@ void jwt_payload::decode(const jwt::string_view enc_str)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string jwt_signature::encode(const jwt_header& header,
|
inline std::string jwt_signature::encode(const jwt_header& header,
|
||||||
const jwt_payload& payload,
|
const jwt_payload& payload,
|
||||||
std::error_code& ec)
|
std::error_code& ec)
|
||||||
{
|
{
|
||||||
|
@ -191,7 +191,7 @@ std::string jwt_signature::encode(const jwt_header& header,
|
||||||
return jwt_msg;
|
return jwt_msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
verify_result_t jwt_signature::verify(const jwt_header& header,
|
inline verify_result_t jwt_signature::verify(const jwt_header& header,
|
||||||
const jwt::string_view hdr_pld_sign,
|
const jwt::string_view hdr_pld_sign,
|
||||||
const jwt::string_view jwt_sign)
|
const jwt::string_view jwt_sign)
|
||||||
{
|
{
|
||||||
|
@ -200,7 +200,7 @@ verify_result_t jwt_signature::verify(const jwt_header& header,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sign_func_t
|
inline sign_func_t
|
||||||
jwt_signature::get_sign_algorithm_impl(const jwt_header& hdr) const noexcept
|
jwt_signature::get_sign_algorithm_impl(const jwt_header& hdr) const noexcept
|
||||||
{
|
{
|
||||||
sign_func_t ret = nullptr;
|
sign_func_t ret = nullptr;
|
||||||
|
@ -245,7 +245,7 @@ jwt_signature::get_sign_algorithm_impl(const jwt_header& hdr) const noexcept
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
verify_func_t
|
inline verify_func_t
|
||||||
jwt_signature::get_verify_algorithm_impl(const jwt_header& hdr) const noexcept
|
jwt_signature::get_verify_algorithm_impl(const jwt_header& hdr) const noexcept
|
||||||
{
|
{
|
||||||
verify_func_t ret = nullptr;
|
verify_func_t ret = nullptr;
|
||||||
|
@ -337,13 +337,13 @@ void jwt_object::set_parameters(
|
||||||
set_parameters(std::forward<Rest>(rargs)...);
|
set_parameters(std::forward<Rest>(rargs)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
void jwt_object::set_parameters()
|
inline void jwt_object::set_parameters()
|
||||||
{
|
{
|
||||||
//sentinel call
|
//sentinel call
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
jwt_object& jwt_object::add_claim(const jwt::string_view name, system_time_t tp)
|
inline jwt_object& jwt_object::add_claim(const jwt::string_view name, system_time_t tp)
|
||||||
{
|
{
|
||||||
return add_claim(
|
return add_claim(
|
||||||
name,
|
name,
|
||||||
|
@ -352,13 +352,13 @@ jwt_object& jwt_object::add_claim(const jwt::string_view name, system_time_t tp)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
jwt_object& jwt_object::remove_claim(const jwt::string_view name)
|
inline jwt_object& jwt_object::remove_claim(const jwt::string_view name)
|
||||||
{
|
{
|
||||||
payload_.remove_claim(name);
|
payload_.remove_claim(name);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string jwt_object::signature(std::error_code& ec) const
|
inline std::string jwt_object::signature(std::error_code& ec) const
|
||||||
{
|
{
|
||||||
ec.clear();
|
ec.clear();
|
||||||
|
|
||||||
|
@ -374,7 +374,7 @@ std::string jwt_object::signature(std::error_code& ec) const
|
||||||
return jws.encode(header_, payload_, ec);
|
return jws.encode(header_, payload_, ec);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string jwt_object::signature() const
|
inline std::string jwt_object::signature() const
|
||||||
{
|
{
|
||||||
std::error_code ec;
|
std::error_code ec;
|
||||||
std::string res = signature(ec);
|
std::string res = signature(ec);
|
||||||
|
@ -514,7 +514,7 @@ std::error_code jwt_object::verify(
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::array<jwt::string_view, 3>
|
inline std::array<jwt::string_view, 3>
|
||||||
jwt_object::three_parts(const jwt::string_view enc_str)
|
jwt_object::three_parts(const jwt::string_view enc_str)
|
||||||
{
|
{
|
||||||
std::array<jwt::string_view, 3> result;
|
std::array<jwt::string_view, 3> result;
|
||||||
|
|
|
@ -58,7 +58,7 @@ enum class type
|
||||||
* Converts a string representing a value of type
|
* Converts a string representing a value of type
|
||||||
* `enum class type` into its actual type.
|
* `enum class type` into its actual type.
|
||||||
*/
|
*/
|
||||||
enum type str_to_type(const jwt::string_view typ) noexcept
|
inline enum type str_to_type(const jwt::string_view typ) noexcept
|
||||||
{
|
{
|
||||||
assert (typ.length() && "Empty type string");
|
assert (typ.length() && "Empty type string");
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ enum type str_to_type(const jwt::string_view typ) noexcept
|
||||||
* Converts an instance of type `enum class type`
|
* Converts an instance of type `enum class type`
|
||||||
* to its string equivalent.
|
* to its string equivalent.
|
||||||
*/
|
*/
|
||||||
jwt::string_view type_to_str(enum type typ)
|
inline jwt::string_view type_to_str(enum type typ)
|
||||||
{
|
{
|
||||||
switch (typ) {
|
switch (typ) {
|
||||||
case type::JWT: return "JWT";
|
case type::JWT: return "JWT";
|
||||||
|
@ -109,7 +109,7 @@ enum class registered_claims
|
||||||
* Converts an instance of type `enum class registered_claims`
|
* Converts an instance of type `enum class registered_claims`
|
||||||
* to its string equivalent representation.
|
* to its string equivalent representation.
|
||||||
*/
|
*/
|
||||||
jwt::string_view reg_claims_to_str(enum registered_claims claim) noexcept
|
inline jwt::string_view reg_claims_to_str(enum registered_claims claim) noexcept
|
||||||
{
|
{
|
||||||
switch (claim) {
|
switch (claim) {
|
||||||
case registered_claims::expiration: return "exp";
|
case registered_claims::expiration: return "exp";
|
||||||
|
|
|
@ -265,7 +265,7 @@ using param_seq_list_t = std::initializer_list<jwt::string_view>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::payload_param<std::unordered_map<std::string, std::string>>
|
inline detail::payload_param<std::unordered_map<std::string, std::string>>
|
||||||
payload(const param_init_list_t& kvs)
|
payload(const param_init_list_t& kvs)
|
||||||
{
|
{
|
||||||
std::unordered_map<std::string, std::string> m;
|
std::unordered_map<std::string, std::string> m;
|
||||||
|
@ -292,28 +292,28 @@ payload(MappingConcept&& mc)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::secret_param secret(const string_view sv)
|
inline detail::secret_param secret(const string_view sv)
|
||||||
{
|
{
|
||||||
return { sv };
|
return { sv };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::algorithm_param algorithm(const string_view sv)
|
inline detail::algorithm_param algorithm(const string_view sv)
|
||||||
{
|
{
|
||||||
return { sv };
|
return { sv };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::algorithm_param algorithm(jwt::algorithm alg)
|
inline detail::algorithm_param algorithm(jwt::algorithm alg)
|
||||||
{
|
{
|
||||||
return { alg };
|
return { alg };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::headers_param<std::map<std::string, std::string>>
|
inline detail::headers_param<std::map<std::string, std::string>>
|
||||||
headers(const param_init_list_t& kvs)
|
headers(const param_init_list_t& kvs)
|
||||||
{
|
{
|
||||||
std::map<std::string, std::string> m;
|
std::map<std::string, std::string> m;
|
||||||
|
@ -339,7 +339,7 @@ headers(MappingConcept&& mc)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::verify_param
|
inline detail::verify_param
|
||||||
verify(bool v)
|
verify(bool v)
|
||||||
{
|
{
|
||||||
return { v };
|
return { v };
|
||||||
|
@ -347,7 +347,7 @@ verify(bool v)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::leeway_param
|
inline detail::leeway_param
|
||||||
leeway(uint32_t l)
|
leeway(uint32_t l)
|
||||||
{
|
{
|
||||||
return { l };
|
return { l };
|
||||||
|
@ -355,7 +355,7 @@ leeway(uint32_t l)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::algorithms_param<std::vector<std::string>>
|
inline detail::algorithms_param<std::vector<std::string>>
|
||||||
algorithms(const param_seq_list_t& seq)
|
algorithms(const param_seq_list_t& seq)
|
||||||
{
|
{
|
||||||
std::vector<std::string> vec;
|
std::vector<std::string> vec;
|
||||||
|
@ -375,7 +375,7 @@ algorithms(SequenceConcept&& sc)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::audience_param
|
inline detail::audience_param
|
||||||
aud(const jwt::string_view aud)
|
aud(const jwt::string_view aud)
|
||||||
{
|
{
|
||||||
return { aud.data() };
|
return { aud.data() };
|
||||||
|
@ -383,7 +383,7 @@ aud(const jwt::string_view aud)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::issuer_param
|
inline detail::issuer_param
|
||||||
issuer(const jwt::string_view iss)
|
issuer(const jwt::string_view iss)
|
||||||
{
|
{
|
||||||
return { iss.data() };
|
return { iss.data() };
|
||||||
|
@ -391,7 +391,7 @@ issuer(const jwt::string_view iss)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::subject_param
|
inline detail::subject_param
|
||||||
sub(const jwt::string_view subj)
|
sub(const jwt::string_view subj)
|
||||||
{
|
{
|
||||||
return { subj.data() };
|
return { subj.data() };
|
||||||
|
@ -399,7 +399,7 @@ sub(const jwt::string_view subj)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::validate_iat_param
|
inline detail::validate_iat_param
|
||||||
validate_iat(bool v)
|
validate_iat(bool v)
|
||||||
{
|
{
|
||||||
return { v };
|
return { v };
|
||||||
|
@ -407,7 +407,7 @@ validate_iat(bool v)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::validate_jti_param
|
inline detail::validate_jti_param
|
||||||
validate_jti(bool v)
|
validate_jti(bool v)
|
||||||
{
|
{
|
||||||
return { v };
|
return { v };
|
||||||
|
@ -415,7 +415,7 @@ validate_jti(bool v)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::nbf_param
|
inline detail::nbf_param
|
||||||
nbf(const system_time_t tp)
|
nbf(const system_time_t tp)
|
||||||
{
|
{
|
||||||
return { tp };
|
return { tp };
|
||||||
|
@ -423,7 +423,7 @@ nbf(const system_time_t tp)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
detail::nbf_param
|
inline detail::nbf_param
|
||||||
nbf(const uint64_t epoch)
|
nbf(const uint64_t epoch)
|
||||||
{
|
{
|
||||||
return { epoch };
|
return { epoch };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue