diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/annotated.html b/annotated.html new file mode 100644 index 000000000..e452a7f8b --- /dev/null +++ b/annotated.html @@ -0,0 +1,150 @@ + + + + + + + +JWT-CPP: Class List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 NjwtJSON Web Token
 NalphabetCharacter maps when encoding and decoding
 Nhelper
 Cbase64url_percent_encodingA General purpose base64url alphabet respecting the URI Case Normalization
 Cbase64Valid list of character when working with Base64
 Cbase64urlValid list of character when working with Base64URL
 NerrorEverything related to error codes issued by the library
 Cclaim_not_present_exceptionAttempt to access claim was unsuccessful
 Cecdsa_exception
 Cinvalid_json_exceptionAttempt to parse JSON was unsuccessful
 Crsa_exception
 Csignature_generation_exception
 Csignature_verification_exception
 Ctoken_verification_exception
 NhelperA collection for working with certificates
 Cevp_pkey_handleHandle class for EVP_PKEY structures
 Ntraits
 Cboost_json
 Cdanielaparker_jsoncons
 Cobject_type
 Ckazuho_picojson
 Cnlohmann_json
 Nverify_ops
 Cdate_after_claimChecks that the current time is after the time specified in the given claim
 Cdate_before_claimChecks that the current time is before the time specified in the given claim
 Cequals_claimThis is the default operation and does case sensitive matching
 Cinsensitive_string_claimChecks if the claim is a string and does an case insensitive comparison
 Cis_subset_claimChecks if the given set is a subset of the set inside the token
 Cverify_contextThis is the base container which holds the token that need to be verified
 Cbasic_claimClass to store a generic JSON value as claim
 CbuilderBuilder class to build and sign a new token Use jwt::create() to get an instance of this class
 Cdecoded_jwtClass containing all information about a decoded token
 Cdefault_clockDefault clock class using std::chrono::system_clock as a backend
 CheaderBase class that represents a token header
 CjwkJSON Web Key
 CjwksJWK Set
 CpayloadBase class that represents a token payload
 CverifierVerifier class used to check if a decoded token contains all claims required by your application and has a valid signature
+
+
+
+ + + + diff --git a/annotated_dup.js b/annotated_dup.js new file mode 100644 index 000000000..a0bd982de --- /dev/null +++ b/annotated_dup.js @@ -0,0 +1,47 @@ +var annotated_dup = +[ + [ "jwt", "namespacejwt.html", [ + [ "alphabet", "namespacejwt_1_1alphabet.html", [ + [ "helper", null, [ + [ "base64url_percent_encoding", "structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html", null ] + ] ], + [ "base64", "structjwt_1_1alphabet_1_1base64.html", null ], + [ "base64url", "structjwt_1_1alphabet_1_1base64url.html", null ] + ] ], + [ "error", "namespacejwt_1_1error.html", [ + [ "claim_not_present_exception", "structjwt_1_1error_1_1claim__not__present__exception.html", null ], + [ "ecdsa_exception", "structjwt_1_1error_1_1ecdsa__exception.html", null ], + [ "invalid_json_exception", "structjwt_1_1error_1_1invalid__json__exception.html", null ], + [ "rsa_exception", "structjwt_1_1error_1_1rsa__exception.html", null ], + [ "signature_generation_exception", "structjwt_1_1error_1_1signature__generation__exception.html", null ], + [ "signature_verification_exception", "structjwt_1_1error_1_1signature__verification__exception.html", null ], + [ "token_verification_exception", "structjwt_1_1error_1_1token__verification__exception.html", null ] + ] ], + [ "helper", "namespacejwt_1_1helper.html", [ + [ "evp_pkey_handle", "classjwt_1_1helper_1_1evp__pkey__handle.html", "classjwt_1_1helper_1_1evp__pkey__handle" ] + ] ], + [ "traits", null, [ + [ "boost_json", "structjwt_1_1traits_1_1boost__json.html", null ], + [ "danielaparker_jsoncons", "structjwt_1_1traits_1_1danielaparker__jsoncons.html", "structjwt_1_1traits_1_1danielaparker__jsoncons" ], + [ "kazuho_picojson", "structjwt_1_1traits_1_1kazuho__picojson.html", null ], + [ "nlohmann_json", "structjwt_1_1traits_1_1nlohmann__json.html", null ] + ] ], + [ "verify_ops", null, [ + [ "date_after_claim", "structjwt_1_1verify__ops_1_1date__after__claim.html", null ], + [ "date_before_claim", "structjwt_1_1verify__ops_1_1date__before__claim.html", null ], + [ "equals_claim", "structjwt_1_1verify__ops_1_1equals__claim.html", null ], + [ "insensitive_string_claim", "structjwt_1_1verify__ops_1_1insensitive__string__claim.html", null ], + [ "is_subset_claim", "structjwt_1_1verify__ops_1_1is__subset__claim.html", null ], + [ "verify_context", "structjwt_1_1verify__ops_1_1verify__context.html", null ] + ] ], + [ "basic_claim", "classjwt_1_1basic__claim.html", "classjwt_1_1basic__claim" ], + [ "builder", "classjwt_1_1builder.html", "classjwt_1_1builder" ], + [ "decoded_jwt", "classjwt_1_1decoded__jwt.html", "classjwt_1_1decoded__jwt" ], + [ "default_clock", "structjwt_1_1default__clock.html", null ], + [ "header", "classjwt_1_1header.html", "classjwt_1_1header" ], + [ "jwk", "classjwt_1_1jwk.html", "classjwt_1_1jwk" ], + [ "jwks", "classjwt_1_1jwks.html", "classjwt_1_1jwks" ], + [ "payload", "classjwt_1_1payload.html", "classjwt_1_1payload" ], + [ "verifier", "classjwt_1_1verifier.html", "classjwt_1_1verifier" ] + ] ] +]; \ No newline at end of file diff --git a/base_8h_source.html b/base_8h_source.html new file mode 100644 index 000000000..ebef887be --- /dev/null +++ b/base_8h_source.html @@ -0,0 +1,373 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/base.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
base.h
+
+
+
1#ifndef JWT_CPP_BASE_H
+
2#define JWT_CPP_BASE_H
+
3
+
4#include <algorithm>
+
5#include <array>
+
6#include <cstdint>
+
7#include <stdexcept>
+
8#include <string>
+
9#include <vector>
+
10
+
11#ifdef __has_cpp_attribute
+
12#if __has_cpp_attribute(fallthrough)
+
13#define JWT_FALLTHROUGH [[fallthrough]]
+
14#endif
+
15#endif
+
16
+
17#ifndef JWT_FALLTHROUGH
+
18#define JWT_FALLTHROUGH
+
19#endif
+
20
+
+
21namespace jwt {
+
+
25 namespace alphabet {
+
+
32 struct base64 {
+
33 static const std::array<char, 64>& data() {
+
34 static constexpr std::array<char, 64> data{
+
35 {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+
36 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+
37 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+
38 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}};
+
39 return data;
+
40 }
+
41 static const std::string& fill() {
+
42 static const std::string fill{"="};
+
43 return fill;
+
44 }
+
45 };
+
+
+
55 struct base64url {
+
56 static const std::array<char, 64>& data() {
+
57 static constexpr std::array<char, 64> data{
+
58 {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+
59 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+
60 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+
61 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'}};
+
62 return data;
+
63 }
+
64 static const std::string& fill() {
+
65 static const std::string fill{"%3d"};
+
66 return fill;
+
67 }
+
68 };
+
+
69 namespace helper {
+
+ +
77 static const std::array<char, 64>& data() {
+
78 static constexpr std::array<char, 64> data{
+
79 {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+
80 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+
81 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+
82 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '_'}};
+
83 return data;
+
84 }
+
85 static const std::vector<std::string>& fill() {
+
86 static const std::vector<std::string> fill{"%3D", "%3d"};
+
87 return fill;
+
88 }
+
89 };
+
+
90 } // namespace helper
+
91
+
92 inline uint32_t index(const std::array<char, 64>& alphabet, char symbol) {
+
93 auto itr = std::find_if(alphabet.cbegin(), alphabet.cend(), [symbol](char c) { return c == symbol; });
+
94 if (itr == alphabet.cend()) { throw std::runtime_error("Invalid input: not within alphabet"); }
+
95
+
96 return std::distance(alphabet.cbegin(), itr);
+
97 }
+
98 } // namespace alphabet
+
+
99
+
+
103 namespace base {
+
104
+
105 namespace details {
+
106 struct padding {
+
107 size_t count = 0;
+
108 size_t length = 0;
+
109
+
110 padding() = default;
+
111 padding(size_t count, size_t length) : count(count), length(length) {}
+
112
+
113 padding operator+(const padding& p) { return padding(count + p.count, length + p.length); }
+
114
+
115 friend bool operator==(const padding& lhs, const padding& rhs) {
+
116 return lhs.count == rhs.count && lhs.length == rhs.length;
+
117 }
+
118 };
+
119
+
120 inline padding count_padding(const std::string& base, const std::vector<std::string>& fills) {
+
121 for (const auto& fill : fills) {
+
122 if (base.size() < fill.size()) continue;
+
123 // Does the end of the input exactly match the fill pattern?
+
124 if (base.substr(base.size() - fill.size()) == fill) {
+
125 return padding{1, fill.length()} +
+
126 count_padding(base.substr(0, base.size() - fill.size()), fills);
+
127 }
+
128 }
+
129
+
130 return {};
+
131 }
+
132
+
133 inline std::string encode(const std::string& bin, const std::array<char, 64>& alphabet,
+
134 const std::string& fill) {
+
135 size_t size = bin.size();
+
136 std::string res;
+
137
+
138 // clear incomplete bytes
+
139 size_t fast_size = size - size % 3;
+
140 for (size_t i = 0; i < fast_size;) {
+
141 uint32_t octet_a = static_cast<unsigned char>(bin[i++]);
+
142 uint32_t octet_b = static_cast<unsigned char>(bin[i++]);
+
143 uint32_t octet_c = static_cast<unsigned char>(bin[i++]);
+
144
+
145 uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
+
146
+
147 res += alphabet[(triple >> 3 * 6) & 0x3F];
+
148 res += alphabet[(triple >> 2 * 6) & 0x3F];
+
149 res += alphabet[(triple >> 1 * 6) & 0x3F];
+
150 res += alphabet[(triple >> 0 * 6) & 0x3F];
+
151 }
+
152
+
153 if (fast_size == size) return res;
+
154
+
155 size_t mod = size % 3;
+
156
+
157 uint32_t octet_a = fast_size < size ? static_cast<unsigned char>(bin[fast_size++]) : 0;
+
158 uint32_t octet_b = fast_size < size ? static_cast<unsigned char>(bin[fast_size++]) : 0;
+
159 uint32_t octet_c = fast_size < size ? static_cast<unsigned char>(bin[fast_size++]) : 0;
+
160
+
161 uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;
+
162
+
163 switch (mod) {
+
164 case 1:
+
165 res += alphabet[(triple >> 3 * 6) & 0x3F];
+
166 res += alphabet[(triple >> 2 * 6) & 0x3F];
+
167 res += fill;
+
168 res += fill;
+
169 break;
+
170 case 2:
+
171 res += alphabet[(triple >> 3 * 6) & 0x3F];
+
172 res += alphabet[(triple >> 2 * 6) & 0x3F];
+
173 res += alphabet[(triple >> 1 * 6) & 0x3F];
+
174 res += fill;
+
175 break;
+
176 default: break;
+
177 }
+
178
+
179 return res;
+
180 }
+
181
+
182 inline std::string decode(const std::string& base, const std::array<char, 64>& alphabet,
+
183 const std::vector<std::string>& fill) {
+
184 const auto pad = count_padding(base, fill);
+
185 if (pad.count > 2) throw std::runtime_error("Invalid input: too much fill");
+
186
+
187 const size_t size = base.size() - pad.length;
+
188 if ((size + pad.count) % 4 != 0) throw std::runtime_error("Invalid input: incorrect total size");
+
189
+
190 size_t out_size = size / 4 * 3;
+
191 std::string res;
+
192 res.reserve(out_size);
+
193
+
194 auto get_sextet = [&](size_t offset) { return alphabet::index(alphabet, base[offset]); };
+
195
+
196 size_t fast_size = size - size % 4;
+
197 for (size_t i = 0; i < fast_size;) {
+
198 uint32_t sextet_a = get_sextet(i++);
+
199 uint32_t sextet_b = get_sextet(i++);
+
200 uint32_t sextet_c = get_sextet(i++);
+
201 uint32_t sextet_d = get_sextet(i++);
+
202
+
203 uint32_t triple =
+
204 (sextet_a << 3 * 6) + (sextet_b << 2 * 6) + (sextet_c << 1 * 6) + (sextet_d << 0 * 6);
+
205
+
206 res += static_cast<char>((triple >> 2 * 8) & 0xFFU);
+
207 res += static_cast<char>((triple >> 1 * 8) & 0xFFU);
+
208 res += static_cast<char>((triple >> 0 * 8) & 0xFFU);
+
209 }
+
210
+
211 if (pad.count == 0) return res;
+
212
+
213 uint32_t triple = (get_sextet(fast_size) << 3 * 6) + (get_sextet(fast_size + 1) << 2 * 6);
+
214
+
215 switch (pad.count) {
+
216 case 1:
+
217 triple |= (get_sextet(fast_size + 2) << 1 * 6);
+
218 res += static_cast<char>((triple >> 2 * 8) & 0xFFU);
+
219 res += static_cast<char>((triple >> 1 * 8) & 0xFFU);
+
220 break;
+
221 case 2: res += static_cast<char>((triple >> 2 * 8) & 0xFFU); break;
+
222 default: break;
+
223 }
+
224
+
225 return res;
+
226 }
+
227
+
228 inline std::string decode(const std::string& base, const std::array<char, 64>& alphabet,
+
229 const std::string& fill) {
+
230 return decode(base, alphabet, std::vector<std::string>{fill});
+
231 }
+
232
+
233 inline std::string pad(const std::string& base, const std::string& fill) {
+
234 std::string padding;
+
235 switch (base.size() % 4) {
+
236 case 1: padding += fill; JWT_FALLTHROUGH;
+
237 case 2: padding += fill; JWT_FALLTHROUGH;
+
238 case 3: padding += fill; JWT_FALLTHROUGH;
+
239 default: break;
+
240 }
+
241
+
242 return base + padding;
+
243 }
+
244
+
245 inline std::string trim(const std::string& base, const std::string& fill) {
+
246 auto pos = base.find(fill);
+
247 return base.substr(0, pos);
+
248 }
+
249 } // namespace details
+
250
+
251 template<typename T>
+
252 std::string encode(const std::string& bin) {
+
253 return details::encode(bin, T::data(), T::fill());
+
254 }
+
255 template<typename T>
+
256 std::string decode(const std::string& base) {
+
257 return details::decode(base, T::data(), T::fill());
+
258 }
+
259 template<typename T>
+
260 std::string pad(const std::string& base) {
+
261 return details::pad(base, T::fill());
+
262 }
+
263 template<typename T>
+
264 std::string trim(const std::string& base) {
+
265 return details::trim(base, T::fill());
+
266 }
+
267 } // namespace base
+
+
268} // namespace jwt
+
+
269
+
270#endif
+
JSON Web Token.
Definition base.h:21
+
valid list of character when working with Base64
Definition base.h:32
+
valid list of character when working with Base64URL
Definition base.h:55
+
A General purpose base64url alphabet respecting the URI Case Normalization
Definition base.h:76
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 000000000..224b29aa9 Binary files /dev/null and b/bc_s.png differ diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 000000000..31ca888dc Binary files /dev/null and b/bc_sd.png differ diff --git a/boost-json_2defaults_8h_source.html b/boost-json_2defaults_8h_source.html new file mode 100644 index 000000000..804da0740 --- /dev/null +++ b/boost-json_2defaults_8h_source.html @@ -0,0 +1,179 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/boost-json/defaults.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
defaults.h
+
+
+
1#ifndef JWT_CPP_BOOST_JSON_DEFAULTS_H
+
2#define JWT_CPP_BOOST_JSON_DEFAULTS_H
+
3
+
4#ifndef JWT_DISABLE_PICOJSON
+
5#define JWT_DISABLE_PICOJSON
+
6#endif
+
7
+
8#include "traits.h"
+
9
+
10namespace jwt {
+ +
18
+
+ +
24 return verify<default_clock, traits::boost_json>(default_clock{});
+
25 }
+
+
26
+ +
31
+
32#ifndef JWT_DISABLE_BASE64
+
+
40 inline decoded_jwt<traits::boost_json> decode(const std::string& token) {
+ +
42 }
+
+
43#endif
+
44
+
56 template<typename Decode>
+
+
57 decoded_jwt<traits::boost_json> decode(const std::string& token, Decode decode) {
+ +
59 }
+
+
60
+
+
67 inline jwk<traits::boost_json> parse_jwk(const traits::boost_json::string_type& token) {
+
68 return jwk<traits::boost_json>(token);
+
69 }
+
+
70
+
+
77 inline jwks<traits::boost_json> parse_jwks(const traits::boost_json::string_type& token) {
+
78 return jwks<traits::boost_json>(token);
+
79 }
+
+
80
+ +
86} // namespace jwt
+
87
+
88#endif // JWT_CPP_BOOST_JSON_DEFAULTS_H
+
a class to store a generic JSON value as claim
Definition jwt.h:2098
+
Builder class to build and sign a new token Use jwt::create() to get an instance of this class.
Definition jwt.h:2635
+
Class containing all information about a decoded token.
Definition jwt.h:2500
+
JSON Web Key.
Definition jwt.h:3308
+
JWK Set.
Definition jwt.h:3515
+
Verifier class used to check if a decoded token contains all claims required by your application and ...
Definition jwt.h:3062
+
JSON Web Token.
Definition base.h:21
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+
jwk< json_traits > parse_jwk(const typename json_traits::string_type &jwk_)
Parse a single JSON Web Key.
Definition jwt.h:3638
+
jwks< json_traits > parse_jwks(const typename json_traits::string_type &jwks_)
Parse a JSON Web Key Set.
Definition jwt.h:3648
+
verifier< default_clock, traits::boost_json > verify()
Create a verifier using the default clock.
Definition defaults.h:23
+
decoded_jwt< json_traits > decode(const typename json_traits::string_type &token, Decode decode)
Decode a token.
Definition jwt.h:3615
+
Default clock class using std::chrono::system_clock as a backend.
Definition jwt.h:3584
+
This is the base container which holds the token that need to be verified.
Definition jwt.h:2866
+
+
+ + + + diff --git a/boost-json_2traits_8h_source.html b/boost-json_2traits_8h_source.html new file mode 100644 index 000000000..0bd9564ad --- /dev/null +++ b/boost-json_2traits_8h_source.html @@ -0,0 +1,199 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/boost-json/traits.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
traits.h
+
+
+
1#ifndef JWT_CPP_BOOSTJSON_TRAITS_H
+
2#define JWT_CPP_BOOSTJSON_TRAITS_H
+
3
+
4#define JWT_DISABLE_PICOJSON
+
5#include "jwt-cpp/jwt.h"
+
6
+
7#include <boost/json.hpp>
+
8// if not boost JSON standalone then error...
+
9
+
10namespace jwt {
+
11 namespace traits {
+
12 namespace json = boost::json;
+
+
13 struct boost_json {
+
14 using value_type = json::value;
+
15 using object_type = json::object;
+
16 using array_type = json::array;
+
17 using string_type = std::string;
+
18 using number_type = double;
+
19 using integer_type = std::int64_t;
+
20 using boolean_type = bool;
+
21
+
22 static jwt::json::type get_type(const value_type& val) {
+
23 using jwt::json::type;
+
24
+
25 if (val.kind() == json::kind::bool_) return type::boolean;
+
26 if (val.kind() == json::kind::int64) return type::integer;
+
27 if (val.kind() == json::kind::uint64) // boost internally tracks two types of integers
+
28 return type::integer;
+
29 if (val.kind() == json::kind::double_) return type::number;
+
30 if (val.kind() == json::kind::string) return type::string;
+
31 if (val.kind() == json::kind::array) return type::array;
+
32 if (val.kind() == json::kind::object) return type::object;
+
33
+
34 throw std::logic_error("invalid type");
+
35 }
+
36
+
37 static object_type as_object(const value_type& val) {
+
38 if (val.kind() != json::kind::object) throw std::bad_cast();
+
39 return val.get_object();
+
40 }
+
41
+
42 static array_type as_array(const value_type& val) {
+
43 if (val.kind() != json::kind::array) throw std::bad_cast();
+
44 return val.get_array();
+
45 }
+
46
+
47 static string_type as_string(const value_type& val) {
+
48 if (val.kind() != json::kind::string) throw std::bad_cast();
+
49 return string_type{val.get_string()};
+
50 }
+
51
+
52 static integer_type as_integer(const value_type& val) {
+
53 switch (val.kind()) {
+
54 case json::kind::int64: return val.get_int64();
+
55 case json::kind::uint64: return static_cast<int64_t>(val.get_uint64());
+
56 default: throw std::bad_cast();
+
57 }
+
58 }
+
59
+
60 static boolean_type as_boolean(const value_type& val) {
+
61 if (val.kind() != json::kind::bool_) throw std::bad_cast();
+
62 return val.get_bool();
+
63 }
+
64
+
65 static number_type as_number(const value_type& val) {
+
66 if (val.kind() != json::kind::double_) throw std::bad_cast();
+
67 return val.get_double();
+
68 }
+
69
+
70 static bool parse(value_type& val, string_type str) {
+
71 val = json::parse(str);
+
72 return true;
+
73 }
+
74
+
75 static std::string serialize(const value_type& val) { return json::serialize(val); }
+
76 };
+
+
77 } // namespace traits
+
78} // namespace jwt
+
79
+
80#endif // JWT_CPP_BOOSTJSON_TRAITS_H
+
type
Generic JSON types used in JWTs.
Definition jwt.h:1825
+
JSON Web Token.
Definition base.h:21
+
Definition traits.h:13
+
+
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 000000000..843e2501f --- /dev/null +++ b/classes.html @@ -0,0 +1,156 @@ + + + + + + + +JWT-CPP: Class Index + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | D | E | H | I | J | K | N | O | P | R | S | T | V
+ +
+
+ + + + diff --git a/classjwt_1_1basic__claim-members.html b/classjwt_1_1basic__claim-members.html new file mode 100644 index 000000000..858bb2aca --- /dev/null +++ b/classjwt_1_1basic__claim-members.html @@ -0,0 +1,135 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::basic_claim< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::basic_claim< json_traits >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
as_array() constjwt::basic_claim< json_traits >inline
as_boolean() constjwt::basic_claim< json_traits >inline
as_date() constjwt::basic_claim< json_traits >inline
as_integer() constjwt::basic_claim< json_traits >inline
as_number() constjwt::basic_claim< json_traits >inline
as_set() constjwt::basic_claim< json_traits >inline
as_string() constjwt::basic_claim< json_traits >inline
basic_claim()=default (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
basic_claim(const basic_claim &)=default (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
basic_claim(basic_claim &&)=default (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
basic_claim(typename json_traits::string_type s) (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >inline
basic_claim(const date &d) (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >inline
basic_claim(typename json_traits::array_type a) (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >inline
basic_claim(typename json_traits::value_type v) (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >inline
basic_claim(const set_t &s) (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >inline
basic_claim(Iterator begin, Iterator end) (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >inline
get_type() constjwt::basic_claim< json_traits >inline
operator<<(std::ostream &os)jwt::basic_claim< json_traits >inline
operator=(const basic_claim &)=default (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
operator=(basic_claim &&)=default (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
operator>>(std::istream &is)jwt::basic_claim< json_traits >inline
set_t typedef (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
to_json() constjwt::basic_claim< json_traits >inline
~basic_claim()=default (defined in jwt::basic_claim< json_traits >)jwt::basic_claim< json_traits >
+
+ + + + diff --git a/classjwt_1_1basic__claim.html b/classjwt_1_1basic__claim.html new file mode 100644 index 000000000..90f6b0607 --- /dev/null +++ b/classjwt_1_1basic__claim.html @@ -0,0 +1,573 @@ + + + + + + + +JWT-CPP: jwt::basic_claim< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::basic_claim< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+ + + + +

+Public Types

+using set_t = std::set< typename json_traits::string_type >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

basic_claim (const basic_claim &)=default
 
basic_claim (basic_claim &&)=default
 
+basic_claimoperator= (const basic_claim &)=default
 
+basic_claimoperator= (basic_claim &&)=default
 
+JWT_CLAIM_EXPLICIT basic_claim (typename json_traits::string_type s)
 
+JWT_CLAIM_EXPLICIT basic_claim (const date &d)
 
+JWT_CLAIM_EXPLICIT basic_claim (typename json_traits::array_type a)
 
+JWT_CLAIM_EXPLICIT basic_claim (typename json_traits::value_type v)
 
+JWT_CLAIM_EXPLICIT basic_claim (const set_t &s)
 
+template<typename Iterator >
 basic_claim (Iterator begin, Iterator end)
 
json_traits::value_type to_json () const
 
std::istream & operator>> (std::istream &is)
 
std::ostream & operator<< (std::ostream &os)
 
json::type get_type () const
 
json_traits::string_type as_string () const
 
date as_date () const
 
json_traits::array_type as_array () const
 
set_t as_set () const
 
json_traits::integer_type as_integer () const
 
json_traits::boolean_type as_boolean () const
 
json_traits::number_type as_number () const
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::basic_claim< json_traits >

a class to store a generic JSON value as claim

+
Template Parameters
+ + +
json_traits: JSON implementation traits
+
+
+
See also
RFC 7519: JSON Web Token (JWT)
+

Member Function Documentation

+ +

◆ as_array()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::array_type jwt::basic_claim< json_traits >::as_array () const
+
+inline
+
+ +

Get the contained JSON value as an array.

+
Returns
content as array
+
Exceptions
+ + +
std::bad_castContent was not an array
+
+
+ +
+
+ +

◆ as_boolean()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::boolean_type jwt::basic_claim< json_traits >::as_boolean () const
+
+inline
+
+ +

Get the contained JSON value as a bool.

+
Returns
content as bool
+
Exceptions
+ + +
std::bad_castContent was not a bool
+
+
+ +
+
+ +

◆ as_date()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
date jwt::basic_claim< json_traits >::as_date () const
+
+inline
+
+ +

Get the contained JSON value as a date.

+

If the value is a decimal, it is rounded up to the closest integer

+
Returns
content as date
+
Exceptions
+ + +
std::bad_castContent was not a date
+
+
+ +
+
+ +

◆ as_integer()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::integer_type jwt::basic_claim< json_traits >::as_integer () const
+
+inline
+
+ +

Get the contained JSON value as an integer.

+
Returns
content as int
+
Exceptions
+ + +
std::bad_castContent was not an int
+
+
+ +
+
+ +

◆ as_number()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::number_type jwt::basic_claim< json_traits >::as_number () const
+
+inline
+
+ +

Get the contained JSON value as a number.

+
Returns
content as double
+
Exceptions
+ + +
std::bad_castContent was not a number
+
+
+ +
+
+ +

◆ as_set()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
set_t jwt::basic_claim< json_traits >::as_set () const
+
+inline
+
+ +

Get the contained JSON value as a set of strings.

+
Returns
content as set of strings
+
Exceptions
+ + +
std::bad_castContent was not an array of string
+
+
+ +
+
+ +

◆ as_string()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::basic_claim< json_traits >::as_string () const
+
+inline
+
+ +

Get the contained JSON value as a string.

+
Returns
content as string
+
Exceptions
+ + +
std::bad_castContent was not a string
+
+
+ +
+
+ +

◆ get_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json::type jwt::basic_claim< json_traits >::get_type () const
+
+inline
+
+ +

Get type of contained JSON value.

+
Returns
Type
+
Exceptions
+ + +
std::logic_errorAn internal error occurred
+
+
+ +
+
+ +

◆ operator<<()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
std::ostream & jwt::basic_claim< json_traits >::operator<< (std::ostream & os)
+
+inline
+
+ +

Serialize claim to output stream from wrapped JSON value.

+
Returns
output stream
+ +
+
+ +

◆ operator>>()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
std::istream & jwt::basic_claim< json_traits >::operator>> (std::istream & is)
+
+inline
+
+ +

Parse input stream into underlying JSON value.

+
Returns
input stream
+ +
+
+ +

◆ to_json()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::value_type jwt::basic_claim< json_traits >::to_json () const
+
+inline
+
+ +

Get wrapped JSON value.

+
Returns
Wrapped JSON value
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1basic__claim.js b/classjwt_1_1basic__claim.js new file mode 100644 index 000000000..b7ededd03 --- /dev/null +++ b/classjwt_1_1basic__claim.js @@ -0,0 +1,14 @@ +var classjwt_1_1basic__claim = +[ + [ "as_array", "classjwt_1_1basic__claim.html#af06fe57ced0b69e5d3e0480b283ac31f", null ], + [ "as_boolean", "classjwt_1_1basic__claim.html#a97442d8e2ba7ac24201d1d16d6c32aef", null ], + [ "as_date", "classjwt_1_1basic__claim.html#aadef1dd6e6275680067940fedb06ab08", null ], + [ "as_integer", "classjwt_1_1basic__claim.html#ae2c58375c443bfc1037066edaf88be53", null ], + [ "as_number", "classjwt_1_1basic__claim.html#a2000561f92e202acdeb532f15056e764", null ], + [ "as_set", "classjwt_1_1basic__claim.html#a33b043d261a23cd108778893a24ae976", null ], + [ "as_string", "classjwt_1_1basic__claim.html#afe7cd8e0feebff55c05adfe71748e1fd", null ], + [ "get_type", "classjwt_1_1basic__claim.html#a59be52f75f5d32386f0e57be25dda38a", null ], + [ "operator<<", "classjwt_1_1basic__claim.html#acb0dd9d4a9c683a33877b56c386a1428", null ], + [ "operator>>", "classjwt_1_1basic__claim.html#a81c5d71c9421d074f766e7c5a16106b2", null ], + [ "to_json", "classjwt_1_1basic__claim.html#ae47b0e6de750563a2ba1f9e5628b72ee", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1builder-members.html b/classjwt_1_1builder-members.html new file mode 100644 index 000000000..293d57e35 --- /dev/null +++ b/classjwt_1_1builder-members.html @@ -0,0 +1,132 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::builder< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::builder< json_traits >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
builder()=default (defined in jwt::builder< json_traits >)jwt::builder< json_traits >
set_algorithm(typename json_traits::string_type str)jwt::builder< json_traits >inline
set_audience(typename json_traits::array_type a)jwt::builder< json_traits >inline
set_audience(typename json_traits::string_type aud)jwt::builder< json_traits >inline
set_content_type(typename json_traits::string_type str)jwt::builder< json_traits >inline
set_expires_at(const date &d)jwt::builder< json_traits >inline
set_header_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)jwt::builder< json_traits >inline
set_header_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)jwt::builder< json_traits >inline
set_id(const typename json_traits::string_type &str)jwt::builder< json_traits >inline
set_issued_at(const date &d)jwt::builder< json_traits >inline
set_issuer(typename json_traits::string_type str)jwt::builder< json_traits >inline
set_key_id(typename json_traits::string_type str)jwt::builder< json_traits >inline
set_not_before(const date &d)jwt::builder< json_traits >inline
set_payload_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)jwt::builder< json_traits >inline
set_payload_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)jwt::builder< json_traits >inline
set_subject(typename json_traits::string_type str)jwt::builder< json_traits >inline
set_type(typename json_traits::string_type str)jwt::builder< json_traits >inline
sign(const Algo &algo, Encode encode) constjwt::builder< json_traits >inline
sign(const Algo &algo) constjwt::builder< json_traits >inline
sign(const Algo &algo, Encode encode, std::error_code &ec) constjwt::builder< json_traits >inline
sign(const Algo &algo, std::error_code &ec) constjwt::builder< json_traits >inline
+
+ + + + diff --git a/classjwt_1_1builder.html b/classjwt_1_1builder.html new file mode 100644 index 000000000..5fedf49c4 --- /dev/null +++ b/classjwt_1_1builder.html @@ -0,0 +1,1019 @@ + + + + + + + +JWT-CPP: jwt::builder< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::builder< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

builderset_header_claim (const typename json_traits::string_type &id, typename json_traits::value_type c)
 
builderset_header_claim (const typename json_traits::string_type &id, basic_claim< json_traits > c)
 
builderset_payload_claim (const typename json_traits::string_type &id, typename json_traits::value_type c)
 
builderset_payload_claim (const typename json_traits::string_type &id, basic_claim< json_traits > c)
 
builderset_algorithm (typename json_traits::string_type str)
 
builderset_type (typename json_traits::string_type str)
 
builderset_content_type (typename json_traits::string_type str)
 
builderset_key_id (typename json_traits::string_type str)
 
builderset_issuer (typename json_traits::string_type str)
 
builderset_subject (typename json_traits::string_type str)
 
builderset_audience (typename json_traits::array_type a)
 
builderset_audience (typename json_traits::string_type aud)
 
builderset_expires_at (const date &d)
 
builderset_not_before (const date &d)
 
builderset_issued_at (const date &d)
 
builderset_id (const typename json_traits::string_type &str)
 
template<typename Algo , typename Encode >
json_traits::string_type sign (const Algo &algo, Encode encode) const
 
template<typename Algo >
json_traits::string_type sign (const Algo &algo) const
 
template<typename Algo , typename Encode >
json_traits::string_type sign (const Algo &algo, Encode encode, std::error_code &ec) const
 
template<typename Algo >
json_traits::string_type sign (const Algo &algo, std::error_code &ec) const
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::builder< json_traits >

Builder class to build and sign a new token Use jwt::create() to get an instance of this class.

+

Member Function Documentation

+ +

◆ set_algorithm()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_algorithm (typename json_traits::string_type str)
+
+inline
+
+ +

Set algorithm claim You normally don't need to do this, as the algorithm is automatically set if you don't change it.

+
Parameters
+ + +
strName of algorithm
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_audience() [1/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_audience (typename json_traits::array_type a)
+
+inline
+
+ +

Set audience claim.

+
Parameters
+ + +
aAudience set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_audience() [2/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_audience (typename json_traits::string_type aud)
+
+inline
+
+ +

Set audience claim.

+
Parameters
+ + +
audSingle audience
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_content_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_content_type (typename json_traits::string_type str)
+
+inline
+
+ +

Set content type claim.

+
Parameters
+ + +
strType to set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_expires_at()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_expires_at (const dated)
+
+inline
+
+ +

Set expires at claim.

+
Parameters
+ + +
dExpires time
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_header_claim() [1/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
builder & jwt::builder< json_traits >::set_header_claim (const typename json_traits::string_type & id,
basic_claim< json_traits > c 
)
+
+inline
+
+ +

Set a header claim.

+
Parameters
+ + + +
idName of the claim
cClaim to add
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_header_claim() [2/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
builder & jwt::builder< json_traits >::set_header_claim (const typename json_traits::string_type & id,
typename json_traits::value_type c 
)
+
+inline
+
+ +

Set a header claim.

+
Parameters
+ + + +
idName of the claim
cClaim to add
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_id (const typename json_traits::string_type & str)
+
+inline
+
+ +

Set id claim.

+
Parameters
+ + +
strID to set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_issued_at()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_issued_at (const dated)
+
+inline
+
+ +

Set issued at claim.

+
Parameters
+ + +
dIssued at time, should be current time
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_issuer()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_issuer (typename json_traits::string_type str)
+
+inline
+
+ +

Set issuer claim.

+
Parameters
+ + +
strIssuer to set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_key_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_key_id (typename json_traits::string_type str)
+
+inline
+
+ +

Set key id claim.

+
Parameters
+ + +
strKey id to set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_not_before()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_not_before (const dated)
+
+inline
+
+ +

Set not before claim.

+
Parameters
+ + +
dFirst valid time
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_payload_claim() [1/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
builder & jwt::builder< json_traits >::set_payload_claim (const typename json_traits::string_type & id,
basic_claim< json_traits > c 
)
+
+inline
+
+ +

Set a payload claim.

+
Parameters
+ + + +
idName of the claim
cClaim to add
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_payload_claim() [2/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
builder & jwt::builder< json_traits >::set_payload_claim (const typename json_traits::string_type & id,
typename json_traits::value_type c 
)
+
+inline
+
+ +

Set a payload claim.

+
Parameters
+ + + +
idName of the claim
cClaim to add
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_subject()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_subject (typename json_traits::string_type str)
+
+inline
+
+ +

Set subject claim.

+
Parameters
+ + +
strSubject to set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ set_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
builder & jwt::builder< json_traits >::set_type (typename json_traits::string_type str)
+
+inline
+
+ +

Set type claim.

+
Parameters
+ + +
strType to set
+
+
+
Returns
*this to allow for method chaining
+ +
+
+ +

◆ sign() [1/4]

+ +
+
+
+template<typename json_traits >
+
+template<typename Algo >
+ + + + + +
+ + + + + + + + +
json_traits::string_type jwt::builder< json_traits >::sign (const Algo & algo) const
+
+inline
+
+ +

Sign token and return result.

+

using the jwt::base functions provided

+
Parameters
+ + +
algoInstance of an algorithm to sign the token with
+
+
+
Returns
Final token as a string
+ +
+
+ +

◆ sign() [2/4]

+ +
+
+
+template<typename json_traits >
+
+template<typename Algo , typename Encode >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
json_traits::string_type jwt::builder< json_traits >::sign (const Algo & algo,
Encode encode 
) const
+
+inline
+
+ +

Sign token and return result.

+
Template Parameters
+ + + +
AlgoCallable method which takes a string_type and return the signed input as a string_type
EncodeCallable method which takes a string_type and base64url safe encodes it, MUST return the result with no padding; trim the result.
+
+
+
Parameters
+ + + +
algoInstance of an algorithm to sign the token with
encodeCallable to transform the serialized json to base64 with no padding
+
+
+
Returns
Final token as a string
+
Note
If the 'alg' header in not set in the token it will be set to algo.name()
+ +
+
+ +

◆ sign() [3/4]

+ +
+
+
+template<typename json_traits >
+
+template<typename Algo , typename Encode >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
json_traits::string_type jwt::builder< json_traits >::sign (const Algo & algo,
Encode encode,
std::error_code & ec 
) const
+
+inline
+
+ +

Sign token and return result.

+
Template Parameters
+ + + +
AlgoCallable method which takes a string_type and return the signed input as a string_type
EncodeCallable method which takes a string_type and base64url safe encodes it, MUST return the result with no padding; trim the result.
+
+
+
Parameters
+ + + + +
algoInstance of an algorithm to sign the token with
encodeCallable to transform the serialized json to base64 with no padding
ecerror_code filled with details on error
+
+
+
Returns
Final token as a string
+
Note
If the 'alg' header in not set in the token it will be set to algo.name()
+ +
+
+ +

◆ sign() [4/4]

+ +
+
+
+template<typename json_traits >
+
+template<typename Algo >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
json_traits::string_type jwt::builder< json_traits >::sign (const Algo & algo,
std::error_code & ec 
) const
+
+inline
+
+ +

Sign token and return result.

+

using the jwt::base functions provided

+
Parameters
+ + + +
algoInstance of an algorithm to sign the token with
ecerror_code filled with details on error
+
+
+
Returns
Final token as a string
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1builder.js b/classjwt_1_1builder.js new file mode 100644 index 000000000..89d90e532 --- /dev/null +++ b/classjwt_1_1builder.js @@ -0,0 +1,23 @@ +var classjwt_1_1builder = +[ + [ "set_algorithm", "classjwt_1_1builder.html#ad6a378577e46c3e12f3242c625f2f623", null ], + [ "set_audience", "classjwt_1_1builder.html#a20358aa8be0179eaa53055aaca8a7f21", null ], + [ "set_audience", "classjwt_1_1builder.html#a1e764196824144648b2b2c490bdc328d", null ], + [ "set_content_type", "classjwt_1_1builder.html#a66d603ae007cb796667b4abd095e06cb", null ], + [ "set_expires_at", "classjwt_1_1builder.html#ae3de63621c8f7b3da8415030225cd67e", null ], + [ "set_header_claim", "classjwt_1_1builder.html#a388749e54d6b89b9da6a75494fb0757e", null ], + [ "set_header_claim", "classjwt_1_1builder.html#ac8f57f1c8d27e6117c508a3619ed4561", null ], + [ "set_id", "classjwt_1_1builder.html#a95583374b3f692fa84833a0e08575665", null ], + [ "set_issued_at", "classjwt_1_1builder.html#a92bfe54290a13c640db23240536993c7", null ], + [ "set_issuer", "classjwt_1_1builder.html#ab6f6203620218fbdec21c5afda7d11fc", null ], + [ "set_key_id", "classjwt_1_1builder.html#ab5bc32a6f2cd89f65e558fd38dae21b0", null ], + [ "set_not_before", "classjwt_1_1builder.html#a82784887801a2fcf4b132b03444a4da7", null ], + [ "set_payload_claim", "classjwt_1_1builder.html#a42e050718f31a284e08142030ca91930", null ], + [ "set_payload_claim", "classjwt_1_1builder.html#a0d63ee3ba1a3bf7047239e8502e565ab", null ], + [ "set_subject", "classjwt_1_1builder.html#a4506fc0956549155546d4c80fa94ae45", null ], + [ "set_type", "classjwt_1_1builder.html#aaa284acea472b10e6a1ee142336a01aa", null ], + [ "sign", "classjwt_1_1builder.html#a18ede7eb3d5502f17f2b7c3cf31d2f1c", null ], + [ "sign", "classjwt_1_1builder.html#a1e594d5e35cbd6b799acb1a247618a40", null ], + [ "sign", "classjwt_1_1builder.html#aff43371359a2f8bc6cabd2c976050233", null ], + [ "sign", "classjwt_1_1builder.html#ad7d743a548c14c91c87450929cda8bb9", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1decoded__jwt-members.html b/classjwt_1_1decoded__jwt-members.html new file mode 100644 index 000000000..054af4f48 --- /dev/null +++ b/classjwt_1_1decoded__jwt-members.html @@ -0,0 +1,158 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::decoded_jwt< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::decoded_jwt< json_traits >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
basic_claim_t typedef (defined in jwt::decoded_jwt< json_traits >)jwt::decoded_jwt< json_traits >
decoded_jwt(const typename json_traits::string_type &token)jwt::decoded_jwt< json_traits >inline
decoded_jwt(const typename json_traits::string_type &token, Decode decode)jwt::decoded_jwt< json_traits >inline
get_algorithm() constjwt::header< json_traits >inline
get_audience() constjwt::payload< json_traits >inline
get_content_type() constjwt::header< json_traits >inline
get_expires_at() constjwt::payload< json_traits >inline
get_header() const noexceptjwt::decoded_jwt< json_traits >inline
get_header_base64() const noexceptjwt::decoded_jwt< json_traits >inline
get_header_claim(const typename json_traits::string_type &name) constjwt::decoded_jwt< json_traits >inline
get_header_json() constjwt::decoded_jwt< json_traits >inline
get_id() constjwt::payload< json_traits >inline
get_issued_at() constjwt::payload< json_traits >inline
get_issuer() constjwt::payload< json_traits >inline
get_key_id() constjwt::header< json_traits >inline
get_not_before() constjwt::payload< json_traits >inline
get_payload() const noexceptjwt::decoded_jwt< json_traits >inline
get_payload_base64() const noexceptjwt::decoded_jwt< json_traits >inline
get_payload_claim(const typename json_traits::string_type &name) constjwt::decoded_jwt< json_traits >inline
get_payload_json() constjwt::decoded_jwt< json_traits >inline
get_signature() const noexceptjwt::decoded_jwt< json_traits >inline
get_signature_base64() const noexceptjwt::decoded_jwt< json_traits >inline
get_subject() constjwt::payload< json_traits >inline
get_token() const noexceptjwt::decoded_jwt< json_traits >inline
get_type() constjwt::header< json_traits >inline
has_algorithm() const noexceptjwt::header< json_traits >inline
has_audience() const noexceptjwt::payload< json_traits >inline
has_content_type() const noexceptjwt::header< json_traits >inline
has_expires_at() const noexceptjwt::payload< json_traits >inline
has_header_claim(const typename json_traits::string_type &name) const noexceptjwt::header< json_traits >inline
has_id() const noexceptjwt::payload< json_traits >inline
has_issued_at() const noexceptjwt::payload< json_traits >inline
has_issuer() const noexceptjwt::payload< json_traits >inline
has_key_id() const noexceptjwt::header< json_traits >inline
has_not_before() const noexceptjwt::payload< json_traits >inline
has_payload_claim(const typename json_traits::string_type &name) const noexceptjwt::payload< json_traits >inline
has_subject() const noexceptjwt::payload< json_traits >inline
has_type() const noexceptjwt::header< json_traits >inline
headerjwt::decoded_jwt< json_traits >protected
header_base64jwt::decoded_jwt< json_traits >protected
header_claims (defined in jwt::header< json_traits >)jwt::header< json_traits >protected
payloadjwt::decoded_jwt< json_traits >protected
payload_base64jwt::decoded_jwt< json_traits >protected
payload_claims (defined in jwt::payload< json_traits >)jwt::payload< json_traits >protected
signaturejwt::decoded_jwt< json_traits >protected
signature_base64jwt::decoded_jwt< json_traits >protected
tokenjwt::decoded_jwt< json_traits >protected
+
+ + + + diff --git a/classjwt_1_1decoded__jwt.html b/classjwt_1_1decoded__jwt.html new file mode 100644 index 000000000..ce869697f --- /dev/null +++ b/classjwt_1_1decoded__jwt.html @@ -0,0 +1,722 @@ + + + + + + + +JWT-CPP: jwt::decoded_jwt< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::decoded_jwt< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+
+Inheritance diagram for jwt::decoded_jwt< json_traits >:
+
+
+
[legend]
+ + + + + + + + + + +

+Public Types

+using basic_claim_t = basic_claim< json_traits >
 
- Public Types inherited from jwt::header< json_traits >
+using basic_claim_t = basic_claim< json_traits >
 
- Public Types inherited from jwt::payload< json_traits >
+using basic_claim_t = basic_claim< json_traits >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

JWT_CLAIM_EXPLICIT decoded_jwt (const typename json_traits::string_type &token)
 
template<typename Decode >
 decoded_jwt (const typename json_traits::string_type &token, Decode decode)
 
const json_traits::string_type & get_token () const noexcept
 
const json_traits::string_type & get_header () const noexcept
 
const json_traits::string_type & get_payload () const noexcept
 
const json_traits::string_type & get_signature () const noexcept
 
const json_traits::string_type & get_header_base64 () const noexcept
 
const json_traits::string_type & get_payload_base64 () const noexcept
 
const json_traits::string_type & get_signature_base64 () const noexcept
 
json_traits::object_type get_payload_json () const
 
json_traits::object_type get_header_json () const
 
basic_claim_t get_payload_claim (const typename json_traits::string_type &name) const
 
basic_claim_t get_header_claim (const typename json_traits::string_type &name) const
 
- Public Member Functions inherited from jwt::header< json_traits >
bool has_algorithm () const noexcept
 
bool has_type () const noexcept
 
bool has_content_type () const noexcept
 
bool has_key_id () const noexcept
 
json_traits::string_type get_algorithm () const
 
json_traits::string_type get_type () const
 
json_traits::string_type get_content_type () const
 
json_traits::string_type get_key_id () const
 
bool has_header_claim (const typename json_traits::string_type &name) const noexcept
 
basic_claim_t get_header_claim (const typename json_traits::string_type &name) const
 
- Public Member Functions inherited from jwt::payload< json_traits >
bool has_issuer () const noexcept
 
bool has_subject () const noexcept
 
bool has_audience () const noexcept
 
bool has_expires_at () const noexcept
 
bool has_not_before () const noexcept
 
bool has_issued_at () const noexcept
 
bool has_id () const noexcept
 
json_traits::string_type get_issuer () const
 
json_traits::string_type get_subject () const
 
basic_claim_t::set_t get_audience () const
 
date get_expires_at () const
 
date get_not_before () const
 
date get_issued_at () const
 
json_traits::string_type get_id () const
 
bool has_payload_claim (const typename json_traits::string_type &name) const noexcept
 
basic_claim_t get_payload_claim (const typename json_traits::string_type &name) const
 
+ + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

+json_traits::string_type token
 
+json_traits::string_type header
 
+json_traits::string_type header_base64
 
+json_traits::string_type payload
 
+json_traits::string_type payload_base64
 
+json_traits::string_type signature
 
+json_traits::string_type signature_base64
 
- Protected Attributes inherited from jwt::header< json_traits >
+details::map_of_claims< json_traits > header_claims
 
- Protected Attributes inherited from jwt::payload< json_traits >
+details::map_of_claims< json_traits > payload_claims
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::decoded_jwt< json_traits >

Class containing all information about a decoded token.

+

Constructor & Destructor Documentation

+ +

◆ decoded_jwt() [1/2]

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
JWT_CLAIM_EXPLICIT jwt::decoded_jwt< json_traits >::decoded_jwt (const typename json_traits::string_type & token)
+
+inline
+
+ +

Parses a given token.

+
Note
Decodes using the jwt::base64url which supports an std::string
+
Parameters
+ + +
tokenThe token to parse
+
+
+
Exceptions
+ + + +
std::invalid_argumentToken is not in correct format
std::runtime_errorBase64 decoding failed or invalid json
+
+
+ +
+
+ +

◆ decoded_jwt() [2/2]

+ +
+
+
+template<typename json_traits >
+
+template<typename Decode >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
jwt::decoded_jwt< json_traits >::decoded_jwt (const typename json_traits::string_type & token,
Decode decode 
)
+
+inline
+
+ +

Parses a given token.

+
Template Parameters
+ + +
Decodeis callabled, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64url decode and return the results.
+
+
+
Parameters
+ + + +
tokenThe token to parse
decodeThe function to decode the token
+
+
+
Exceptions
+ + + +
std::invalid_argumentToken is not in correct format
std::runtime_errorBase64 decoding failed or invalid json
+
+
+ +
+
+

Member Function Documentation

+ +

◆ get_header()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_header () const
+
+inlinenoexcept
+
+ +

Get header part as json string.

+
Returns
header part after base64 decoding
+ +
+
+ +

◆ get_header_base64()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_header_base64 () const
+
+inlinenoexcept
+
+ +

Get header part as base64 string.

+
Returns
header part before base64 decoding
+ +
+
+ +

◆ get_header_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
basic_claim_t jwt::decoded_jwt< json_traits >::get_header_claim (const typename json_traits::string_type & name) const
+
+inline
+
+ +

Get a header claim by name.

+
Parameters
+ + +
namethe name of the desired claim
+
+
+
Returns
Requested claim
+
Exceptions
+ + +
jwt::error::claim_not_present_exceptionif the claim was not present
+
+
+ +
+
+ +

◆ get_header_json()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::object_type jwt::decoded_jwt< json_traits >::get_header_json () const
+
+inline
+
+ +

Get all header as JSON object.

+
Returns
map of claims
+ +
+
+ +

◆ get_payload()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_payload () const
+
+inlinenoexcept
+
+ +

Get payload part as json string.

+
Returns
payload part after base64 decoding
+ +
+
+ +

◆ get_payload_base64()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_payload_base64 () const
+
+inlinenoexcept
+
+ +

Get payload part as base64 string.

+
Returns
payload part before base64 decoding
+ +
+
+ +

◆ get_payload_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
basic_claim_t jwt::decoded_jwt< json_traits >::get_payload_claim (const typename json_traits::string_type & name) const
+
+inline
+
+ +

Get a payload claim by name.

+
Parameters
+ + +
namethe name of the desired claim
+
+
+
Returns
Requested claim
+
Exceptions
+ + +
jwt::error::claim_not_present_exceptionif the claim was not present
+
+
+ +
+
+ +

◆ get_payload_json()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::object_type jwt::decoded_jwt< json_traits >::get_payload_json () const
+
+inline
+
+ +

Get all payload as JSON object.

+
Returns
map of claims
+ +
+
+ +

◆ get_signature()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_signature () const
+
+inlinenoexcept
+
+ +

Get signature part as json string.

+
Returns
signature part after base64 decoding
+ +
+
+ +

◆ get_signature_base64()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_signature_base64 () const
+
+inlinenoexcept
+
+ +

Get signature part as base64 string.

+
Returns
signature part before base64 decoding
+ +
+
+ +

◆ get_token()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
const json_traits::string_type & jwt::decoded_jwt< json_traits >::get_token () const
+
+inlinenoexcept
+
+ +

Get token string, as passed to constructor.

+
Returns
token as passed to constructor
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1decoded__jwt.js b/classjwt_1_1decoded__jwt.js new file mode 100644 index 000000000..5b47cc6be --- /dev/null +++ b/classjwt_1_1decoded__jwt.js @@ -0,0 +1,23 @@ +var classjwt_1_1decoded__jwt = +[ + [ "decoded_jwt", "classjwt_1_1decoded__jwt.html#a74547d7eee095f9bb440b572da5edd39", null ], + [ "decoded_jwt", "classjwt_1_1decoded__jwt.html#a8517ef5dd3f099223ec4477aff546ac8", null ], + [ "get_header", "classjwt_1_1decoded__jwt.html#a00a77aedba4b77d9ee0a6f32307c2f92", null ], + [ "get_header_base64", "classjwt_1_1decoded__jwt.html#af55156d334c665ad0b11cb6881d242c2", null ], + [ "get_header_claim", "classjwt_1_1decoded__jwt.html#a807f00ca32b360b69b4d8555f7cb7795", null ], + [ "get_header_json", "classjwt_1_1decoded__jwt.html#acc90b0d668345b0f3c41d382fe087a08", null ], + [ "get_payload", "classjwt_1_1decoded__jwt.html#adb1dc325d49e01838e78e9cd809aaa2b", null ], + [ "get_payload_base64", "classjwt_1_1decoded__jwt.html#aa137fa9dfcf54444901618bfa0fc2ac4", null ], + [ "get_payload_claim", "classjwt_1_1decoded__jwt.html#a6a86e22661351e17f8880d6b4801ea9a", null ], + [ "get_payload_json", "classjwt_1_1decoded__jwt.html#a8a4dea7cc8187e496feaf3112a6de419", null ], + [ "get_signature", "classjwt_1_1decoded__jwt.html#a715bf6407901d555442ba79e68e96ddb", null ], + [ "get_signature_base64", "classjwt_1_1decoded__jwt.html#a0210f5688a6b0327b781fbd3d6e124f7", null ], + [ "get_token", "classjwt_1_1decoded__jwt.html#ac6dce886f27c3a5afadea6ae991063fb", null ], + [ "header", "classjwt_1_1decoded__jwt.html#a1029396a3c9d1a6a9946ab000546b58f", null ], + [ "header_base64", "classjwt_1_1decoded__jwt.html#a1b5eb0489af7f8158779b59d03bc0431", null ], + [ "payload", "classjwt_1_1decoded__jwt.html#af9b33ca8b170b91f255ff7afe9fbf3c1", null ], + [ "payload_base64", "classjwt_1_1decoded__jwt.html#af9013de47f7e628c23b80f55d84b03d1", null ], + [ "signature", "classjwt_1_1decoded__jwt.html#a029ac1ee047b99ac75265755a3107ccb", null ], + [ "signature_base64", "classjwt_1_1decoded__jwt.html#a8ccaba87d81df84591da392cb8702f2e", null ], + [ "token", "classjwt_1_1decoded__jwt.html#a1f564f04da292da715126b57fa4c735e", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1decoded__jwt__inherit__graph.map b/classjwt_1_1decoded__jwt__inherit__graph.map new file mode 100644 index 000000000..11adcc3c6 --- /dev/null +++ b/classjwt_1_1decoded__jwt__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classjwt_1_1decoded__jwt__inherit__graph.md5 b/classjwt_1_1decoded__jwt__inherit__graph.md5 new file mode 100644 index 000000000..6047227da --- /dev/null +++ b/classjwt_1_1decoded__jwt__inherit__graph.md5 @@ -0,0 +1 @@ +71e88fa9ff9b745bf526924f834a45e0 \ No newline at end of file diff --git a/classjwt_1_1decoded__jwt__inherit__graph.svg b/classjwt_1_1decoded__jwt__inherit__graph.svg new file mode 100644 index 000000000..47024fda8 --- /dev/null +++ b/classjwt_1_1decoded__jwt__inherit__graph.svg @@ -0,0 +1,59 @@ + + + + + + +jwt::decoded_jwt< json_traits > + + +Node1 + + +jwt::decoded_jwt< json +_traits > + + + + + +Node2 + + +jwt::header< json_traits > + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +jwt::payload< json +_traits > + + + + + +Node3->Node1 + + + + + + + + diff --git a/classjwt_1_1header-members.html b/classjwt_1_1header-members.html new file mode 100644 index 000000000..a38fa8a7c --- /dev/null +++ b/classjwt_1_1header-members.html @@ -0,0 +1,123 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::header< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::header< json_traits >, including all inherited members.

+ + + + + + + + + + + + + +
basic_claim_t typedef (defined in jwt::header< json_traits >)jwt::header< json_traits >
get_algorithm() constjwt::header< json_traits >inline
get_content_type() constjwt::header< json_traits >inline
get_header_claim(const typename json_traits::string_type &name) constjwt::header< json_traits >inline
get_key_id() constjwt::header< json_traits >inline
get_type() constjwt::header< json_traits >inline
has_algorithm() const noexceptjwt::header< json_traits >inline
has_content_type() const noexceptjwt::header< json_traits >inline
has_header_claim(const typename json_traits::string_type &name) const noexceptjwt::header< json_traits >inline
has_key_id() const noexceptjwt::header< json_traits >inline
has_type() const noexceptjwt::header< json_traits >inline
header_claims (defined in jwt::header< json_traits >)jwt::header< json_traits >protected
+
+ + + + diff --git a/classjwt_1_1header.html b/classjwt_1_1header.html new file mode 100644 index 000000000..d2d0b9389 --- /dev/null +++ b/classjwt_1_1header.html @@ -0,0 +1,501 @@ + + + + + + + +JWT-CPP: jwt::header< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::header< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+
+Inheritance diagram for jwt::header< json_traits >:
+
+
+
[legend]
+ + + + +

+Public Types

+using basic_claim_t = basic_claim< json_traits >
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool has_algorithm () const noexcept
 
bool has_type () const noexcept
 
bool has_content_type () const noexcept
 
bool has_key_id () const noexcept
 
json_traits::string_type get_algorithm () const
 
json_traits::string_type get_type () const
 
json_traits::string_type get_content_type () const
 
json_traits::string_type get_key_id () const
 
bool has_header_claim (const typename json_traits::string_type &name) const noexcept
 
basic_claim_t get_header_claim (const typename json_traits::string_type &name) const
 
+ + + +

+Protected Attributes

+details::map_of_claims< json_traits > header_claims
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::header< json_traits >

Base class that represents a token header.

+

Contains Convenience accessors for common claims.

+

Member Function Documentation

+ +

◆ get_algorithm()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::header< json_traits >::get_algorithm () const
+
+inline
+
+ +

Get algorithm claim.

+
Returns
algorithm as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_content_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::header< json_traits >::get_content_type () const
+
+inline
+
+ +

Get content type claim.

+
Returns
content type as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_header_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
basic_claim_t jwt::header< json_traits >::get_header_claim (const typename json_traits::string_type & name) const
+
+inline
+
+ +

Get header claim.

+
Returns
Requested claim
+
Exceptions
+ + +
std::runtime_errorIf claim was not present
+
+
+ +
+
+ +

◆ get_key_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::header< json_traits >::get_key_id () const
+
+inline
+
+ +

Get key id claim.

+
Returns
key id as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::header< json_traits >::get_type () const
+
+inline
+
+ +

Get type claim.

+
Returns
type as a string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ has_algorithm()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::header< json_traits >::has_algorithm () const
+
+inlinenoexcept
+
+ +

Check if algorithm is present ("alg")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_content_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::header< json_traits >::has_content_type () const
+
+inlinenoexcept
+
+ +

Check if content type is present ("cty")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_header_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
bool jwt::header< json_traits >::has_header_claim (const typename json_traits::string_type & name) const
+
+inlinenoexcept
+
+ +

Check if a header claim is present.

+
Returns
true if claim was present, false otherwise
+ +
+
+ +

◆ has_key_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::header< json_traits >::has_key_id () const
+
+inlinenoexcept
+
+ +

Check if key id is present ("kid")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::header< json_traits >::has_type () const
+
+inlinenoexcept
+
+ +

Check if type is present ("typ")

+
Returns
true if present, false otherwise
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1header.js b/classjwt_1_1header.js new file mode 100644 index 000000000..ca3454bbe --- /dev/null +++ b/classjwt_1_1header.js @@ -0,0 +1,13 @@ +var classjwt_1_1header = +[ + [ "get_algorithm", "classjwt_1_1header.html#a8ac7e7c26859e172a3f0f22ded7b307f", null ], + [ "get_content_type", "classjwt_1_1header.html#ae2cb8d327ed651286af732663ef23c44", null ], + [ "get_header_claim", "classjwt_1_1header.html#ad941b52adacc083b2b895fbfa23f938b", null ], + [ "get_key_id", "classjwt_1_1header.html#ad9e1ae6bf5aecf92d533028bc6f9b973", null ], + [ "get_type", "classjwt_1_1header.html#a0bed2e5b52abbefda5317a2712c08e8a", null ], + [ "has_algorithm", "classjwt_1_1header.html#a59cc46de655365a8c1d99c60828051c0", null ], + [ "has_content_type", "classjwt_1_1header.html#a9b9e6f2fd191afd8a167591818ad26da", null ], + [ "has_header_claim", "classjwt_1_1header.html#a2d5ee46b83e06da380bcbe20c5362b59", null ], + [ "has_key_id", "classjwt_1_1header.html#af8fb4b77c7c066bb4a6ffefc0d459000", null ], + [ "has_type", "classjwt_1_1header.html#a6904ba9440815ca602f5a819224333b6", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1header__inherit__graph.map b/classjwt_1_1header__inherit__graph.map new file mode 100644 index 000000000..baa68f482 --- /dev/null +++ b/classjwt_1_1header__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classjwt_1_1header__inherit__graph.md5 b/classjwt_1_1header__inherit__graph.md5 new file mode 100644 index 000000000..1d55101bc --- /dev/null +++ b/classjwt_1_1header__inherit__graph.md5 @@ -0,0 +1 @@ +cbd866713ff8c3dbe9ed891a265297f3 \ No newline at end of file diff --git a/classjwt_1_1header__inherit__graph.svg b/classjwt_1_1header__inherit__graph.svg new file mode 100644 index 000000000..6d06c3583 --- /dev/null +++ b/classjwt_1_1header__inherit__graph.svg @@ -0,0 +1,40 @@ + + + + + + +jwt::header< json_traits > + + +Node1 + + +jwt::header< json_traits > + + + + + +Node2 + + +jwt::decoded_jwt< json +_traits > + + + + + +Node1->Node2 + + + + + + + + diff --git a/classjwt_1_1helper_1_1evp__pkey__handle-members.html b/classjwt_1_1helper_1_1evp__pkey__handle-members.html new file mode 100644 index 000000000..7603e909b --- /dev/null +++ b/classjwt_1_1helper_1_1evp__pkey__handle-members.html @@ -0,0 +1,122 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::helper::evp_pkey_handle Member List
+
+
+ +

This is the complete list of members for jwt::helper::evp_pkey_handle, including all inherited members.

+ + + + + + + + + + + + +
evp_pkey_handle() noexcept=default (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handle
evp_pkey_handle(EVP_PKEY *key) noexceptjwt::helper::evp_pkey_handleinlineexplicit
evp_pkey_handle(const evp_pkey_handle &other) (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
evp_pkey_handle(evp_pkey_handle &&other) noexcept (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
get() const noexcept (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
operator bool() const noexcept (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinlineexplicit
operator!() const noexcept (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
operator=(const evp_pkey_handle &other) (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
operator=(evp_pkey_handle &&other) noexcept (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
operator=(EVP_PKEY *key) (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
~evp_pkey_handle() noexcept (defined in jwt::helper::evp_pkey_handle)jwt::helper::evp_pkey_handleinline
+
+ + + + diff --git a/classjwt_1_1helper_1_1evp__pkey__handle.html b/classjwt_1_1helper_1_1evp__pkey__handle.html new file mode 100644 index 000000000..7e7bc5fcd --- /dev/null +++ b/classjwt_1_1helper_1_1evp__pkey__handle.html @@ -0,0 +1,185 @@ + + + + + + + +JWT-CPP: jwt::helper::evp_pkey_handle Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::helper::evp_pkey_handle Class Reference
+
+
+ +

#include <jwt.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

constexpr evp_pkey_handle (EVP_PKEY *key) noexcept
 
evp_pkey_handle (const evp_pkey_handle &other)
 
evp_pkey_handle (evp_pkey_handle &&other) noexcept
 
+evp_pkey_handleoperator= (const evp_pkey_handle &other)
 
+evp_pkey_handleoperator= (evp_pkey_handle &&other) noexcept
 
+evp_pkey_handleoperator= (EVP_PKEY *key)
 
+EVP_PKEY * get () const noexcept
 
+bool operator! () const noexcept
 
operator bool () const noexcept
 
+

Detailed Description

+

Handle class for EVP_PKEY structures.

+

Starting from OpenSSL 1.1.0, EVP_PKEY has internal reference counting. This handle class allows jwt-cpp to leverage that and thus safe an allocation for the control block in std::shared_ptr. The handle uses shared_ptr as a fallback on older versions. The behaviour should be identical between both.

+

Constructor & Destructor Documentation

+ +

◆ evp_pkey_handle()

+ +
+
+ + + + + +
+ + + + + + + + +
constexpr jwt::helper::evp_pkey_handle::evp_pkey_handle (EVP_PKEY * key)
+
+inlineexplicitconstexprnoexcept
+
+ +

Construct a new handle.

+

The handle takes ownership of the key.

Parameters
+ + +
keyThe key to store
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1helper_1_1evp__pkey__handle.js b/classjwt_1_1helper_1_1evp__pkey__handle.js new file mode 100644 index 000000000..d13c2fc42 --- /dev/null +++ b/classjwt_1_1helper_1_1evp__pkey__handle.js @@ -0,0 +1,4 @@ +var classjwt_1_1helper_1_1evp__pkey__handle = +[ + [ "evp_pkey_handle", "classjwt_1_1helper_1_1evp__pkey__handle.html#a9948effb83d8dcd17447eff28c852f6f", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1jwk-members.html b/classjwt_1_1jwk-members.html new file mode 100644 index 000000000..162ec666d --- /dev/null +++ b/classjwt_1_1jwk-members.html @@ -0,0 +1,138 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::jwk< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::jwk< json_traits >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
empty() const noexcept (defined in jwt::jwk< json_traits >)jwt::jwk< json_traits >inline
get_algorithm() constjwt::jwk< json_traits >inline
get_claims() constjwt::jwk< json_traits >inline
get_curve() constjwt::jwk< json_traits >inline
get_jwk_claim(const typename json_traits::string_type &name) constjwt::jwk< json_traits >inline
get_key_id() constjwt::jwk< json_traits >inline
get_key_operations() constjwt::jwk< json_traits >inline
get_key_type() constjwt::jwk< json_traits >inline
get_use() constjwt::jwk< json_traits >inline
get_x5c() constjwt::jwk< json_traits >inline
get_x5c_key_value() constjwt::jwk< json_traits >inline
get_x5t() constjwt::jwk< json_traits >inline
get_x5t_sha256() constjwt::jwk< json_traits >inline
get_x5u() constjwt::jwk< json_traits >inline
has_algorithm() const noexceptjwt::jwk< json_traits >inline
has_curve() const noexceptjwt::jwk< json_traits >inline
has_jwk_claim(const typename json_traits::string_type &name) const noexceptjwt::jwk< json_traits >inline
has_key_id() const noexceptjwt::jwk< json_traits >inline
has_key_operations() const noexceptjwt::jwk< json_traits >inline
has_key_type() const noexceptjwt::jwk< json_traits >inline
has_use() const noexceptjwt::jwk< json_traits >inline
has_x5c() const noexceptjwt::jwk< json_traits >inline
has_x5t() const noexceptjwt::jwk< json_traits >inline
has_x5t_sha256() const noexceptjwt::jwk< json_traits >inline
has_x5u() const noexceptjwt::jwk< json_traits >inline
jwk(const typename json_traits::string_type &str) (defined in jwt::jwk< json_traits >)jwt::jwk< json_traits >inline
jwk(const typename json_traits::value_type &json) (defined in jwt::jwk< json_traits >)jwt::jwk< json_traits >inline
+
+ + + + diff --git a/classjwt_1_1jwk.html b/classjwt_1_1jwk.html new file mode 100644 index 000000000..63ee14c14 --- /dev/null +++ b/classjwt_1_1jwk.html @@ -0,0 +1,990 @@ + + + + + + + +JWT-CPP: jwt::jwk< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::jwk< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+JWT_CLAIM_EXPLICIT jwk (const typename json_traits::string_type &str)
 
+JWT_CLAIM_EXPLICIT jwk (const typename json_traits::value_type &json)
 
json_traits::string_type get_key_type () const
 
json_traits::string_type get_use () const
 
basic_claim_t::set_t get_key_operations () const
 
json_traits::string_type get_algorithm () const
 
json_traits::string_type get_key_id () const
 
json_traits::string_type get_curve () const
 
json_traits::array_type get_x5c () const
 
json_traits::string_type get_x5u () const
 
json_traits::string_type get_x5t () const
 
json_traits::string_type get_x5t_sha256 () const
 
json_traits::string_type get_x5c_key_value () const
 
bool has_key_type () const noexcept
 
bool has_use () const noexcept
 
bool has_key_operations () const noexcept
 
bool has_algorithm () const noexcept
 
bool has_curve () const noexcept
 
bool has_key_id () const noexcept
 
bool has_x5u () const noexcept
 
bool has_x5c () const noexcept
 
bool has_x5t () const noexcept
 
bool has_x5t_sha256 () const noexcept
 
bool has_jwk_claim (const typename json_traits::string_type &name) const noexcept
 
basic_claim_t get_jwk_claim (const typename json_traits::string_type &name) const
 
+bool empty () const noexcept
 
json_traits::object_type get_claims () const
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::jwk< json_traits >

JSON Web Key.

+

https://tools.ietf.org/html/rfc7517

+

A JSON object that represents a cryptographic key. The members of the object represent properties of the key, including its value.

+

Member Function Documentation

+ +

◆ get_algorithm()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_algorithm () const
+
+inline
+
+ +

Get algorithm claim.

+
Returns
algorithm as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_claims()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::object_type jwt::jwk< json_traits >::get_claims () const
+
+inline
+
+ +

Get all jwk claims.

+
Returns
Map of claims
+ +
+
+ +

◆ get_curve()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_curve () const
+
+inline
+
+ +

Get curve claim.

+

https://www.rfc-editor.org/rfc/rfc7518.html#section-6.2.1.1 https://www.iana.org/assignments/jose/jose.xhtml#table-web-key-elliptic-curve

+
Returns
curve as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_jwk_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
basic_claim_t jwt::jwk< json_traits >::get_jwk_claim (const typename json_traits::string_type & name) const
+
+inline
+
+ +

Get jwks claim.

+
Returns
Requested claim
+
Exceptions
+ + +
std::runtime_errorIf claim was not present
+
+
+ +
+
+ +

◆ get_key_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_key_id () const
+
+inline
+
+ +

Get key id claim.

+
Returns
key id as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_key_operations()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
basic_claim_t::set_t jwt::jwk< json_traits >::get_key_operations () const
+
+inline
+
+ +

Get key operation types claim.

+
Returns
key operation types as a set of strings
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_key_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_key_type () const
+
+inline
+
+ +

Get key type claim.

+

This returns the general type (e.g. RSA or EC), not a specific algorithm value.

Returns
key type as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_use()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_use () const
+
+inline
+
+ +

Get public key usage claim.

+
Returns
usage parameter as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_x5c()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::array_type jwt::jwk< json_traits >::get_x5c () const
+
+inline
+
+ +

Get x5c claim.

+
Returns
x5c as an array
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a array (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_x5c_key_value()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_x5c_key_value () const
+
+inline
+
+ +

Get x5c claim as a string.

+
Returns
x5c as an string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_x5t()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_x5t () const
+
+inline
+
+ +

Get X509 thumbprint claim.

+
Returns
x5t as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_x5t_sha256()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_x5t_sha256 () const
+
+inline
+
+ +

Get X509 SHA256 thumbprint claim.

+
Returns
x5t::S256 as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_x5u()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::jwk< json_traits >::get_x5u () const
+
+inline
+
+ +

Get X509 URL claim.

+
Returns
x5u as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ has_algorithm()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_algorithm () const
+
+inlinenoexcept
+
+ +

Check if algorithm is present ("alg")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_curve()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_curve () const
+
+inlinenoexcept
+
+ +

Check if curve is present ("crv")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_jwk_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
bool jwt::jwk< json_traits >::has_jwk_claim (const typename json_traits::string_type & name) const
+
+inlinenoexcept
+
+ +

Check if a jwks claim is present.

+
Returns
true if claim was present, false otherwise
+ +
+
+ +

◆ has_key_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_key_id () const
+
+inlinenoexcept
+
+ +

Check if key id is present ("kid")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_key_operations()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_key_operations () const
+
+inlinenoexcept
+
+ +

Check if a key operations parameter is present ("key_ops")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_key_type()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_key_type () const
+
+inlinenoexcept
+
+ +

Check if a key type is present ("kty")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_use()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_use () const
+
+inlinenoexcept
+
+ +

Check if a public key usage indication is present ("use")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_x5c()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_x5c () const
+
+inlinenoexcept
+
+ +

Check if X509 Chain is present ("x5c")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_x5t()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_x5t () const
+
+inlinenoexcept
+
+ +

Check if a X509 thumbprint is present ("x5t")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_x5t_sha256()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_x5t_sha256 () const
+
+inlinenoexcept
+
+ +

Check if a X509 SHA256 thumbprint is present ("x5t#S256")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_x5u()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::jwk< json_traits >::has_x5u () const
+
+inlinenoexcept
+
+ +

Check if X509 URL is present ("x5u")

+
Returns
true if present, false otherwise
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1jwk.js b/classjwt_1_1jwk.js new file mode 100644 index 000000000..dd703697f --- /dev/null +++ b/classjwt_1_1jwk.js @@ -0,0 +1,27 @@ +var classjwt_1_1jwk = +[ + [ "get_algorithm", "classjwt_1_1jwk.html#a50b2c64b52a7028acfad1e4ac64c8e66", null ], + [ "get_claims", "classjwt_1_1jwk.html#a5628cd17ea929a33e6d40eef5b073d0d", null ], + [ "get_curve", "classjwt_1_1jwk.html#a09d3afa0dcca94aee47c8cb9eb42dc9f", null ], + [ "get_jwk_claim", "classjwt_1_1jwk.html#af814feaeb94f0394d14341e4e7024ebb", null ], + [ "get_key_id", "classjwt_1_1jwk.html#a6ff417d9e099f70183e5b065130f420f", null ], + [ "get_key_operations", "classjwt_1_1jwk.html#ae5f0bb1bc9728e721c62e7aa0ab1ce5a", null ], + [ "get_key_type", "classjwt_1_1jwk.html#afcfb7ade4ffa503db7c5b92280b49514", null ], + [ "get_use", "classjwt_1_1jwk.html#a8581a05f8628ce98a898e36fb30649df", null ], + [ "get_x5c", "classjwt_1_1jwk.html#a50c5eb1410fc69363527329efd58d09c", null ], + [ "get_x5c_key_value", "classjwt_1_1jwk.html#a5e3675060ca4b75d675ed4a301abac95", null ], + [ "get_x5t", "classjwt_1_1jwk.html#a5a1e7e2940e23e2e2a4f64e1db9d5f38", null ], + [ "get_x5t_sha256", "classjwt_1_1jwk.html#a6f49dc9f0e73b9f34044ee56b49c8baa", null ], + [ "get_x5u", "classjwt_1_1jwk.html#af9e5af688ecdc3c88579ba5bfcfa4f17", null ], + [ "has_algorithm", "classjwt_1_1jwk.html#a7791ca410ed90a89a4325b990efdb1bd", null ], + [ "has_curve", "classjwt_1_1jwk.html#ae97c9750a6a65d7b6a5cc16a3e3d5c6b", null ], + [ "has_jwk_claim", "classjwt_1_1jwk.html#ac7776dfc51fca7a44ffdf80e1c9e699b", null ], + [ "has_key_id", "classjwt_1_1jwk.html#a8fd4f19ffb59645a70182aa53ee773d8", null ], + [ "has_key_operations", "classjwt_1_1jwk.html#aa774d9e337af22dbb482efe480725593", null ], + [ "has_key_type", "classjwt_1_1jwk.html#af2955f1903c7c25c07390b8734b1278b", null ], + [ "has_use", "classjwt_1_1jwk.html#aab3976b190dfb7753a67525a1aacf3e9", null ], + [ "has_x5c", "classjwt_1_1jwk.html#a04b9237225866306df0b06d0be1c49df", null ], + [ "has_x5t", "classjwt_1_1jwk.html#aad5f938603c9354d0ef0316dcc55c9e5", null ], + [ "has_x5t_sha256", "classjwt_1_1jwk.html#a1c7acee846b84aa4c26094b8f71739c6", null ], + [ "has_x5u", "classjwt_1_1jwk.html#a92093f86bd99995f21f3efdde09e1370", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1jwks-members.html b/classjwt_1_1jwks-members.html new file mode 100644 index 000000000..7824550d3 --- /dev/null +++ b/classjwt_1_1jwks-members.html @@ -0,0 +1,124 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::jwks< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::jwks< json_traits >, including all inherited members.

+ + + + + + + + + + + + + + +
begin() (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
begin() const (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
cbegin() const (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
cend() const (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
const_iterator typedef (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >
end() (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
end() const (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
get_jwk(const typename json_traits::string_type &key_id) constjwt::jwks< json_traits >inline
has_jwk(const typename json_traits::string_type &key_id) const noexceptjwt::jwks< json_traits >inline
iterator typedef (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >
jwk_t typedef (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >
jwks(const typename json_traits::string_type &str) (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >inline
jwt_vector_t typedef (defined in jwt::jwks< json_traits >)jwt::jwks< json_traits >
+
+ + + + diff --git a/classjwt_1_1jwks.html b/classjwt_1_1jwks.html new file mode 100644 index 000000000..656152a1a --- /dev/null +++ b/classjwt_1_1jwks.html @@ -0,0 +1,237 @@ + + + + + + + +JWT-CPP: jwt::jwks< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::jwks< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+ + + + + + + + + + +

+Public Types

+using jwk_t = jwk< json_traits >
 
+using jwt_vector_t = std::vector< jwk_t >
 
+using iterator = typename jwt_vector_t::iterator
 
+using const_iterator = typename jwt_vector_t::const_iterator
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

+JWT_CLAIM_EXPLICIT jwks (const typename json_traits::string_type &str)
 
+iterator begin ()
 
+iterator end ()
 
+const_iterator cbegin () const
 
+const_iterator cend () const
 
+const_iterator begin () const
 
+const_iterator end () const
 
bool has_jwk (const typename json_traits::string_type &key_id) const noexcept
 
jwk_t get_jwk (const typename json_traits::string_type &key_id) const
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::jwks< json_traits >

JWK Set.

+

https://tools.ietf.org/html/rfc7517

+

A JSON object that represents a set of JWKs. The JSON object MUST have a "keys" member, which is an array of JWKs.

+

This container takes a JWKs and simplifies it to a vector of JWKs

+

Member Function Documentation

+ +

◆ get_jwk()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
jwk_t jwt::jwks< json_traits >::get_jwk (const typename json_traits::string_type & key_id) const
+
+inline
+
+ +

Get jwk.

+
Returns
Requested jwk by key_id
+
Exceptions
+ + +
std::runtime_errorIf jwk was not present
+
+
+ +
+
+ +

◆ has_jwk()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
bool jwt::jwks< json_traits >::has_jwk (const typename json_traits::string_type & key_id) const
+
+inlinenoexcept
+
+ +

Check if a jwk with the kid is present.

+
Returns
true if jwk was present, false otherwise
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1jwks.js b/classjwt_1_1jwks.js new file mode 100644 index 000000000..33c4be4eb --- /dev/null +++ b/classjwt_1_1jwks.js @@ -0,0 +1,5 @@ +var classjwt_1_1jwks = +[ + [ "get_jwk", "classjwt_1_1jwks.html#ab76e769ff422c308ee17ead4ea8d8d95", null ], + [ "has_jwk", "classjwt_1_1jwks.html#aedd6c046ef7c08fcf8ab71158d3bafc5", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1payload-members.html b/classjwt_1_1payload-members.html new file mode 100644 index 000000000..305041855 --- /dev/null +++ b/classjwt_1_1payload-members.html @@ -0,0 +1,129 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::payload< json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::payload< json_traits >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
basic_claim_t typedef (defined in jwt::payload< json_traits >)jwt::payload< json_traits >
get_audience() constjwt::payload< json_traits >inline
get_expires_at() constjwt::payload< json_traits >inline
get_id() constjwt::payload< json_traits >inline
get_issued_at() constjwt::payload< json_traits >inline
get_issuer() constjwt::payload< json_traits >inline
get_not_before() constjwt::payload< json_traits >inline
get_payload_claim(const typename json_traits::string_type &name) constjwt::payload< json_traits >inline
get_subject() constjwt::payload< json_traits >inline
has_audience() const noexceptjwt::payload< json_traits >inline
has_expires_at() const noexceptjwt::payload< json_traits >inline
has_id() const noexceptjwt::payload< json_traits >inline
has_issued_at() const noexceptjwt::payload< json_traits >inline
has_issuer() const noexceptjwt::payload< json_traits >inline
has_not_before() const noexceptjwt::payload< json_traits >inline
has_payload_claim(const typename json_traits::string_type &name) const noexceptjwt::payload< json_traits >inline
has_subject() const noexceptjwt::payload< json_traits >inline
payload_claims (defined in jwt::payload< json_traits >)jwt::payload< json_traits >protected
+
+ + + + diff --git a/classjwt_1_1payload.html b/classjwt_1_1payload.html new file mode 100644 index 000000000..38460ff50 --- /dev/null +++ b/classjwt_1_1payload.html @@ -0,0 +1,714 @@ + + + + + + + +JWT-CPP: jwt::payload< json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::payload< json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+
+Inheritance diagram for jwt::payload< json_traits >:
+
+
+
[legend]
+ + + + +

+Public Types

+using basic_claim_t = basic_claim< json_traits >
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool has_issuer () const noexcept
 
bool has_subject () const noexcept
 
bool has_audience () const noexcept
 
bool has_expires_at () const noexcept
 
bool has_not_before () const noexcept
 
bool has_issued_at () const noexcept
 
bool has_id () const noexcept
 
json_traits::string_type get_issuer () const
 
json_traits::string_type get_subject () const
 
basic_claim_t::set_t get_audience () const
 
date get_expires_at () const
 
date get_not_before () const
 
date get_issued_at () const
 
json_traits::string_type get_id () const
 
bool has_payload_claim (const typename json_traits::string_type &name) const noexcept
 
basic_claim_t get_payload_claim (const typename json_traits::string_type &name) const
 
+ + + +

+Protected Attributes

+details::map_of_claims< json_traits > payload_claims
 
+

Detailed Description

+
template<typename json_traits>
+class jwt::payload< json_traits >

Base class that represents a token payload.

+

Contains Convenience accessors for common claims.

+

Member Function Documentation

+ +

◆ get_audience()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
basic_claim_t::set_t jwt::payload< json_traits >::get_audience () const
+
+inline
+
+ +

Get audience claim.

+
Returns
audience as a set of strings
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a set (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_expires_at()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
date jwt::payload< json_traits >::get_expires_at () const
+
+inline
+
+ +

Get expires claim.

+
Returns
expires as a date in utc
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a date (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::payload< json_traits >::get_id () const
+
+inline
+
+ +

Get id claim.

+
Returns
id as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_issued_at()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
date jwt::payload< json_traits >::get_issued_at () const
+
+inline
+
+ +

Get issued at claim.

+
Returns
issued at as date in utc
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a date (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_issuer()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::payload< json_traits >::get_issuer () const
+
+inline
+
+ +

Get issuer claim.

+
Returns
issuer as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_not_before()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
date jwt::payload< json_traits >::get_not_before () const
+
+inline
+
+ +

Get not valid before claim.

+
Returns
nbf date in utc
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a date (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ get_payload_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
basic_claim_t jwt::payload< json_traits >::get_payload_claim (const typename json_traits::string_type & name) const
+
+inline
+
+ +

Get payload claim.

+
Returns
Requested claim
+
Exceptions
+ + +
std::runtime_errorIf claim was not present
+
+
+ +
+
+ +

◆ get_subject()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
json_traits::string_type jwt::payload< json_traits >::get_subject () const
+
+inline
+
+ +

Get subject claim.

+
Returns
subject as string
+
Exceptions
+ + + +
std::runtime_errorIf claim was not present
std::bad_castClaim was present but not a string (Should not happen in a valid token)
+
+
+ +
+
+ +

◆ has_audience()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_audience () const
+
+inlinenoexcept
+
+ +

Check if audience is present ("aud")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_expires_at()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_expires_at () const
+
+inlinenoexcept
+
+ +

Check if expires is present ("exp")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_id()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_id () const
+
+inlinenoexcept
+
+ +

Check if token id is present ("jti")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_issued_at()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_issued_at () const
+
+inlinenoexcept
+
+ +

Check if issued at is present ("iat")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_issuer()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_issuer () const
+
+inlinenoexcept
+
+ +

Check if issuer is present ("iss")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_not_before()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_not_before () const
+
+inlinenoexcept
+
+ +

Check if not before is present ("nbf")

+
Returns
true if present, false otherwise
+ +
+
+ +

◆ has_payload_claim()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + + +
bool jwt::payload< json_traits >::has_payload_claim (const typename json_traits::string_type & name) const
+
+inlinenoexcept
+
+ +

Check if a payload claim is present.

+
Returns
true if claim was present, false otherwise
+ +
+
+ +

◆ has_subject()

+ +
+
+
+template<typename json_traits >
+ + + + + +
+ + + + + + + +
bool jwt::payload< json_traits >::has_subject () const
+
+inlinenoexcept
+
+ +

Check if subject is present ("sub")

+
Returns
true if present, false otherwise
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1payload.js b/classjwt_1_1payload.js new file mode 100644 index 000000000..0c120c22c --- /dev/null +++ b/classjwt_1_1payload.js @@ -0,0 +1,19 @@ +var classjwt_1_1payload = +[ + [ "get_audience", "classjwt_1_1payload.html#a0131e3f94dc5deaef9f2128e61675ef3", null ], + [ "get_expires_at", "classjwt_1_1payload.html#adab036c2f63dad223d163ad6689938e5", null ], + [ "get_id", "classjwt_1_1payload.html#a0cb0076f6d6ca4c8acb498076c8f5721", null ], + [ "get_issued_at", "classjwt_1_1payload.html#aa1efb5105a9c3efb49d08b8651069d15", null ], + [ "get_issuer", "classjwt_1_1payload.html#afbad104eceb35855baa247ec211eeac4", null ], + [ "get_not_before", "classjwt_1_1payload.html#a60f492d8bda3225155b6f10f05273f35", null ], + [ "get_payload_claim", "classjwt_1_1payload.html#aabe0fc87ca6261eae5b7b32b7f2fd531", null ], + [ "get_subject", "classjwt_1_1payload.html#adb0c71f6a7ea21910314ff4372a945dd", null ], + [ "has_audience", "classjwt_1_1payload.html#ad9f078e20d3cb6ce1ee135b2698a7059", null ], + [ "has_expires_at", "classjwt_1_1payload.html#a8577be97185f42d58ba0ca0b31c1a116", null ], + [ "has_id", "classjwt_1_1payload.html#a78fd663cc80012d9bbf1a948d246a69d", null ], + [ "has_issued_at", "classjwt_1_1payload.html#a0d1df458e88887342373b4ddb1c6b8f2", null ], + [ "has_issuer", "classjwt_1_1payload.html#a69dcb60e7108e6d124135e1a079943ca", null ], + [ "has_not_before", "classjwt_1_1payload.html#a151f3aed388ffeba63e14379808f3e53", null ], + [ "has_payload_claim", "classjwt_1_1payload.html#a3d7fce2a8b0ad4965671009baa619fa9", null ], + [ "has_subject", "classjwt_1_1payload.html#a3f9fd30aae3e7cb5fa4f5332cf9cc9e6", null ] +]; \ No newline at end of file diff --git a/classjwt_1_1payload__inherit__graph.map b/classjwt_1_1payload__inherit__graph.map new file mode 100644 index 000000000..959719efc --- /dev/null +++ b/classjwt_1_1payload__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classjwt_1_1payload__inherit__graph.md5 b/classjwt_1_1payload__inherit__graph.md5 new file mode 100644 index 000000000..36c7b7b55 --- /dev/null +++ b/classjwt_1_1payload__inherit__graph.md5 @@ -0,0 +1 @@ +00aba896c7e4c2538b720beb79c332f3 \ No newline at end of file diff --git a/classjwt_1_1payload__inherit__graph.svg b/classjwt_1_1payload__inherit__graph.svg new file mode 100644 index 000000000..d5d64a9fa --- /dev/null +++ b/classjwt_1_1payload__inherit__graph.svg @@ -0,0 +1,41 @@ + + + + + + +jwt::payload< json_traits > + + +Node1 + + +jwt::payload< json +_traits > + + + + + +Node2 + + +jwt::decoded_jwt< json +_traits > + + + + + +Node1->Node2 + + + + + + + + diff --git a/classjwt_1_1verifier-members.html b/classjwt_1_1verifier-members.html new file mode 100644 index 000000000..4f85d2d81 --- /dev/null +++ b/classjwt_1_1verifier-members.html @@ -0,0 +1,129 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt::verifier< Clock, json_traits > Member List
+
+
+ +

This is the complete list of members for jwt::verifier< Clock, json_traits >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
allow_algorithm(Algorithm alg)jwt::verifier< Clock, json_traits >inline
basic_claim_t typedef (defined in jwt::verifier< Clock, json_traits >)jwt::verifier< Clock, json_traits >
expires_at_leeway(size_t leeway)jwt::verifier< Clock, json_traits >inline
issued_at_leeway(size_t leeway)jwt::verifier< Clock, json_traits >inline
leeway(size_t leeway)jwt::verifier< Clock, json_traits >inline
not_before_leeway(size_t leeway)jwt::verifier< Clock, json_traits >inline
verifier(Clock c)jwt::verifier< Clock, json_traits >inlineexplicit
verify(const decoded_jwt< json_traits > &jwt) constjwt::verifier< Clock, json_traits >inline
verify(const decoded_jwt< json_traits > &jwt, std::error_code &ec) constjwt::verifier< Clock, json_traits >inline
verify_check_fn_t typedefjwt::verifier< Clock, json_traits >
with_audience(const typename basic_claim_t::set_t &aud)jwt::verifier< Clock, json_traits >inline
with_audience(const typename json_traits::string_type &aud)jwt::verifier< Clock, json_traits >inline
with_claim(const typename json_traits::string_type &name, verify_check_fn_t fn)jwt::verifier< Clock, json_traits >inline
with_claim(const typename json_traits::string_type &name, basic_claim_t c)jwt::verifier< Clock, json_traits >inline
with_id(const typename json_traits::string_type &id)jwt::verifier< Clock, json_traits >inline
with_issuer(const typename json_traits::string_type &iss)jwt::verifier< Clock, json_traits >inline
with_subject(const typename json_traits::string_type &sub)jwt::verifier< Clock, json_traits >inline
with_type(const typename json_traits::string_type &type, std::locale locale=std::locale{})jwt::verifier< Clock, json_traits >inline
+
+ + + + diff --git a/classjwt_1_1verifier.html b/classjwt_1_1verifier.html new file mode 100644 index 000000000..8c938a60e --- /dev/null +++ b/classjwt_1_1verifier.html @@ -0,0 +1,831 @@ + + + + + + + +JWT-CPP: jwt::verifier< Clock, json_traits > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
jwt::verifier< Clock, json_traits > Class Template Reference
+
+
+ +

#include <jwt.h>

+ + + + + + +

+Public Types

+using basic_claim_t = basic_claim< json_traits >
 
using verify_check_fn_t = std::function< void(const verify_ops::verify_context< json_traits > &, std::error_code &ec)>
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 verifier (Clock c)
 
verifierleeway (size_t leeway)
 
verifierexpires_at_leeway (size_t leeway)
 
verifiernot_before_leeway (size_t leeway)
 
verifierissued_at_leeway (size_t leeway)
 
verifierwith_type (const typename json_traits::string_type &type, std::locale locale=std::locale{})
 
verifierwith_issuer (const typename json_traits::string_type &iss)
 
verifierwith_subject (const typename json_traits::string_type &sub)
 
verifierwith_audience (const typename basic_claim_t::set_t &aud)
 
verifierwith_audience (const typename json_traits::string_type &aud)
 
verifierwith_id (const typename json_traits::string_type &id)
 
verifierwith_claim (const typename json_traits::string_type &name, verify_check_fn_t fn)
 
verifierwith_claim (const typename json_traits::string_type &name, basic_claim_t c)
 
template<typename Algorithm >
verifierallow_algorithm (Algorithm alg)
 
void verify (const decoded_jwt< json_traits > &jwt) const
 
void verify (const decoded_jwt< json_traits > &jwt, std::error_code &ec) const
 
+

Detailed Description

+
template<typename Clock, typename json_traits>
+class jwt::verifier< Clock, json_traits >

Verifier class used to check if a decoded token contains all claims required by your application and has a valid signature.

+

Member Typedef Documentation

+ +

◆ verify_check_fn_t

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + +
using jwt::verifier< Clock, json_traits >::verify_check_fn_t = std::function<void(const verify_ops::verify_context<json_traits>&, std::error_code& ec)>
+
+ +

Verification function.

+

This gets passed the current verifier, a reference to the decoded jwt, a reference to the key of this claim, as well as a reference to an error_code. The function checks if the actual value matches certain rules (e.g. equality to value x) and sets the error_code if it does not. Once a non zero error_code is encountered the verification stops and this error_code becomes the result returned from verify

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ verifier()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
jwt::verifier< Clock, json_traits >::verifier (Clock c)
+
+inlineexplicit
+
+ +

Constructor for building a new verifier instance.

+
Parameters
+ + +
cClock instance
+
+
+ +
+
+

Member Function Documentation

+ +

◆ allow_algorithm()

+ +
+
+
+template<typename Clock , typename json_traits >
+
+template<typename Algorithm >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::allow_algorithm (Algorithm alg)
+
+inline
+
+ +

Add an algorithm available for checking.

+
Parameters
+ + +
algAlgorithm to allow
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ expires_at_leeway()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::expires_at_leeway (size_t leeway)
+
+inline
+
+ +

Set leeway for expires at.

+

If not specified the default leeway will be used.

Parameters
+ + +
leewaySet leeway to use for expires at.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ issued_at_leeway()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::issued_at_leeway (size_t leeway)
+
+inline
+
+ +

Set leeway for issued at.

+

If not specified the default leeway will be used.

Parameters
+ + +
leewaySet leeway to use for issued at.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ leeway()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::leeway (size_t leeway)
+
+inline
+
+ +

Set default leeway to use.

+
Parameters
+ + +
leewayDefault leeway to use if not specified otherwise
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ not_before_leeway()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::not_before_leeway (size_t leeway)
+
+inline
+
+ +

Set leeway for not before.

+

If not specified the default leeway will be used.

Parameters
+ + +
leewaySet leeway to use for not before.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ verify() [1/2]

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
void jwt::verifier< Clock, json_traits >::verify (const decoded_jwt< json_traits > & jwt) const
+
+inline
+
+ +

Verify the given token.

+
Parameters
+ + +
jwtToken to check
+
+
+
Exceptions
+ + +
token_verification_exceptionVerification failed
+
+
+ +
+
+ +

◆ verify() [2/2]

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void jwt::verifier< Clock, json_traits >::verify (const decoded_jwt< json_traits > & jwt,
std::error_code & ec 
) const
+
+inline
+
+ +

Verify the given token.

+
Parameters
+ + + +
jwtToken to check
ecerror_code filled with details on error
+
+
+ +
+
+ +

◆ with_audience() [1/2]

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_audience (const typename basic_claim_t::set_t & aud)
+
+inline
+
+ +

Set an audience to check for.

+

If any of the specified audiences is not present in the token the check fails.

Parameters
+ + +
audAudience to check for.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_audience() [2/2]

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_audience (const typename json_traits::string_type & aud)
+
+inline
+
+ +

Set an audience to check for.

+

If the specified audiences is not present in the token the check fails.

Parameters
+ + +
audAudience to check for.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_claim() [1/2]

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_claim (const typename json_traits::string_type & name,
basic_claim_t c 
)
+
+inline
+
+ +

Specify a claim to check for equality (both type & value).

+
Parameters
+ + + +
nameName of the claim to check for
cClaim to check for
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_claim() [2/2]

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_claim (const typename json_traits::string_type & name,
verify_check_fn_t fn 
)
+
+inline
+
+ +

Specify a claim to check for using the specified operation.

+
Parameters
+ + + +
nameName of the claim to check for
fnFunction to use for verifying the claim
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_id()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_id (const typename json_traits::string_type & id)
+
+inline
+
+ +

Set an id to check for.

+

Check is casesensitive.

Parameters
+ + +
idID to check for.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_issuer()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_issuer (const typename json_traits::string_type & iss)
+
+inline
+
+ +

Set an issuer to check for.

+

Check is casesensitive.

Parameters
+ + +
issIssuer to check for.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_subject()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_subject (const typename json_traits::string_type & sub)
+
+inline
+
+ +

Set a subject to check for.

+

Check is casesensitive.

Parameters
+ + +
subSubject to check for.
+
+
+
Returns
*this to allow chaining
+ +
+
+ +

◆ with_type()

+ +
+
+
+template<typename Clock , typename json_traits >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
verifier & jwt::verifier< Clock, json_traits >::with_type (const typename json_traits::string_type & type,
std::locale locale = std::locale{} 
)
+
+inline
+
+ +

Set an type to check for.

+

According to RFC 7519 Section 5.1, This parameter is ignored by JWT implementations; any processing of this parameter is performed by the JWT application. Check is casesensitive.

+
Parameters
+ + + +
typeType Header Parameter to check for.
localeLocalization functionality to use when comparing
+
+
+
Returns
*this to allow chaining
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classjwt_1_1verifier.js b/classjwt_1_1verifier.js new file mode 100644 index 000000000..e87bcf57b --- /dev/null +++ b/classjwt_1_1verifier.js @@ -0,0 +1,20 @@ +var classjwt_1_1verifier = +[ + [ "verify_check_fn_t", "classjwt_1_1verifier.html#a1636f7274f25405fc389e829ca63da43", null ], + [ "verifier", "classjwt_1_1verifier.html#aa4764c828213d9ef1537d2490ed98b45", null ], + [ "allow_algorithm", "classjwt_1_1verifier.html#ae2cc9d0125be58b51f4c4aa30878aa41", null ], + [ "expires_at_leeway", "classjwt_1_1verifier.html#a157d3a7b128aaac1b37a9ba47dd72718", null ], + [ "issued_at_leeway", "classjwt_1_1verifier.html#a6d5c5569c3ec1f91393ea4dcf6c3e21f", null ], + [ "leeway", "classjwt_1_1verifier.html#abb8a3e9d1decf63758baec48e964e3cd", null ], + [ "not_before_leeway", "classjwt_1_1verifier.html#a5ae0c09cc67ccc009149ca36d84d0fbf", null ], + [ "verify", "classjwt_1_1verifier.html#aa275e9eedac41ad8d8a0f2a3300acda2", null ], + [ "verify", "classjwt_1_1verifier.html#a448cd954e1ea53ff2bcb39b7cc30cc65", null ], + [ "with_audience", "classjwt_1_1verifier.html#a7cf070f76669f32c96e38ee4e9c5cb00", null ], + [ "with_audience", "classjwt_1_1verifier.html#a9e1129b30859be9d617547e333ad0ca8", null ], + [ "with_claim", "classjwt_1_1verifier.html#a9ad51170089fb1566c5d97314cc33e41", null ], + [ "with_claim", "classjwt_1_1verifier.html#a1e21d481d69ebddb1d7275449c35be23", null ], + [ "with_id", "classjwt_1_1verifier.html#af26d00278aca90b1c4ee80531aebb8ed", null ], + [ "with_issuer", "classjwt_1_1verifier.html#ad7cf48fc13d29bc59643379c891232cb", null ], + [ "with_subject", "classjwt_1_1verifier.html#a7ae6f50c039290ac6f87e7dda905c25c", null ], + [ "with_type", "classjwt_1_1verifier.html#ae77119a8c25bb7b906191f0055981a7b", null ] +]; \ No newline at end of file diff --git a/closed.png b/closed.png new file mode 100644 index 000000000..98cc2c909 Binary files /dev/null and b/closed.png differ diff --git a/danielaparker-jsoncons_2defaults_8h_source.html b/danielaparker-jsoncons_2defaults_8h_source.html new file mode 100644 index 000000000..9bdfc8575 --- /dev/null +++ b/danielaparker-jsoncons_2defaults_8h_source.html @@ -0,0 +1,166 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/danielaparker-jsoncons/defaults.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
defaults.h
+
+
+
1#ifndef JWT_CPP_DANIELAPARKER_JSONCONS_DEFAULTS_H
+
2#define JWT_CPP_DANIELAPARKER_JSONCONS_DEFAULTS_H
+
3
+
4#ifndef JWT_DISABLE_PICOJSON
+
5#define JWT_DISABLE_PICOJSON
+
6#endif
+
7
+
8#include "traits.h"
+
9
+
10namespace jwt {
+
17 using claim = basic_claim<traits::danielaparker_jsoncons>;
+
18
+
23 inline verifier<default_clock, traits::danielaparker_jsoncons> verify() {
+
24 return verify<default_clock, traits::danielaparker_jsoncons>(default_clock{});
+
25 }
+
26
+
30 inline builder<traits::danielaparker_jsoncons> create() { return builder<traits::danielaparker_jsoncons>(); }
+
31
+
32#ifndef JWT_DISABLE_BASE64
+
40 inline decoded_jwt<traits::danielaparker_jsoncons> decode(const std::string& token) {
+
41 return decoded_jwt<traits::danielaparker_jsoncons>(token);
+
42 }
+
43#endif
+
44
+
56 template<typename Decode>
+
+
57 decoded_jwt<traits::danielaparker_jsoncons> decode(const std::string& token, Decode decode) {
+ +
59 }
+
+
60
+
67 inline jwk<traits::danielaparker_jsoncons> parse_jwk(const traits::danielaparker_jsoncons::string_type& token) {
+
68 return jwk<traits::danielaparker_jsoncons>(token);
+
69 }
+
70
+
77 inline jwks<traits::danielaparker_jsoncons> parse_jwks(const traits::danielaparker_jsoncons::string_type& token) {
+
78 return jwks<traits::danielaparker_jsoncons>(token);
+
79 }
+
80
+
85 using verify_context = verify_ops::verify_context<traits::danielaparker_jsoncons>;
+
86} // namespace jwt
+
87
+
88#endif // JWT_CPP_DANIELAPARKER_JSONCONS_DEFAULTS_H
+
Class containing all information about a decoded token.
Definition jwt.h:2500
+
JSON Web Token.
Definition base.h:21
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+
jwk< json_traits > parse_jwk(const typename json_traits::string_type &jwk_)
Parse a single JSON Web Key.
Definition jwt.h:3638
+
jwks< json_traits > parse_jwks(const typename json_traits::string_type &jwks_)
Parse a JSON Web Key Set.
Definition jwt.h:3648
+
verifier< default_clock, traits::boost_json > verify()
Create a verifier using the default clock.
Definition defaults.h:23
+
verify_ops::verify_context< traits::boost_json > verify_context
This type is the specialization of the verify_ops::verify_context class which uses the standard templ...
Definition defaults.h:85
+
basic_claim< traits::boost_json > claim
a class to store a generic Boost.JSON value as claim
Definition defaults.h:17
+
decoded_jwt< json_traits > decode(const typename json_traits::string_type &token, Decode decode)
Decode a token.
Definition jwt.h:3615
+
+
+ + + + diff --git a/danielaparker-jsoncons_2traits_8h_source.html b/danielaparker-jsoncons_2traits_8h_source.html new file mode 100644 index 000000000..a1632cb5e --- /dev/null +++ b/danielaparker-jsoncons_2traits_8h_source.html @@ -0,0 +1,245 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/danielaparker-jsoncons/traits.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
traits.h
+
+
+
1#define JWT_DISABLE_PICOJSON
+
2#define JSONCONS_NO_DEPRECATED
+
3
+
4#include "jwt-cpp/jwt.h"
+
5
+
6#include "jsoncons/json.hpp"
+
7
+
8#include <sstream>
+
9
+
10namespace jwt {
+
11 namespace traits {
+
+ +
13 // Needs at least https://github.com/danielaparker/jsoncons/commit/28c56b90ec7337f98a5b8942574590111a5e5831
+
14 static_assert(jsoncons::version().minor >= 167, "A higher version of jsoncons is required!");
+
15
+
16 using json = jsoncons::json;
+
17 using value_type = json;
+
+
18 struct object_type : json::object {
+
19 // Add missing C++11 member types
+
20 // https://github.com/danielaparker/jsoncons/commit/1b1ceeb572f9a2db6d37cff47ac78a4f14e072e2#commitcomment-45391411
+
21 using value_type = key_value_type; // Enable optional jwt-cpp methods
+
22 using mapped_type = key_value_type::value_type;
+
23 using size_type = size_t; // for implementing count
+
24
+
25 object_type() = default;
+
26 object_type(const object_type&) = default;
+
27 explicit object_type(const json::object& o) : json::object(o) {}
+
28 object_type(object_type&&) = default;
+
29 explicit object_type(json::object&& o) : json::object(o) {}
+
30 ~object_type() = default;
+
31 object_type& operator=(const object_type& o) = default;
+
32 object_type& operator=(object_type&& o) noexcept = default;
+
33
+
34 // Add missing C++11 subscription operator
+
35 mapped_type& operator[](const key_type& key) {
+
36 // https://github.com/microsoft/STL/blob/2914b4301c59dc7ffc09d16ac6f7979fde2b7f2c/stl/inc/map#L325
+
37 return try_emplace(key).first->value();
+
38 }
+
39
+
40 // Add missing C++11 element access
+
41 const mapped_type& at(const key_type& key) const {
+
42 auto target = find(key);
+
43 if (target != end()) return target->value();
+
44
+
45 throw std::out_of_range("invalid key");
+
46 }
+
47
+
48 // Add missing C++11 lookup method
+
49 size_type count(const key_type& key) const {
+
50 struct compare {
+
51 bool operator()(const value_type& val, const key_type& key) const { return val.key() < key; }
+
52 bool operator()(const key_type& key, const value_type& val) const { return key < val.key(); }
+
53 };
+
54
+
55 // https://en.cppreference.com/w/cpp/algorithm/binary_search#Complexity
+
56 if (std::binary_search(this->begin(), this->end(), key, compare{})) return 1;
+
57 return 0;
+
58 }
+
59 };
+
+
60 using array_type = json::array;
+
61 using string_type = std::string; // current limitation of traits implementation
+
62 using number_type = double;
+
63 using integer_type = int64_t;
+
64 using boolean_type = bool;
+
65
+
66 static jwt::json::type get_type(const json& val) {
+
67 using jwt::json::type;
+
68
+
69 if (val.type() == jsoncons::json_type::bool_value) return type::boolean;
+
70 if (val.type() == jsoncons::json_type::int64_value) return type::integer;
+
71 if (val.type() == jsoncons::json_type::uint64_value) return type::integer;
+
72 if (val.type() == jsoncons::json_type::half_value) return type::number;
+
73 if (val.type() == jsoncons::json_type::double_value) return type::number;
+
74 if (val.type() == jsoncons::json_type::string_value) return type::string;
+
75 if (val.type() == jsoncons::json_type::array_value) return type::array;
+
76 if (val.type() == jsoncons::json_type::object_value) return type::object;
+
77
+
78 throw std::logic_error("invalid type");
+
79 }
+
80
+
81 static object_type as_object(const json& val) {
+
82 if (val.type() != jsoncons::json_type::object_value) throw std::bad_cast();
+
83 return object_type(val.object_value());
+
84 }
+
85
+
86 static array_type as_array(const json& val) {
+
87 if (val.type() != jsoncons::json_type::array_value) throw std::bad_cast();
+
88 return val.array_value();
+
89 }
+
90
+
91 static string_type as_string(const json& val) {
+
92 if (val.type() != jsoncons::json_type::string_value) throw std::bad_cast();
+
93 return val.as_string();
+
94 }
+
95
+
96 static number_type as_number(const json& val) {
+
97 if (get_type(val) != jwt::json::type::number) throw std::bad_cast();
+
98 return val.as_double();
+
99 }
+
100
+
101 static integer_type as_integer(const json& val) {
+
102 if (get_type(val) != jwt::json::type::integer) throw std::bad_cast();
+
103 return val.as<integer_type>();
+
104 }
+
105
+
106 static boolean_type as_boolean(const json& val) {
+
107 if (val.type() != jsoncons::json_type::bool_value) throw std::bad_cast();
+
108 return val.as_bool();
+
109 }
+
110
+
111 static bool parse(json& val, const std::string& str) {
+
112 val = json::parse(str);
+
113 return true;
+
114 }
+
115
+
116 static std::string serialize(const json& val) {
+
117 std::ostringstream os;
+
118 os << jsoncons::print(val);
+
119 return os.str();
+
120 }
+
121 };
+
+
122 } // namespace traits
+
123} // namespace jwt
+
type
Generic JSON types used in JWTs.
Definition jwt.h:1825
+
JSON Web Token.
Definition base.h:21
+ + +
+
+ + + + diff --git a/dir_0c244ebd1071fc3a3e67bea2565ecb67.html b/dir_0c244ebd1071fc3a3e67bea2565ecb67.html new file mode 100644 index 000000000..633e7e9a7 --- /dev/null +++ b/dir_0c244ebd1071fc3a3e67bea2565ecb67.html @@ -0,0 +1,126 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
traits Directory Reference
+
+
+
+Directory dependency graph for traits:
+
+
+
+ + + + + + + + + + +

+Directories

 boost-json
 
 danielaparker-jsoncons
 
 kazuho-picojson
 
 nlohmann-json
 
+
+
+ + + + diff --git a/dir_0c244ebd1071fc3a3e67bea2565ecb67.js b/dir_0c244ebd1071fc3a3e67bea2565ecb67.js new file mode 100644 index 000000000..63e8fe593 --- /dev/null +++ b/dir_0c244ebd1071fc3a3e67bea2565ecb67.js @@ -0,0 +1,7 @@ +var dir_0c244ebd1071fc3a3e67bea2565ecb67 = +[ + [ "boost-json", "dir_c0a47b52146df2fb522cc2caf716c25e.html", "dir_c0a47b52146df2fb522cc2caf716c25e" ], + [ "danielaparker-jsoncons", "dir_40e93e4016c3584ba3b333387b8a88a2.html", "dir_40e93e4016c3584ba3b333387b8a88a2" ], + [ "kazuho-picojson", "dir_767a780e71f3df42bff551d84f4be7e4.html", "dir_767a780e71f3df42bff551d84f4be7e4" ], + [ "nlohmann-json", "dir_21e3d14daf2ae74f69a5ba3bdd78405a.html", "dir_21e3d14daf2ae74f69a5ba3bdd78405a" ] +]; \ No newline at end of file diff --git a/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.map b/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.map new file mode 100644 index 000000000..bc42805e8 --- /dev/null +++ b/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.map @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.md5 b/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.md5 new file mode 100644 index 000000000..b48e23eb3 --- /dev/null +++ b/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.md5 @@ -0,0 +1 @@ +e44e540b3701fbdecf38a8b8fb3d4ba2 \ No newline at end of file diff --git a/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.svg b/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.svg new file mode 100644 index 000000000..0c6f36c9b --- /dev/null +++ b/dir_0c244ebd1071fc3a3e67bea2565ecb67_dep.svg @@ -0,0 +1,68 @@ + + + + + + +include/jwt-cpp/traits + +clusterdir_db0c9b95a30589e349974d93aa14253f + + +jwt-cpp + + + + +clusterdir_0c244ebd1071fc3a3e67bea2565ecb67 + + + + + + + +dir_0c244ebd1071fc3a3e67bea2565ecb67 +traits + + + +dir_c0a47b52146df2fb522cc2caf716c25e + + +boost-json + + + + + +dir_40e93e4016c3584ba3b333387b8a88a2 + + +danielaparker-jsoncons + + + + + +dir_767a780e71f3df42bff551d84f4be7e4 + + +kazuho-picojson + + + + + +dir_21e3d14daf2ae74f69a5ba3bdd78405a + + +nlohmann-json + + + + + diff --git a/dir_21e3d14daf2ae74f69a5ba3bdd78405a.html b/dir_21e3d14daf2ae74f69a5ba3bdd78405a.html new file mode 100644 index 000000000..430a4444a --- /dev/null +++ b/dir_21e3d14daf2ae74f69a5ba3bdd78405a.html @@ -0,0 +1,122 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/nlohmann-json Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
nlohmann-json Directory Reference
+
+
+
+Directory dependency graph for nlohmann-json:
+
+
+
+ + + + + + +

+Files

 defaults.h
 
 traits.h
 
+
+
+ + + + diff --git a/dir_21e3d14daf2ae74f69a5ba3bdd78405a.js b/dir_21e3d14daf2ae74f69a5ba3bdd78405a.js new file mode 100644 index 000000000..4089698ae --- /dev/null +++ b/dir_21e3d14daf2ae74f69a5ba3bdd78405a.js @@ -0,0 +1,5 @@ +var dir_21e3d14daf2ae74f69a5ba3bdd78405a = +[ + [ "defaults.h", "nlohmann-json_2defaults_8h_source.html", null ], + [ "traits.h", "nlohmann-json_2traits_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.map b/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.map new file mode 100644 index 000000000..c543a11a6 --- /dev/null +++ b/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.md5 b/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.md5 new file mode 100644 index 000000000..7c5a6c788 --- /dev/null +++ b/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.md5 @@ -0,0 +1 @@ +c081db462ecb98cc1af6668db0bb7283 \ No newline at end of file diff --git a/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.svg b/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.svg new file mode 100644 index 000000000..c50b9a96d --- /dev/null +++ b/dir_21e3d14daf2ae74f69a5ba3bdd78405a_dep.svg @@ -0,0 +1,29 @@ + + + + + + +include/jwt-cpp/traits/nlohmann-json + +clusterdir_0c244ebd1071fc3a3e67bea2565ecb67 + + +traits + + + + + +dir_21e3d14daf2ae74f69a5ba3bdd78405a + + +nlohmann-json + + + + + diff --git a/dir_2baeb9b2ab4545faf9e2316474ff25e0.html b/dir_2baeb9b2ab4545faf9e2316474ff25e0.html new file mode 100644 index 000000000..907fffe81 --- /dev/null +++ b/dir_2baeb9b2ab4545faf9e2316474ff25e0.html @@ -0,0 +1,109 @@ + + + + + + + +JWT-CPP: .github Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
.github Directory Reference
+
+
+
+
+ + + + diff --git a/dir_40e93e4016c3584ba3b333387b8a88a2.html b/dir_40e93e4016c3584ba3b333387b8a88a2.html new file mode 100644 index 000000000..4a9680f43 --- /dev/null +++ b/dir_40e93e4016c3584ba3b333387b8a88a2.html @@ -0,0 +1,122 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/danielaparker-jsoncons Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
danielaparker-jsoncons Directory Reference
+
+
+
+Directory dependency graph for danielaparker-jsoncons:
+
+
+
+ + + + + + +

+Files

 defaults.h
 
 traits.h
 
+
+
+ + + + diff --git a/dir_40e93e4016c3584ba3b333387b8a88a2.js b/dir_40e93e4016c3584ba3b333387b8a88a2.js new file mode 100644 index 000000000..e8a29b526 --- /dev/null +++ b/dir_40e93e4016c3584ba3b333387b8a88a2.js @@ -0,0 +1,5 @@ +var dir_40e93e4016c3584ba3b333387b8a88a2 = +[ + [ "defaults.h", "danielaparker-jsoncons_2defaults_8h_source.html", null ], + [ "traits.h", "danielaparker-jsoncons_2traits_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_40e93e4016c3584ba3b333387b8a88a2_dep.map b/dir_40e93e4016c3584ba3b333387b8a88a2_dep.map new file mode 100644 index 000000000..5834b3293 --- /dev/null +++ b/dir_40e93e4016c3584ba3b333387b8a88a2_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_40e93e4016c3584ba3b333387b8a88a2_dep.md5 b/dir_40e93e4016c3584ba3b333387b8a88a2_dep.md5 new file mode 100644 index 000000000..3b50b82f7 --- /dev/null +++ b/dir_40e93e4016c3584ba3b333387b8a88a2_dep.md5 @@ -0,0 +1 @@ +c2777cc8c61c4ddf21294b16d33cbae5 \ No newline at end of file diff --git a/dir_40e93e4016c3584ba3b333387b8a88a2_dep.svg b/dir_40e93e4016c3584ba3b333387b8a88a2_dep.svg new file mode 100644 index 000000000..c5e7e5aeb --- /dev/null +++ b/dir_40e93e4016c3584ba3b333387b8a88a2_dep.svg @@ -0,0 +1,29 @@ + + + + + + +include/jwt-cpp/traits/danielaparker-jsoncons + +clusterdir_0c244ebd1071fc3a3e67bea2565ecb67 + + +traits + + + + + +dir_40e93e4016c3584ba3b333387b8a88a2 + + +danielaparker-jsoncons + + + + + diff --git a/dir_49e56c817e5e54854c35e136979f97ca.html b/dir_49e56c817e5e54854c35e136979f97ca.html new file mode 100644 index 000000000..8ee0ea2eb --- /dev/null +++ b/dir_49e56c817e5e54854c35e136979f97ca.html @@ -0,0 +1,109 @@ + + + + + + + +JWT-CPP: docs Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
docs Directory Reference
+
+
+
+
+ + + + diff --git a/dir_767a780e71f3df42bff551d84f4be7e4.html b/dir_767a780e71f3df42bff551d84f4be7e4.html new file mode 100644 index 000000000..6687406ad --- /dev/null +++ b/dir_767a780e71f3df42bff551d84f4be7e4.html @@ -0,0 +1,122 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/kazuho-picojson Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
kazuho-picojson Directory Reference
+
+
+
+Directory dependency graph for kazuho-picojson:
+
+
+
+ + + + + + +

+Files

 defaults.h
 
 traits.h
 
+
+
+ + + + diff --git a/dir_767a780e71f3df42bff551d84f4be7e4.js b/dir_767a780e71f3df42bff551d84f4be7e4.js new file mode 100644 index 000000000..95c1dfd1b --- /dev/null +++ b/dir_767a780e71f3df42bff551d84f4be7e4.js @@ -0,0 +1,5 @@ +var dir_767a780e71f3df42bff551d84f4be7e4 = +[ + [ "defaults.h", "kazuho-picojson_2defaults_8h_source.html", null ], + [ "traits.h", "kazuho-picojson_2traits_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_767a780e71f3df42bff551d84f4be7e4_dep.map b/dir_767a780e71f3df42bff551d84f4be7e4_dep.map new file mode 100644 index 000000000..178173f12 --- /dev/null +++ b/dir_767a780e71f3df42bff551d84f4be7e4_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_767a780e71f3df42bff551d84f4be7e4_dep.md5 b/dir_767a780e71f3df42bff551d84f4be7e4_dep.md5 new file mode 100644 index 000000000..11a19c68a --- /dev/null +++ b/dir_767a780e71f3df42bff551d84f4be7e4_dep.md5 @@ -0,0 +1 @@ +0fdd5a438a97e7eb01d89d232420a5d0 \ No newline at end of file diff --git a/dir_767a780e71f3df42bff551d84f4be7e4_dep.svg b/dir_767a780e71f3df42bff551d84f4be7e4_dep.svg new file mode 100644 index 000000000..c3896ded9 --- /dev/null +++ b/dir_767a780e71f3df42bff551d84f4be7e4_dep.svg @@ -0,0 +1,29 @@ + + + + + + +include/jwt-cpp/traits/kazuho-picojson + +clusterdir_0c244ebd1071fc3a3e67bea2565ecb67 + + +traits + + + + + +dir_767a780e71f3df42bff551d84f4be7e4 + + +kazuho-picojson + + + + + diff --git a/dir_c0a47b52146df2fb522cc2caf716c25e.html b/dir_c0a47b52146df2fb522cc2caf716c25e.html new file mode 100644 index 000000000..bc8fe6e08 --- /dev/null +++ b/dir_c0a47b52146df2fb522cc2caf716c25e.html @@ -0,0 +1,122 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/boost-json Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
boost-json Directory Reference
+
+
+
+Directory dependency graph for boost-json:
+
+
+
+ + + + + + +

+Files

 defaults.h
 
 traits.h
 
+
+
+ + + + diff --git a/dir_c0a47b52146df2fb522cc2caf716c25e.js b/dir_c0a47b52146df2fb522cc2caf716c25e.js new file mode 100644 index 000000000..14dc854c4 --- /dev/null +++ b/dir_c0a47b52146df2fb522cc2caf716c25e.js @@ -0,0 +1,5 @@ +var dir_c0a47b52146df2fb522cc2caf716c25e = +[ + [ "defaults.h", "boost-json_2defaults_8h_source.html", null ], + [ "traits.h", "boost-json_2traits_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_c0a47b52146df2fb522cc2caf716c25e_dep.map b/dir_c0a47b52146df2fb522cc2caf716c25e_dep.map new file mode 100644 index 000000000..bfd2b1636 --- /dev/null +++ b/dir_c0a47b52146df2fb522cc2caf716c25e_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_c0a47b52146df2fb522cc2caf716c25e_dep.md5 b/dir_c0a47b52146df2fb522cc2caf716c25e_dep.md5 new file mode 100644 index 000000000..17f86deb2 --- /dev/null +++ b/dir_c0a47b52146df2fb522cc2caf716c25e_dep.md5 @@ -0,0 +1 @@ +2b4cc1efeeb7a59cd86a28d302bfc40d \ No newline at end of file diff --git a/dir_c0a47b52146df2fb522cc2caf716c25e_dep.svg b/dir_c0a47b52146df2fb522cc2caf716c25e_dep.svg new file mode 100644 index 000000000..dd2f714bc --- /dev/null +++ b/dir_c0a47b52146df2fb522cc2caf716c25e_dep.svg @@ -0,0 +1,29 @@ + + + + + + +include/jwt-cpp/traits/boost-json + +clusterdir_0c244ebd1071fc3a3e67bea2565ecb67 + + +traits + + + + + +dir_c0a47b52146df2fb522cc2caf716c25e + + +boost-json + + + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 000000000..49dd0c7cb --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,115 @@ + + + + + + + +JWT-CPP: include Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+ + + + +

+Directories

 jwt-cpp
 
+
+
+ + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.js b/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 000000000..1daab6e2d --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "jwt-cpp", "dir_db0c9b95a30589e349974d93aa14253f.html", "dir_db0c9b95a30589e349974d93aa14253f" ] +]; \ No newline at end of file diff --git a/dir_db0c9b95a30589e349974d93aa14253f.html b/dir_db0c9b95a30589e349974d93aa14253f.html new file mode 100644 index 000000000..e81ab7167 --- /dev/null +++ b/dir_db0c9b95a30589e349974d93aa14253f.html @@ -0,0 +1,122 @@ + + + + + + + +JWT-CPP: include/jwt-cpp Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt-cpp Directory Reference
+
+
+
+Directory dependency graph for jwt-cpp:
+
+
+
+ + + + + + +

+Files

 base.h
 
 jwt.h
 
+
+
+ + + + diff --git a/dir_db0c9b95a30589e349974d93aa14253f.js b/dir_db0c9b95a30589e349974d93aa14253f.js new file mode 100644 index 000000000..271989341 --- /dev/null +++ b/dir_db0c9b95a30589e349974d93aa14253f.js @@ -0,0 +1,6 @@ +var dir_db0c9b95a30589e349974d93aa14253f = +[ + [ "traits", "dir_0c244ebd1071fc3a3e67bea2565ecb67.html", "dir_0c244ebd1071fc3a3e67bea2565ecb67" ], + [ "base.h", "base_8h_source.html", null ], + [ "jwt.h", "jwt_8h_source.html", null ] +]; \ No newline at end of file diff --git a/dir_db0c9b95a30589e349974d93aa14253f_dep.map b/dir_db0c9b95a30589e349974d93aa14253f_dep.map new file mode 100644 index 000000000..4b6b9ed9c --- /dev/null +++ b/dir_db0c9b95a30589e349974d93aa14253f_dep.map @@ -0,0 +1,5 @@ + + + + + diff --git a/dir_db0c9b95a30589e349974d93aa14253f_dep.md5 b/dir_db0c9b95a30589e349974d93aa14253f_dep.md5 new file mode 100644 index 000000000..577b2f023 --- /dev/null +++ b/dir_db0c9b95a30589e349974d93aa14253f_dep.md5 @@ -0,0 +1 @@ +6c1fe5ec74744b661a040c15514fa695 \ No newline at end of file diff --git a/dir_db0c9b95a30589e349974d93aa14253f_dep.svg b/dir_db0c9b95a30589e349974d93aa14253f_dep.svg new file mode 100644 index 000000000..3c480ac8f --- /dev/null +++ b/dir_db0c9b95a30589e349974d93aa14253f_dep.svg @@ -0,0 +1,41 @@ + + + + + + +include/jwt-cpp + +clusterdir_d44c64559bbebec7f509842c48db8b23 + + +include + + + + +clusterdir_db0c9b95a30589e349974d93aa14253f + + + + + + + +dir_db0c9b95a30589e349974d93aa14253f +jwt-cpp + + + +dir_0c244ebd1071fc3a3e67bea2565ecb67 + + +traits + + + + + diff --git a/doc.svg b/doc.svg new file mode 100644 index 000000000..0b928a531 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 000000000..ac18b2755 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen-awesome-sidebar-only.css b/doxygen-awesome-sidebar-only.css new file mode 100644 index 000000000..853f6d692 --- /dev/null +++ b/doxygen-awesome-sidebar-only.css @@ -0,0 +1,116 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/doxygen-awesome.css b/doxygen-awesome.css new file mode 100644 index 000000000..08238977a --- /dev/null +++ b/doxygen-awesome.css @@ -0,0 +1,2530 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #f8d1cc; + --warning-color-dark: #b61825; + --warning-color-darker: #75070f; + --note-color: #faf3d8; + --note-color-dark: #f3a600; + --note-color-darker: #5f4204; + --todo-color: #e4f3ff; + --todo-color-dark: #1879C4; + --todo-color-darker: #274a5c; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #e4dafd; + --bug-color-dark: #5b2bdd; + --bug-color-darker: #2a0d72; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #2e1917; + --warning-color-dark: #ad2617; + --warning-color-darker: #f5b1aa; + --note-color: #3b2e04; + --note-color-dark: #f1b602; + --note-color-darker: #ceb670; + --todo-color: #163750; + --todo-color-dark: #1982D2; + --todo-color-darker: #dcf0fa; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2a2536; + --bug-color-dark: #7661b3; + --bug-color-darker: #ae9ed6; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #2e1917; + --warning-color-dark: #ad2617; + --warning-color-darker: #f5b1aa; + --note-color: #3b2e04; + --note-color-dark: #f1b602; + --note-color-darker: #ceb670; + --todo-color: #163750; + --todo-color-dark: #1982D2; + --todo-color-darker: #dcf0fa; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2a2536; + --bug-color-dark: #7661b3; + --bug-color-darker: #ae9ed6; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: .9em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform 0.25s ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt { + color: var(--todo-color-dark); +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform 0.25s ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 0 var(--separator-color), + -100px 0 0 var(--separator-color), + 500px 0 0 var(--separator-color), + -500px 0 0 var(--separator-color), + 1500px 0 0 var(--separator-color), + -1500px 0 0 var(--separator-color), + 2000px 0 0 var(--separator-color), + -2000px 0 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform .1s ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity .1s ease-in-out, color .1s ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed { + margin: var(--spacing-medium) auto; +} + +.tabbed ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; + border-bottom: 1px solid var(--separator-color); +} + +.tabbed li { + display: none; +} + +.tabbed li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: var(--spacing-small) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + padding: var(--spacing-small) var(--spacing-large); + border-radius: var(--border-radius-medium); +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active { + color: var(--primary-color); +} + +.tabs-overview button.tab-button.active::after { + content: ''; + display: block; + position: absolute; + left: 0px; + bottom: 0; + right: 0px; + height: 3px; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); +} diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 000000000..8cff99ebb --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1685 @@ +/* The standard CSS for doxygen 1.9.8*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + color: black; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: black; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 000000000..79a763540 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 000000000..ee3f142f7 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,192 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ diff --git a/files.html b/files.html new file mode 100644 index 000000000..f41e5d40b --- /dev/null +++ b/files.html @@ -0,0 +1,129 @@ + + + + + + + +JWT-CPP: File List + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12345]
+ + + + + + + + + + + + + + + + + +
  include
  jwt-cpp
  traits
  boost-json
 defaults.h
 traits.h
  danielaparker-jsoncons
 defaults.h
 traits.h
  kazuho-picojson
 defaults.h
 traits.h
  nlohmann-json
 defaults.h
 traits.h
 base.h
 jwt.h
+
+
+
+ + + + diff --git a/files_dup.js b/files_dup.js new file mode 100644 index 000000000..f1749d909 --- /dev/null +++ b/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ] +]; \ No newline at end of file diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 000000000..b04bed2e7 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 000000000..52f0166a2 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 000000000..f6896dd25 --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 000000000..2d1f06e7b --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html new file mode 100644 index 000000000..0bf1cb394 --- /dev/null +++ b/functions.html @@ -0,0 +1,265 @@ + + + + + + + +JWT-CPP: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- w -

+
+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 000000000..ce7d8fa55 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,253 @@ + + + + + + + +JWT-CPP: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+ +

- a -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- n -

+ + +

- o -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- w -

+
+
+ + + + diff --git a/functions_type.html b/functions_type.html new file mode 100644 index 000000000..9a8dd4403 --- /dev/null +++ b/functions_type.html @@ -0,0 +1,108 @@ + + + + + + + +JWT-CPP: Class Members - Typedefs + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented typedefs with links to the class documentation for each member:
+
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 000000000..a49abc605 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,114 @@ + + + + + + + +JWT-CPP: Class Members - Variables + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the class documentation for each member:
+
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 000000000..4baeb3308 --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,168 @@ + + + + + + + +JWT-CPP: Graph Legend + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+
    +
  • +A filled gray box represents the struct or class for which the graph is generated.
  • +
  • +A box with a black border denotes a documented struct or class.
  • +
  • +A box with a gray border denotes an undocumented struct or class.
  • +
  • +A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.
  • +
+

The arrows have the following meaning:

+
    +
  • +A blue arrow is used to visualize a public inheritance relation between two classes.
  • +
  • +A dark green arrow is used for protected inheritance.
  • +
  • +A dark red arrow is used for private inheritance.
  • +
  • +A purple dashed arrow is used if a class is contained or used by another class. The arrow is labelled with the variable(s) through which the pointed class or struct is accessible.
  • +
  • +A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labelled with the template parameters of the instance.
  • +
+
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 000000000..da515da9d --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/graph_legend.svg b/graph_legend.svg new file mode 100644 index 000000000..f90d1bfbb --- /dev/null +++ b/graph_legend.svg @@ -0,0 +1,167 @@ + + + + + + +Graph Legend + + +Node9 + + +Inherited + + + + + +Node10 + + +PublicBase + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Truncated + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +ProtectedBase + + + + + +Node13->Node9 + + + + + + + + +Node14 + + +PrivateBase + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +Undocumented + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +Templ< int > + + + + + +Node16->Node9 + + + + + + + + +Node17 + + +Templ< T > + + + + + +Node17->Node16 + + + + + +< int > + + + +Node18 + + +Used + + + + + +Node18->Node9 + + + + + +m_usedClass + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 000000000..e1f4e517f --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,150 @@ + + + + + + + +JWT-CPP: Class Hierarchy + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Cjwt::alphabet::base64Valid list of character when working with Base64
 Cjwt::alphabet::base64urlValid list of character when working with Base64URL
 Cjwt::alphabet::helper::base64url_percent_encodingA General purpose base64url alphabet respecting the URI Case Normalization
 Cjwt::basic_claim< json_traits >Class to store a generic JSON value as claim
 Cjwt::traits::boost_json
 Cjwt::builder< json_traits >Builder class to build and sign a new token Use jwt::create() to get an instance of this class
 Cjwt::traits::danielaparker_jsoncons
 Cjwt::verify_ops::date_after_claim< json_traits, in_header >Checks that the current time is after the time specified in the given claim
 Cjwt::verify_ops::date_before_claim< json_traits, in_header >Checks that the current time is before the time specified in the given claim
 Cjwt::default_clockDefault clock class using std::chrono::system_clock as a backend
 Cjwt::verify_ops::equals_claim< json_traits, in_header >This is the default operation and does case sensitive matching
 Cjwt::helper::evp_pkey_handleHandle class for EVP_PKEY structures
 Cstd::exceptionSTL class
 Cstd::logic_errorSTL class
 Cstd::out_of_rangeSTL class
 Cjwt::error::claim_not_present_exceptionAttempt to access claim was unsuccessful
 Cstd::runtime_errorSTL class
 Cjwt::error::invalid_json_exceptionAttempt to parse JSON was unsuccessful
 Cjwt::header< json_traits >Base class that represents a token header
 Cjwt::decoded_jwt< json_traits >Class containing all information about a decoded token
 Cjwt::verify_ops::insensitive_string_claim< json_traits, in_header >Checks if the claim is a string and does an case insensitive comparison
 Cjwt::verify_ops::is_subset_claim< json_traits, in_header >Checks if the given set is a subset of the set inside the token
 Cjwt::jwk< json_traits >JSON Web Key
 Cjwt::jwks< json_traits >JWK Set
 Cjwt::traits::kazuho_picojson
 Cjwt::traits::nlohmann_json
 Cboost::json::object
 Cjwt::traits::danielaparker_jsoncons::object_type
 Cjwt::payload< json_traits >Base class that represents a token payload
 Cjwt::decoded_jwt< json_traits >Class containing all information about a decoded token
 Cstd::system_errorSTL class
 Cjwt::error::ecdsa_exception
 Cjwt::error::rsa_exception
 Cjwt::error::signature_generation_exception
 Cjwt::error::signature_verification_exception
 Cjwt::error::token_verification_exception
 Cjwt::verifier< Clock, json_traits >Verifier class used to check if a decoded token contains all claims required by your application and has a valid signature
 Cjwt::verify_ops::verify_context< json_traits >This is the base container which holds the token that need to be verified
+
+
+
+ + + + diff --git a/hierarchy.js b/hierarchy.js new file mode 100644 index 000000000..e55e3e0aa --- /dev/null +++ b/hierarchy.js @@ -0,0 +1,49 @@ +var hierarchy = +[ + [ "jwt::alphabet::base64", "structjwt_1_1alphabet_1_1base64.html", null ], + [ "jwt::alphabet::base64url", "structjwt_1_1alphabet_1_1base64url.html", null ], + [ "jwt::alphabet::helper::base64url_percent_encoding", "structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html", null ], + [ "jwt::basic_claim< json_traits >", "classjwt_1_1basic__claim.html", null ], + [ "jwt::traits::boost_json", "structjwt_1_1traits_1_1boost__json.html", null ], + [ "jwt::builder< json_traits >", "classjwt_1_1builder.html", null ], + [ "jwt::traits::danielaparker_jsoncons", "structjwt_1_1traits_1_1danielaparker__jsoncons.html", null ], + [ "jwt::verify_ops::date_after_claim< json_traits, in_header >", "structjwt_1_1verify__ops_1_1date__after__claim.html", null ], + [ "jwt::verify_ops::date_before_claim< json_traits, in_header >", "structjwt_1_1verify__ops_1_1date__before__claim.html", null ], + [ "jwt::default_clock", "structjwt_1_1default__clock.html", null ], + [ "jwt::verify_ops::equals_claim< json_traits, in_header >", "structjwt_1_1verify__ops_1_1equals__claim.html", null ], + [ "jwt::helper::evp_pkey_handle", "classjwt_1_1helper_1_1evp__pkey__handle.html", null ], + [ "std::exception", null, [ + [ "std::logic_error", null, [ + [ "std::out_of_range", null, [ + [ "jwt::error::claim_not_present_exception", "structjwt_1_1error_1_1claim__not__present__exception.html", null ] + ] ] + ] ], + [ "std::runtime_error", null, [ + [ "jwt::error::invalid_json_exception", "structjwt_1_1error_1_1invalid__json__exception.html", null ] + ] ] + ] ], + [ "jwt::header< json_traits >", "classjwt_1_1header.html", [ + [ "jwt::decoded_jwt< json_traits >", "classjwt_1_1decoded__jwt.html", null ] + ] ], + [ "jwt::verify_ops::insensitive_string_claim< json_traits, in_header >", "structjwt_1_1verify__ops_1_1insensitive__string__claim.html", null ], + [ "jwt::verify_ops::is_subset_claim< json_traits, in_header >", "structjwt_1_1verify__ops_1_1is__subset__claim.html", null ], + [ "jwt::jwk< json_traits >", "classjwt_1_1jwk.html", null ], + [ "jwt::jwks< json_traits >", "classjwt_1_1jwks.html", null ], + [ "jwt::traits::kazuho_picojson", "structjwt_1_1traits_1_1kazuho__picojson.html", null ], + [ "jwt::traits::nlohmann_json", "structjwt_1_1traits_1_1nlohmann__json.html", null ], + [ "boost::json::object", null, [ + [ "jwt::traits::danielaparker_jsoncons::object_type", "structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html", null ] + ] ], + [ "jwt::payload< json_traits >", "classjwt_1_1payload.html", [ + [ "jwt::decoded_jwt< json_traits >", "classjwt_1_1decoded__jwt.html", null ] + ] ], + [ "std::system_error", null, [ + [ "jwt::error::ecdsa_exception", "structjwt_1_1error_1_1ecdsa__exception.html", null ], + [ "jwt::error::rsa_exception", "structjwt_1_1error_1_1rsa__exception.html", null ], + [ "jwt::error::signature_generation_exception", "structjwt_1_1error_1_1signature__generation__exception.html", null ], + [ "jwt::error::signature_verification_exception", "structjwt_1_1error_1_1signature__verification__exception.html", null ], + [ "jwt::error::token_verification_exception", "structjwt_1_1error_1_1token__verification__exception.html", null ] + ] ], + [ "jwt::verifier< Clock, json_traits >", "classjwt_1_1verifier.html", null ], + [ "jwt::verify_ops::verify_context< json_traits >", "structjwt_1_1verify__ops_1_1verify__context.html", null ] +]; \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..0e2bfe7d7 --- /dev/null +++ b/index.html @@ -0,0 +1,207 @@ + + + + + + + +JWT-CPP: JWT-CPP + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
JWT-CPP
+
+
+

logo

+

License Badge Codacy Badge Linux Badge MacOS Badge Windows Badge Coverage Status

+

Documentation Badge

+

Stars Badge GitHub release (latest SemVer including pre-releases) ConanCenter package Vcpkg package

+

A header only library for creating and validating JSON Web Tokens in C++11. For a great introduction, read this.

+

Signature algorithms

+

jwt-cpp supports all the algorithms defined by the specifications. The modular design allows to easily add additional algorithms without any problems. If you need any feel free to create a pull request or open an issue.

+

For completeness, here is a list of all supported algorithms:

+ + + + + + + + + + + +
HMSC RSA ECDSA PSS EdDSA
HS256 RS256 ES256 PS256 Ed25519
HS384 RS384 ES384 PS384 Ed448
HS512 RS512 ES512 PS512
ES256K
+

SSL Compatibility

+

In the name of flexibility and extensibility, jwt-cpp supports OpenSSL, LibreSSL, and wolfSSL. Read this page for more details. These are the version which are currently being tested:

+ + + + + + + + + + + +
OpenSSL LibreSSL wolfSSL
1.0.2u 3.3.6 5.1.1
1.1.0i 3.4.3 5.2.0
1.1.1q 3.5.3 5.3.0
3.0.5
+
+

‍ℹ️ Note: A complete list of versions tested in the past can be found here.

+
+

Overview

+

There is no hard dependency on a JSON library. Instead, there's a generic jwt::basic_claim which is templated around type traits, which described the semantic JSON types for a value, object, array, string, number, integer and boolean, as well as methods to translate between them.

+
jwt::basic_claim<my_favorite_json_library_traits> claim(json::object({{"json", true},{"example", 0}}));
+
a class to store a generic JSON value as claim
Definition jwt.h:2098
+

This allows for complete freedom when picking which libraries you want to use. For more information, read this page).

+

For your convenience there are serval traits implementation which provide some popular JSON libraries. They are:

+

picojson nlohmann jsoncons boostjson

+

In order to maintain compatibility, picojson is still used to provide a specialized jwt::claim along with all helpers. Defining JWT_DISABLE_PICOJSON will remove this optional dependency. It's possible to directly include the traits defaults for the other JSON libraries. See the traits examples for details.

+

As for the base64 requirements of JWTs, this library provides base.h with all the required implementation; However base64 implementations are very common, with varying degrees of performance. When providing your own base64 implementation, you can define JWT_DISABLE_BASE64 to remove the jwt-cpp implementation.

+

Getting Started

+

Simple example of decoding a token and printing all claims (try it out):

+
#include <jwt-cpp/jwt.h>
+
#include <iostream>
+
+
int main() {
+
std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCJ9.AbIJTDMFc7yUa5MhvcP03nJPyCPzZtQcGEp-zWfOkEE";
+
auto decoded = jwt::decode(token);
+
+
for(auto& e : decoded.get_payload_json())
+
std::cout << e.first << " = " << e.second << std::endl;
+
}
+
decoded_jwt< json_traits > decode(const typename json_traits::string_type &token, Decode decode)
Decode a token.
Definition jwt.h:3615
+

In order to verify a token you first build a verifier and use it to verify a decoded token.

+
auto verifier = jwt::verify()
+
.allow_algorithm(jwt::algorithm::hs256{ "secret" })
+
.with_issuer("auth0");
+
+
verifier.verify(decoded_token);
+
verifier< default_clock, traits::boost_json > verify()
Create a verifier using the default clock.
Definition defaults.h:23
+

The created verifier is stateless so you can reuse it for different tokens.

+

Creating a token (and signing) is equally as easy.

+
auto token = jwt::create()
+
.set_issuer("auth0")
+
.set_type("JWS")
+
.set_payload_claim("sample", jwt::claim(std::string("test")))
+
.sign(jwt::algorithm::hs256{"secret"});
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+
+

‍To see more examples working with RSA public and private keys, visit our examples!

+
+

Providing your own JSON Traits

+

To learn how to writes a trait's implementation, checkout the these instructions

+

Contributing

+

If you have an improvement or found a bug feel free to open an issue or add the change and create a pull request. If you file a bug please make sure to include as much information about your environment (compiler version, etc.) as possible to help reproduce the issue. If you add a new feature please make sure to also include test cases for it.

+

Dependencies

+

In order to use jwt-cpp you need the following tools.

+
    +
  • libcrypto (openssl or compatible)
  • +
  • libssl-dev (for the header files)
  • +
  • a compiler supporting at least c++11
  • +
  • basic stl support
  • +
+

In order to build the test cases you also need

+
    +
  • gtest
  • +
  • pthread
  • +
+

Troubleshooting

+

See the FAQs for tips.

+

Conference Coverage

+

CppCon

+
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 000000000..1dffb65b5 --- /dev/null +++ b/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/jwt_8h_source.html b/jwt_8h_source.html new file mode 100644 index 000000000..4da295f3c --- /dev/null +++ b/jwt_8h_source.html @@ -0,0 +1,2837 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/jwt.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
jwt.h
+
+
+
1#ifndef JWT_CPP_JWT_H
+
2#define JWT_CPP_JWT_H
+
3
+
4#ifndef JWT_DISABLE_PICOJSON
+
5#ifndef PICOJSON_USE_INT64
+
6#define PICOJSON_USE_INT64
+
7#endif
+
8#include "picojson/picojson.h"
+
9#endif
+
10
+
11#ifndef JWT_DISABLE_BASE64
+
12#include "base.h"
+
13#endif
+
14
+
15#include <openssl/ec.h>
+
16#include <openssl/ecdsa.h>
+
17#include <openssl/err.h>
+
18#include <openssl/evp.h>
+
19#include <openssl/hmac.h>
+
20#include <openssl/pem.h>
+
21#include <openssl/rsa.h>
+
22#include <openssl/ssl.h>
+
23
+
24#include <algorithm>
+
25#include <chrono>
+
26#include <climits>
+
27#include <cmath>
+
28#include <cstring>
+
29#include <functional>
+
30#include <iterator>
+
31#include <locale>
+
32#include <memory>
+
33#include <set>
+
34#include <system_error>
+
35#include <type_traits>
+
36#include <unordered_map>
+
37#include <utility>
+
38#include <vector>
+
39
+
40#if __cplusplus > 201103L
+
41#include <codecvt>
+
42#endif
+
43
+
44#if __cplusplus >= 201402L
+
45#ifdef __has_include
+
46#if __has_include(<experimental/type_traits>)
+
47#include <experimental/type_traits>
+
48#endif
+
49#endif
+
50#endif
+
51
+
52#if OPENSSL_VERSION_NUMBER >= 0x30000000L // 3.0.0
+
53#define JWT_OPENSSL_3_0
+
54#elif OPENSSL_VERSION_NUMBER >= 0x10101000L // 1.1.1
+
55#define JWT_OPENSSL_1_1_1
+
56#elif OPENSSL_VERSION_NUMBER >= 0x10100000L // 1.1.0
+
57#define JWT_OPENSSL_1_1_0
+
58#elif OPENSSL_VERSION_NUMBER >= 0x10000000L // 1.0.0
+
59#define JWT_OPENSSL_1_0_0
+
60#endif
+
61
+
62#if defined(LIBRESSL_VERSION_NUMBER)
+
63#if LIBRESSL_VERSION_NUMBER >= 0x3050300fL
+
64#define JWT_OPENSSL_1_1_0
+
65#else
+
66#define JWT_OPENSSL_1_0_0
+
67#endif
+
68#endif
+
69
+
70#if defined(LIBWOLFSSL_VERSION_HEX)
+
71#define JWT_OPENSSL_1_1_1
+
72#endif
+
73
+
74#ifndef JWT_CLAIM_EXPLICIT
+
75#define JWT_CLAIM_EXPLICIT explicit
+
76#endif
+
77
+
85namespace jwt {
+
89 using date = std::chrono::system_clock::time_point;
+
90
+
+
94 namespace error {
+
+
95 struct signature_verification_exception : public std::system_error {
+
96 using system_error::system_error;
+
97 };
+
+
+
98 struct signature_generation_exception : public std::system_error {
+
99 using system_error::system_error;
+
100 };
+
+
+
101 struct rsa_exception : public std::system_error {
+
102 using system_error::system_error;
+
103 };
+
+
+
104 struct ecdsa_exception : public std::system_error {
+
105 using system_error::system_error;
+
106 };
+
+
+
107 struct token_verification_exception : public std::system_error {
+
108 using system_error::system_error;
+
109 };
+
+
+
113 enum class rsa_error {
+
114 ok = 0,
+
115 cert_load_failed = 10,
+
116 get_key_failed,
+
117 write_key_failed,
+
118 write_cert_failed,
+
119 convert_to_pem_failed,
+
120 load_key_bio_write,
+
121 load_key_bio_read,
+
122 create_mem_bio_failed,
+
123 no_key_provided
+
124 };
+
+
+
128 inline std::error_category& rsa_error_category() {
+
129 class rsa_error_cat : public std::error_category {
+
130 public:
+
131 const char* name() const noexcept override { return "rsa_error"; };
+
132 std::string message(int ev) const override {
+
133 switch (static_cast<rsa_error>(ev)) {
+
134 case rsa_error::ok: return "no error";
+
135 case rsa_error::cert_load_failed: return "error loading cert into memory";
+
136 case rsa_error::get_key_failed: return "error getting key from certificate";
+
137 case rsa_error::write_key_failed: return "error writing key data in PEM format";
+
138 case rsa_error::write_cert_failed: return "error writing cert data in PEM format";
+
139 case rsa_error::convert_to_pem_failed: return "failed to convert key to pem";
+
140 case rsa_error::load_key_bio_write: return "failed to load key: bio write failed";
+
141 case rsa_error::load_key_bio_read: return "failed to load key: bio read failed";
+
142 case rsa_error::create_mem_bio_failed: return "failed to create memory bio";
+
143 case rsa_error::no_key_provided: return "at least one of public or private key need to be present";
+
144 default: return "unknown RSA error";
+
145 }
+
146 }
+
147 };
+
148 static rsa_error_cat cat;
+
149 return cat;
+
150 }
+
+
151
+
152 inline std::error_code make_error_code(rsa_error e) { return {static_cast<int>(e), rsa_error_category()}; }
+
+
156 enum class ecdsa_error {
+
157 ok = 0,
+
158 load_key_bio_write = 10,
+
159 load_key_bio_read,
+
160 create_mem_bio_failed,
+
161 no_key_provided,
+
162 invalid_key_size,
+
163 invalid_key,
+
164 create_context_failed
+
165 };
+
+
+
169 inline std::error_category& ecdsa_error_category() {
+
170 class ecdsa_error_cat : public std::error_category {
+
171 public:
+
172 const char* name() const noexcept override { return "ecdsa_error"; };
+
173 std::string message(int ev) const override {
+
174 switch (static_cast<ecdsa_error>(ev)) {
+
175 case ecdsa_error::ok: return "no error";
+
176 case ecdsa_error::load_key_bio_write: return "failed to load key: bio write failed";
+
177 case ecdsa_error::load_key_bio_read: return "failed to load key: bio read failed";
+
178 case ecdsa_error::create_mem_bio_failed: return "failed to create memory bio";
+
179 case ecdsa_error::no_key_provided:
+
180 return "at least one of public or private key need to be present";
+
181 case ecdsa_error::invalid_key_size: return "invalid key size";
+
182 case ecdsa_error::invalid_key: return "invalid key";
+
183 case ecdsa_error::create_context_failed: return "failed to create context";
+
184 default: return "unknown ECDSA error";
+
185 }
+
186 }
+
187 };
+
188 static ecdsa_error_cat cat;
+
189 return cat;
+
190 }
+
+
191
+
192 inline std::error_code make_error_code(ecdsa_error e) { return {static_cast<int>(e), ecdsa_error_category()}; }
+
193
+
+ +
198 ok = 0,
+
199 invalid_signature = 10,
+
200 create_context_failed,
+
201 verifyinit_failed,
+
202 verifyupdate_failed,
+
203 verifyfinal_failed,
+
204 get_key_failed,
+
205 set_rsa_pss_saltlen_failed,
+
206 signature_encoding_failed
+
207 };
+
+
+
211 inline std::error_category& signature_verification_error_category() {
+
212 class verification_error_cat : public std::error_category {
+
213 public:
+
214 const char* name() const noexcept override { return "signature_verification_error"; };
+
215 std::string message(int ev) const override {
+
216 switch (static_cast<signature_verification_error>(ev)) {
+
217 case signature_verification_error::ok: return "no error";
+
218 case signature_verification_error::invalid_signature: return "invalid signature";
+
219 case signature_verification_error::create_context_failed:
+
220 return "failed to verify signature: could not create context";
+
221 case signature_verification_error::verifyinit_failed:
+
222 return "failed to verify signature: VerifyInit failed";
+
223 case signature_verification_error::verifyupdate_failed:
+
224 return "failed to verify signature: VerifyUpdate failed";
+
225 case signature_verification_error::verifyfinal_failed:
+
226 return "failed to verify signature: VerifyFinal failed";
+
227 case signature_verification_error::get_key_failed:
+
228 return "failed to verify signature: Could not get key";
+
229 case signature_verification_error::set_rsa_pss_saltlen_failed:
+
230 return "failed to verify signature: EVP_PKEY_CTX_set_rsa_pss_saltlen failed";
+
231 case signature_verification_error::signature_encoding_failed:
+
232 return "failed to verify signature: i2d_ECDSA_SIG failed";
+
233 default: return "unknown signature verification error";
+
234 }
+
235 }
+
236 };
+
237 static verification_error_cat cat;
+
238 return cat;
+
239 }
+
+
240
+
241 inline std::error_code make_error_code(signature_verification_error e) {
+
242 return {static_cast<int>(e), signature_verification_error_category()};
+
243 }
+
244
+
+ +
249 ok = 0,
+
250 hmac_failed = 10,
+
251 create_context_failed,
+
252 signinit_failed,
+
253 signupdate_failed,
+
254 signfinal_failed,
+
255 ecdsa_do_sign_failed,
+
256 digestinit_failed,
+
257 digestupdate_failed,
+
258 digestfinal_failed,
+
259 rsa_padding_failed,
+
260 rsa_private_encrypt_failed,
+
261 get_key_failed,
+
262 set_rsa_pss_saltlen_failed,
+
263 signature_decoding_failed
+
264 };
+
+
+
268 inline std::error_category& signature_generation_error_category() {
+
269 class signature_generation_error_cat : public std::error_category {
+
270 public:
+
271 const char* name() const noexcept override { return "signature_generation_error"; };
+
272 std::string message(int ev) const override {
+
273 switch (static_cast<signature_generation_error>(ev)) {
+
274 case signature_generation_error::ok: return "no error";
+
275 case signature_generation_error::hmac_failed: return "hmac failed";
+
276 case signature_generation_error::create_context_failed:
+
277 return "failed to create signature: could not create context";
+
278 case signature_generation_error::signinit_failed:
+
279 return "failed to create signature: SignInit failed";
+
280 case signature_generation_error::signupdate_failed:
+
281 return "failed to create signature: SignUpdate failed";
+
282 case signature_generation_error::signfinal_failed:
+
283 return "failed to create signature: SignFinal failed";
+
284 case signature_generation_error::ecdsa_do_sign_failed: return "failed to generate ecdsa signature";
+
285 case signature_generation_error::digestinit_failed:
+
286 return "failed to create signature: DigestInit failed";
+
287 case signature_generation_error::digestupdate_failed:
+
288 return "failed to create signature: DigestUpdate failed";
+
289 case signature_generation_error::digestfinal_failed:
+
290 return "failed to create signature: DigestFinal failed";
+
291 case signature_generation_error::rsa_padding_failed:
+
292 return "failed to create signature: EVP_PKEY_CTX_set_rsa_padding failed";
+
293 case signature_generation_error::rsa_private_encrypt_failed:
+
294 return "failed to create signature: RSA_private_encrypt failed";
+
295 case signature_generation_error::get_key_failed:
+
296 return "failed to generate signature: Could not get key";
+
297 case signature_generation_error::set_rsa_pss_saltlen_failed:
+
298 return "failed to create signature: EVP_PKEY_CTX_set_rsa_pss_saltlen failed";
+
299 case signature_generation_error::signature_decoding_failed:
+
300 return "failed to create signature: d2i_ECDSA_SIG failed";
+
301 default: return "unknown signature generation error";
+
302 }
+
303 }
+
304 };
+
305 static signature_generation_error_cat cat = {};
+
306 return cat;
+
307 }
+
+
308
+
309 inline std::error_code make_error_code(signature_generation_error e) {
+
310 return {static_cast<int>(e), signature_generation_error_category()};
+
311 }
+
312
+
+ +
317 ok = 0,
+
318 wrong_algorithm = 10,
+
319 missing_claim,
+
320 claim_type_missmatch,
+
321 claim_value_missmatch,
+
322 token_expired,
+
323 audience_missmatch
+
324 };
+
+
+
328 inline std::error_category& token_verification_error_category() {
+
329 class token_verification_error_cat : public std::error_category {
+
330 public:
+
331 const char* name() const noexcept override { return "token_verification_error"; };
+
332 std::string message(int ev) const override {
+
333 switch (static_cast<token_verification_error>(ev)) {
+
334 case token_verification_error::ok: return "no error";
+
335 case token_verification_error::wrong_algorithm: return "wrong algorithm";
+
336 case token_verification_error::missing_claim: return "decoded JWT is missing required claim(s)";
+
337 case token_verification_error::claim_type_missmatch:
+
338 return "claim type does not match expected type";
+
339 case token_verification_error::claim_value_missmatch:
+
340 return "claim value does not match expected value";
+
341 case token_verification_error::token_expired: return "token expired";
+
342 case token_verification_error::audience_missmatch:
+
343 return "token doesn't contain the required audience";
+
344 default: return "unknown token verification error";
+
345 }
+
346 }
+
347 };
+
348 static token_verification_error_cat cat = {};
+
349 return cat;
+
350 }
+
+
351
+
352 inline std::error_code make_error_code(token_verification_error e) {
+
353 return {static_cast<int>(e), token_verification_error_category()};
+
354 }
+
355
+
356 inline void throw_if_error(std::error_code ec) {
+
357 if (ec) {
+
358 if (ec.category() == rsa_error_category()) throw rsa_exception(ec);
+
359 if (ec.category() == ecdsa_error_category()) throw ecdsa_exception(ec);
+
360 if (ec.category() == signature_verification_error_category())
+
361 throw signature_verification_exception(ec);
+
362 if (ec.category() == signature_generation_error_category()) throw signature_generation_exception(ec);
+
363 if (ec.category() == token_verification_error_category()) throw token_verification_exception(ec);
+
364 }
+
365 }
+
366 } // namespace error
+
+
367} // namespace jwt
+
368
+
369namespace std {
+
370 template<>
+
371 struct is_error_code_enum<jwt::error::rsa_error> : true_type {};
+
372 template<>
+
373 struct is_error_code_enum<jwt::error::ecdsa_error> : true_type {};
+
374 template<>
+
375 struct is_error_code_enum<jwt::error::signature_verification_error> : true_type {};
+
376 template<>
+
377 struct is_error_code_enum<jwt::error::signature_generation_error> : true_type {};
+
378 template<>
+
379 struct is_error_code_enum<jwt::error::token_verification_error> : true_type {};
+
380} // namespace std
+
381
+
382namespace jwt {
+
+
390 namespace helper {
+
+ +
399 public:
+
400 constexpr evp_pkey_handle() noexcept = default;
+
401#ifdef JWT_OPENSSL_1_0_0
+
406 explicit evp_pkey_handle(EVP_PKEY* key) { m_key = std::shared_ptr<EVP_PKEY>(key, EVP_PKEY_free); }
+
407
+
408 EVP_PKEY* get() const noexcept { return m_key.get(); }
+
409 bool operator!() const noexcept { return m_key == nullptr; }
+
410 explicit operator bool() const noexcept { return m_key != nullptr; }
+
411
+
412 private:
+
413 std::shared_ptr<EVP_PKEY> m_key{nullptr};
+
414#else
+
419 explicit constexpr evp_pkey_handle(EVP_PKEY* key) noexcept : m_key{key} {}
+
420 evp_pkey_handle(const evp_pkey_handle& other) : m_key{other.m_key} {
+
421 if (m_key != nullptr && EVP_PKEY_up_ref(m_key) != 1) throw std::runtime_error("EVP_PKEY_up_ref failed");
+
422 }
+
423// C++11 requires the body of a constexpr constructor to be empty
+
424#if __cplusplus >= 201402L
+
425 constexpr
+
426#endif
+
427 evp_pkey_handle(evp_pkey_handle&& other) noexcept
+
428 : m_key{other.m_key} {
+
429 other.m_key = nullptr;
+
430 }
+
431 evp_pkey_handle& operator=(const evp_pkey_handle& other) {
+
432 if (&other == this) return *this;
+
433 decrement_ref_count(m_key);
+
434 m_key = other.m_key;
+
435 increment_ref_count(m_key);
+
436 return *this;
+
437 }
+
438 evp_pkey_handle& operator=(evp_pkey_handle&& other) noexcept {
+
439 if (&other == this) return *this;
+
440 decrement_ref_count(m_key);
+
441 m_key = other.m_key;
+
442 other.m_key = nullptr;
+
443 return *this;
+
444 }
+
445 evp_pkey_handle& operator=(EVP_PKEY* key) {
+
446 decrement_ref_count(m_key);
+
447 m_key = key;
+
448 increment_ref_count(m_key);
+
449 return *this;
+
450 }
+
451 ~evp_pkey_handle() noexcept { decrement_ref_count(m_key); }
+
452
+
453 EVP_PKEY* get() const noexcept { return m_key; }
+
454 bool operator!() const noexcept { return m_key == nullptr; }
+
455 explicit operator bool() const noexcept { return m_key != nullptr; }
+
456
+
457 private:
+
458 EVP_PKEY* m_key{nullptr};
+
459
+
460 static void increment_ref_count(EVP_PKEY* key) {
+
461 if (key != nullptr && EVP_PKEY_up_ref(key) != 1) throw std::runtime_error("EVP_PKEY_up_ref failed");
+
462 }
+
463 static void decrement_ref_count(EVP_PKEY* key) noexcept {
+
464 if (key != nullptr) EVP_PKEY_free(key);
+
465 }
+
466#endif
+
467 };
+
+
468
+
469 inline std::unique_ptr<BIO, decltype(&BIO_free_all)> make_mem_buf_bio() {
+
470 return std::unique_ptr<BIO, decltype(&BIO_free_all)>(BIO_new(BIO_s_mem()), BIO_free_all);
+
471 }
+
472
+
473 inline std::unique_ptr<BIO, decltype(&BIO_free_all)> make_mem_buf_bio(const std::string& data) {
+
474 return std::unique_ptr<BIO, decltype(&BIO_free_all)>(
+
475#if OPENSSL_VERSION_NUMBER <= 0x10100003L
+
476 BIO_new_mem_buf(const_cast<char*>(data.data()), static_cast<int>(data.size())), BIO_free_all
+
477#else
+
478 BIO_new_mem_buf(data.data(), static_cast<int>(data.size())), BIO_free_all
+
479#endif
+
480 );
+
481 }
+
482
+
483 inline std::unique_ptr<EVP_MD_CTX, void (*)(EVP_MD_CTX*)> make_evp_md_ctx() {
+
484 return
+
485#ifdef JWT_OPENSSL_1_0_0
+
486 std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_destroy)>(EVP_MD_CTX_create(), &EVP_MD_CTX_destroy);
+
487#else
+
488 std::unique_ptr<EVP_MD_CTX, decltype(&EVP_MD_CTX_free)>(EVP_MD_CTX_new(), &EVP_MD_CTX_free);
+
489#endif
+
490 }
+
491
+
+
499 inline std::string extract_pubkey_from_cert(const std::string& certstr, const std::string& pw,
+
500 std::error_code& ec) {
+
501 ec.clear();
+
502 auto certbio = make_mem_buf_bio(certstr);
+
503 auto keybio = make_mem_buf_bio();
+
504 if (!certbio || !keybio) {
+
505 ec = error::rsa_error::create_mem_bio_failed;
+
506 return {};
+
507 }
+
508
+
509 std::unique_ptr<X509, decltype(&X509_free)> cert(
+
510 PEM_read_bio_X509(certbio.get(), nullptr, nullptr, const_cast<char*>(pw.c_str())), X509_free);
+
511 if (!cert) {
+
512 ec = error::rsa_error::cert_load_failed;
+
513 return {};
+
514 }
+
515 std::unique_ptr<EVP_PKEY, decltype(&EVP_PKEY_free)> key(X509_get_pubkey(cert.get()), EVP_PKEY_free);
+
516 if (!key) {
+
517 ec = error::rsa_error::get_key_failed;
+
518 return {};
+
519 }
+
520 if (PEM_write_bio_PUBKEY(keybio.get(), key.get()) == 0) {
+
521 ec = error::rsa_error::write_key_failed;
+
522 return {};
+
523 }
+
524 char* ptr = nullptr;
+
525 auto len = BIO_get_mem_data(keybio.get(), &ptr);
+
526 if (len <= 0 || ptr == nullptr) {
+
527 ec = error::rsa_error::convert_to_pem_failed;
+
528 return {};
+
529 }
+
530 return {ptr, static_cast<size_t>(len)};
+
531 }
+
+
532
+
+
540 inline std::string extract_pubkey_from_cert(const std::string& certstr, const std::string& pw = "") {
+
541 std::error_code ec;
+
542 auto res = extract_pubkey_from_cert(certstr, pw, ec);
+
543 error::throw_if_error(ec);
+
544 return res;
+
545 }
+
+
546
+
+
553 inline std::string convert_der_to_pem(const std::string& cert_der_str, std::error_code& ec) {
+
554 ec.clear();
+
555
+
556 auto c_str = reinterpret_cast<const unsigned char*>(cert_der_str.c_str());
+
557
+
558 std::unique_ptr<X509, decltype(&X509_free)> cert(
+
559 d2i_X509(NULL, &c_str, static_cast<int>(cert_der_str.size())), X509_free);
+
560 auto certbio = make_mem_buf_bio();
+
561 if (!cert || !certbio) {
+
562 ec = error::rsa_error::create_mem_bio_failed;
+
563 return {};
+
564 }
+
565
+
566 if (!PEM_write_bio_X509(certbio.get(), cert.get())) {
+
567 ec = error::rsa_error::write_cert_failed;
+
568 return {};
+
569 }
+
570
+
571 char* ptr = nullptr;
+
572 const auto len = BIO_get_mem_data(certbio.get(), &ptr);
+
573 if (len <= 0 || ptr == nullptr) {
+
574 ec = error::rsa_error::convert_to_pem_failed;
+
575 return {};
+
576 }
+
577
+
578 return {ptr, static_cast<size_t>(len)};
+
579 }
+
+
580
+
595 template<typename Decode>
+
+
596 std::string convert_base64_der_to_pem(const std::string& cert_base64_der_str, Decode decode,
+
597 std::error_code& ec) {
+
598 ec.clear();
+
599 const auto decoded_str = decode(cert_base64_der_str);
+
600 return convert_der_to_pem(decoded_str, ec);
+
601 }
+
+
602
+
617 template<typename Decode>
+
+
618 std::string convert_base64_der_to_pem(const std::string& cert_base64_der_str, Decode decode) {
+
619 std::error_code ec;
+
620 auto res = convert_base64_der_to_pem(cert_base64_der_str, std::move(decode), ec);
+
621 error::throw_if_error(ec);
+
622 return res;
+
623 }
+
+
624
+
+
631 inline std::string convert_der_to_pem(const std::string& cert_der_str) {
+
632 std::error_code ec;
+
633 auto res = convert_der_to_pem(cert_der_str, ec);
+
634 error::throw_if_error(ec);
+
635 return res;
+
636 }
+
+
637
+
638#ifndef JWT_DISABLE_BASE64
+
+
648 inline std::string convert_base64_der_to_pem(const std::string& cert_base64_der_str, std::error_code& ec) {
+
649 auto decode = [](const std::string& token) {
+
650 return base::decode<alphabet::base64>(base::pad<alphabet::base64>(token));
+
651 };
+
652 return convert_base64_der_to_pem(cert_base64_der_str, std::move(decode), ec);
+
653 }
+
+
654
+
+
664 inline std::string convert_base64_der_to_pem(const std::string& cert_base64_der_str) {
+
665 std::error_code ec;
+
666 auto res = convert_base64_der_to_pem(cert_base64_der_str, ec);
+
667 error::throw_if_error(ec);
+
668 return res;
+
669 }
+
+
670#endif
+
+
680 inline evp_pkey_handle load_public_key_from_string(const std::string& key, const std::string& password,
+
681 std::error_code& ec) {
+
682 ec.clear();
+
683 auto pubkey_bio = make_mem_buf_bio();
+
684 if (!pubkey_bio) {
+
685 ec = error::rsa_error::create_mem_bio_failed;
+
686 return {};
+
687 }
+
688 if (key.substr(0, 27) == "-----BEGIN CERTIFICATE-----") {
+
689 auto epkey = helper::extract_pubkey_from_cert(key, password, ec);
+
690 if (ec) return {};
+
691 const int len = static_cast<int>(epkey.size());
+
692 if (BIO_write(pubkey_bio.get(), epkey.data(), len) != len) {
+
693 ec = error::rsa_error::load_key_bio_write;
+
694 return {};
+
695 }
+
696 } else {
+
697 const int len = static_cast<int>(key.size());
+
698 if (BIO_write(pubkey_bio.get(), key.data(), len) != len) {
+
699 ec = error::rsa_error::load_key_bio_write;
+
700 return {};
+
701 }
+
702 }
+
703
+
704 evp_pkey_handle pkey(PEM_read_bio_PUBKEY(
+
705 pubkey_bio.get(), nullptr, nullptr,
+
706 (void*)password.data())); // NOLINT(google-readability-casting) requires `const_cast`
+
707 if (!pkey) ec = error::rsa_error::load_key_bio_read;
+
708 return pkey;
+
709 }
+
+
710
+
+
720 inline evp_pkey_handle load_public_key_from_string(const std::string& key, const std::string& password = "") {
+
721 std::error_code ec;
+
722 auto res = load_public_key_from_string(key, password, ec);
+
723 error::throw_if_error(ec);
+
724 return res;
+
725 }
+
+
726
+
+
734 inline evp_pkey_handle load_private_key_from_string(const std::string& key, const std::string& password,
+
735 std::error_code& ec) {
+
736 auto privkey_bio = make_mem_buf_bio();
+
737 if (!privkey_bio) {
+
738 ec = error::rsa_error::create_mem_bio_failed;
+
739 return {};
+
740 }
+
741 const int len = static_cast<int>(key.size());
+
742 if (BIO_write(privkey_bio.get(), key.data(), len) != len) {
+
743 ec = error::rsa_error::load_key_bio_write;
+
744 return {};
+
745 }
+
746 evp_pkey_handle pkey(
+
747 PEM_read_bio_PrivateKey(privkey_bio.get(), nullptr, nullptr, const_cast<char*>(password.c_str())));
+
748 if (!pkey) ec = error::rsa_error::load_key_bio_read;
+
749 return pkey;
+
750 }
+
+
751
+
+
759 inline evp_pkey_handle load_private_key_from_string(const std::string& key, const std::string& password = "") {
+
760 std::error_code ec;
+
761 auto res = load_private_key_from_string(key, password, ec);
+
762 error::throw_if_error(ec);
+
763 return res;
+
764 }
+
+
765
+
+
775 inline evp_pkey_handle load_public_ec_key_from_string(const std::string& key, const std::string& password,
+
776 std::error_code& ec) {
+
777 ec.clear();
+
778 auto pubkey_bio = make_mem_buf_bio();
+
779 if (!pubkey_bio) {
+
780 ec = error::ecdsa_error::create_mem_bio_failed;
+
781 return {};
+
782 }
+
783 if (key.substr(0, 27) == "-----BEGIN CERTIFICATE-----") {
+
784 auto epkey = helper::extract_pubkey_from_cert(key, password, ec);
+
785 if (ec) return {};
+
786 const int len = static_cast<int>(epkey.size());
+
787 if (BIO_write(pubkey_bio.get(), epkey.data(), len) != len) {
+
788 ec = error::ecdsa_error::load_key_bio_write;
+
789 return {};
+
790 }
+
791 } else {
+
792 const int len = static_cast<int>(key.size());
+
793 if (BIO_write(pubkey_bio.get(), key.data(), len) != len) {
+
794 ec = error::ecdsa_error::load_key_bio_write;
+
795 return {};
+
796 }
+
797 }
+
798
+
799 evp_pkey_handle pkey(PEM_read_bio_PUBKEY(
+
800 pubkey_bio.get(), nullptr, nullptr,
+
801 (void*)password.data())); // NOLINT(google-readability-casting) requires `const_cast`
+
802 if (!pkey) ec = error::ecdsa_error::load_key_bio_read;
+
803 return pkey;
+
804 }
+
+
805
+
+
815 inline evp_pkey_handle load_public_ec_key_from_string(const std::string& key,
+
816 const std::string& password = "") {
+
817 std::error_code ec;
+
818 auto res = load_public_ec_key_from_string(key, password, ec);
+
819 error::throw_if_error(ec);
+
820 return res;
+
821 }
+
+
822
+
+
830 inline evp_pkey_handle load_private_ec_key_from_string(const std::string& key, const std::string& password,
+
831 std::error_code& ec) {
+
832 auto privkey_bio = make_mem_buf_bio();
+
833 if (!privkey_bio) {
+
834 ec = error::ecdsa_error::create_mem_bio_failed;
+
835 return {};
+
836 }
+
837 const int len = static_cast<int>(key.size());
+
838 if (BIO_write(privkey_bio.get(), key.data(), len) != len) {
+
839 ec = error::ecdsa_error::load_key_bio_write;
+
840 return {};
+
841 }
+
842 evp_pkey_handle pkey(
+
843 PEM_read_bio_PrivateKey(privkey_bio.get(), nullptr, nullptr, const_cast<char*>(password.c_str())));
+
844 if (!pkey) ec = error::ecdsa_error::load_key_bio_read;
+
845 return pkey;
+
846 }
+
+
847
+
+ +
856 const std::string& password = "") {
+
857 std::error_code ec;
+
858 auto res = load_private_ec_key_from_string(key, password, ec);
+
859 error::throw_if_error(ec);
+
860 return res;
+
861 }
+
+
862
+
868 inline
+
869#ifdef JWT_OPENSSL_1_0_0
+
870 std::string
+
871 bn2raw(BIGNUM* bn)
+
872#else
+
873 std::string
+
+
874 bn2raw(const BIGNUM* bn)
+
875#endif
+
876 {
+
877 std::string res(BN_num_bytes(bn), '\0');
+
878 BN_bn2bin(bn, (unsigned char*)res.data()); // NOLINT(google-readability-casting) requires `const_cast`
+
879 return res;
+
880 }
+
+
+
886 inline std::unique_ptr<BIGNUM, decltype(&BN_free)> raw2bn(const std::string& raw) {
+
887 return std::unique_ptr<BIGNUM, decltype(&BN_free)>(
+
888 BN_bin2bn(reinterpret_cast<const unsigned char*>(raw.data()), static_cast<int>(raw.size()), nullptr),
+
889 BN_free);
+
890 }
+
+
891 } // namespace helper
+
+
892
+
+
902 namespace algorithm {
+
910 struct none {
+
914 std::string sign(const std::string& /*unused*/, std::error_code& ec) const {
+
915 ec.clear();
+
916 return {};
+
917 }
+
925 void verify(const std::string& /*unused*/, const std::string& signature, std::error_code& ec) const {
+
926 ec.clear();
+
927 if (!signature.empty()) { ec = error::signature_verification_error::invalid_signature; }
+
928 }
+
930 std::string name() const { return "none"; }
+
931 };
+
935 struct hmacsha {
+
942 hmacsha(std::string key, const EVP_MD* (*md)(), std::string name)
+
943 : secret(std::move(key)), md(md), alg_name(std::move(name)) {}
+
950 std::string sign(const std::string& data, std::error_code& ec) const {
+
951 ec.clear();
+
952 std::string res(static_cast<size_t>(EVP_MAX_MD_SIZE), '\0');
+
953 auto len = static_cast<unsigned int>(res.size());
+
954 if (HMAC(md(), secret.data(), static_cast<int>(secret.size()),
+
955 reinterpret_cast<const unsigned char*>(data.data()), static_cast<int>(data.size()),
+
956 (unsigned char*)res.data(), // NOLINT(google-readability-casting) requires `const_cast`
+
957 &len) == nullptr) {
+
958 ec = error::signature_generation_error::hmac_failed;
+
959 return {};
+
960 }
+
961 res.resize(len);
+
962 return res;
+
963 }
+
970 void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
+
971 ec.clear();
+
972 auto res = sign(data, ec);
+
973 if (ec) return;
+
974
+
975 bool matched = true;
+
976 for (size_t i = 0; i < std::min<size_t>(res.size(), signature.size()); i++)
+
977 if (res[i] != signature[i]) matched = false;
+
978 if (res.size() != signature.size()) matched = false;
+
979 if (!matched) {
+
980 ec = error::signature_verification_error::invalid_signature;
+
981 return;
+
982 }
+
983 }
+
988 std::string name() const { return alg_name; }
+
989
+
990 private:
+
992 const std::string secret;
+
994 const EVP_MD* (*md)();
+
996 const std::string alg_name;
+
997 };
+
1001 struct rsa {
+
1011 rsa(const std::string& public_key, const std::string& private_key, const std::string& public_key_password,
+
1012 const std::string& private_key_password, const EVP_MD* (*md)(), std::string name)
+
1013 : md(md), alg_name(std::move(name)) {
+
1014 if (!private_key.empty()) {
+
1015 pkey = helper::load_private_key_from_string(private_key, private_key_password);
+
1016 } else if (!public_key.empty()) {
+
1017 pkey = helper::load_public_key_from_string(public_key, public_key_password);
+
1018 } else
+
1019 throw error::rsa_exception(error::rsa_error::no_key_provided);
+
1020 }
+
1027 std::string sign(const std::string& data, std::error_code& ec) const {
+
1028 ec.clear();
+
1029 auto ctx = helper::make_evp_md_ctx();
+
1030 if (!ctx) {
+
1031 ec = error::signature_generation_error::create_context_failed;
+
1032 return {};
+
1033 }
+
1034 if (!EVP_SignInit(ctx.get(), md())) {
+
1035 ec = error::signature_generation_error::signinit_failed;
+
1036 return {};
+
1037 }
+
1038
+
1039 std::string res(EVP_PKEY_size(pkey.get()), '\0');
+
1040 unsigned int len = 0;
+
1041
+
1042 if (!EVP_SignUpdate(ctx.get(), data.data(), data.size())) {
+
1043 ec = error::signature_generation_error::signupdate_failed;
+
1044 return {};
+
1045 }
+
1046 if (EVP_SignFinal(ctx.get(), (unsigned char*)res.data(), &len, pkey.get()) == 0) {
+
1047 ec = error::signature_generation_error::signfinal_failed;
+
1048 return {};
+
1049 }
+
1050
+
1051 res.resize(len);
+
1052 return res;
+
1053 }
+
1060 void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
+
1061 ec.clear();
+
1062 auto ctx = helper::make_evp_md_ctx();
+
1063 if (!ctx) {
+
1064 ec = error::signature_verification_error::create_context_failed;
+
1065 return;
+
1066 }
+
1067 if (!EVP_VerifyInit(ctx.get(), md())) {
+
1068 ec = error::signature_verification_error::verifyinit_failed;
+
1069 return;
+
1070 }
+
1071 if (!EVP_VerifyUpdate(ctx.get(), data.data(), data.size())) {
+
1072 ec = error::signature_verification_error::verifyupdate_failed;
+
1073 return;
+
1074 }
+
1075 auto res = EVP_VerifyFinal(ctx.get(), reinterpret_cast<const unsigned char*>(signature.data()),
+
1076 static_cast<unsigned int>(signature.size()), pkey.get());
+
1077 if (res != 1) {
+
1078 ec = error::signature_verification_error::verifyfinal_failed;
+
1079 return;
+
1080 }
+
1081 }
+
1086 std::string name() const { return alg_name; }
+
1087
+
1088 private:
+ +
1092 const EVP_MD* (*md)();
+
1094 const std::string alg_name;
+
1095 };
+
1099 struct ecdsa {
+
1111 ecdsa(const std::string& public_key, const std::string& private_key, const std::string& public_key_password,
+
1112 const std::string& private_key_password, const EVP_MD* (*md)(), std::string name, size_t siglen)
+
1113 : md(md), alg_name(std::move(name)), signature_length(siglen) {
+
1114 if (!private_key.empty()) {
+
1115 pkey = helper::load_private_ec_key_from_string(private_key, private_key_password);
+
1116 check_private_key(pkey.get());
+
1117 } else if (!public_key.empty()) {
+
1118 pkey = helper::load_public_ec_key_from_string(public_key, public_key_password);
+
1119 check_public_key(pkey.get());
+
1120 } else {
+
1121 throw error::ecdsa_exception(error::ecdsa_error::no_key_provided);
+
1122 }
+
1123 if (!pkey) throw error::ecdsa_exception(error::ecdsa_error::invalid_key);
+
1124
+
1125 size_t keysize = EVP_PKEY_bits(pkey.get());
+
1126 if (keysize != signature_length * 4 && (signature_length != 132 || keysize != 521))
+
1127 throw error::ecdsa_exception(error::ecdsa_error::invalid_key_size);
+
1128 }
+
1129
+
1136 std::string sign(const std::string& data, std::error_code& ec) const {
+
1137 ec.clear();
+
1138 auto ctx = helper::make_evp_md_ctx();
+
1139 if (!ctx) {
+
1140 ec = error::signature_generation_error::create_context_failed;
+
1141 return {};
+
1142 }
+
1143 if (!EVP_DigestSignInit(ctx.get(), nullptr, md(), nullptr, pkey.get())) {
+
1144 ec = error::signature_generation_error::signinit_failed;
+
1145 return {};
+
1146 }
+
1147 if (!EVP_DigestUpdate(ctx.get(), data.data(), data.size())) {
+
1148 ec = error::signature_generation_error::digestupdate_failed;
+
1149 return {};
+
1150 }
+
1151
+
1152 size_t len = 0;
+
1153 if (!EVP_DigestSignFinal(ctx.get(), nullptr, &len)) {
+
1154 ec = error::signature_generation_error::signfinal_failed;
+
1155 return {};
+
1156 }
+
1157 std::string res(len, '\0');
+
1158 if (!EVP_DigestSignFinal(ctx.get(), (unsigned char*)res.data(), &len)) {
+
1159 ec = error::signature_generation_error::signfinal_failed;
+
1160 return {};
+
1161 }
+
1162
+
1163 res.resize(len);
+
1164 return der_to_p1363_signature(res, ec);
+
1165 }
+
1166
+
1173 void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
+
1174 ec.clear();
+
1175 std::string der_signature = p1363_to_der_signature(signature, ec);
+
1176 if (ec) { return; }
+
1177
+
1178 auto ctx = helper::make_evp_md_ctx();
+
1179 if (!ctx) {
+
1180 ec = error::signature_verification_error::create_context_failed;
+
1181 return;
+
1182 }
+
1183 if (!EVP_DigestVerifyInit(ctx.get(), nullptr, md(), nullptr, pkey.get())) {
+
1184 ec = error::signature_verification_error::verifyinit_failed;
+
1185 return;
+
1186 }
+
1187 if (!EVP_DigestUpdate(ctx.get(), data.data(), data.size())) {
+
1188 ec = error::signature_verification_error::verifyupdate_failed;
+
1189 return;
+
1190 }
+
1191
+
1192#if OPENSSL_VERSION_NUMBER < 0x10002000L
+
1193 unsigned char* der_sig_data = reinterpret_cast<unsigned char*>(const_cast<char*>(der_signature.data()));
+
1194#else
+
1195 const unsigned char* der_sig_data = reinterpret_cast<const unsigned char*>(der_signature.data());
+
1196#endif
+
1197 auto res =
+
1198 EVP_DigestVerifyFinal(ctx.get(), der_sig_data, static_cast<unsigned int>(der_signature.length()));
+
1199 if (res == 0) {
+
1200 ec = error::signature_verification_error::invalid_signature;
+
1201 return;
+
1202 }
+
1203 if (res == -1) {
+
1204 ec = error::signature_verification_error::verifyfinal_failed;
+
1205 return;
+
1206 }
+
1207 }
+
1212 std::string name() const { return alg_name; }
+
1213
+
1214 private:
+
1215 static void check_public_key(EVP_PKEY* pkey) {
+
1216#ifdef JWT_OPENSSL_3_0
+
1217 std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)> ctx(
+
1218 EVP_PKEY_CTX_new_from_pkey(nullptr, pkey, nullptr), EVP_PKEY_CTX_free);
+
1219 if (!ctx) { throw error::ecdsa_exception(error::ecdsa_error::create_context_failed); }
+
1220 if (EVP_PKEY_public_check(ctx.get()) != 1) {
+
1221 throw error::ecdsa_exception(error::ecdsa_error::invalid_key);
+
1222 }
+
1223#else
+
1224 std::unique_ptr<EC_KEY, decltype(&EC_KEY_free)> eckey(EVP_PKEY_get1_EC_KEY(pkey), EC_KEY_free);
+
1225 if (!eckey) { throw error::ecdsa_exception(error::ecdsa_error::invalid_key); }
+
1226 if (EC_KEY_check_key(eckey.get()) == 0) throw error::ecdsa_exception(error::ecdsa_error::invalid_key);
+
1227#endif
+
1228 }
+
1229
+
1230 static void check_private_key(EVP_PKEY* pkey) {
+
1231#ifdef JWT_OPENSSL_3_0
+
1232 std::unique_ptr<EVP_PKEY_CTX, decltype(&EVP_PKEY_CTX_free)> ctx(
+
1233 EVP_PKEY_CTX_new_from_pkey(nullptr, pkey, nullptr), EVP_PKEY_CTX_free);
+
1234 if (!ctx) { throw error::ecdsa_exception(error::ecdsa_error::create_context_failed); }
+
1235 if (EVP_PKEY_private_check(ctx.get()) != 1) {
+
1236 throw error::ecdsa_exception(error::ecdsa_error::invalid_key);
+
1237 }
+
1238#else
+
1239 std::unique_ptr<EC_KEY, decltype(&EC_KEY_free)> eckey(EVP_PKEY_get1_EC_KEY(pkey), EC_KEY_free);
+
1240 if (!eckey) { throw error::ecdsa_exception(error::ecdsa_error::invalid_key); }
+
1241 if (EC_KEY_check_key(eckey.get()) == 0) throw error::ecdsa_exception(error::ecdsa_error::invalid_key);
+
1242#endif
+
1243 }
+
1244
+
1245 std::string der_to_p1363_signature(const std::string& der_signature, std::error_code& ec) const {
+
1246 const unsigned char* possl_signature = reinterpret_cast<const unsigned char*>(der_signature.data());
+
1247 std::unique_ptr<ECDSA_SIG, decltype(&ECDSA_SIG_free)> sig(
+
1248 d2i_ECDSA_SIG(nullptr, &possl_signature, static_cast<long>(der_signature.length())),
+
1249 ECDSA_SIG_free);
+
1250 if (!sig) {
+
1251 ec = error::signature_generation_error::signature_decoding_failed;
+
1252 return {};
+
1253 }
+
1254
+
1255#ifdef JWT_OPENSSL_1_0_0
+
1256
+
1257 auto rr = helper::bn2raw(sig->r);
+
1258 auto rs = helper::bn2raw(sig->s);
+
1259#else
+
1260 const BIGNUM* r;
+
1261 const BIGNUM* s;
+
1262 ECDSA_SIG_get0(sig.get(), &r, &s);
+
1263 auto rr = helper::bn2raw(r);
+
1264 auto rs = helper::bn2raw(s);
+
1265#endif
+
1266 if (rr.size() > signature_length / 2 || rs.size() > signature_length / 2)
+
1267 throw std::logic_error("bignum size exceeded expected length");
+
1268 rr.insert(0, signature_length / 2 - rr.size(), '\0');
+
1269 rs.insert(0, signature_length / 2 - rs.size(), '\0');
+
1270 return rr + rs;
+
1271 }
+
1272
+
1273 std::string p1363_to_der_signature(const std::string& signature, std::error_code& ec) const {
+
1274 ec.clear();
+
1275 auto r = helper::raw2bn(signature.substr(0, signature.size() / 2));
+
1276 auto s = helper::raw2bn(signature.substr(signature.size() / 2));
+
1277
+
1278 ECDSA_SIG* psig;
+
1279#ifdef JWT_OPENSSL_1_0_0
+
1280 ECDSA_SIG sig;
+
1281 sig.r = r.get();
+
1282 sig.s = s.get();
+
1283 psig = &sig;
+
1284#else
+
1285 std::unique_ptr<ECDSA_SIG, decltype(&ECDSA_SIG_free)> sig(ECDSA_SIG_new(), ECDSA_SIG_free);
+
1286 if (!sig) {
+
1287 ec = error::signature_verification_error::create_context_failed;
+
1288 return {};
+
1289 }
+
1290 ECDSA_SIG_set0(sig.get(), r.release(), s.release());
+
1291 psig = sig.get();
+
1292#endif
+
1293
+
1294 int length = i2d_ECDSA_SIG(psig, nullptr);
+
1295 if (length < 0) {
+
1296 ec = error::signature_verification_error::signature_encoding_failed;
+
1297 return {};
+
1298 }
+
1299 std::string der_signature(length, '\0');
+
1300 unsigned char* psbuffer = (unsigned char*)der_signature.data();
+
1301 length = i2d_ECDSA_SIG(psig, &psbuffer);
+
1302 if (length < 0) {
+
1303 ec = error::signature_verification_error::signature_encoding_failed;
+
1304 return {};
+
1305 }
+
1306 der_signature.resize(length);
+
1307 return der_signature;
+
1308 }
+
1309
+ +
1313 const EVP_MD* (*md)();
+
1315 const std::string alg_name;
+
1317 const size_t signature_length;
+
1318 };
+
1319
+
1320#if !defined(JWT_OPENSSL_1_0_0) && !defined(JWT_OPENSSL_1_1_0)
+
1329 struct eddsa {
+
1340 eddsa(const std::string& public_key, const std::string& private_key, const std::string& public_key_password,
+
1341 const std::string& private_key_password, std::string name)
+
1342 : alg_name(std::move(name)) {
+
1343 if (!private_key.empty()) {
+
1344 pkey = helper::load_private_key_from_string(private_key, private_key_password);
+
1345 } else if (!public_key.empty()) {
+
1346 pkey = helper::load_public_key_from_string(public_key, public_key_password);
+
1347 } else
+
1348 throw error::ecdsa_exception(error::ecdsa_error::load_key_bio_read);
+
1349 }
+
1356 std::string sign(const std::string& data, std::error_code& ec) const {
+
1357 ec.clear();
+
1358 auto ctx = helper::make_evp_md_ctx();
+
1359 if (!ctx) {
+
1360 ec = error::signature_generation_error::create_context_failed;
+
1361 return {};
+
1362 }
+
1363 if (!EVP_DigestSignInit(ctx.get(), nullptr, nullptr, nullptr, pkey.get())) {
+
1364 ec = error::signature_generation_error::signinit_failed;
+
1365 return {};
+
1366 }
+
1367
+
1368 size_t len = EVP_PKEY_size(pkey.get());
+
1369 std::string res(len, '\0');
+
1370
+
1371// LibreSSL is the special kid in the block, as it does not support EVP_DigestSign.
+
1372// OpenSSL on the otherhand does not support using EVP_DigestSignUpdate for eddsa, which is why we end up with this
+
1373// mess.
+
1374#if defined(LIBRESSL_VERSION_NUMBER) || defined(LIBWOLFSSL_VERSION_HEX)
+
1375 ERR_clear_error();
+
1376 if (EVP_DigestSignUpdate(ctx.get(), reinterpret_cast<const unsigned char*>(data.data()), data.size()) !=
+
1377 1) {
+
1378 std::cout << ERR_error_string(ERR_get_error(), NULL) << std::endl;
+
1379 ec = error::signature_generation_error::signupdate_failed;
+
1380 return {};
+
1381 }
+
1382 if (EVP_DigestSignFinal(ctx.get(), reinterpret_cast<unsigned char*>(&res[0]), &len) != 1) {
+
1383 ec = error::signature_generation_error::signfinal_failed;
+
1384 return {};
+
1385 }
+
1386#else
+
1387 if (EVP_DigestSign(ctx.get(), reinterpret_cast<unsigned char*>(&res[0]), &len,
+
1388 reinterpret_cast<const unsigned char*>(data.data()), data.size()) != 1) {
+
1389 ec = error::signature_generation_error::signfinal_failed;
+
1390 return {};
+
1391 }
+
1392#endif
+
1393
+
1394 res.resize(len);
+
1395 return res;
+
1396 }
+
1397
+
1404 void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
+
1405 ec.clear();
+
1406 auto ctx = helper::make_evp_md_ctx();
+
1407 if (!ctx) {
+
1408 ec = error::signature_verification_error::create_context_failed;
+
1409 return;
+
1410 }
+
1411 if (!EVP_DigestVerifyInit(ctx.get(), nullptr, nullptr, nullptr, pkey.get())) {
+
1412 ec = error::signature_verification_error::verifyinit_failed;
+
1413 return;
+
1414 }
+
1415// LibreSSL is the special kid in the block, as it does not support EVP_DigestVerify.
+
1416// OpenSSL on the otherhand does not support using EVP_DigestVerifyUpdate for eddsa, which is why we end up with this
+
1417// mess.
+
1418#if defined(LIBRESSL_VERSION_NUMBER) || defined(LIBWOLFSSL_VERSION_HEX)
+
1419 if (EVP_DigestVerifyUpdate(ctx.get(), reinterpret_cast<const unsigned char*>(data.data()),
+
1420 data.size()) != 1) {
+
1421 ec = error::signature_verification_error::verifyupdate_failed;
+
1422 return;
+
1423 }
+
1424 if (EVP_DigestVerifyFinal(ctx.get(), reinterpret_cast<const unsigned char*>(signature.data()),
+
1425 signature.size()) != 1) {
+
1426 ec = error::signature_verification_error::verifyfinal_failed;
+
1427 return;
+
1428 }
+
1429#else
+
1430 auto res = EVP_DigestVerify(ctx.get(), reinterpret_cast<const unsigned char*>(signature.data()),
+
1431 signature.size(), reinterpret_cast<const unsigned char*>(data.data()),
+
1432 data.size());
+
1433 if (res != 1) {
+
1434 ec = error::signature_verification_error::verifyfinal_failed;
+
1435 return;
+
1436 }
+
1437#endif
+
1438 }
+
1443 std::string name() const { return alg_name; }
+
1444
+
1445 private:
+ +
1449 const std::string alg_name;
+
1450 };
+
1451#endif
+
1455 struct pss {
+
1465 pss(const std::string& public_key, const std::string& private_key, const std::string& public_key_password,
+
1466 const std::string& private_key_password, const EVP_MD* (*md)(), std::string name)
+
1467 : md(md), alg_name(std::move(name)) {
+
1468 if (!private_key.empty()) {
+
1469 pkey = helper::load_private_key_from_string(private_key, private_key_password);
+
1470 } else if (!public_key.empty()) {
+
1471 pkey = helper::load_public_key_from_string(public_key, public_key_password);
+
1472 } else
+
1473 throw error::rsa_exception(error::rsa_error::no_key_provided);
+
1474 }
+
1475
+
1482 std::string sign(const std::string& data, std::error_code& ec) const {
+
1483 ec.clear();
+
1484 auto md_ctx = helper::make_evp_md_ctx();
+
1485 if (!md_ctx) {
+
1486 ec = error::signature_generation_error::create_context_failed;
+
1487 return {};
+
1488 }
+
1489 EVP_PKEY_CTX* ctx = nullptr;
+
1490 if (EVP_DigestSignInit(md_ctx.get(), &ctx, md(), nullptr, pkey.get()) != 1) {
+
1491 ec = error::signature_generation_error::signinit_failed;
+
1492 return {};
+
1493 }
+
1494 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING) <= 0) {
+
1495 ec = error::signature_generation_error::rsa_padding_failed;
+
1496 return {};
+
1497 }
+
1498// wolfSSL does not require EVP_PKEY_CTX_set_rsa_pss_saltlen. The default behavior
+
1499// sets the salt length to the hash length. Unlike OpenSSL which exposes this functionality.
+
1500#ifndef LIBWOLFSSL_VERSION_HEX
+
1501 if (EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, -1) <= 0) {
+
1502 ec = error::signature_generation_error::set_rsa_pss_saltlen_failed;
+
1503 return {};
+
1504 }
+
1505#endif
+
1506 if (EVP_DigestUpdate(md_ctx.get(), data.data(), data.size()) != 1) {
+
1507 ec = error::signature_generation_error::digestupdate_failed;
+
1508 return {};
+
1509 }
+
1510
+
1511 size_t size = EVP_PKEY_size(pkey.get());
+
1512 std::string res(size, 0x00);
+
1513 if (EVP_DigestSignFinal(
+
1514 md_ctx.get(),
+
1515 (unsigned char*)res.data(), // NOLINT(google-readability-casting) requires `const_cast`
+
1516 &size) <= 0) {
+
1517 ec = error::signature_generation_error::signfinal_failed;
+
1518 return {};
+
1519 }
+
1520
+
1521 return res;
+
1522 }
+
1523
+
1530 void verify(const std::string& data, const std::string& signature, std::error_code& ec) const {
+
1531 ec.clear();
+
1532
+
1533 auto md_ctx = helper::make_evp_md_ctx();
+
1534 if (!md_ctx) {
+
1535 ec = error::signature_verification_error::create_context_failed;
+
1536 return;
+
1537 }
+
1538 EVP_PKEY_CTX* ctx = nullptr;
+
1539 if (EVP_DigestVerifyInit(md_ctx.get(), &ctx, md(), nullptr, pkey.get()) != 1) {
+
1540 ec = error::signature_verification_error::verifyinit_failed;
+
1541 return;
+
1542 }
+
1543 if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PSS_PADDING) <= 0) {
+
1544 ec = error::signature_generation_error::rsa_padding_failed;
+
1545 return;
+
1546 }
+
1547// wolfSSL does not require EVP_PKEY_CTX_set_rsa_pss_saltlen. The default behavior
+
1548// sets the salt length to the hash length. Unlike OpenSSL which exposes this functionality.
+
1549#ifndef LIBWOLFSSL_VERSION_HEX
+
1550 if (EVP_PKEY_CTX_set_rsa_pss_saltlen(ctx, -1) <= 0) {
+
1551 ec = error::signature_verification_error::set_rsa_pss_saltlen_failed;
+
1552 return;
+
1553 }
+
1554#endif
+
1555 if (EVP_DigestUpdate(md_ctx.get(), data.data(), data.size()) != 1) {
+
1556 ec = error::signature_verification_error::verifyupdate_failed;
+
1557 return;
+
1558 }
+
1559
+
1560 if (EVP_DigestVerifyFinal(md_ctx.get(), (unsigned char*)signature.data(), signature.size()) <= 0) {
+
1561 ec = error::signature_verification_error::verifyfinal_failed;
+
1562 return;
+
1563 }
+
1564 }
+
1569 std::string name() const { return alg_name; }
+
1570
+
1571 private:
+ +
1575 const EVP_MD* (*md)();
+
1577 const std::string alg_name;
+
1578 };
+
1579
+
1583 struct hs256 : public hmacsha {
+
1588 explicit hs256(std::string key) : hmacsha(std::move(key), EVP_sha256, "HS256") {}
+
1589 };
+
1593 struct hs384 : public hmacsha {
+
1598 explicit hs384(std::string key) : hmacsha(std::move(key), EVP_sha384, "HS384") {}
+
1599 };
+
1603 struct hs512 : public hmacsha {
+
1608 explicit hs512(std::string key) : hmacsha(std::move(key), EVP_sha512, "HS512") {}
+
1609 };
+
1613 struct rs256 : public rsa {
+
1621 explicit rs256(const std::string& public_key, const std::string& private_key = "",
+
1622 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1623 : rsa(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "RS256") {}
+
1624 };
+
1628 struct rs384 : public rsa {
+
1636 explicit rs384(const std::string& public_key, const std::string& private_key = "",
+
1637 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1638 : rsa(public_key, private_key, public_key_password, private_key_password, EVP_sha384, "RS384") {}
+
1639 };
+
1643 struct rs512 : public rsa {
+
1651 explicit rs512(const std::string& public_key, const std::string& private_key = "",
+
1652 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1653 : rsa(public_key, private_key, public_key_password, private_key_password, EVP_sha512, "RS512") {}
+
1654 };
+
1658 struct es256 : public ecdsa {
+
1668 explicit es256(const std::string& public_key, const std::string& private_key = "",
+
1669 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1670 : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "ES256", 64) {}
+
1671 };
+
1675 struct es384 : public ecdsa {
+
1685 explicit es384(const std::string& public_key, const std::string& private_key = "",
+
1686 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1687 : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha384, "ES384", 96) {}
+
1688 };
+
1692 struct es512 : public ecdsa {
+
1702 explicit es512(const std::string& public_key, const std::string& private_key = "",
+
1703 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1704 : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha512, "ES512", 132) {}
+
1705 };
+
1709 struct es256k : public ecdsa {
+
1718 explicit es256k(const std::string& public_key, const std::string& private_key = "",
+
1719 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1720 : ecdsa(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "ES256K", 64) {}
+
1721 };
+
1722
+
1723#if !defined(JWT_OPENSSL_1_0_0) && !defined(JWT_OPENSSL_1_1_0)
+
1731 struct ed25519 : public eddsa {
+
1741 explicit ed25519(const std::string& public_key, const std::string& private_key = "",
+
1742 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1743 : eddsa(public_key, private_key, public_key_password, private_key_password, "EdDSA") {}
+
1744 };
+
1745
+
1753 struct ed448 : public eddsa {
+
1763 explicit ed448(const std::string& public_key, const std::string& private_key = "",
+
1764 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1765 : eddsa(public_key, private_key, public_key_password, private_key_password, "EdDSA") {}
+
1766 };
+
1767#endif
+
1768
+
1772 struct ps256 : public pss {
+
1780 explicit ps256(const std::string& public_key, const std::string& private_key = "",
+
1781 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1782 : pss(public_key, private_key, public_key_password, private_key_password, EVP_sha256, "PS256") {}
+
1783 };
+
1787 struct ps384 : public pss {
+
1795 explicit ps384(const std::string& public_key, const std::string& private_key = "",
+
1796 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1797 : pss(public_key, private_key, public_key_password, private_key_password, EVP_sha384, "PS384") {}
+
1798 };
+
1802 struct ps512 : public pss {
+
1810 explicit ps512(const std::string& public_key, const std::string& private_key = "",
+
1811 const std::string& public_key_password = "", const std::string& private_key_password = "")
+
1812 : pss(public_key, private_key, public_key_password, private_key_password, EVP_sha512, "PS512") {}
+
1813 };
+
1814 } // namespace algorithm
+
+
1815
+
+
1819 namespace json {
+
1825 enum class type { boolean, integer, number, string, array, object };
+
1826 } // namespace json
+
+
1827
+
1828 namespace details {
+
1829#ifdef __cpp_lib_void_t
+
1830 template<typename... Ts>
+
1831 using void_t = std::void_t<Ts...>;
+
1832#else
+
1833 // https://en.cppreference.com/w/cpp/types/void_t
+
1834 template<typename... Ts>
+
1835 struct make_void {
+
1836 using type = void;
+
1837 };
+
1838
+
1839 template<typename... Ts>
+
1840 using void_t = typename make_void<Ts...>::type;
+
1841#endif
+
1842
+
1843#ifdef __cpp_lib_experimental_detect
+
1844 template<template<typename...> class _Op, typename... _Args>
+
1845 using is_detected = std::experimental::is_detected<_Op, _Args...>;
+
1846#else
+
1847 struct nonesuch {
+
1848 nonesuch() = delete;
+
1849 ~nonesuch() = delete;
+
1850 nonesuch(nonesuch const&) = delete;
+
1851 nonesuch(nonesuch const&&) = delete;
+
1852 void operator=(nonesuch const&) = delete;
+
1853 void operator=(nonesuch&&) = delete;
+
1854 };
+
1855
+
1856 // https://en.cppreference.com/w/cpp/experimental/is_detected
+
1857 template<class Default, class AlwaysVoid, template<class...> class Op, class... Args>
+
1858 struct detector {
+
1859 using value = std::false_type;
+
1860 using type = Default;
+
1861 };
+
1862
+
1863 template<class Default, template<class...> class Op, class... Args>
+
1864 struct detector<Default, void_t<Op<Args...>>, Op, Args...> {
+
1865 using value = std::true_type;
+
1866 using type = Op<Args...>;
+
1867 };
+
1868
+
1869 template<template<class...> class Op, class... Args>
+
1870 using is_detected = typename detector<nonesuch, void, Op, Args...>::value;
+
1871#endif
+
1872
+
1873 template<typename T, typename Signature>
+
1874 using is_signature = typename std::is_same<T, Signature>;
+
1875
+
1876 template<typename traits_type, template<typename...> class Op, typename Signature>
+
1877 struct is_function_signature_detected {
+
1878 using type = Op<traits_type>;
+
1879 static constexpr auto value = is_detected<Op, traits_type>::value && std::is_function<type>::value &&
+
1880 is_signature<type, Signature>::value;
+
1881 };
+
1882
+
1883 template<typename traits_type, typename value_type>
+
1884 struct supports_get_type {
+
1885 template<typename T>
+
1886 using get_type_t = decltype(T::get_type);
+
1887
+
1888 static constexpr auto value =
+
1889 is_function_signature_detected<traits_type, get_type_t, json::type(const value_type&)>::value;
+
1890
+
1891 // Internal assertions for better feedback
+
1892 static_assert(value, "traits implementation must provide `jwt::json::type get_type(const value_type&)`");
+
1893 };
+
1894
+
1895#define JWT_CPP_JSON_TYPE_TYPE(TYPE) json_##TYPE_type
+
1896#define JWT_CPP_AS_TYPE_T(TYPE) as_##TYPE_t
+
1897#define JWT_CPP_SUPPORTS_AS(TYPE) \
+
1898 template<typename traits_type, typename value_type, typename JWT_CPP_JSON_TYPE_TYPE(TYPE)> \
+
1899 struct supports_as_##TYPE { \
+
1900 template<typename T> \
+
1901 using JWT_CPP_AS_TYPE_T(TYPE) = decltype(T::as_##TYPE); \
+
1902 \
+
1903 static constexpr auto value = \
+
1904 is_function_signature_detected<traits_type, JWT_CPP_AS_TYPE_T(TYPE), \
+
1905 JWT_CPP_JSON_TYPE_TYPE(TYPE)(const value_type&)>::value; \
+
1906 \
+
1907 static_assert(value, "traits implementation must provide `" #TYPE "_type as_" #TYPE "(const value_type&)`"); \
+
1908 }
+
1909
+
1910 JWT_CPP_SUPPORTS_AS(object);
+
1911 JWT_CPP_SUPPORTS_AS(array);
+
1912 JWT_CPP_SUPPORTS_AS(string);
+
1913 JWT_CPP_SUPPORTS_AS(number);
+
1914 JWT_CPP_SUPPORTS_AS(integer);
+
1915 JWT_CPP_SUPPORTS_AS(boolean);
+
1916
+
1917#undef JWT_CPP_JSON_TYPE_TYPE
+
1918#undef JWT_CPP_AS_TYPE_T
+
1919#undef JWT_CPP_SUPPORTS_AS
+
1920
+
1921 template<typename traits>
+
1922 struct is_valid_traits {
+
1923 static constexpr auto value =
+
1924 supports_get_type<traits, typename traits::value_type>::value &&
+
1925 supports_as_object<traits, typename traits::value_type, typename traits::object_type>::value &&
+
1926 supports_as_array<traits, typename traits::value_type, typename traits::array_type>::value &&
+
1927 supports_as_string<traits, typename traits::value_type, typename traits::string_type>::value &&
+
1928 supports_as_number<traits, typename traits::value_type, typename traits::number_type>::value &&
+
1929 supports_as_integer<traits, typename traits::value_type, typename traits::integer_type>::value &&
+
1930 supports_as_boolean<traits, typename traits::value_type, typename traits::boolean_type>::value;
+
1931 };
+
1932
+
1933 template<typename value_type>
+
1934 struct is_valid_json_value {
+
1935 static constexpr auto value =
+
1936 std::is_default_constructible<value_type>::value &&
+
1937 std::is_constructible<value_type, const value_type&>::value && // a more generic is_copy_constructible
+
1938 std::is_move_constructible<value_type>::value && std::is_assignable<value_type, value_type>::value &&
+
1939 std::is_copy_assignable<value_type>::value && std::is_move_assignable<value_type>::value;
+
1940 // TODO(prince-chrismc): Stream operators
+
1941 };
+
1942
+
1943 // https://stackoverflow.com/a/53967057/8480874
+
1944 template<typename T, typename = void>
+
1945 struct is_iterable : std::false_type {};
+
1946
+
1947 template<typename T>
+
1948 struct is_iterable<T, void_t<decltype(std::begin(std::declval<T>())), decltype(std::end(std::declval<T>())),
+
1949#if __cplusplus > 201402L
+
1950 decltype(std::cbegin(std::declval<T>())), decltype(std::cend(std::declval<T>()))
+
1951#else
+
1952 decltype(std::begin(std::declval<const T>())),
+
1953 decltype(std::end(std::declval<const T>()))
+
1954#endif
+
1955 >> : std::true_type {
+
1956 };
+
1957
+
1958#if __cplusplus > 201703L
+
1959 template<typename T>
+
1960 inline constexpr bool is_iterable_v = is_iterable<T>::value;
+
1961#endif
+
1962
+
1963 template<typename object_type, typename string_type>
+
1964 using is_count_signature = typename std::is_integral<decltype(std::declval<const object_type>().count(
+
1965 std::declval<const string_type>()))>;
+
1966
+
1967 template<typename object_type, typename string_type, typename = void>
+
1968 struct is_subcription_operator_signature : std::false_type {};
+
1969
+
1970 template<typename object_type, typename string_type>
+
1971 struct is_subcription_operator_signature<
+
1972 object_type, string_type,
+
1973 void_t<decltype(std::declval<object_type>().operator[](std::declval<string_type>()))>> : std::true_type {
+
1974 // TODO(prince-chrismc): I am not convienced this is meaningful anymore
+
1975 static_assert(
+
1976 value,
+
1977 "object_type must implementate the subscription operator '[]' taking string_type as an argument");
+
1978 };
+
1979
+
1980 template<typename object_type, typename value_type, typename string_type>
+
1981 using is_at_const_signature =
+
1982 typename std::is_same<decltype(std::declval<const object_type>().at(std::declval<const string_type>())),
+
1983 const value_type&>;
+
1984
+
1985 template<typename value_type, typename string_type, typename object_type>
+
1986 struct is_valid_json_object {
+
1987 template<typename T>
+
1988 using mapped_type_t = typename T::mapped_type;
+
1989 template<typename T>
+
1990 using key_type_t = typename T::key_type;
+
1991 template<typename T>
+
1992 using iterator_t = typename T::iterator;
+
1993 template<typename T>
+
1994 using const_iterator_t = typename T::const_iterator;
+
1995
+
1996 static constexpr auto value =
+
1997 std::is_constructible<value_type, object_type>::value &&
+
1998 is_detected<mapped_type_t, object_type>::value &&
+
1999 std::is_same<typename object_type::mapped_type, value_type>::value &&
+
2000 is_detected<key_type_t, object_type>::value &&
+
2001 (std::is_same<typename object_type::key_type, string_type>::value ||
+
2002 std::is_constructible<typename object_type::key_type, string_type>::value) &&
+
2003 is_detected<iterator_t, object_type>::value && is_detected<const_iterator_t, object_type>::value &&
+
2004 is_iterable<object_type>::value && is_count_signature<object_type, string_type>::value &&
+
2005 is_subcription_operator_signature<object_type, string_type>::value &&
+
2006 is_at_const_signature<object_type, value_type, string_type>::value;
+
2007 };
+
2008
+
2009 template<typename value_type, typename array_type>
+
2010 struct is_valid_json_array {
+
2011 template<typename T>
+
2012 using value_type_t = typename T::value_type;
+
2013
+
2014 static constexpr auto value = std::is_constructible<value_type, array_type>::value &&
+
2015 is_iterable<array_type>::value &&
+
2016 is_detected<value_type_t, array_type>::value &&
+
2017 std::is_same<typename array_type::value_type, value_type>::value;
+
2018 };
+
2019
+
2020 template<typename string_type, typename integer_type>
+
2021 using is_substr_start_end_index_signature =
+
2022 typename std::is_same<decltype(std::declval<string_type>().substr(std::declval<integer_type>(),
+
2023 std::declval<integer_type>())),
+
2024 string_type>;
+
2025
+
2026 template<typename string_type, typename integer_type>
+
2027 using is_substr_start_index_signature =
+
2028 typename std::is_same<decltype(std::declval<string_type>().substr(std::declval<integer_type>())),
+
2029 string_type>;
+
2030
+
2031 template<typename string_type>
+
2032 using is_std_operate_plus_signature =
+
2033 typename std::is_same<decltype(std::operator+(std::declval<string_type>(), std::declval<string_type>())),
+
2034 string_type>;
+
2035
+
2036 template<typename value_type, typename string_type, typename integer_type>
+
2037 struct is_valid_json_string {
+
2038 static constexpr auto substr = is_substr_start_end_index_signature<string_type, integer_type>::value &&
+
2039 is_substr_start_index_signature<string_type, integer_type>::value;
+
2040 static_assert(substr, "string_type must have a substr method taking only a start index and an overload "
+
2041 "taking a start and end index, both must return a string_type");
+
2042
+
2043 static constexpr auto operator_plus = is_std_operate_plus_signature<string_type>::value;
+
2044 static_assert(operator_plus,
+
2045 "string_type must have a '+' operator implemented which returns the concatenated string");
+
2046
+
2047 static constexpr auto value =
+
2048 std::is_constructible<value_type, string_type>::value && substr && operator_plus;
+
2049 };
+
2050
+
2051 template<typename value_type, typename number_type>
+
2052 struct is_valid_json_number {
+
2053 static constexpr auto value =
+
2054 std::is_floating_point<number_type>::value && std::is_constructible<value_type, number_type>::value;
+
2055 };
+
2056
+
2057 template<typename value_type, typename integer_type>
+
2058 struct is_valid_json_integer {
+
2059 static constexpr auto value = std::is_signed<integer_type>::value &&
+
2060 !std::is_floating_point<integer_type>::value &&
+
2061 std::is_constructible<value_type, integer_type>::value;
+
2062 };
+
2063 template<typename value_type, typename boolean_type>
+
2064 struct is_valid_json_boolean {
+
2065 static constexpr auto value = std::is_convertible<boolean_type, bool>::value &&
+
2066 std::is_constructible<value_type, boolean_type>::value;
+
2067 };
+
2068
+
2069 template<typename value_type, typename object_type, typename array_type, typename string_type,
+
2070 typename number_type, typename integer_type, typename boolean_type>
+
2071 struct is_valid_json_types {
+
2072 // Internal assertions for better feedback
+
2073 static_assert(is_valid_json_value<value_type>::value,
+
2074 "value_type must meet basic requirements, default constructor, copyable, moveable");
+
2075 static_assert(is_valid_json_object<value_type, string_type, object_type>::value,
+
2076 "object_type must be a string_type to value_type container");
+
2077 static_assert(is_valid_json_array<value_type, array_type>::value,
+
2078 "array_type must be a container of value_type");
+
2079
+
2080 static constexpr auto value = is_valid_json_value<value_type>::value &&
+
2081 is_valid_json_object<value_type, string_type, object_type>::value &&
+
2082 is_valid_json_array<value_type, array_type>::value &&
+
2083 is_valid_json_string<value_type, string_type, integer_type>::value &&
+
2084 is_valid_json_number<value_type, number_type>::value &&
+
2085 is_valid_json_integer<value_type, integer_type>::value &&
+
2086 is_valid_json_boolean<value_type, boolean_type>::value;
+
2087 };
+
2088 } // namespace details
+
2089
+
2097 template<typename json_traits>
+
+ +
2105 static_assert(std::is_same<typename json_traits::string_type, std::string>::value ||
+
2106 std::is_convertible<typename json_traits::string_type, std::string>::value ||
+
2107 std::is_constructible<typename json_traits::string_type, std::string>::value,
+
2108 "string_type must be a std::string, convertible to a std::string, or construct a std::string.");
+
2109
+
2110 static_assert(
+
2111 details::is_valid_json_types<typename json_traits::value_type, typename json_traits::object_type,
+
2112 typename json_traits::array_type, typename json_traits::string_type,
+
2113 typename json_traits::number_type, typename json_traits::integer_type,
+
2114 typename json_traits::boolean_type>::value,
+
2115 "must staisfy json container requirements");
+
2116 static_assert(details::is_valid_traits<json_traits>::value, "traits must satisfy requirements");
+
2117
+
2118 typename json_traits::value_type val;
+
2119
+
2120 public:
+
2121 using set_t = std::set<typename json_traits::string_type>;
+
2122
+
2123 basic_claim() = default;
+
2124 basic_claim(const basic_claim&) = default;
+
2125 basic_claim(basic_claim&&) = default;
+
2126 basic_claim& operator=(const basic_claim&) = default;
+
2127 basic_claim& operator=(basic_claim&&) = default;
+
2128 ~basic_claim() = default;
+
2129
+
2130 JWT_CLAIM_EXPLICIT basic_claim(typename json_traits::string_type s) : val(std::move(s)) {}
+
2131 JWT_CLAIM_EXPLICIT basic_claim(const date& d)
+
2132 : val(typename json_traits::integer_type(std::chrono::system_clock::to_time_t(d))) {}
+
2133 JWT_CLAIM_EXPLICIT basic_claim(typename json_traits::array_type a) : val(std::move(a)) {}
+
2134 JWT_CLAIM_EXPLICIT basic_claim(typename json_traits::value_type v) : val(std::move(v)) {}
+
2135 JWT_CLAIM_EXPLICIT basic_claim(const set_t& s) : val(typename json_traits::array_type(s.begin(), s.end())) {}
+
2136 template<typename Iterator>
+
2137 basic_claim(Iterator begin, Iterator end) : val(typename json_traits::array_type(begin, end)) {}
+
2138
+
2143 typename json_traits::value_type to_json() const { return val; }
+
2144
+
2149 std::istream& operator>>(std::istream& is) { return is >> val; }
+
2150
+
2155 std::ostream& operator<<(std::ostream& os) { return os << val; }
+
2156
+
2162 json::type get_type() const { return json_traits::get_type(val); }
+
2163
+
2169 typename json_traits::string_type as_string() const { return json_traits::as_string(val); }
+
2170
+
+
2179 date as_date() const {
+
2180 using std::chrono::system_clock;
+
2181 if (get_type() == json::type::number) return system_clock::from_time_t(std::round(as_number()));
+
2182 return system_clock::from_time_t(as_integer());
+
2183 }
+
+
2184
+
2190 typename json_traits::array_type as_array() const { return json_traits::as_array(val); }
+
2191
+
+
2197 set_t as_set() const {
+
2198 set_t res;
+
2199 for (const auto& e : json_traits::as_array(val)) {
+
2200 res.insert(json_traits::as_string(e));
+
2201 }
+
2202 return res;
+
2203 }
+
+
2204
+
2210 typename json_traits::integer_type as_integer() const { return json_traits::as_integer(val); }
+
2211
+
2217 typename json_traits::boolean_type as_boolean() const { return json_traits::as_boolean(val); }
+
2218
+
2224 typename json_traits::number_type as_number() const { return json_traits::as_number(val); }
+
2225 };
+
+
2226
+
2227 namespace error {
+
+
2231 struct invalid_json_exception : public std::runtime_error {
+
2232 invalid_json_exception() : runtime_error("invalid json") {}
+
2233 };
+
+
+
2237 struct claim_not_present_exception : public std::out_of_range {
+
2238 claim_not_present_exception() : out_of_range("claim not found") {}
+
2239 };
+
+
2240 } // namespace error
+
2241
+
2242 namespace details {
+
2243 template<typename json_traits>
+
2244 struct map_of_claims {
+
2245 typename json_traits::object_type claims;
+
2246 using basic_claim_t = basic_claim<json_traits>;
+
2247 using iterator = typename json_traits::object_type::iterator;
+
2248 using const_iterator = typename json_traits::object_type::const_iterator;
+
2249
+
2250 map_of_claims() = default;
+
2251 map_of_claims(const map_of_claims&) = default;
+
2252 map_of_claims(map_of_claims&&) = default;
+
2253 map_of_claims& operator=(const map_of_claims&) = default;
+
2254 map_of_claims& operator=(map_of_claims&&) = default;
+
2255
+
2256 map_of_claims(typename json_traits::object_type json) : claims(std::move(json)) {}
+
2257
+
2258 iterator begin() { return claims.begin(); }
+
2259 iterator end() { return claims.end(); }
+
2260 const_iterator cbegin() const { return claims.begin(); }
+
2261 const_iterator cend() const { return claims.end(); }
+
2262 const_iterator begin() const { return claims.begin(); }
+
2263 const_iterator end() const { return claims.end(); }
+
2264
+
2273 static typename json_traits::object_type parse_claims(const typename json_traits::string_type& str) {
+
2274 typename json_traits::value_type val;
+
2275 if (!json_traits::parse(val, str)) throw error::invalid_json_exception();
+
2276
+
2277 return json_traits::as_object(val);
+
2278 };
+
2279
+
2284 bool has_claim(const typename json_traits::string_type& name) const noexcept {
+
2285 return claims.count(name) != 0;
+
2286 }
+
2287
+
2295 basic_claim_t get_claim(const typename json_traits::string_type& name) const {
+
2296 if (!has_claim(name)) throw error::claim_not_present_exception();
+
2297 return basic_claim_t{claims.at(name)};
+
2298 }
+
2299 };
+
2300 } // namespace details
+
2301
+
2306 template<typename json_traits>
+
+
2307 class payload {
+
2308 protected:
+
2309 details::map_of_claims<json_traits> payload_claims;
+
2310
+
2311 public:
+ +
2313
+
2318 bool has_issuer() const noexcept { return has_payload_claim("iss"); }
+
2323 bool has_subject() const noexcept { return has_payload_claim("sub"); }
+
2328 bool has_audience() const noexcept { return has_payload_claim("aud"); }
+
2333 bool has_expires_at() const noexcept { return has_payload_claim("exp"); }
+
2338 bool has_not_before() const noexcept { return has_payload_claim("nbf"); }
+
2343 bool has_issued_at() const noexcept { return has_payload_claim("iat"); }
+
2348 bool has_id() const noexcept { return has_payload_claim("jti"); }
+
2355 typename json_traits::string_type get_issuer() const { return get_payload_claim("iss").as_string(); }
+
2362 typename json_traits::string_type get_subject() const { return get_payload_claim("sub").as_string(); }
+
+
2369 typename basic_claim_t::set_t get_audience() const {
+
2370 auto aud = get_payload_claim("aud");
+
2371 if (aud.get_type() == json::type::string) return {aud.as_string()};
+
2372
+
2373 return aud.as_set();
+
2374 }
+
+
2381 date get_expires_at() const { return get_payload_claim("exp").as_date(); }
+
2388 date get_not_before() const { return get_payload_claim("nbf").as_date(); }
+
2395 date get_issued_at() const { return get_payload_claim("iat").as_date(); }
+
2402 typename json_traits::string_type get_id() const { return get_payload_claim("jti").as_string(); }
+
+
2407 bool has_payload_claim(const typename json_traits::string_type& name) const noexcept {
+
2408 return payload_claims.has_claim(name);
+
2409 }
+
+
+
2415 basic_claim_t get_payload_claim(const typename json_traits::string_type& name) const {
+
2416 return payload_claims.get_claim(name);
+
2417 }
+
+
2418 };
+
+
2419
+
2424 template<typename json_traits>
+
+
2425 class header {
+
2426 protected:
+
2427 details::map_of_claims<json_traits> header_claims;
+
2428
+
2429 public:
+ +
2435 bool has_algorithm() const noexcept { return has_header_claim("alg"); }
+
2440 bool has_type() const noexcept { return has_header_claim("typ"); }
+
2445 bool has_content_type() const noexcept { return has_header_claim("cty"); }
+
2450 bool has_key_id() const noexcept { return has_header_claim("kid"); }
+
2457 typename json_traits::string_type get_algorithm() const { return get_header_claim("alg").as_string(); }
+
2464 typename json_traits::string_type get_type() const { return get_header_claim("typ").as_string(); }
+
2471 typename json_traits::string_type get_content_type() const { return get_header_claim("cty").as_string(); }
+
2478 typename json_traits::string_type get_key_id() const { return get_header_claim("kid").as_string(); }
+
+
2483 bool has_header_claim(const typename json_traits::string_type& name) const noexcept {
+
2484 return header_claims.has_claim(name);
+
2485 }
+
+
+
2491 basic_claim_t get_header_claim(const typename json_traits::string_type& name) const {
+
2492 return header_claims.get_claim(name);
+
2493 }
+
+
2494 };
+
+
2495
+
2499 template<typename json_traits>
+
+
2500 class decoded_jwt : public header<json_traits>, public payload<json_traits> {
+
2501 protected:
+
2503 typename json_traits::string_type token;
+
2505 typename json_traits::string_type header;
+
2507 typename json_traits::string_type header_base64;
+
2509 typename json_traits::string_type payload;
+
2511 typename json_traits::string_type payload_base64;
+
2513 typename json_traits::string_type signature;
+
2515 typename json_traits::string_type signature_base64;
+
2516
+
2517 public:
+ +
2519#ifndef JWT_DISABLE_BASE64
+
+
2529 JWT_CLAIM_EXPLICIT decoded_jwt(const typename json_traits::string_type& token)
+
2530 : decoded_jwt(token, [](const typename json_traits::string_type& str) {
+
2531 return base::decode<alphabet::base64url>(base::pad<alphabet::base64url>(str));
+
2532 }) {}
+
+
2533#endif
+
2545 template<typename Decode>
+
+
2546 decoded_jwt(const typename json_traits::string_type& token, Decode decode) : token(token) {
+
2547 auto hdr_end = token.find('.');
+
2548 if (hdr_end == json_traits::string_type::npos) throw std::invalid_argument("invalid token supplied");
+
2549 auto payload_end = token.find('.', hdr_end + 1);
+
2550 if (payload_end == json_traits::string_type::npos) throw std::invalid_argument("invalid token supplied");
+
2551 header_base64 = token.substr(0, hdr_end);
+
2552 payload_base64 = token.substr(hdr_end + 1, payload_end - hdr_end - 1);
+
2553 signature_base64 = token.substr(payload_end + 1);
+
2554
+ + + +
2558
+
2559 this->header_claims = details::map_of_claims<json_traits>::parse_claims(header);
+
2560 this->payload_claims = details::map_of_claims<json_traits>::parse_claims(payload);
+
2561 }
+
+
2562
+
2567 const typename json_traits::string_type& get_token() const noexcept { return token; }
+
2572 const typename json_traits::string_type& get_header() const noexcept { return header; }
+
2577 const typename json_traits::string_type& get_payload() const noexcept { return payload; }
+
2582 const typename json_traits::string_type& get_signature() const noexcept { return signature; }
+
2587 const typename json_traits::string_type& get_header_base64() const noexcept { return header_base64; }
+
2592 const typename json_traits::string_type& get_payload_base64() const noexcept { return payload_base64; }
+
2597 const typename json_traits::string_type& get_signature_base64() const noexcept { return signature_base64; }
+
2602 typename json_traits::object_type get_payload_json() const { return this->payload_claims.claims; }
+
2607 typename json_traits::object_type get_header_json() const { return this->header_claims.claims; }
+
+
2615 basic_claim_t get_payload_claim(const typename json_traits::string_type& name) const {
+
2616 return this->payload_claims.get_claim(name);
+
2617 }
+
+
+
2625 basic_claim_t get_header_claim(const typename json_traits::string_type& name) const {
+
2626 return this->header_claims.get_claim(name);
+
2627 }
+
+
2628 };
+
+
2629
+
2634 template<typename json_traits>
+
+
2635 class builder {
+
2636 typename json_traits::object_type header_claims;
+
2637 typename json_traits::object_type payload_claims;
+
2638
+
2639 public:
+
2640 builder() = default;
+
+
2647 builder& set_header_claim(const typename json_traits::string_type& id, typename json_traits::value_type c) {
+
2648 header_claims[id] = std::move(c);
+
2649 return *this;
+
2650 }
+
+
2651
+
+
2658 builder& set_header_claim(const typename json_traits::string_type& id, basic_claim<json_traits> c) {
+
2659 header_claims[id] = c.to_json();
+
2660 return *this;
+
2661 }
+
+
+
2668 builder& set_payload_claim(const typename json_traits::string_type& id, typename json_traits::value_type c) {
+
2669 payload_claims[id] = std::move(c);
+
2670 return *this;
+
2671 }
+
+
+
2678 builder& set_payload_claim(const typename json_traits::string_type& id, basic_claim<json_traits> c) {
+
2679 payload_claims[id] = c.to_json();
+
2680 return *this;
+
2681 }
+
+
+
2689 builder& set_algorithm(typename json_traits::string_type str) {
+
2690 return set_header_claim("alg", typename json_traits::value_type(str));
+
2691 }
+
+
+
2697 builder& set_type(typename json_traits::string_type str) {
+
2698 return set_header_claim("typ", typename json_traits::value_type(str));
+
2699 }
+
+
+
2705 builder& set_content_type(typename json_traits::string_type str) {
+
2706 return set_header_claim("cty", typename json_traits::value_type(str));
+
2707 }
+
+
+
2714 builder& set_key_id(typename json_traits::string_type str) {
+
2715 return set_header_claim("kid", typename json_traits::value_type(str));
+
2716 }
+
+
+
2722 builder& set_issuer(typename json_traits::string_type str) {
+
2723 return set_payload_claim("iss", typename json_traits::value_type(str));
+
2724 }
+
+
+
2730 builder& set_subject(typename json_traits::string_type str) {
+
2731 return set_payload_claim("sub", typename json_traits::value_type(str));
+
2732 }
+
+
+
2738 builder& set_audience(typename json_traits::array_type a) {
+
2739 return set_payload_claim("aud", typename json_traits::value_type(a));
+
2740 }
+
+
+
2746 builder& set_audience(typename json_traits::string_type aud) {
+
2747 return set_payload_claim("aud", typename json_traits::value_type(aud));
+
2748 }
+
+ + + +
+
2772 builder& set_id(const typename json_traits::string_type& str) {
+
2773 return set_payload_claim("jti", typename json_traits::value_type(str));
+
2774 }
+
+
2775
+
2787 template<typename Algo, typename Encode>
+
+
2788 typename json_traits::string_type sign(const Algo& algo, Encode encode) const {
+
2789 std::error_code ec;
+
2790 auto res = sign(algo, encode, ec);
+
2791 error::throw_if_error(ec);
+
2792 return res;
+
2793 }
+
+
2794#ifndef JWT_DISABLE_BASE64
+
2803 template<typename Algo>
+
+
2804 typename json_traits::string_type sign(const Algo& algo) const {
+
2805 std::error_code ec;
+
2806 auto res = sign(algo, ec);
+
2807 error::throw_if_error(ec);
+
2808 return res;
+
2809 }
+
+
2810#endif
+
2811
+
2824 template<typename Algo, typename Encode>
+
+
2825 typename json_traits::string_type sign(const Algo& algo, Encode encode, std::error_code& ec) const {
+
2826 // make a copy such that a builder can be re-used
+
2827 typename json_traits::object_type obj_header = header_claims;
+
2828 if (header_claims.count("alg") == 0) obj_header["alg"] = typename json_traits::value_type(algo.name());
+
2829
+
2830 const auto header = encode(json_traits::serialize(typename json_traits::value_type(obj_header)));
+
2831 const auto payload = encode(json_traits::serialize(typename json_traits::value_type(payload_claims)));
+
2832 const auto token = header + "." + payload;
+
2833
+
2834 auto signature = algo.sign(token, ec);
+
2835 if (ec) return {};
+
2836
+
2837 return token + "." + encode(signature);
+
2838 }
+
+
2839#ifndef JWT_DISABLE_BASE64
+
2849 template<typename Algo>
+
+
2850 typename json_traits::string_type sign(const Algo& algo, std::error_code& ec) const {
+
2851 return sign(
+
2852 algo,
+
2853 [](const typename json_traits::string_type& data) {
+
2854 return base::trim<alphabet::base64url>(base::encode<alphabet::base64url>(data));
+
2855 },
+
2856 ec);
+
2857 }
+
+
2858#endif
+
2859 };
+
+
2860
+
2861 namespace verify_ops {
+
2865 template<typename json_traits>
+
+ +
2867 verify_context(date ctime, const decoded_jwt<json_traits>& j, size_t l)
+
2868 : current_time(ctime), jwt(j), default_leeway(l) {}
+
2869 // Current time, retrieved from the verifiers clock and cached for performance and consistency
+
2870 date current_time;
+
2871 // The jwt passed to the verifier
+ +
2873 // The configured default leeway for this verification
+
2874 size_t default_leeway{0};
+
2875
+
2876 // The claim key to apply this comparison on
+
2877 typename json_traits::string_type claim_key{};
+
2878
+
2879 // Helper method to get a claim from the jwt in this context
+
2880 basic_claim<json_traits> get_claim(bool in_header, std::error_code& ec) const {
+
2881 if (in_header) {
+
2882 if (!jwt.has_header_claim(claim_key)) {
+
2883 ec = error::token_verification_error::missing_claim;
+
2884 return {};
+
2885 }
+
2886 return jwt.get_header_claim(claim_key);
+
2887 } else {
+
2888 if (!jwt.has_payload_claim(claim_key)) {
+
2889 ec = error::token_verification_error::missing_claim;
+
2890 return {};
+
2891 }
+
2892 return jwt.get_payload_claim(claim_key);
+
2893 }
+
2894 }
+
2895 basic_claim<json_traits> get_claim(bool in_header, json::type t, std::error_code& ec) const {
+
2896 auto c = get_claim(in_header, ec);
+
2897 if (ec) return {};
+
2898 if (c.get_type() != t) {
+
2899 ec = error::token_verification_error::claim_type_missmatch;
+
2900 return {};
+
2901 }
+
2902 return c;
+
2903 }
+
2904 basic_claim<json_traits> get_claim(std::error_code& ec) const { return get_claim(false, ec); }
+
2905 basic_claim<json_traits> get_claim(json::type t, std::error_code& ec) const {
+
2906 return get_claim(false, t, ec);
+
2907 }
+
2908 };
+
+
2909
+
2913 template<typename json_traits, bool in_header = false>
+
+ +
2915 const basic_claim<json_traits> expected;
+
2916 void operator()(const verify_context<json_traits>& ctx, std::error_code& ec) const {
+
2917 auto jc = ctx.get_claim(in_header, expected.get_type(), ec);
+
2918 if (ec) return;
+
2919 const bool matches = [&]() {
+
2920 switch (expected.get_type()) {
+
2921 case json::type::boolean: return expected.as_boolean() == jc.as_boolean();
+
2922 case json::type::integer: return expected.as_integer() == jc.as_integer();
+
2923 case json::type::number: return expected.as_number() == jc.as_number();
+
2924 case json::type::string: return expected.as_string() == jc.as_string();
+
2925 case json::type::array:
+
2926 case json::type::object:
+
2927 return json_traits::serialize(expected.to_json()) == json_traits::serialize(jc.to_json());
+
2928 default: throw std::logic_error("internal error, should be unreachable");
+
2929 }
+
2930 }();
+
2931 if (!matches) {
+
2932 ec = error::token_verification_error::claim_value_missmatch;
+
2933 return;
+
2934 }
+
2935 }
+
2936 };
+
+
2937
+
2942 template<typename json_traits, bool in_header = false>
+
+ +
2944 const size_t leeway;
+
2945 void operator()(const verify_context<json_traits>& ctx, std::error_code& ec) const {
+
2946 auto jc = ctx.get_claim(in_header, json::type::integer, ec);
+
2947 if (ec) return;
+
2948 auto c = jc.as_date();
+
2949 if (ctx.current_time > c + std::chrono::seconds(leeway)) {
+
2950 ec = error::token_verification_error::token_expired;
+
2951 }
+
2952 }
+
2953 };
+
+
2954
+
2959 template<typename json_traits, bool in_header = false>
+
+ +
2961 const size_t leeway;
+
2962 void operator()(const verify_context<json_traits>& ctx, std::error_code& ec) const {
+
2963 auto jc = ctx.get_claim(in_header, json::type::integer, ec);
+
2964 if (ec) return;
+
2965 auto c = jc.as_date();
+
2966 if (ctx.current_time < c - std::chrono::seconds(leeway)) {
+
2967 ec = error::token_verification_error::token_expired;
+
2968 }
+
2969 }
+
2970 };
+
+
2971
+
2977 template<typename json_traits, bool in_header = false>
+
+ +
2979 const typename basic_claim<json_traits>::set_t expected;
+
2980 void operator()(const verify_context<json_traits>& ctx, std::error_code& ec) const {
+
2981 auto c = ctx.get_claim(in_header, ec);
+
2982 if (ec) return;
+
2983 if (c.get_type() == json::type::string) {
+
2984 if (expected.size() != 1 || *expected.begin() != c.as_string()) {
+
2985 ec = error::token_verification_error::audience_missmatch;
+
2986 return;
+
2987 }
+
2988 } else if (c.get_type() == json::type::array) {
+
2989 auto jc = c.as_set();
+
2990 for (auto& e : expected) {
+
2991 if (jc.find(e) == jc.end()) {
+
2992 ec = error::token_verification_error::audience_missmatch;
+
2993 return;
+
2994 }
+
2995 }
+
2996 } else {
+
2997 ec = error::token_verification_error::claim_type_missmatch;
+
2998 return;
+
2999 }
+
3000 }
+
3001 };
+
+
3002
+
3006 template<typename json_traits, bool in_header = false>
+
+ +
3008 const typename json_traits::string_type expected;
+
3009 std::locale locale;
+
3010 insensitive_string_claim(const typename json_traits::string_type& e, std::locale loc)
+
3011 : expected(to_lower_unicode(e, loc)), locale(loc) {}
+
3012
+
3013 void operator()(const verify_context<json_traits>& ctx, std::error_code& ec) const {
+
3014 const auto c = ctx.get_claim(in_header, json::type::string, ec);
+
3015 if (ec) return;
+
3016 if (to_lower_unicode(c.as_string(), locale) != expected) {
+
3017 ec = error::token_verification_error::claim_value_missmatch;
+
3018 }
+
3019 }
+
3020
+
3021 static std::string to_lower_unicode(const std::string& str, const std::locale& loc) {
+
3022 std::mbstate_t state = std::mbstate_t();
+
3023 const char* in_next = str.data();
+
3024 const char* in_end = str.data() + str.size();
+
3025 std::wstring wide;
+
3026 wide.reserve(str.size());
+
3027
+
3028 while (in_next != in_end) {
+
3029 wchar_t wc;
+
3030 std::size_t result = std::mbrtowc(&wc, in_next, in_end - in_next, &state);
+
3031 if (result == static_cast<std::size_t>(-1)) {
+
3032 throw std::runtime_error("encoding error: " + std::string(std::strerror(errno)));
+
3033 } else if (result == static_cast<std::size_t>(-2)) {
+
3034 throw std::runtime_error("conversion error: next bytes constitute an incomplete, but so far "
+
3035 "valid, multibyte character.");
+
3036 }
+
3037 in_next += result;
+
3038 wide.push_back(wc);
+
3039 }
+
3040
+
3041 auto& f = std::use_facet<std::ctype<wchar_t>>(loc);
+
3042 f.tolower(&wide[0], &wide[0] + wide.size());
+
3043
+
3044 std::string out;
+
3045 out.reserve(wide.size());
+
3046 for (wchar_t wc : wide) {
+
3047 char mb[MB_LEN_MAX];
+
3048 std::size_t n = std::wcrtomb(mb, wc, &state);
+
3049 if (n != static_cast<std::size_t>(-1)) out.append(mb, n);
+
3050 }
+
3051
+
3052 return out;
+
3053 }
+
3054 };
+
+
3055 } // namespace verify_ops
+
3056
+
3061 template<typename Clock, typename json_traits>
+
+
3062 class verifier {
+
3063 public:
+ + +
3075 std::function<void(const verify_ops::verify_context<json_traits>&, std::error_code& ec)>;
+
3076
+
3077 private:
+
3078 struct algo_base {
+
3079 virtual ~algo_base() = default;
+
3080 virtual void verify(const std::string& data, const std::string& sig, std::error_code& ec) = 0;
+
3081 };
+
3082 template<typename T>
+
3083 struct algo : public algo_base {
+
3084 T alg;
+
3085 explicit algo(T a) : alg(a) {}
+
3086 void verify(const std::string& data, const std::string& sig, std::error_code& ec) override {
+
3087 alg.verify(data, sig, ec);
+
3088 }
+
3089 };
+
3091 std::unordered_map<typename json_traits::string_type, verify_check_fn_t> claims;
+
3093 size_t default_leeway = 0;
+
3095 Clock clock;
+
3097 std::unordered_map<std::string, std::shared_ptr<algo_base>> algs;
+
3098
+
3099 public:
+
+
3104 explicit verifier(Clock c) : clock(c) {
+
3105 claims["exp"] = [](const verify_ops::verify_context<json_traits>& ctx, std::error_code& ec) {
+
3106 if (!ctx.jwt.has_expires_at()) return;
+
3107 auto exp = ctx.jwt.get_expires_at();
+
3108 if (ctx.current_time > exp + std::chrono::seconds(ctx.default_leeway)) {
+
3109 ec = error::token_verification_error::token_expired;
+
3110 }
+
3111 };
+
3112 claims["iat"] = [](const verify_ops::verify_context<json_traits>& ctx, std::error_code& ec) {
+
3113 if (!ctx.jwt.has_issued_at()) return;
+
3114 auto iat = ctx.jwt.get_issued_at();
+
3115 if (ctx.current_time < iat - std::chrono::seconds(ctx.default_leeway)) {
+
3116 ec = error::token_verification_error::token_expired;
+
3117 }
+
3118 };
+
3119 claims["nbf"] = [](const verify_ops::verify_context<json_traits>& ctx, std::error_code& ec) {
+
3120 if (!ctx.jwt.has_not_before()) return;
+
3121 auto nbf = ctx.jwt.get_not_before();
+
3122 if (ctx.current_time < nbf - std::chrono::seconds(ctx.default_leeway)) {
+
3123 ec = error::token_verification_error::token_expired;
+
3124 }
+
3125 };
+
3126 }
+
+
3127
+
+ +
3134 default_leeway = leeway;
+
3135 return *this;
+
3136 }
+
+
+ + +
3145 return *this;
+
3146 }
+
+
+ + +
3155 return *this;
+
3156 }
+
+
+ + +
3165 return *this;
+
3166 }
+
+
3167
+
+
3179 verifier& with_type(const typename json_traits::string_type& type, std::locale locale = std::locale{}) {
+
3180 return with_claim("typ", verify_ops::insensitive_string_claim<json_traits, true>{type, std::move(locale)});
+
3181 }
+
+
3182
+
+
3189 verifier& with_issuer(const typename json_traits::string_type& iss) {
+
3190 return with_claim("iss", basic_claim_t(iss));
+
3191 }
+
+
3192
+
+
3199 verifier& with_subject(const typename json_traits::string_type& sub) {
+
3200 return with_claim("sub", basic_claim_t(sub));
+
3201 }
+
+
+
3208 verifier& with_audience(const typename basic_claim_t::set_t& aud) {
+
3209 claims["aud"] = verify_ops::is_subset_claim<json_traits>{aud};
+
3210 return *this;
+
3211 }
+
+
+
3218 verifier& with_audience(const typename json_traits::string_type& aud) {
+
3219 typename basic_claim_t::set_t s;
+
3220 s.insert(aud);
+
3221 return with_audience(s);
+
3222 }
+
+
3229 verifier& with_id(const typename json_traits::string_type& id) { return with_claim("jti", basic_claim_t(id)); }
+
3230
+
+
3237 verifier& with_claim(const typename json_traits::string_type& name, verify_check_fn_t fn) {
+
3238 claims[name] = fn;
+
3239 return *this;
+
3240 }
+
+
3241
+
+
3248 verifier& with_claim(const typename json_traits::string_type& name, basic_claim_t c) {
+ +
3250 }
+
+
3251
+
3257 template<typename Algorithm>
+
+
3258 verifier& allow_algorithm(Algorithm alg) {
+
3259 algs[alg.name()] = std::make_shared<algo<Algorithm>>(alg);
+
3260 return *this;
+
3261 }
+
+
3262
+
+ +
3269 std::error_code ec;
+
3270 verify(jwt, ec);
+
3271 error::throw_if_error(ec);
+
3272 }
+
+
+
3278 void verify(const decoded_jwt<json_traits>& jwt, std::error_code& ec) const {
+
3279 ec.clear();
+
3280 const typename json_traits::string_type data = jwt.get_header_base64() + "." + jwt.get_payload_base64();
+
3281 const typename json_traits::string_type sig = jwt.get_signature();
+
3282 const std::string algo = jwt.get_algorithm();
+
3283 if (algs.count(algo) == 0) {
+
3284 ec = error::token_verification_error::wrong_algorithm;
+
3285 return;
+
3286 }
+
3287 algs.at(algo)->verify(data, sig, ec);
+
3288 if (ec) return;
+
3289
+
3290 verify_ops::verify_context<json_traits> ctx{clock.now(), jwt, default_leeway};
+
3291 for (auto& c : claims) {
+
3292 ctx.claim_key = c.first;
+
3293 c.second(ctx, ec);
+
3294 if (ec) return;
+
3295 }
+
3296 }
+
+
3297 };
+
+
3298
+
3307 template<typename json_traits>
+
+
3308 class jwk {
+ +
3310 const details::map_of_claims<json_traits> jwk_claims;
+
3311
+
3312 public:
+
3313 JWT_CLAIM_EXPLICIT jwk(const typename json_traits::string_type& str)
+
3314 : jwk_claims(details::map_of_claims<json_traits>::parse_claims(str)) {}
+
3315
+
3316 JWT_CLAIM_EXPLICIT jwk(const typename json_traits::value_type& json)
+
3317 : jwk_claims(json_traits::as_object(json)) {}
+
3318
+
3327 typename json_traits::string_type get_key_type() const { return get_jwk_claim("kty").as_string(); }
+
3328
+
3335 typename json_traits::string_type get_use() const { return get_jwk_claim("use").as_string(); }
+
3336
+
3343 typename basic_claim_t::set_t get_key_operations() const { return get_jwk_claim("key_ops").as_set(); }
+
3344
+
3351 typename json_traits::string_type get_algorithm() const { return get_jwk_claim("alg").as_string(); }
+
3352
+
3359 typename json_traits::string_type get_key_id() const { return get_jwk_claim("kid").as_string(); }
+
3360
+
3371 typename json_traits::string_type get_curve() const { return get_jwk_claim("crv").as_string(); }
+
3372
+
3379 typename json_traits::array_type get_x5c() const { return get_jwk_claim("x5c").as_array(); };
+
3380
+
3387 typename json_traits::string_type get_x5u() const { return get_jwk_claim("x5u").as_string(); };
+
3388
+
3395 typename json_traits::string_type get_x5t() const { return get_jwk_claim("x5t").as_string(); };
+
3396
+
3403 typename json_traits::string_type get_x5t_sha256() const { return get_jwk_claim("x5t#S256").as_string(); };
+
3404
+
+
3411 typename json_traits::string_type get_x5c_key_value() const {
+
3412 auto x5c_array = get_jwk_claim("x5c").as_array();
+
3413 if (x5c_array.size() == 0) throw error::claim_not_present_exception();
+
3414
+
3415 return json_traits::as_string(x5c_array.front());
+
3416 };
+
+
3417
+
3422 bool has_key_type() const noexcept { return has_jwk_claim("kty"); }
+
3423
+
3428 bool has_use() const noexcept { return has_jwk_claim("use"); }
+
3429
+
3434 bool has_key_operations() const noexcept { return has_jwk_claim("key_ops"); }
+
3435
+
3440 bool has_algorithm() const noexcept { return has_jwk_claim("alg"); }
+
3441
+
3446 bool has_curve() const noexcept { return has_jwk_claim("crv"); }
+
3447
+
3452 bool has_key_id() const noexcept { return has_jwk_claim("kid"); }
+
3453
+
3458 bool has_x5u() const noexcept { return has_jwk_claim("x5u"); }
+
3459
+
3464 bool has_x5c() const noexcept { return has_jwk_claim("x5c"); }
+
3465
+
3470 bool has_x5t() const noexcept { return has_jwk_claim("x5t"); }
+
3471
+
3476 bool has_x5t_sha256() const noexcept { return has_jwk_claim("x5t#S256"); }
+
3477
+
+
3482 bool has_jwk_claim(const typename json_traits::string_type& name) const noexcept {
+
3483 return jwk_claims.has_claim(name);
+
3484 }
+
+
3485
+
+
3491 basic_claim_t get_jwk_claim(const typename json_traits::string_type& name) const {
+
3492 return jwk_claims.get_claim(name);
+
3493 }
+
+
3494
+
3495 bool empty() const noexcept { return jwk_claims.empty(); }
+
3496
+
3501 typename json_traits::object_type get_claims() const { return this->jwk_claims.claims; }
+
3502 };
+
+
3503
+
3514 template<typename json_traits>
+
+
3515 class jwks {
+
3516 public:
+
3517 using jwk_t = jwk<json_traits>;
+
3518 using jwt_vector_t = std::vector<jwk_t>;
+
3519 using iterator = typename jwt_vector_t::iterator;
+
3520 using const_iterator = typename jwt_vector_t::const_iterator;
+
3521
+
3522 JWT_CLAIM_EXPLICIT jwks(const typename json_traits::string_type& str) {
+
3523 typename json_traits::value_type parsed_val;
+
3524 if (!json_traits::parse(parsed_val, str)) throw error::invalid_json_exception();
+
3525
+
3526 const details::map_of_claims<json_traits> jwks_json = json_traits::as_object(parsed_val);
+
3527 if (!jwks_json.has_claim("keys")) throw error::invalid_json_exception();
+
3528
+
3529 auto jwk_list = jwks_json.get_claim("keys").as_array();
+
3530 std::transform(jwk_list.begin(), jwk_list.end(), std::back_inserter(jwk_claims),
+
3531 [](const typename json_traits::value_type& val) { return jwk_t{val}; });
+
3532 }
+
3533
+
3534 iterator begin() { return jwk_claims.begin(); }
+
3535 iterator end() { return jwk_claims.end(); }
+
3536 const_iterator cbegin() const { return jwk_claims.begin(); }
+
3537 const_iterator cend() const { return jwk_claims.end(); }
+
3538 const_iterator begin() const { return jwk_claims.begin(); }
+
3539 const_iterator end() const { return jwk_claims.end(); }
+
3540
+
+
3545 bool has_jwk(const typename json_traits::string_type& key_id) const noexcept {
+
3546 return find_by_kid(key_id) != end();
+
3547 }
+
+
3548
+
+
3554 jwk_t get_jwk(const typename json_traits::string_type& key_id) const {
+
3555 const auto maybe = find_by_kid(key_id);
+
3556 if (maybe == end()) throw error::claim_not_present_exception();
+
3557 return *maybe;
+
3558 }
+
+
3559
+
3560 private:
+
3561 jwt_vector_t jwk_claims;
+
3562
+
3563 const_iterator find_by_kid(const typename json_traits::string_type& key_id) const noexcept {
+
3564 return std::find_if(cbegin(), cend(), [key_id](const jwk_t& jwk) {
+
3565 if (!jwk.has_key_id()) { return false; }
+
3566 return jwk.get_key_id() == key_id;
+
3567 });
+
3568 }
+
3569 };
+
+
3570
+
3576 template<typename Clock, typename json_traits>
+
+ + +
3579 }
+
+
3580
+
+ +
3585 date now() const { return date::clock::now(); }
+
3586 };
+
+
3587
+
3593 template<typename json_traits>
+
+ +
3595 return verifier<default_clock, json_traits>(c);
+
3596 }
+
+
3597
+
3601 template<typename json_traits>
+
+ +
3603 return builder<json_traits>();
+
3604 }
+
+
3605
+
3614 template<typename json_traits, typename Decode>
+
+
3615 decoded_jwt<json_traits> decode(const typename json_traits::string_type& token, Decode decode) {
+
3616 return decoded_jwt<json_traits>(token, decode);
+
3617 }
+
+
3618
+
3627 template<typename json_traits>
+
+
3628 decoded_jwt<json_traits> decode(const typename json_traits::string_type& token) {
+
3629 return decoded_jwt<json_traits>(token);
+
3630 }
+
+
3637 template<typename json_traits>
+
+
3638 jwk<json_traits> parse_jwk(const typename json_traits::string_type& jwk_) {
+
3639 return jwk<json_traits>(jwk_);
+
3640 }
+
+
3647 template<typename json_traits>
+
+
3648 jwks<json_traits> parse_jwks(const typename json_traits::string_type& jwks_) {
+
3649 return jwks<json_traits>(jwks_);
+
3650 }
+
+
3651} // namespace jwt
+
3652
+
3653template<typename json_traits>
+
3654std::istream& operator>>(std::istream& is, jwt::basic_claim<json_traits>& c) {
+
3655 return c.operator>>(is);
+
3656}
+
3657
+
3658template<typename json_traits>
+
3659std::ostream& operator<<(std::ostream& os, const jwt::basic_claim<json_traits>& c) {
+
3660 return os << c.to_json();
+
3661}
+
3662
+
3663#ifndef JWT_DISABLE_PICOJSON
+
3664#include "traits/kazuho-picojson/defaults.h"
+
3665#endif
+
3666
+
3667#endif
+
a class to store a generic JSON value as claim
Definition jwt.h:2098
+
json_traits::number_type as_number() const
Get the contained JSON value as a number.
Definition jwt.h:2224
+
set_t as_set() const
Get the contained JSON value as a set of strings.
Definition jwt.h:2197
+
json::type get_type() const
Get type of contained JSON value.
Definition jwt.h:2162
+
std::istream & operator>>(std::istream &is)
Parse input stream into underlying JSON value.
Definition jwt.h:2149
+
json_traits::boolean_type as_boolean() const
Get the contained JSON value as a bool.
Definition jwt.h:2217
+
date as_date() const
Get the contained JSON value as a date.
Definition jwt.h:2179
+
std::ostream & operator<<(std::ostream &os)
Serialize claim to output stream from wrapped JSON value.
Definition jwt.h:2155
+
json_traits::integer_type as_integer() const
Get the contained JSON value as an integer.
Definition jwt.h:2210
+
json_traits::value_type to_json() const
Get wrapped JSON value.
Definition jwt.h:2143
+
json_traits::array_type as_array() const
Get the contained JSON value as an array.
Definition jwt.h:2190
+
json_traits::string_type as_string() const
Get the contained JSON value as a string.
Definition jwt.h:2169
+
Builder class to build and sign a new token Use jwt::create() to get an instance of this class.
Definition jwt.h:2635
+
builder & set_payload_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)
Set a payload claim.
Definition jwt.h:2668
+
json_traits::string_type sign(const Algo &algo) const
Sign token and return result.
Definition jwt.h:2804
+
json_traits::string_type sign(const Algo &algo, Encode encode) const
Sign token and return result.
Definition jwt.h:2788
+
builder & set_audience(typename json_traits::string_type aud)
Set audience claim.
Definition jwt.h:2746
+
builder & set_audience(typename json_traits::array_type a)
Set audience claim.
Definition jwt.h:2738
+
builder & set_header_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)
Set a header claim.
Definition jwt.h:2658
+
builder & set_payload_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)
Set a payload claim.
Definition jwt.h:2678
+
builder & set_subject(typename json_traits::string_type str)
Set subject claim.
Definition jwt.h:2730
+
builder & set_content_type(typename json_traits::string_type str)
Set content type claim.
Definition jwt.h:2705
+
builder & set_not_before(const date &d)
Set not before claim.
Definition jwt.h:2760
+
builder & set_issued_at(const date &d)
Set issued at claim.
Definition jwt.h:2766
+
builder & set_id(const typename json_traits::string_type &str)
Set id claim.
Definition jwt.h:2772
+
builder & set_type(typename json_traits::string_type str)
Set type claim.
Definition jwt.h:2697
+
builder & set_key_id(typename json_traits::string_type str)
Set key id claim.
Definition jwt.h:2714
+
builder & set_issuer(typename json_traits::string_type str)
Set issuer claim.
Definition jwt.h:2722
+
builder & set_header_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)
Set a header claim.
Definition jwt.h:2647
+
builder & set_algorithm(typename json_traits::string_type str)
Set algorithm claim You normally don't need to do this, as the algorithm is automatically set if you ...
Definition jwt.h:2689
+
json_traits::string_type sign(const Algo &algo, std::error_code &ec) const
Sign token and return result.
Definition jwt.h:2850
+
builder & set_expires_at(const date &d)
Set expires at claim.
Definition jwt.h:2754
+
json_traits::string_type sign(const Algo &algo, Encode encode, std::error_code &ec) const
Sign token and return result.
Definition jwt.h:2825
+
Class containing all information about a decoded token.
Definition jwt.h:2500
+
const json_traits::string_type & get_header() const noexcept
Get header part as json string.
Definition jwt.h:2572
+
const json_traits::string_type & get_signature_base64() const noexcept
Get signature part as base64 string.
Definition jwt.h:2597
+
json_traits::string_type signature
Signature part decoded from base64.
Definition jwt.h:2513
+
json_traits::string_type header
Header part decoded from base64.
Definition jwt.h:2505
+
json_traits::string_type header_base64
Unmodified header part in base64.
Definition jwt.h:2507
+
json_traits::string_type token
Unmodified token, as passed to constructor.
Definition jwt.h:2503
+
basic_claim_t get_payload_claim(const typename json_traits::string_type &name) const
Get a payload claim by name.
Definition jwt.h:2615
+
const json_traits::string_type & get_signature() const noexcept
Get signature part as json string.
Definition jwt.h:2582
+
JWT_CLAIM_EXPLICIT decoded_jwt(const typename json_traits::string_type &token)
Parses a given token.
Definition jwt.h:2529
+
basic_claim_t get_header_claim(const typename json_traits::string_type &name) const
Get a header claim by name.
Definition jwt.h:2625
+
decoded_jwt(const typename json_traits::string_type &token, Decode decode)
Parses a given token.
Definition jwt.h:2546
+
json_traits::object_type get_payload_json() const
Get all payload as JSON object.
Definition jwt.h:2602
+
json_traits::string_type signature_base64
Unmodified signature part in base64.
Definition jwt.h:2515
+
const json_traits::string_type & get_payload_base64() const noexcept
Get payload part as base64 string.
Definition jwt.h:2592
+
const json_traits::string_type & get_token() const noexcept
Get token string, as passed to constructor.
Definition jwt.h:2567
+
json_traits::object_type get_header_json() const
Get all header as JSON object.
Definition jwt.h:2607
+
const json_traits::string_type & get_payload() const noexcept
Get payload part as json string.
Definition jwt.h:2577
+
const json_traits::string_type & get_header_base64() const noexcept
Get header part as base64 string.
Definition jwt.h:2587
+
json_traits::string_type payload_base64
Unmodified payload part in base64.
Definition jwt.h:2511
+
json_traits::string_type payload
Payload part decoded from base64.
Definition jwt.h:2509
+
Base class that represents a token header.
Definition jwt.h:2425
+
json_traits::string_type get_type() const
Get type claim.
Definition jwt.h:2464
+
bool has_header_claim(const typename json_traits::string_type &name) const noexcept
Check if a header claim is present.
Definition jwt.h:2483
+
bool has_algorithm() const noexcept
Check if algorithm is present ("alg")
Definition jwt.h:2435
+
bool has_type() const noexcept
Check if type is present ("typ")
Definition jwt.h:2440
+
json_traits::string_type get_algorithm() const
Get algorithm claim.
Definition jwt.h:2457
+
bool has_content_type() const noexcept
Check if content type is present ("cty")
Definition jwt.h:2445
+
basic_claim_t get_header_claim(const typename json_traits::string_type &name) const
Get header claim.
Definition jwt.h:2491
+
json_traits::string_type get_key_id() const
Get key id claim.
Definition jwt.h:2478
+
json_traits::string_type get_content_type() const
Get content type claim.
Definition jwt.h:2471
+
bool has_key_id() const noexcept
Check if key id is present ("kid")
Definition jwt.h:2450
+
Handle class for EVP_PKEY structures.
Definition jwt.h:398
+
constexpr evp_pkey_handle(EVP_PKEY *key) noexcept
Construct a new handle.
Definition jwt.h:419
+
JSON Web Key.
Definition jwt.h:3308
+
bool has_x5c() const noexcept
Check if X509 Chain is present ("x5c")
Definition jwt.h:3464
+
json_traits::string_type get_curve() const
Get curve claim.
Definition jwt.h:3371
+
bool has_x5t_sha256() const noexcept
Check if a X509 SHA256 thumbprint is present ("x5t#S256")
Definition jwt.h:3476
+
json_traits::string_type get_algorithm() const
Get algorithm claim.
Definition jwt.h:3351
+
json_traits::array_type get_x5c() const
Get x5c claim.
Definition jwt.h:3379
+
json_traits::object_type get_claims() const
Get all jwk claims.
Definition jwt.h:3501
+
json_traits::string_type get_x5t() const
Get X509 thumbprint claim.
Definition jwt.h:3395
+
json_traits::string_type get_x5c_key_value() const
Get x5c claim as a string.
Definition jwt.h:3411
+
json_traits::string_type get_x5t_sha256() const
Get X509 SHA256 thumbprint claim.
Definition jwt.h:3403
+
json_traits::string_type get_key_id() const
Get key id claim.
Definition jwt.h:3359
+
bool has_algorithm() const noexcept
Check if algorithm is present ("alg")
Definition jwt.h:3440
+
json_traits::string_type get_use() const
Get public key usage claim.
Definition jwt.h:3335
+
bool has_key_id() const noexcept
Check if key id is present ("kid")
Definition jwt.h:3452
+
bool has_x5u() const noexcept
Check if X509 URL is present ("x5u")
Definition jwt.h:3458
+
bool has_key_operations() const noexcept
Check if a key operations parameter is present ("key_ops")
Definition jwt.h:3434
+
bool has_use() const noexcept
Check if a public key usage indication is present ("use")
Definition jwt.h:3428
+
bool has_x5t() const noexcept
Check if a X509 thumbprint is present ("x5t")
Definition jwt.h:3470
+
bool has_jwk_claim(const typename json_traits::string_type &name) const noexcept
Check if a jwks claim is present.
Definition jwt.h:3482
+
basic_claim_t::set_t get_key_operations() const
Get key operation types claim.
Definition jwt.h:3343
+
bool has_curve() const noexcept
Check if curve is present ("crv")
Definition jwt.h:3446
+
bool has_key_type() const noexcept
Check if a key type is present ("kty")
Definition jwt.h:3422
+
basic_claim_t get_jwk_claim(const typename json_traits::string_type &name) const
Get jwks claim.
Definition jwt.h:3491
+
json_traits::string_type get_x5u() const
Get X509 URL claim.
Definition jwt.h:3387
+
json_traits::string_type get_key_type() const
Get key type claim.
Definition jwt.h:3327
+
JWK Set.
Definition jwt.h:3515
+
jwk_t get_jwk(const typename json_traits::string_type &key_id) const
Get jwk.
Definition jwt.h:3554
+
bool has_jwk(const typename json_traits::string_type &key_id) const noexcept
Check if a jwk with the kid is present.
Definition jwt.h:3545
+
Base class that represents a token payload.
Definition jwt.h:2307
+
basic_claim_t::set_t get_audience() const
Get audience claim.
Definition jwt.h:2369
+
json_traits::string_type get_id() const
Get id claim.
Definition jwt.h:2402
+
bool has_issued_at() const noexcept
Check if issued at is present ("iat")
Definition jwt.h:2343
+
bool has_not_before() const noexcept
Check if not before is present ("nbf")
Definition jwt.h:2338
+
bool has_payload_claim(const typename json_traits::string_type &name) const noexcept
Check if a payload claim is present.
Definition jwt.h:2407
+
bool has_subject() const noexcept
Check if subject is present ("sub")
Definition jwt.h:2323
+
date get_not_before() const
Get not valid before claim.
Definition jwt.h:2388
+
bool has_issuer() const noexcept
Check if issuer is present ("iss")
Definition jwt.h:2318
+
bool has_id() const noexcept
Check if token id is present ("jti")
Definition jwt.h:2348
+
bool has_expires_at() const noexcept
Check if expires is present ("exp")
Definition jwt.h:2333
+
date get_issued_at() const
Get issued at claim.
Definition jwt.h:2395
+
basic_claim_t get_payload_claim(const typename json_traits::string_type &name) const
Get payload claim.
Definition jwt.h:2415
+
bool has_audience() const noexcept
Check if audience is present ("aud")
Definition jwt.h:2328
+
date get_expires_at() const
Get expires claim.
Definition jwt.h:2381
+
json_traits::string_type get_subject() const
Get subject claim.
Definition jwt.h:2362
+
json_traits::string_type get_issuer() const
Get issuer claim.
Definition jwt.h:2355
+
Verifier class used to check if a decoded token contains all claims required by your application and ...
Definition jwt.h:3062
+
verifier & expires_at_leeway(size_t leeway)
Set leeway for expires at.
Definition jwt.h:3143
+
std::function< void(const verify_ops::verify_context< json_traits > &, std::error_code &ec)> verify_check_fn_t
Verification function.
Definition jwt.h:3075
+
verifier & with_claim(const typename json_traits::string_type &name, verify_check_fn_t fn)
Specify a claim to check for using the specified operation.
Definition jwt.h:3237
+
void verify(const decoded_jwt< json_traits > &jwt, std::error_code &ec) const
Verify the given token.
Definition jwt.h:3278
+
verifier & not_before_leeway(size_t leeway)
Set leeway for not before.
Definition jwt.h:3153
+
verifier & issued_at_leeway(size_t leeway)
Set leeway for issued at.
Definition jwt.h:3163
+
verifier & with_subject(const typename json_traits::string_type &sub)
Set a subject to check for.
Definition jwt.h:3199
+
verifier & with_audience(const typename basic_claim_t::set_t &aud)
Set an audience to check for.
Definition jwt.h:3208
+
verifier & with_claim(const typename json_traits::string_type &name, basic_claim_t c)
Specify a claim to check for equality (both type & value).
Definition jwt.h:3248
+
verifier & with_audience(const typename json_traits::string_type &aud)
Set an audience to check for.
Definition jwt.h:3218
+
void verify(const decoded_jwt< json_traits > &jwt) const
Verify the given token.
Definition jwt.h:3268
+
verifier(Clock c)
Constructor for building a new verifier instance.
Definition jwt.h:3104
+
verifier & leeway(size_t leeway)
Set default leeway to use.
Definition jwt.h:3133
+
verifier & with_issuer(const typename json_traits::string_type &iss)
Set an issuer to check for.
Definition jwt.h:3189
+
verifier & allow_algorithm(Algorithm alg)
Add an algorithm available for checking.
Definition jwt.h:3258
+
verifier & with_type(const typename json_traits::string_type &type, std::locale locale=std::locale{})
Set an type to check for.
Definition jwt.h:3179
+
verifier & with_id(const typename json_traits::string_type &id)
Set an id to check for.
Definition jwt.h:3229
+
signature_verification_error
Errors related to verification of signatures.
Definition jwt.h:197
+
std::error_category & token_verification_error_category()
Error category for token verification errors.
Definition jwt.h:328
+
std::error_category & ecdsa_error_category()
Error category for ECDSA errors.
Definition jwt.h:169
+
std::error_category & signature_verification_error_category()
Error category for verification errors.
Definition jwt.h:211
+
std::error_category & rsa_error_category()
Error category for RSA errors.
Definition jwt.h:128
+
std::error_category & signature_generation_error_category()
Error category for signature generation errors.
Definition jwt.h:268
+
ecdsa_error
Errors related to processing of RSA signatures.
Definition jwt.h:156
+
rsa_error
Errors related to processing of RSA signatures.
Definition jwt.h:113
+
signature_generation_error
Errors related to signature generation errors.
Definition jwt.h:248
+
token_verification_error
Errors related to token verification errors.
Definition jwt.h:316
+
evp_pkey_handle load_public_ec_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)
Load a public key from a string.
Definition jwt.h:775
+
evp_pkey_handle load_private_ec_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)
Load a private key from a string.
Definition jwt.h:830
+
std::string extract_pubkey_from_cert(const std::string &certstr, const std::string &pw, std::error_code &ec)
Extract the public key of a PEM certificate.
Definition jwt.h:499
+
std::string convert_base64_der_to_pem(const std::string &cert_base64_der_str, Decode decode, std::error_code &ec)
Convert the certificate provided as base64 DER to PEM.
Definition jwt.h:596
+
std::string bn2raw(const BIGNUM *bn)
Convert a OpenSSL BIGNUM to a std::string.
Definition jwt.h:874
+
std::string convert_der_to_pem(const std::string &cert_der_str, std::error_code &ec)
Convert the certificate provided as DER to PEM.
Definition jwt.h:553
+
evp_pkey_handle load_private_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)
Load a private key from a string.
Definition jwt.h:734
+
std::unique_ptr< BIGNUM, decltype(&BN_free)> raw2bn(const std::string &raw)
Convert an std::string to a OpenSSL BIGNUM.
Definition jwt.h:886
+
evp_pkey_handle load_public_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)
Load a public key from a string.
Definition jwt.h:680
+
type
Generic JSON types used in JWTs.
Definition jwt.h:1825
+
JSON Web Token.
Definition base.h:21
+
verifier< Clock, json_traits > verify(Clock c)
Create a verifier using the given clock.
Definition jwt.h:3577
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+
jwk< json_traits > parse_jwk(const typename json_traits::string_type &jwk_)
Parse a single JSON Web Key.
Definition jwt.h:3638
+
jwks< json_traits > parse_jwks(const typename json_traits::string_type &jwks_)
Parse a JSON Web Key Set.
Definition jwt.h:3648
+
verifier< default_clock, traits::boost_json > verify()
Create a verifier using the default clock.
Definition defaults.h:23
+
std::chrono::system_clock::time_point date
Default system time point in UTC.
Definition jwt.h:89
+
decoded_jwt< json_traits > decode(const typename json_traits::string_type &token, Decode decode)
Decode a token.
Definition jwt.h:3615
+
Default clock class using std::chrono::system_clock as a backend.
Definition jwt.h:3584
+
Attempt to access claim was unsuccessful.
Definition jwt.h:2237
+
Definition jwt.h:104
+
Attempt to parse JSON was unsuccessful.
Definition jwt.h:2231
+
Definition jwt.h:101
+ + + +
Checks that the current time is after the time specified in the given claim.
Definition jwt.h:2960
+
Checks that the current time is before the time specified in the given claim.
Definition jwt.h:2943
+
This is the default operation and does case sensitive matching.
Definition jwt.h:2914
+
Checks if the claim is a string and does an case insensitive comparison.
Definition jwt.h:3007
+
Checks if the given set is a subset of the set inside the token.
Definition jwt.h:2978
+
This is the base container which holds the token that need to be verified.
Definition jwt.h:2866
+
+
+ + + + diff --git a/kazuho-picojson_2defaults_8h_source.html b/kazuho-picojson_2defaults_8h_source.html new file mode 100644 index 000000000..261afa13b --- /dev/null +++ b/kazuho-picojson_2defaults_8h_source.html @@ -0,0 +1,162 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/kazuho-picojson/defaults.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
defaults.h
+
+
+
1#ifndef JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H
+
2#define JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H
+
3
+
4#include "traits.h"
+
5
+
6namespace jwt {
+
13 using claim = basic_claim<traits::kazuho_picojson>;
+
14
+
19 inline verifier<default_clock, traits::kazuho_picojson> verify() {
+
20 return verify<default_clock, traits::kazuho_picojson>(default_clock{});
+
21 }
+
22
+
26 inline builder<traits::kazuho_picojson> create() { return builder<traits::kazuho_picojson>(); }
+
27
+
28#ifndef JWT_DISABLE_BASE64
+
36 inline decoded_jwt<traits::kazuho_picojson> decode(const std::string& token) {
+
37 return decoded_jwt<traits::kazuho_picojson>(token);
+
38 }
+
39#endif
+
40
+
52 template<typename Decode>
+
+
53 decoded_jwt<traits::kazuho_picojson> decode(const std::string& token, Decode decode) {
+ +
55 }
+
+
56
+
63 inline jwk<traits::kazuho_picojson> parse_jwk(const traits::kazuho_picojson::string_type& token) {
+
64 return jwk<traits::kazuho_picojson>(token);
+
65 }
+
66
+
73 inline jwks<traits::kazuho_picojson> parse_jwks(const traits::kazuho_picojson::string_type& token) {
+
74 return jwks<traits::kazuho_picojson>(token);
+
75 }
+
76
+
81 using verify_context = verify_ops::verify_context<traits::kazuho_picojson>;
+
82} // namespace jwt
+
83
+
84#endif // JWT_CPP_KAZUHO_PICOJSON_DEFAULTS_H
+
Class containing all information about a decoded token.
Definition jwt.h:2500
+
JSON Web Token.
Definition base.h:21
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+
jwk< json_traits > parse_jwk(const typename json_traits::string_type &jwk_)
Parse a single JSON Web Key.
Definition jwt.h:3638
+
jwks< json_traits > parse_jwks(const typename json_traits::string_type &jwks_)
Parse a JSON Web Key Set.
Definition jwt.h:3648
+
verifier< default_clock, traits::boost_json > verify()
Create a verifier using the default clock.
Definition defaults.h:23
+
verify_ops::verify_context< traits::boost_json > verify_context
This type is the specialization of the verify_ops::verify_context class which uses the standard templ...
Definition defaults.h:85
+
basic_claim< traits::boost_json > claim
a class to store a generic Boost.JSON value as claim
Definition defaults.h:17
+
decoded_jwt< json_traits > decode(const typename json_traits::string_type &token, Decode decode)
Decode a token.
Definition jwt.h:3615
+
+
+ + + + diff --git a/kazuho-picojson_2traits_8h_source.html b/kazuho-picojson_2traits_8h_source.html new file mode 100644 index 000000000..ca77bb247 --- /dev/null +++ b/kazuho-picojson_2traits_8h_source.html @@ -0,0 +1,194 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/kazuho-picojson/traits.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
traits.h
+
+
+
1#ifndef JWT_CPP_PICOJSON_TRAITS_H
+
2#define JWT_CPP_PICOJSON_TRAITS_H
+
3
+
4#ifndef PICOJSON_USE_INT64
+
5#define PICOJSON_USE_INT64
+
6#endif
+
7#include "picojson/picojson.h"
+
8
+
9#ifndef JWT_DISABLE_PICOJSON
+
10#define JWT_DISABLE_PICOJSON
+
11#endif
+
12#include "jwt-cpp/jwt.h"
+
13
+
14namespace jwt {
+
15 namespace traits {
+
+ +
17 using value_type = picojson::value;
+
18 using object_type = picojson::object;
+
19 using array_type = picojson::array;
+
20 using string_type = std::string;
+
21 using number_type = double;
+
22 using integer_type = int64_t;
+
23 using boolean_type = bool;
+
24
+
25 static json::type get_type(const picojson::value& val) {
+
26 using json::type;
+
27 if (val.is<bool>()) return type::boolean;
+
28 if (val.is<int64_t>()) return type::integer;
+
29 if (val.is<double>()) return type::number;
+
30 if (val.is<std::string>()) return type::string;
+
31 if (val.is<picojson::array>()) return type::array;
+
32 if (val.is<picojson::object>()) return type::object;
+
33
+
34 throw std::logic_error("invalid type");
+
35 }
+
36
+
37 static picojson::object as_object(const picojson::value& val) {
+
38 if (!val.is<picojson::object>()) throw std::bad_cast();
+
39 return val.get<picojson::object>();
+
40 }
+
41
+
42 static std::string as_string(const picojson::value& val) {
+
43 if (!val.is<std::string>()) throw std::bad_cast();
+
44 return val.get<std::string>();
+
45 }
+
46
+
47 static picojson::array as_array(const picojson::value& val) {
+
48 if (!val.is<picojson::array>()) throw std::bad_cast();
+
49 return val.get<picojson::array>();
+
50 }
+
51
+
52 static int64_t as_integer(const picojson::value& val) {
+
53 if (!val.is<int64_t>()) throw std::bad_cast();
+
54 return val.get<int64_t>();
+
55 }
+
56
+
57 static bool as_boolean(const picojson::value& val) {
+
58 if (!val.is<bool>()) throw std::bad_cast();
+
59 return val.get<bool>();
+
60 }
+
61
+
62 static double as_number(const picojson::value& val) {
+
63 if (!val.is<double>()) throw std::bad_cast();
+
64 return val.get<double>();
+
65 }
+
66
+
67 static bool parse(picojson::value& val, const std::string& str) {
+
68 return picojson::parse(val, str).empty();
+
69 }
+
70
+
71 static std::string serialize(const picojson::value& val) { return val.serialize(); }
+
72 };
+
+
73 } // namespace traits
+
74} // namespace jwt
+
75
+
76#endif
+
JSON Web Token.
Definition base.h:21
+
Definition traits.h:16
+
+
+ + + + diff --git a/md__8github_2security.html b/md__8github_2security.html new file mode 100644 index 000000000..aa79bb5bf --- /dev/null +++ b/md__8github_2security.html @@ -0,0 +1,120 @@ + + + + + + + +JWT-CPP: Reporting Security Issues + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Reporting Security Issues
+
+
+

If you believe you have found a security vulnerability in JWT-CPP, we encourage you to let us know right away. We will investigate all legitimate reports and do our best to quickly fix the problem.

+

Please refer to the section below for our responsible disclosure policy:

+

Disclosure Policy

+

Please contact one or more of the maintainers using the email advertised on our GitHub profiles:

+ +

Please provide as many details as possible about version, platform, and workflow as possible. Having steps and reproducible code is better and is always greatly appreciated.

+

Supported Version

+

Typically, fixes will be immediately released as a new patch release. However, older affected versions may receive a new patch upon request.

+
+
+
+ + + + diff --git a/md_docs_2faqs.html b/md_docs_2faqs.html new file mode 100644 index 000000000..cfa41ee8d --- /dev/null +++ b/md_docs_2faqs.html @@ -0,0 +1,147 @@ + + + + + + + +JWT-CPP: Frequently Asked Questions + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Frequently Asked Questions
+
+
+

Handling Tokens

+

The generated JWT token can be decoded, is this correct and secure?

+

This is the expected behavior. While the integrity of tokens is ensured by the generated/verified hash, the contents of the token are only encoded and not encrypted. This means you can be sure the token has not been modified by an unauthorized party, but you should not store confidential information in it. Anyone with access to the token can read all the claims you put into it. They can however not modify them unless they have the (private or symmetric) key used to generate the token. If you need to put confidential information into it, current industry recommends generating a random id and store the data on your server, using the id to look it up whenever you need.

+

How can new keys be generated for my application?

+

The algorithms provided are all based on OpenSSL, mixing other cryptographic tools might not work.

+

Here are a few links for your convenience:

+ +

Can this library encrypt/decrypt claims?

+

No it does not, see #115 for more details. More importantly you probably don't want to be using JWTs for anything sensitive. Read this for more.

+

Why are my tokens immediately expired?

+

If you are generating tokens that seem to immediately expire, you are likely mixing local time where it is not required. The JWT specification requires using UTC which this library does.

+

Here is a simple example of creating a token that will expire in one hour:

+
auto token = jwt::create()
+
.set_issued_at(std::chrono::system_clock::now())
+
.set_expires_at(std::chrono::system_clock::now() + std::chrono::seconds{3600})
+
.sign(jwt::algorithm::hs256{"secret"});
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+

Can you add claims to a signed token?

+

The signature includes both the header and payload, according to the RFCs... changing the payload would cause a discrepancy. That should result in the token being rejected. For more details checkout #194.

+

Why does jwt::basic_claim have no as_object() method?

+

This was brought up in #212 and #101 as it's an excellent question.

+

It simply was not required to handle the required keys in JWTs for signing or verification. All the the mandatory keys are numeric, string or array types which required type definitions and access.

+

The alternative is to use the to_json() method and use the libraries own APIs to pick the data type you need.

+

Build Issues

+

Missing _HMAC and _EVP_sha256 symbols on Mac

+

There seems to exists a problem with the included openssl library of MacOS. Make sure you link to one provided by brew. See #6 for more details.

+

Building on windows fails with syntax errors

+

The header <Windows.h>, which is often included in Windows projects, defines macros for MIN and MAX which conflicts with std::numeric_limits. See #5 for more details or this StackOverflow thread.

+

To fix this do one of the following things:

+
    +
  • define NOMINMAX, which suppresses this behavior
  • +
  • include this library before you #include <Windows.h>
  • +
  • place #undef max and #undef min before you include this library
  • +
+
+
+
+ + + + diff --git a/md_docs_2signing.html b/md_docs_2signing.html new file mode 100644 index 000000000..e3b0ba789 --- /dev/null +++ b/md_docs_2signing.html @@ -0,0 +1,135 @@ + + + + + + + +JWT-CPP: Signing Tokens + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signing Tokens
+
+
+

Custom Signature Algorithms

+

The libraries design is open so you can implement your own algorithms, see existing examples for ideas.

+
struct your_algorithm{
+
std::string sign(const std::string& /*unused*/, std::error_code& ec) const {
+
ec.clear();
+
// CALL YOUR METHOD HERE
+
return {};
+
}
+
void verify(const std::string& /*unused*/, const std::string& signature, std::error_code& ec) const {
+
ec.clear();
+
if (!signature.empty()) { ec = error::signature_verification_error::invalid_signature; }
+
+
// CALL YOUR METHOD HERE
+
}
+
std::string name() const { return "your_algorithm"; }
+
};
+
verifier< Clock, json_traits > verify(Clock c)
Create a verifier using the given clock.
Definition jwt.h:3577
+

Then everything else is the same, just pass in your implementation such as:

+
auto token = jwt::create()
+
.set_id("custom-algo-example")
+
.set_issued_at(std::chrono::system_clock::now())
+
.set_expires_at(std::chrono::system_clock::now() + std::chrono::seconds{36000})
+
.set_payload_claim("sample", jwt::claim(std::string{"test"}))
+
.sign(your_algorithm{/* what ever you want */});
+
a class to store a generic JSON value as claim
Definition jwt.h:2098
+
builder< json_traits > create()
Return a builder instance to create a new token.
Definition jwt.h:3602
+
+
+
+ + + + diff --git a/md_docs_2ssl.html b/md_docs_2ssl.html new file mode 100644 index 000000000..e73df2f04 --- /dev/null +++ b/md_docs_2ssl.html @@ -0,0 +1,119 @@ + + + + + + + +JWT-CPP: Cryptography Libraries + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Cryptography Libraries
+
+
+

The underlying cryptography libraries describe here can be selected when configuring CMake by explicitly setting JWT_SSL_LIBRARY to one of three values. The default is to use OpenSSL.

+
    +
  • OpenSSL
  • +
  • LibreSSL
  • +
  • wolfSSL
  • +
+

Here's an example:

+
cmake . -DJWT_SSL_LIBRARY:STRING=wolfSSL
+

Notes

+

JWT-CPP relies on the OpenSSL API, as a result both LibreSSL and wolfSSL need to include their respective compatibility layers. Most system already have OpenSSL so it's important to make sure when compiling your application it only includes one. Otherwise you may have missing symbols when linking.

+
+
+
+ + + + diff --git a/md_docs_2traits.html b/md_docs_2traits.html new file mode 100644 index 000000000..658294f69 --- /dev/null +++ b/md_docs_2traits.html @@ -0,0 +1,164 @@ + + + + + + + +JWT-CPP: JSON Traits + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
JWT-CPP v0.6.0 +
+
A header only library for creating and validating JSON Web Tokens (JWT) in C++
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
JSON Traits
+
+
+

Traits define the compatibility mapping for JWT-CPP required functionality to the JSON implementation of choice.

+

Providing your own JSON Traits

+

There are several key items that need to be provided to a jwt::basic_claim in order for it to be interoperable with you JSON library of choice.

+
    +
  • type specifications
  • +
  • conversion from generic "value type" to a specific type
  • +
  • serialization and parsing
  • +
+

If ever you are not sure, the traits are heavily checked against static asserts to make sure you provide everything that's required.

+
+

‍:warning: Not all JSON libraries are a like, you may need to extend certain types such that it can be used. See this provided implementation.

+
+
struct my_favorite_json_library_traits {
+
// Type Specifications
+
using value_type = json; // The generic "value type" implementation, most libraries have one
+
using object_type = json::object_t; // The "map type" string to value
+
using array_type = json::array_t; // The "list type" array of values
+
using string_type = std::string; // The "list of chars", must be a narrow char
+
using number_type = double; // The "precision type"
+
using integer_type = int64_t; // The "integral type"
+
using boolean_type = bool; // The "boolean type"
+
+
// Translation between the implementation notion of type, to the jwt::json::type equivalent
+
static jwt::json::type get_type(const value_type &val) {
+ +
+
if (val.type() == json::value_t::object)
+
return type::object;
+
if (val.type() == json::value_t::array)
+
return type::array;
+
if (val.type() == json::value_t::string)
+
return type::string;
+
if (val.type() == json::value_t::number_float)
+
return type::number;
+
if (val.type() == json::value_t::number_integer)
+
return type::integer;
+
if (val.type() == json::value_t::boolean)
+
return type::boolean;
+
+
throw std::logic_error("invalid type");
+
}
+
+
// Conversion from generic value to specific type
+
static object_type as_object(const value_type &val);
+
static array_type as_array(const value_type &val);
+
static string_type as_string(const value_type &val);
+
static number_type as_number(const value_type &val);
+
static integer_type as_integer(const value_type &val);
+
static boolean_type as_boolean(const value_type &val);
+
+
// serialization and parsing
+
static bool parse(value_type &val, string_type str);
+
static string_type serialize(const value_type &val); // with no extra whitespace, padding or indentation
+
};
+
type
Generic JSON types used in JWTs.
Definition jwt.h:1825
+
+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 000000000..b0b26936a --- /dev/null +++ b/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 000000000..6ba8ecd09 --- /dev/null +++ b/menudata.js @@ -0,0 +1,92 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"b",url:"namespacemembers.html#index_b"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"t",url:"namespacemembers.html#index_t"}, +{text:"v",url:"namespacemembers.html#index_v"}]}, +{text:"Functions",url:"namespacemembers_func.html",children:[ +{text:"b",url:"namespacemembers_func.html#index_b"}, +{text:"c",url:"namespacemembers_func.html#index_c"}, +{text:"d",url:"namespacemembers_func.html#index_d"}, +{text:"e",url:"namespacemembers_func.html#index_e"}, +{text:"l",url:"namespacemembers_func.html#index_l"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"s",url:"namespacemembers_func.html#index_s"}, +{text:"t",url:"namespacemembers_func.html#index_t"}, +{text:"v",url:"namespacemembers_func.html#index_v"}]}, +{text:"Typedefs",url:"namespacemembers_type.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"l",url:"functions.html#index_l"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"v",url:"functions.html#index_v"}, +{text:"w",url:"functions.html#index_w"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"v",url:"functions_func.html#index_v"}, +{text:"w",url:"functions_func.html#index_w"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Typedefs",url:"functions_type.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}]}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 000000000..f70d0c1a1 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 000000000..5f8e87962 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/namespacejwt.html b/namespacejwt.html new file mode 100644 index 000000000..953c4c80b --- /dev/null +++ b/namespacejwt.html @@ -0,0 +1,816 @@ + + + + + + + +JWT-CPP: jwt Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt Namespace Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Namespaces

    namespace  algorithm
     
    namespace  alphabet
     
    namespace  base
     
    namespace  error
     
    namespace  helper
     
    namespace  json
     
    + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  basic_claim
     
    class  builder
     
    class  decoded_jwt
     
    struct  default_clock
     
    class  header
     
    class  jwk
     
    class  jwks
     
    class  payload
     
    class  verifier
     
    + + + + + + + +

    +Typedefs

    +using date = std::chrono::system_clock::time_point
     
    using claim = basic_claim< traits::boost_json >
     
    +using verify_context = verify_ops::verify_context< traits::boost_json >
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    template<typename Clock , typename json_traits >
    verifier< Clock, json_traits > verify (Clock c)
     
    template<typename json_traits >
    verifier< default_clock, json_traits > verify (default_clock c={})
     
    +template<typename json_traits >
    builder< json_traits > create ()
     
    template<typename json_traits , typename Decode >
    decoded_jwt< json_traits > decode (const typename json_traits::string_type &token, Decode decode)
     
    template<typename json_traits >
    decoded_jwt< json_traits > decode (const typename json_traits::string_type &token)
     
    template<typename json_traits >
    jwk< json_traits > parse_jwk (const typename json_traits::string_type &jwk_)
     
    template<typename json_traits >
    jwks< json_traits > parse_jwks (const typename json_traits::string_type &jwks_)
     
    verifier< default_clock, traits::boost_jsonverify ()
     
    +builder< traits::boost_jsoncreate ()
     
    decoded_jwt< traits::boost_jsondecode (const std::string &token)
     
    template<typename Decode >
    decoded_jwt< traits::boost_jsondecode (const std::string &token, Decode decode)
     
    jwk< traits::boost_jsonparse_jwk (const traits::boost_json::string_type &token)
     
    jwks< traits::boost_jsonparse_jwks (const traits::boost_json::string_type &token)
     
    template<typename Decode >
    decoded_jwt< traits::danielaparker_jsonconsdecode (const std::string &token, Decode decode)
     
    template<typename Decode >
    decoded_jwt< traits::kazuho_picojsondecode (const std::string &token, Decode decode)
     
    template<typename Decode >
    decoded_jwt< traits::nlohmann_jsondecode (const std::string &token, Decode decode)
     
    +

    Detailed Description

    +

    JSON Web Token.

    +

    A namespace to contain everything related to handling JSON Web Tokens, JWT for short, as a part of RFC7519, or alternatively for JWS (JSON Web Signature) from RFC7515

    +

    Typedef Documentation

    + +

    ◆ claim

    + +
    +
    + +

    a class to store a generic Boost.JSON value as claim

    +

    a class to store a generic JSON for Modern C++ value as claim

    +

    a class to store a generic picojson value as claim

    +

    a class to store a generic jsoncons value as claim

    +

    This type is the specialization of the basic_claim class which uses the standard template types.

    + +
    +
    +

    Function Documentation

    + +

    ◆ decode() [1/7]

    + +
    +
    + + + + + +
    + + + + + + + + +
    decoded_jwt< traits::nlohmann_json > jwt::decode (const std::string & token)
    +
    +inline
    +
    + +

    Decode a token.

    +
    Parameters
    + + +
    tokenToken to decode
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ decode() [2/7]

    + +
    +
    +
    +template<typename Decode >
    + + + + + + + + + + + + + + + + + + +
    decoded_jwt< traits::boost_json > jwt::decode (const std::string & token,
    Decode decode 
    )
    +
    + +

    Decode a token.

    +
    Template Parameters
    + + +
    Decodeis callabled, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64url decode and return the results.
    +
    +
    +
    Parameters
    + + + +
    tokenToken to decode
    decodeThe token to parse
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ decode() [3/7]

    + +
    +
    +
    +template<typename Decode >
    + + + + + + + + + + + + + + + + + + +
    decoded_jwt< traits::danielaparker_jsoncons > jwt::decode (const std::string & token,
    Decode decode 
    )
    +
    + +

    Decode a token.

    +
    Template Parameters
    + + +
    Decodeis callabled, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64url decode and return the results.
    +
    +
    +
    Parameters
    + + + +
    tokenToken to decode
    decodeThe token to parse
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ decode() [4/7]

    + +
    +
    +
    +template<typename Decode >
    + + + + + + + + + + + + + + + + + + +
    decoded_jwt< traits::kazuho_picojson > jwt::decode (const std::string & token,
    Decode decode 
    )
    +
    + +

    Decode a token.

    +
    Template Parameters
    + + +
    Decodeis callabled, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64url decode and return the results.
    +
    +
    +
    Parameters
    + + + +
    tokenToken to decode
    decodeThe token to parse
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ decode() [5/7]

    + +
    +
    +
    +template<typename Decode >
    + + + + + + + + + + + + + + + + + + +
    decoded_jwt< traits::nlohmann_json > jwt::decode (const std::string & token,
    Decode decode 
    )
    +
    + +

    Decode a token.

    +
    Template Parameters
    + + +
    Decodeis callabled, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64url decode and return the results.
    +
    +
    +
    Parameters
    + + + +
    tokenToken to decode
    decodeThe token to parse
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ decode() [6/7]

    + +
    +
    +
    +template<typename json_traits >
    + + + + + + + + +
    decoded_jwt< json_traits > jwt::decode (const typename json_traits::string_type & token)
    +
    + +

    Decode a token.

    +
    Template Parameters
    + + +
    json_traitsJSON implementation traits
    +
    +
    +
    Parameters
    + + +
    tokenToken to decode
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ decode() [7/7]

    + +
    +
    +
    +template<typename json_traits , typename Decode >
    + + + + + + + + + + + + + + + + + + +
    decoded_jwt< json_traits > jwt::decode (const typename json_traits::string_type & token,
    Decode decode 
    )
    +
    + +

    Decode a token.

    +
    Parameters
    + + + +
    tokenToken to decode
    decodefunction that will pad and base64url decode the token
    +
    +
    +
    Returns
    Decoded token
    +
    Exceptions
    + + + +
    std::invalid_argumentToken is not in correct format
    std::runtime_errorBase64 decoding failed or invalid json
    +
    +
    + +
    +
    + +

    ◆ parse_jwk() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    jwk< traits::nlohmann_json > jwt::parse_jwk (const traits::boost_json::string_type & token)
    +
    +inline
    +
    + +

    Parse a jwk.

    +
    Parameters
    + + +
    tokenJWK Token to parse
    +
    +
    +
    Returns
    Parsed JWK
    +
    Exceptions
    + + +
    std::runtime_errorToken is not in correct format
    +
    +
    + +
    +
    + +

    ◆ parse_jwk() [2/2]

    + +
    +
    +
    +template<typename json_traits >
    + + + + + + + + +
    jwk< json_traits > jwt::parse_jwk (const typename json_traits::string_type & jwk_)
    +
    + +

    Parse a single JSON Web Key.

    +
    Template Parameters
    + + +
    json_traitsJSON implementation traits
    +
    +
    +
    Parameters
    + + +
    jwk_string buffer containing the JSON object
    +
    +
    +
    Returns
    Decoded jwk
    + +
    +
    + +

    ◆ parse_jwks() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    jwks< traits::nlohmann_json > jwt::parse_jwks (const traits::boost_json::string_type & token)
    +
    +inline
    +
    + +

    Parse a jwks.

    +
    Parameters
    + + +
    tokenJWKs Token to parse
    +
    +
    +
    Returns
    Parsed JWKs
    +
    Exceptions
    + + +
    std::runtime_errorToken is not in correct format
    +
    +
    + +
    +
    + +

    ◆ parse_jwks() [2/2]

    + +
    +
    +
    +template<typename json_traits >
    + + + + + + + + +
    jwks< json_traits > jwt::parse_jwks (const typename json_traits::string_type & jwks_)
    +
    + +

    Parse a JSON Web Key Set.

    +
    Template Parameters
    + + +
    json_traitsJSON implementation traits
    +
    +
    +
    Parameters
    + + +
    jwks_string buffer containing the JSON object
    +
    +
    +
    Returns
    Decoded jwk
    + +
    +
    + +

    ◆ verify() [1/3]

    + +
    +
    + + + + + +
    + + + + + + + +
    verifier< default_clock, traits::nlohmann_json > jwt::verify ()
    +
    +inline
    +
    + +

    Create a verifier using the default clock.

    +
    Returns
    verifier instance
    + +
    +
    + +

    ◆ verify() [2/3]

    + +
    +
    +
    +template<typename Clock , typename json_traits >
    + + + + + + + + +
    verifier< Clock, json_traits > jwt::verify (Clock c)
    +
    + +

    Create a verifier using the given clock.

    +
    Parameters
    + + +
    cClock instance to use
    +
    +
    +
    Returns
    verifier instance
    + +
    +
    + +

    ◆ verify() [3/3]

    + +
    +
    +
    +template<typename json_traits >
    + + + + + + + + +
    verifier< default_clock, json_traits > jwt::verify (default_clock c = {})
    +
    + +

    Create a verifier using the given clock.

    +
    Parameters
    + + +
    cClock instance to use
    +
    +
    +
    Returns
    verifier instance
    + +
    +
    +
    +
    + + + + diff --git a/namespacejwt.js b/namespacejwt.js new file mode 100644 index 000000000..a1931227f --- /dev/null +++ b/namespacejwt.js @@ -0,0 +1,46 @@ +var namespacejwt = +[ + [ "algorithm", "namespacejwt_1_1algorithm.html", null ], + [ "alphabet", "namespacejwt_1_1alphabet.html", "namespacejwt_1_1alphabet" ], + [ "base", "namespacejwt_1_1base.html", null ], + [ "error", "namespacejwt_1_1error.html", "namespacejwt_1_1error" ], + [ "helper", "namespacejwt_1_1helper.html", "namespacejwt_1_1helper" ], + [ "json", "namespacejwt_1_1json.html", [ + [ "type", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3e", [ + [ "boolean", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3ea84e2c64f38f78ba3ea5c905ab5a2da27", null ], + [ "integer", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3ea157db7df530023575515d366c9b672e8", null ], + [ "number", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3eab1bc248a7ff2b2e95569f56de68615df", null ], + [ "string", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3eab45cffe084dd3d20d928bee85e7b0f21", null ], + [ "array", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3eaf1f713c9e000f5d3f280adbd124df4f5", null ], + [ "object", "namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3eaa8cfde6331bd59eb2ac96f8911c4b666", null ] + ] ] + ] ], + [ "basic_claim", "classjwt_1_1basic__claim.html", "classjwt_1_1basic__claim" ], + [ "builder", "classjwt_1_1builder.html", "classjwt_1_1builder" ], + [ "decoded_jwt", "classjwt_1_1decoded__jwt.html", "classjwt_1_1decoded__jwt" ], + [ "default_clock", "structjwt_1_1default__clock.html", null ], + [ "header", "classjwt_1_1header.html", "classjwt_1_1header" ], + [ "jwk", "classjwt_1_1jwk.html", "classjwt_1_1jwk" ], + [ "jwks", "classjwt_1_1jwks.html", "classjwt_1_1jwks" ], + [ "payload", "classjwt_1_1payload.html", "classjwt_1_1payload" ], + [ "verifier", "classjwt_1_1verifier.html", "classjwt_1_1verifier" ], + [ "claim", "namespacejwt.html#ac746f304c522d67c96b3b3f8bfa92e98", null ], + [ "date", "namespacejwt.html#ad1a72c1ea3d67e3d9bd554e26856523d", null ], + [ "verify_context", "namespacejwt.html#ac6661f443e9d9cdd8ff26b5f59b4777c", null ], + [ "create", "namespacejwt.html#a2c5962f1775bac1a99e326e761b2e05e", null ], + [ "create", "namespacejwt.html#a119b3861d510205d5c626b794c06d020", null ], + [ "decode", "namespacejwt.html#ae63bcbdf9caf43a79f3c140708552761", null ], + [ "decode", "namespacejwt.html#a1888325882765254b8d2680ff1cf3210", null ], + [ "decode", "namespacejwt.html#a98607d668bf63870e5dab3f81afe0320", null ], + [ "decode", "namespacejwt.html#a627d2f26db17185e7eb7bb92defa70cc", null ], + [ "decode", "namespacejwt.html#a65d515aeb39cb5829c7af774051ae91e", null ], + [ "decode", "namespacejwt.html#ade66496cbe78db1ca2fd769b6982bbc9", null ], + [ "decode", "namespacejwt.html#aefffdd7d2a79d6872c15a7ec1661b149", null ], + [ "parse_jwk", "namespacejwt.html#a400ddb1cef610c92831bd577fd81d4e6", null ], + [ "parse_jwk", "namespacejwt.html#a8948012a32d2d558ced39f6101c5c7e0", null ], + [ "parse_jwks", "namespacejwt.html#a19ba6f93afb62925496c134f15c89116", null ], + [ "parse_jwks", "namespacejwt.html#a978368e4ebd959166629b689fbe3e4ec", null ], + [ "verify", "namespacejwt.html#aac658f79d5123d53c3edcbecbbbdc149", null ], + [ "verify", "namespacejwt.html#a05f9a08741bb8d685f0b2dfbc22820b7", null ], + [ "verify", "namespacejwt.html#a68225fdaab1a9a068e28d6acec245694", null ] +]; \ No newline at end of file diff --git a/namespacejwt_1_1algorithm.html b/namespacejwt_1_1algorithm.html new file mode 100644 index 000000000..c3bed952b --- /dev/null +++ b/namespacejwt_1_1algorithm.html @@ -0,0 +1,114 @@ + + + + + + + +JWT-CPP: jwt::algorithm Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::algorithm Namespace Reference
    +
    +
    +

    Detailed Description

    +

    Various cryptographic algorithms when working with JWT.

    +

    JWT (JSON Web Tokens) signatures are typically used as the payload for a JWS (JSON Web Signature) or JWE (JSON Web Encryption). Both of these use various cryptographic as specified by RFC7518 and are exposed through the a JOSE Header which points to one of the JWA JSON Web Algorithms

    +
    +
    + + + + diff --git a/namespacejwt_1_1alphabet.html b/namespacejwt_1_1alphabet.html new file mode 100644 index 000000000..8a53f6a83 --- /dev/null +++ b/namespacejwt_1_1alphabet.html @@ -0,0 +1,128 @@ + + + + + + + +JWT-CPP: jwt::alphabet Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::alphabet Namespace Reference
    +
    +
    + + + + + + +

    +Classes

    struct  base64
     
    struct  base64url
     
    + + + +

    +Functions

    +uint32_t index (const std::array< char, 64 > &alphabet, char symbol)
     
    +

    Detailed Description

    +

    character maps when encoding and decoding

    +
    +
    + + + + diff --git a/namespacejwt_1_1alphabet.js b/namespacejwt_1_1alphabet.js new file mode 100644 index 000000000..88d18ba68 --- /dev/null +++ b/namespacejwt_1_1alphabet.js @@ -0,0 +1,5 @@ +var namespacejwt_1_1alphabet = +[ + [ "base64", "structjwt_1_1alphabet_1_1base64.html", null ], + [ "base64url", "structjwt_1_1alphabet_1_1base64url.html", null ] +]; \ No newline at end of file diff --git a/namespacejwt_1_1base.html b/namespacejwt_1_1base.html new file mode 100644 index 000000000..3c9b3d315 --- /dev/null +++ b/namespacejwt_1_1base.html @@ -0,0 +1,133 @@ + + + + + + + +JWT-CPP: jwt::base Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::base Namespace Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Functions

    +template<typename T >
    std::string encode (const std::string &bin)
     
    +template<typename T >
    std::string decode (const std::string &base)
     
    +template<typename T >
    std::string pad (const std::string &base)
     
    +template<typename T >
    std::string trim (const std::string &base)
     
    +

    Detailed Description

    +

    A collection of fellable functions for working with base64 and base64url.

    +
    +
    + + + + diff --git a/namespacejwt_1_1error.html b/namespacejwt_1_1error.html new file mode 100644 index 000000000..8f65c60f2 --- /dev/null +++ b/namespacejwt_1_1error.html @@ -0,0 +1,250 @@ + + + + + + + +JWT-CPP: jwt::error Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::error Namespace Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Classes

    struct  claim_not_present_exception
     
    struct  ecdsa_exception
     
    struct  invalid_json_exception
     
    struct  rsa_exception
     
    struct  signature_generation_exception
     
    struct  signature_verification_exception
     
    struct  token_verification_exception
     
    + + + + + + + + + + + +

    +Enumerations

    enum class  rsa_error {
    +  ok = 0 +, cert_load_failed = 10 +, get_key_failed +, write_key_failed +,
    +  write_cert_failed +, convert_to_pem_failed +, load_key_bio_write +, load_key_bio_read +,
    +  create_mem_bio_failed +, no_key_provided +
    + }
     
    enum class  ecdsa_error {
    +  ok = 0 +, load_key_bio_write = 10 +, load_key_bio_read +, create_mem_bio_failed +,
    +  no_key_provided +, invalid_key_size +, invalid_key +, create_context_failed +
    + }
     
    enum class  signature_verification_error {
    +  ok = 0 +, invalid_signature = 10 +, create_context_failed +, verifyinit_failed +,
    +  verifyupdate_failed +, verifyfinal_failed +, get_key_failed +, set_rsa_pss_saltlen_failed +,
    +  signature_encoding_failed +
    + }
     
    enum class  signature_generation_error {
    +  ok = 0 +, hmac_failed = 10 +, create_context_failed +, signinit_failed +,
    +  signupdate_failed +, signfinal_failed +, ecdsa_do_sign_failed +, digestinit_failed +,
    +  digestupdate_failed +, digestfinal_failed +, rsa_padding_failed +, rsa_private_encrypt_failed +,
    +  get_key_failed +, set_rsa_pss_saltlen_failed +, signature_decoding_failed +
    + }
     
    enum class  token_verification_error {
    +  ok = 0 +, wrong_algorithm = 10 +, missing_claim +, claim_type_missmatch +,
    +  claim_value_missmatch +, token_expired +, audience_missmatch +
    + }
     
    + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +std::error_category & rsa_error_category ()
     
    +std::error_code make_error_code (rsa_error e)
     
    +std::error_category & ecdsa_error_category ()
     
    +std::error_code make_error_code (ecdsa_error e)
     
    +std::error_category & signature_verification_error_category ()
     
    +std::error_code make_error_code (signature_verification_error e)
     
    +std::error_category & signature_generation_error_category ()
     
    +std::error_code make_error_code (signature_generation_error e)
     
    +std::error_category & token_verification_error_category ()
     
    +std::error_code make_error_code (token_verification_error e)
     
    +void throw_if_error (std::error_code ec)
     
    +

    Detailed Description

    +

    Everything related to error codes issued by the library.

    +
    +
    + + + + diff --git a/namespacejwt_1_1error.js b/namespacejwt_1_1error.js new file mode 100644 index 000000000..1d02f4db5 --- /dev/null +++ b/namespacejwt_1_1error.js @@ -0,0 +1,74 @@ +var namespacejwt_1_1error = +[ + [ "claim_not_present_exception", "structjwt_1_1error_1_1claim__not__present__exception.html", null ], + [ "ecdsa_exception", "structjwt_1_1error_1_1ecdsa__exception.html", null ], + [ "invalid_json_exception", "structjwt_1_1error_1_1invalid__json__exception.html", null ], + [ "rsa_exception", "structjwt_1_1error_1_1rsa__exception.html", null ], + [ "signature_generation_exception", "structjwt_1_1error_1_1signature__generation__exception.html", null ], + [ "signature_verification_exception", "structjwt_1_1error_1_1signature__verification__exception.html", null ], + [ "token_verification_exception", "structjwt_1_1error_1_1token__verification__exception.html", null ], + [ "ecdsa_error", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3", [ + [ "ok", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3a444bcb3a3fcf8389296c49467f27e1d6", null ], + [ "load_key_bio_write", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3a44f966f50636fb8e175d6f2d533c1692", null ], + [ "load_key_bio_read", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3ae42bedb116868d6a66ed2b044fdc0637", null ], + [ "create_mem_bio_failed", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3a47fd419b07ca34b7ab701ca47dcdef35", null ], + [ "no_key_provided", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3a9187f432c77c43c6246f7d2a112436c0", null ], + [ "invalid_key_size", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3a0e127af36ee0857e8d0cd4f46b104ae2", null ], + [ "invalid_key", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3ad9d8172ffa4e21f955e8ad125f9dbc32", null ], + [ "create_context_failed", "namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3ad50946bd69038b7b1dc23e8493c8abd9", null ] + ] ], + [ "rsa_error", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7", [ + [ "ok", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a444bcb3a3fcf8389296c49467f27e1d6", null ], + [ "cert_load_failed", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a3d6de114f6e703a4bcd79b3d9bf22150", null ], + [ "get_key_failed", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a61ffa765262720c4d3f9fa1bae16aef1", null ], + [ "write_key_failed", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7aa981db8d66a8ab35a65c60821b89d66d", null ], + [ "write_cert_failed", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7ad45e2b718ee68984b44ff463759a01da", null ], + [ "convert_to_pem_failed", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a3f97237b9425b9738ff8f55486a12a40", null ], + [ "load_key_bio_write", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a44f966f50636fb8e175d6f2d533c1692", null ], + [ "load_key_bio_read", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7ae42bedb116868d6a66ed2b044fdc0637", null ], + [ "create_mem_bio_failed", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a47fd419b07ca34b7ab701ca47dcdef35", null ], + [ "no_key_provided", "namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7a9187f432c77c43c6246f7d2a112436c0", null ] + ] ], + [ "signature_generation_error", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cd", [ + [ "ok", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda444bcb3a3fcf8389296c49467f27e1d6", null ], + [ "hmac_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda3c80daa8e5183892d84eeee4ba8d4225", null ], + [ "create_context_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdad50946bd69038b7b1dc23e8493c8abd9", null ], + [ "signinit_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdaced6d1bde8f92a00acce72c1ad77b5ed", null ], + [ "signupdate_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdaa3956ad366f295e7863216eb0c9cf476", null ], + [ "signfinal_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda8cf7ce834c617c414615cba0b4f44aab", null ], + [ "ecdsa_do_sign_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdad31784e325bf521b9fcf9fa157a42606", null ], + [ "digestinit_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda540d7251aa18c17af60e5685d2f81928", null ], + [ "digestupdate_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdacee3a6b4893eb1f81d15741543ddf648", null ], + [ "digestfinal_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdafc69ffe4a95fa9cd0869df713792c818", null ], + [ "rsa_padding_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda004ad1938f3e55494a84e5179601dea8", null ], + [ "rsa_private_encrypt_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda84789e1aa6ddf95c61fdccaba08f3b55", null ], + [ "get_key_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda61ffa765262720c4d3f9fa1bae16aef1", null ], + [ "set_rsa_pss_saltlen_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cda3b8494597c180ed60912ae5c51177438", null ], + [ "signature_decoding_failed", "namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cdafa403d015a946fdae4d1ba0515dfb3c6", null ] + ] ], + [ "signature_verification_error", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244", [ + [ "ok", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a444bcb3a3fcf8389296c49467f27e1d6", null ], + [ "invalid_signature", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a12c527ffd45868061a192960b352b5d9", null ], + [ "create_context_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244ad50946bd69038b7b1dc23e8493c8abd9", null ], + [ "verifyinit_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a5d43faf0ec0b24438f98bf74d72c5c79", null ], + [ "verifyupdate_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a946c3b7abfe6b3e54cbc80e11940b199", null ], + [ "verifyfinal_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a333283503c06d433714ce5b8203364f3", null ], + [ "get_key_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a61ffa765262720c4d3f9fa1bae16aef1", null ], + [ "set_rsa_pss_saltlen_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244a3b8494597c180ed60912ae5c51177438", null ], + [ "signature_encoding_failed", "namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244ad8e3c0cf1edd42a9dc9dfc91403dcf33", null ] + ] ], + [ "token_verification_error", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baed", [ + [ "ok", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baeda444bcb3a3fcf8389296c49467f27e1d6", null ], + [ "wrong_algorithm", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baeda4404b67544ddc49f3f2094bd49ddf7a9", null ], + [ "missing_claim", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baedacfde715e0d40a081f7f5e422bd937799", null ], + [ "claim_type_missmatch", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baeda7fe3c31fbd6b90c70970a68c367a97c3", null ], + [ "claim_value_missmatch", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baeda70f3db8189bd7eb2942b9f5ab6f43152", null ], + [ "token_expired", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baeda69b58fd647119e4faedceb8c5190f3e9", null ], + [ "audience_missmatch", "namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baedaa01717cbe8c9b54f3fcd5a14f9e7ecfa", null ] + ] ], + [ "ecdsa_error_category", "namespacejwt_1_1error.html#a641d06c74f6ed676ac0636215b50e2b2", null ], + [ "rsa_error_category", "namespacejwt_1_1error.html#a7fd09a10a0c499fe063293a10caf89e9", null ], + [ "signature_generation_error_category", "namespacejwt_1_1error.html#a86c5b0c1df898d66161455b323b8053e", null ], + [ "signature_verification_error_category", "namespacejwt_1_1error.html#a7c0e4691aa8c55743300cd068ad23aec", null ], + [ "token_verification_error_category", "namespacejwt_1_1error.html#a187142c60516cc974c86efb5e277922d", null ] +]; \ No newline at end of file diff --git a/namespacejwt_1_1helper.html b/namespacejwt_1_1helper.html new file mode 100644 index 000000000..69ad728cd --- /dev/null +++ b/namespacejwt_1_1helper.html @@ -0,0 +1,1038 @@ + + + + + + + +JWT-CPP: jwt::helper Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::helper Namespace Reference
    +
    +
    + + + + +

    +Classes

    class  evp_pkey_handle
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    +std::unique_ptr< BIO, decltype(&BIO_free_all)> make_mem_buf_bio ()
     
    +std::unique_ptr< BIO, decltype(&BIO_free_all)> make_mem_buf_bio (const std::string &data)
     
    +std::unique_ptr< EVP_MD_CTX, void(*)(EVP_MD_CTX *)> make_evp_md_ctx ()
     
    std::string extract_pubkey_from_cert (const std::string &certstr, const std::string &pw, std::error_code &ec)
     
    std::string extract_pubkey_from_cert (const std::string &certstr, const std::string &pw="")
     
    std::string convert_der_to_pem (const std::string &cert_der_str, std::error_code &ec)
     
    template<typename Decode >
    std::string convert_base64_der_to_pem (const std::string &cert_base64_der_str, Decode decode, std::error_code &ec)
     
    template<typename Decode >
    std::string convert_base64_der_to_pem (const std::string &cert_base64_der_str, Decode decode)
     
    std::string convert_der_to_pem (const std::string &cert_der_str)
     
    std::string convert_base64_der_to_pem (const std::string &cert_base64_der_str, std::error_code &ec)
     
    std::string convert_base64_der_to_pem (const std::string &cert_base64_der_str)
     
    evp_pkey_handle load_public_key_from_string (const std::string &key, const std::string &password, std::error_code &ec)
     
    evp_pkey_handle load_public_key_from_string (const std::string &key, const std::string &password="")
     
    evp_pkey_handle load_private_key_from_string (const std::string &key, const std::string &password, std::error_code &ec)
     
    evp_pkey_handle load_private_key_from_string (const std::string &key, const std::string &password="")
     
    evp_pkey_handle load_public_ec_key_from_string (const std::string &key, const std::string &password, std::error_code &ec)
     
    evp_pkey_handle load_public_ec_key_from_string (const std::string &key, const std::string &password="")
     
    evp_pkey_handle load_private_ec_key_from_string (const std::string &key, const std::string &password, std::error_code &ec)
     
    evp_pkey_handle load_private_ec_key_from_string (const std::string &key, const std::string &password="")
     
    std::string bn2raw (const BIGNUM *bn)
     
    std::unique_ptr< BIGNUM, decltype(&BN_free)> raw2bn (const std::string &raw)
     
    +

    Detailed Description

    +

    A collection for working with certificates.

    +

    These helpers are usefully when working with certificates OpenSSL APIs. For example, when dealing with JWKS (JSON Web Key Set)[https://tools.ietf.org/html/rfc7517] you maybe need to extract the modulus and exponent of an RSA Public Key.

    +

    Function Documentation

    + +

    ◆ bn2raw()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::string jwt::helper::bn2raw (const BIGNUM * bn)
    +
    +inline
    +
    + +

    Convert a OpenSSL BIGNUM to a std::string.

    +
    Parameters
    + + +
    bnBIGNUM to convert
    +
    +
    +
    Returns
    bignum as string
    + +
    +
    + +

    ◆ convert_base64_der_to_pem() [1/4]

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::string jwt::helper::convert_base64_der_to_pem (const std::string & cert_base64_der_str)
    +
    +inline
    +
    + +

    Convert the certificate provided as base64 DER to PEM.

    +

    This is useful when using with JWKs as x5c claim is encoded as base64 DER. More info (here)[https://tools.ietf.org/html/rfc7517#section-4.7]

    +
    Parameters
    + + +
    cert_base64_der_strString containing the certificate encoded as base64 DER
    +
    +
    +
    Exceptions
    + + +
    rsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ convert_base64_der_to_pem() [2/4]

    + +
    +
    +
    +template<typename Decode >
    + + + + + + + + + + + + + + + + + + +
    std::string jwt::helper::convert_base64_der_to_pem (const std::string & cert_base64_der_str,
    Decode decode 
    )
    +
    + +

    Convert the certificate provided as base64 DER to PEM.

    +

    This is useful when using with JWKs as x5c claim is encoded as base64 DER. More info (here)[https://tools.ietf.org/html/rfc7517#section-4.7]

    +
    Template Parameters
    + + +
    Decodeis callable, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64 decode and return the results.
    +
    +
    +
    Parameters
    + + + +
    cert_base64_der_strString containing the certificate encoded as base64 DER
    decodeThe function to decode the cert
    +
    +
    +
    Exceptions
    + + +
    rsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ convert_base64_der_to_pem() [3/4]

    + +
    +
    +
    +template<typename Decode >
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::string jwt::helper::convert_base64_der_to_pem (const std::string & cert_base64_der_str,
    Decode decode,
    std::error_code & ec 
    )
    +
    + +

    Convert the certificate provided as base64 DER to PEM.

    +

    This is useful when using with JWKs as x5c claim is encoded as base64 DER. More info (here)[https://tools.ietf.org/html/rfc7517#section-4.7]

    +
    Template Parameters
    + + +
    Decodeis callable, taking a string_type and returns a string_type. It should ensure the padding of the input and then base64 decode and return the results.
    +
    +
    +
    Parameters
    + + + + +
    cert_base64_der_strString containing the certificate encoded as base64 DER
    decodeThe function to decode the cert
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ convert_base64_der_to_pem() [4/4]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::string jwt::helper::convert_base64_der_to_pem (const std::string & cert_base64_der_str,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Convert the certificate provided as base64 DER to PEM.

    +

    This is useful when using with JWKs as x5c claim is encoded as base64 DER. More info (here)[https://tools.ietf.org/html/rfc7517#section-4.7]

    +
    Parameters
    + + + +
    cert_base64_der_strString containing the certificate encoded as base64 DER
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ convert_der_to_pem() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::string jwt::helper::convert_der_to_pem (const std::string & cert_der_str)
    +
    +inline
    +
    + +

    Convert the certificate provided as DER to PEM.

    +
    Parameters
    + + +
    cert_der_strString containing the DER certificate
    +
    +
    +
    Exceptions
    + + +
    rsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ convert_der_to_pem() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::string jwt::helper::convert_der_to_pem (const std::string & cert_der_str,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Convert the certificate provided as DER to PEM.

    +
    Parameters
    + + + +
    cert_der_strString containing the certificate encoded as base64 DER
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ extract_pubkey_from_cert() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    std::string jwt::helper::extract_pubkey_from_cert (const std::string & certstr,
    const std::string & pw,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Extract the public key of a PEM certificate.

    +
    Parameters
    + + + + +
    certstrString containing the certificate encoded as pem
    pwPassword used to decrypt certificate (leave empty if not encrypted)
    ecerror_code for error_detection (gets cleared if no error occurred)
    +
    +
    + +
    +
    + +

    ◆ extract_pubkey_from_cert() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    std::string jwt::helper::extract_pubkey_from_cert (const std::string & certstr,
    const std::string & pw = "" 
    )
    +
    +inline
    +
    + +

    Extract the public key of a pem certificate.

    +
    Parameters
    + + + +
    certstrString containing the certificate encoded as pem
    pwPassword used to decrypt certificate (leave empty if not encrypted)
    +
    +
    +
    Exceptions
    + + +
    rsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ load_private_ec_key_from_string() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_private_ec_key_from_string (const std::string & key,
    const std::string & password,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Load a private key from a string.

    +
    Parameters
    + + + + +
    keyString containing a private key as pem
    passwordPassword used to decrypt key (leave empty if not encrypted)
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ load_private_ec_key_from_string() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_private_ec_key_from_string (const std::string & key,
    const std::string & password = "" 
    )
    +
    +inline
    +
    + +

    Load a private key from a string.

    +
    Parameters
    + + + +
    keyString containing a private key as pem
    passwordPassword used to decrypt key (leave empty if not encrypted)
    +
    +
    +
    Exceptions
    + + +
    ecdsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ load_private_key_from_string() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_private_key_from_string (const std::string & key,
    const std::string & password,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Load a private key from a string.

    +
    Parameters
    + + + + +
    keyString containing a private key as pem
    passwordPassword used to decrypt key (leave empty if not encrypted)
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ load_private_key_from_string() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_private_key_from_string (const std::string & key,
    const std::string & password = "" 
    )
    +
    +inline
    +
    + +

    Load a private key from a string.

    +
    Parameters
    + + + +
    keyString containing a private key as pem
    passwordPassword used to decrypt key (leave empty if not encrypted)
    +
    +
    +
    Exceptions
    + + +
    rsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ load_public_ec_key_from_string() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_public_ec_key_from_string (const std::string & key,
    const std::string & password,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Load a public key from a string.

    +

    The string should contain a pem encoded certificate or public key

    +
    Parameters
    + + + + +
    keyString containing the certificate encoded as pem
    passwordPassword used to decrypt certificate (leave empty if not encrypted)
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ load_public_ec_key_from_string() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_public_ec_key_from_string (const std::string & key,
    const std::string & password = "" 
    )
    +
    +inline
    +
    + +

    Load a public key from a string.

    +

    The string should contain a pem encoded certificate or public key

    +
    Parameters
    + + + +
    keyString containing the certificate or key encoded as pem
    passwordPassword used to decrypt certificate or key (leave empty if not encrypted)
    +
    +
    +
    Exceptions
    + + +
    ecdsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ load_public_key_from_string() [1/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_public_key_from_string (const std::string & key,
    const std::string & password,
    std::error_code & ec 
    )
    +
    +inline
    +
    + +

    Load a public key from a string.

    +

    The string should contain a pem encoded certificate or public key

    +
    Parameters
    + + + + +
    keyString containing the certificate encoded as pem
    passwordPassword used to decrypt certificate (leave empty if not encrypted)
    ecerror_code for error_detection (gets cleared if no error occurs)
    +
    +
    + +
    +
    + +

    ◆ load_public_key_from_string() [2/2]

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    evp_pkey_handle jwt::helper::load_public_key_from_string (const std::string & key,
    const std::string & password = "" 
    )
    +
    +inline
    +
    + +

    Load a public key from a string.

    +

    The string should contain a pem encoded certificate or public key

    +
    Parameters
    + + + +
    keyString containing the certificate or key encoded as pem
    passwordPassword used to decrypt certificate or key (leave empty if not encrypted)
    +
    +
    +
    Exceptions
    + + +
    rsa_exceptionif an error occurred
    +
    +
    + +
    +
    + +

    ◆ raw2bn()

    + +
    +
    + + + + + +
    + + + + + + + + +
    std::unique_ptr< BIGNUM, decltype(&BN_free)> jwt::helper::raw2bn (const std::string & raw)
    +
    +inline
    +
    + +

    Convert an std::string to a OpenSSL BIGNUM.

    +
    Parameters
    + + +
    rawString to convert
    +
    +
    +
    Returns
    BIGNUM representation
    + +
    +
    +
    +
    + + + + diff --git a/namespacejwt_1_1helper.js b/namespacejwt_1_1helper.js new file mode 100644 index 000000000..41c916519 --- /dev/null +++ b/namespacejwt_1_1helper.js @@ -0,0 +1,22 @@ +var namespacejwt_1_1helper = +[ + [ "evp_pkey_handle", "classjwt_1_1helper_1_1evp__pkey__handle.html", "classjwt_1_1helper_1_1evp__pkey__handle" ], + [ "bn2raw", "namespacejwt_1_1helper.html#aa75689cc6b3d9f710b5c050cc9bff5ff", null ], + [ "convert_base64_der_to_pem", "namespacejwt_1_1helper.html#a792fb50c64b41b4546c2a2b2dfb41746", null ], + [ "convert_base64_der_to_pem", "namespacejwt_1_1helper.html#a8a6dd42aec39dc85dbc3d14df183f125", null ], + [ "convert_base64_der_to_pem", "namespacejwt_1_1helper.html#a868bab109dbaf38adc80f4025c9ce378", null ], + [ "convert_base64_der_to_pem", "namespacejwt_1_1helper.html#ab58e1f3020d0415a71aa9cea1e9fa4f2", null ], + [ "convert_der_to_pem", "namespacejwt_1_1helper.html#aabc2a97481e9cbcee6c4a09705cf4c15", null ], + [ "convert_der_to_pem", "namespacejwt_1_1helper.html#aeb9ab265a9a4baeb4c82288dc869f5b2", null ], + [ "extract_pubkey_from_cert", "namespacejwt_1_1helper.html#a85fab72593fea9a3bb704464be2bfc18", null ], + [ "extract_pubkey_from_cert", "namespacejwt_1_1helper.html#a8a102b1b679467ba520e8cae3ceed9da", null ], + [ "load_private_ec_key_from_string", "namespacejwt_1_1helper.html#a63731359f8e1b6d0b31f3a768fc355f1", null ], + [ "load_private_ec_key_from_string", "namespacejwt_1_1helper.html#ad23f6478334425f86a75b659981187ca", null ], + [ "load_private_key_from_string", "namespacejwt_1_1helper.html#aec26aaa1b60b17039046cd5043a520f8", null ], + [ "load_private_key_from_string", "namespacejwt_1_1helper.html#aa14d03fa5947ac066d8890a050116b93", null ], + [ "load_public_ec_key_from_string", "namespacejwt_1_1helper.html#a366b03033ec53d5321256b9f05238b38", null ], + [ "load_public_ec_key_from_string", "namespacejwt_1_1helper.html#a7ca85602a4520008b1b624e1b175bba5", null ], + [ "load_public_key_from_string", "namespacejwt_1_1helper.html#aff6d5a71d864f47402606ce7d22ae5aa", null ], + [ "load_public_key_from_string", "namespacejwt_1_1helper.html#a026ca0f48025b1ec3502e3ea42efd2ab", null ], + [ "raw2bn", "namespacejwt_1_1helper.html#aedff25cd41e1136d225e172e1fa61461", null ] +]; \ No newline at end of file diff --git a/namespacejwt_1_1json.html b/namespacejwt_1_1json.html new file mode 100644 index 000000000..04b303b46 --- /dev/null +++ b/namespacejwt_1_1json.html @@ -0,0 +1,154 @@ + + + + + + + +JWT-CPP: jwt::json Namespace Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::json Namespace Reference
    +
    +
    + + + + +

    +Enumerations

    enum class  type {
    +  boolean +, integer +, number +, string +,
    +  array +, object +
    + }
     
    +

    Detailed Description

    +

    JSON Abstractions for working with any library.

    +

    Enumeration Type Documentation

    + +

    ◆ type

    + +
    +
    + + + + + +
    + + + + +
    enum class jwt::json::type
    +
    +strong
    +
    + +

    Generic JSON types used in JWTs.

    +

    This enum is to abstract the third party underlying types

    + +
    +
    +
    +
    + + + + diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 000000000..88b8278d8 --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,173 @@ + + + + + + + +JWT-CPP: Namespace Members + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace members with links to the namespaces they belong to:
    + +

    - b -

    + + +

    - c -

    + + +

    - d -

      +
    • date : jwt
    • +
    • decode() : jwt
    • +
    + + +

    - e -

    + + +

    - l -

    + + +

    - p -

      +
    • parse_jwk() : jwt
    • +
    • parse_jwks() : jwt
    • +
    + + +

    - r -

    + + +

    - s -

      +
    • signature_generation_error : jwt::error
    • +
    • signature_generation_error_category() : jwt::error
    • +
    • signature_verification_error : jwt::error
    • +
    • signature_verification_error_category() : jwt::error
    • +
    + + +

    - t -

    + + +

    - v -

      +
    • verify() : jwt
    • +
    • verify_context : jwt
    • +
    +
    +
    + + + + diff --git a/namespacemembers_enum.html b/namespacemembers_enum.html new file mode 100644 index 000000000..eb5253244 --- /dev/null +++ b/namespacemembers_enum.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Namespace Members + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace enums with links to the namespaces they belong to:
    +
    +
    + + + + diff --git a/namespacemembers_func.html b/namespacemembers_func.html new file mode 100644 index 000000000..7cac98895 --- /dev/null +++ b/namespacemembers_func.html @@ -0,0 +1,164 @@ + + + + + + + +JWT-CPP: Namespace Members + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace functions with links to the namespaces they belong to:
    + +

    - b -

    + + +

    - c -

    + + +

    - d -

      +
    • decode() : jwt
    • +
    + + +

    - e -

    + + +

    - l -

    + + +

    - p -

      +
    • parse_jwk() : jwt
    • +
    • parse_jwks() : jwt
    • +
    + + +

    - r -

    + + +

    - s -

      +
    • signature_generation_error_category() : jwt::error
    • +
    • signature_verification_error_category() : jwt::error
    • +
    + + +

    - t -

      +
    • token_verification_error_category() : jwt::error
    • +
    + + +

    - v -

      +
    • verify() : jwt
    • +
    +
    +
    + + + + diff --git a/namespacemembers_type.html b/namespacemembers_type.html new file mode 100644 index 000000000..ba9aea2d3 --- /dev/null +++ b/namespacemembers_type.html @@ -0,0 +1,110 @@ + + + + + + + +JWT-CPP: Namespace Members + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all documented namespace typedefs with links to the namespaces they belong to:
      +
    • claim : jwt
    • +
    • date : jwt
    • +
    • verify_context : jwt
    • +
    +
    +
    + + + + diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 000000000..0e951470f --- /dev/null +++ b/namespaces.html @@ -0,0 +1,138 @@ + + + + + + + +JWT-CPP: Namespace List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all documented namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
     NjwtJSON Web Token
     NalgorithmVarious cryptographic algorithms when working with JWT
     NalphabetCharacter maps when encoding and decoding
     Cbase64Valid list of character when working with Base64
     Cbase64urlValid list of character when working with Base64URL
     NbaseA collection of fellable functions for working with base64 and base64url
     NerrorEverything related to error codes issued by the library
     Cclaim_not_present_exceptionAttempt to access claim was unsuccessful
     Cecdsa_exception
     Cinvalid_json_exceptionAttempt to parse JSON was unsuccessful
     Crsa_exception
     Csignature_generation_exception
     Csignature_verification_exception
     Ctoken_verification_exception
     NhelperA collection for working with certificates
     Cevp_pkey_handleHandle class for EVP_PKEY structures
     NjsonJSON Abstractions for working with any library
     Cbasic_claimClass to store a generic JSON value as claim
     CbuilderBuilder class to build and sign a new token Use jwt::create() to get an instance of this class
     Cdecoded_jwtClass containing all information about a decoded token
     Cdefault_clockDefault clock class using std::chrono::system_clock as a backend
     CheaderBase class that represents a token header
     CjwkJSON Web Key
     CjwksJWK Set
     CpayloadBase class that represents a token payload
     CverifierVerifier class used to check if a decoded token contains all claims required by your application and has a valid signature
    +
    +
    +
    + + + + diff --git a/namespaces_dup.js b/namespaces_dup.js new file mode 100644 index 000000000..8ef37513a --- /dev/null +++ b/namespaces_dup.js @@ -0,0 +1,4 @@ +var namespaces_dup = +[ + [ "jwt", "namespacejwt.html", "namespacejwt" ] +]; \ No newline at end of file diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 000000000..72a58a529 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 000000000..032fbdd4c Binary files /dev/null and b/nav_fd.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 000000000..2093a237a Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 000000000..33389b101 Binary files /dev/null and b/nav_h.png differ diff --git a/nav_hd.png b/nav_hd.png new file mode 100644 index 000000000..de80f18ad Binary files /dev/null and b/nav_hd.png differ diff --git a/navtree.css b/navtree.css new file mode 100644 index 000000000..6b1e5e46b --- /dev/null +++ b/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/navtree.js b/navtree.js new file mode 100644 index 000000000..93dd3d462 --- /dev/null +++ b/navtree.js @@ -0,0 +1,559 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, setFocus) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + var topOffset=5; + if (typeof page_layout!=='undefined' && page_layout==1) { + topOffset+=$('#top').outerHeight(); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +JWT-CPP: include/jwt-cpp/traits/nlohmann-json/defaults.h Source File + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    defaults.h
    +
    +
    +
    1#ifndef JWT_CPP_NLOHMANN_JSON_DEFAULTS_H
    +
    2#define JWT_CPP_NLOHMANN_JSON_DEFAULTS_H
    +
    3
    +
    4#ifndef JWT_DISABLE_PICOJSON
    +
    5#define JWT_DISABLE_PICOJSON
    +
    6#endif
    +
    7
    +
    8#include "traits.h"
    +
    9
    +
    10namespace jwt {
    +
    17 using claim = basic_claim<traits::nlohmann_json>;
    +
    18
    +
    23 inline verifier<default_clock, traits::nlohmann_json> verify() {
    +
    24 return verify<default_clock, traits::nlohmann_json>(default_clock{});
    +
    25 }
    +
    26
    +
    30 inline builder<traits::nlohmann_json> create() { return builder<traits::nlohmann_json>(); }
    +
    31
    +
    32#ifndef JWT_DISABLE_BASE64
    +
    40 inline decoded_jwt<traits::nlohmann_json> decode(const std::string& token) {
    +
    41 return decoded_jwt<traits::nlohmann_json>(token);
    +
    42 }
    +
    43#endif
    +
    44
    +
    56 template<typename Decode>
    +
    +
    57 decoded_jwt<traits::nlohmann_json> decode(const std::string& token, Decode decode) {
    + +
    59 }
    +
    +
    60
    +
    67 inline jwk<traits::nlohmann_json> parse_jwk(const traits::nlohmann_json::string_type& token) {
    +
    68 return jwk<traits::nlohmann_json>(token);
    +
    69 }
    +
    70
    +
    77 inline jwks<traits::nlohmann_json> parse_jwks(const traits::nlohmann_json::string_type& token) {
    +
    78 return jwks<traits::nlohmann_json>(token);
    +
    79 }
    +
    80
    +
    85 using verify_context = verify_ops::verify_context<traits::nlohmann_json>;
    +
    86} // namespace jwt
    +
    87
    +
    88#endif // JWT_CPP_NLOHMANN_JSON_DEFAULTS_H
    +
    Class containing all information about a decoded token.
    Definition jwt.h:2500
    +
    JSON Web Token.
    Definition base.h:21
    +
    builder< json_traits > create()
    Return a builder instance to create a new token.
    Definition jwt.h:3602
    +
    jwk< json_traits > parse_jwk(const typename json_traits::string_type &jwk_)
    Parse a single JSON Web Key.
    Definition jwt.h:3638
    +
    jwks< json_traits > parse_jwks(const typename json_traits::string_type &jwks_)
    Parse a JSON Web Key Set.
    Definition jwt.h:3648
    +
    verifier< default_clock, traits::boost_json > verify()
    Create a verifier using the default clock.
    Definition defaults.h:23
    +
    verify_ops::verify_context< traits::boost_json > verify_context
    This type is the specialization of the verify_ops::verify_context class which uses the standard templ...
    Definition defaults.h:85
    +
    basic_claim< traits::boost_json > claim
    a class to store a generic Boost.JSON value as claim
    Definition defaults.h:17
    +
    decoded_jwt< json_traits > decode(const typename json_traits::string_type &token, Decode decode)
    Decode a token.
    Definition jwt.h:3615
    +
    +
    + + + + diff --git a/nlohmann-json_2traits_8h_source.html b/nlohmann-json_2traits_8h_source.html new file mode 100644 index 000000000..ed1089331 --- /dev/null +++ b/nlohmann-json_2traits_8h_source.html @@ -0,0 +1,196 @@ + + + + + + + +JWT-CPP: include/jwt-cpp/traits/nlohmann-json/traits.h Source File + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    traits.h
    +
    +
    +
    1#ifndef JWT_CPP_NLOHMANN_JSON_TRAITS_H
    +
    2#define JWT_CPP_NLOHMANN_JSON_TRAITS_H
    +
    3
    +
    4#include "jwt-cpp/jwt.h"
    +
    5#include "nlohmann/json.hpp"
    +
    6
    +
    7namespace jwt {
    +
    8 namespace traits {
    +
    +
    9 struct nlohmann_json {
    +
    10 using json = nlohmann::json;
    +
    11 using value_type = json;
    +
    12 using object_type = json::object_t;
    +
    13 using array_type = json::array_t;
    +
    14 using string_type = std::string; // current limitation of traits implementation
    +
    15 using number_type = json::number_float_t;
    +
    16 using integer_type = json::number_integer_t;
    +
    17 using boolean_type = json::boolean_t;
    +
    18
    +
    19 static jwt::json::type get_type(const json& val) {
    +
    20 using jwt::json::type;
    +
    21
    +
    22 if (val.type() == json::value_t::boolean) return type::boolean;
    +
    23 // nlohmann internally tracks two types of integers
    +
    24 if (val.type() == json::value_t::number_integer) return type::integer;
    +
    25 if (val.type() == json::value_t::number_unsigned) return type::integer;
    +
    26 if (val.type() == json::value_t::number_float) return type::number;
    +
    27 if (val.type() == json::value_t::string) return type::string;
    +
    28 if (val.type() == json::value_t::array) return type::array;
    +
    29 if (val.type() == json::value_t::object) return type::object;
    +
    30
    +
    31 throw std::logic_error("invalid type");
    +
    32 }
    +
    33
    +
    34 static json::object_t as_object(const json& val) {
    +
    35 if (val.type() != json::value_t::object) throw std::bad_cast();
    +
    36 return val.get<json::object_t>();
    +
    37 }
    +
    38
    +
    39 static std::string as_string(const json& val) {
    +
    40 if (val.type() != json::value_t::string) throw std::bad_cast();
    +
    41 return val.get<std::string>();
    +
    42 }
    +
    43
    +
    44 static json::array_t as_array(const json& val) {
    +
    45 if (val.type() != json::value_t::array) throw std::bad_cast();
    +
    46 return val.get<json::array_t>();
    +
    47 }
    +
    48
    +
    49 static int64_t as_integer(const json& val) {
    +
    50 switch (val.type()) {
    +
    51 case json::value_t::number_integer:
    +
    52 case json::value_t::number_unsigned: return val.get<int64_t>();
    +
    53 default: throw std::bad_cast();
    +
    54 }
    +
    55 }
    +
    56
    +
    57 static bool as_boolean(const json& val) {
    +
    58 if (val.type() != json::value_t::boolean) throw std::bad_cast();
    +
    59 return val.get<bool>();
    +
    60 }
    +
    61
    +
    62 static double as_number(const json& val) {
    +
    63 if (val.type() != json::value_t::number_float) throw std::bad_cast();
    +
    64 return val.get<double>();
    +
    65 }
    +
    66
    +
    67 static bool parse(json& val, std::string str) {
    +
    68 val = json::parse(str.begin(), str.end());
    +
    69 return true;
    +
    70 }
    +
    71
    +
    72 static std::string serialize(const json& val) { return val.dump(); }
    +
    73 };
    +
    +
    74 } // namespace traits
    +
    75} // namespace jwt
    +
    76
    +
    77#endif
    +
    type
    Generic JSON types used in JWTs.
    Definition jwt.h:1825
    +
    JSON Web Token.
    Definition base.h:21
    +
    Definition traits.h:9
    +
    +
    + + + + diff --git a/open.png b/open.png new file mode 100644 index 000000000..30f75c7ef Binary files /dev/null and b/open.png differ diff --git a/overrides.css b/overrides.css new file mode 100644 index 000000000..b96b5b14f --- /dev/null +++ b/overrides.css @@ -0,0 +1,17 @@ +html { + --top-nav-height: 150px +} + +@media screen and (min-width: 768px) { + #top { + height: var(--top-nav-height); + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-nav-height)) !important; + } + + #side-nav { + top: var(--top-nav-height); + } +} diff --git a/pages.html b/pages.html new file mode 100644 index 000000000..018196d44 --- /dev/null +++ b/pages.html @@ -0,0 +1,117 @@ + + + + + + + +JWT-CPP: Related Pages + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    +
    + + + + diff --git a/plus.svg b/plus.svg new file mode 100644 index 000000000..075201655 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 000000000..0c65bfe94 --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 000000000..aaeb6fc0a --- /dev/null +++ b/resize.js @@ -0,0 +1,155 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var once=1; +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,barWidth=6,desktop_vp=768,titleHeight; + + function readSetting(cookie) + { + if (window.chrome) { + var val = localStorage.getItem(cookie_namespace+'_width'); + if (val) return val; + } else { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + } + return 250; + } + + function writeSetting(cookie, val) + { + if (window.chrome) { + localStorage.setItem(cookie_namespace+"_width",val); + } else { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; + } + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + writeSetting('width',sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height(); + var contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() + { + var newWidth; + if (sidenav.width()>0) { + newWidth=0; + } + else { + var width = readSetting('width'); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + var sidenavWidth = $(sidenav).outerWidth(); + writeSetting('width',sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readSetting('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + if (once) { + $(".ui-resizable-handle").dblclick(collapseExpand); + once=0 + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 000000000..3e3233937 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['allow_5falgorithm_0',['allow_algorithm',['../classjwt_1_1verifier.html#ae2cc9d0125be58b51f4c4aa30878aa41',1,'jwt::verifier']]], + ['as_5farray_1',['as_array',['../classjwt_1_1basic__claim.html#af06fe57ced0b69e5d3e0480b283ac31f',1,'jwt::basic_claim']]], + ['as_5fboolean_2',['as_boolean',['../classjwt_1_1basic__claim.html#a97442d8e2ba7ac24201d1d16d6c32aef',1,'jwt::basic_claim']]], + ['as_5fdate_3',['as_date',['../classjwt_1_1basic__claim.html#aadef1dd6e6275680067940fedb06ab08',1,'jwt::basic_claim']]], + ['as_5finteger_4',['as_integer',['../classjwt_1_1basic__claim.html#ae2c58375c443bfc1037066edaf88be53',1,'jwt::basic_claim']]], + ['as_5fnumber_5',['as_number',['../classjwt_1_1basic__claim.html#a2000561f92e202acdeb532f15056e764',1,'jwt::basic_claim']]], + ['as_5fset_6',['as_set',['../classjwt_1_1basic__claim.html#a33b043d261a23cd108778893a24ae976',1,'jwt::basic_claim']]], + ['as_5fstring_7',['as_string',['../classjwt_1_1basic__claim.html#afe7cd8e0feebff55c05adfe71748e1fd',1,'jwt::basic_claim']]], + ['asked_20questions_8',['Frequently Asked Questions',['../md_docs_2faqs.html',1,'']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 000000000..e15d46b14 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['base64_0',['base64',['../structjwt_1_1alphabet_1_1base64.html',1,'jwt::alphabet']]], + ['base64url_1',['base64url',['../structjwt_1_1alphabet_1_1base64url.html',1,'jwt::alphabet']]], + ['base64url_5fpercent_5fencoding_2',['base64url_percent_encoding',['../structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html',1,'jwt::alphabet::helper']]], + ['basic_5fclaim_3',['basic_claim',['../classjwt_1_1basic__claim.html',1,'jwt']]], + ['bn2raw_4',['bn2raw',['../namespacejwt_1_1helper.html#aa75689cc6b3d9f710b5c050cc9bff5ff',1,'jwt::helper']]], + ['boost_5fjson_5',['boost_json',['../structjwt_1_1traits_1_1boost__json.html',1,'jwt::traits']]], + ['builder_6',['builder',['../classjwt_1_1builder.html',1,'jwt']]] +]; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 000000000..cef50c78a --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['raw2bn_0',['raw2bn',['../namespacejwt_1_1helper.html#aedff25cd41e1136d225e172e1fa61461',1,'jwt::helper']]], + ['reporting_20security_20issues_1',['Reporting Security Issues',['../md__8github_2security.html',1,'']]], + ['rsa_5ferror_2',['rsa_error',['../namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7',1,'jwt::error']]], + ['rsa_5ferror_5fcategory_3',['rsa_error_category',['../namespacejwt_1_1error.html#a7fd09a10a0c499fe063293a10caf89e9',1,'jwt::error']]], + ['rsa_5fexception_4',['rsa_exception',['../structjwt_1_1error_1_1rsa__exception.html',1,'jwt::error']]] +]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 000000000..cf34aca4a --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['security_20issues_0',['Reporting Security Issues',['../md__8github_2security.html',1,'']]], + ['set_5falgorithm_1',['set_algorithm',['../classjwt_1_1builder.html#ad6a378577e46c3e12f3242c625f2f623',1,'jwt::builder']]], + ['set_5faudience_2',['set_audience',['../classjwt_1_1builder.html#a20358aa8be0179eaa53055aaca8a7f21',1,'jwt::builder::set_audience(typename json_traits::array_type a)'],['../classjwt_1_1builder.html#a1e764196824144648b2b2c490bdc328d',1,'jwt::builder::set_audience(typename json_traits::string_type aud)']]], + ['set_5fcontent_5ftype_3',['set_content_type',['../classjwt_1_1builder.html#a66d603ae007cb796667b4abd095e06cb',1,'jwt::builder']]], + ['set_5fexpires_5fat_4',['set_expires_at',['../classjwt_1_1builder.html#ae3de63621c8f7b3da8415030225cd67e',1,'jwt::builder']]], + ['set_5fheader_5fclaim_5',['set_header_claim',['../classjwt_1_1builder.html#ac8f57f1c8d27e6117c508a3619ed4561',1,'jwt::builder::set_header_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)'],['../classjwt_1_1builder.html#a388749e54d6b89b9da6a75494fb0757e',1,'jwt::builder::set_header_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)']]], + ['set_5fid_6',['set_id',['../classjwt_1_1builder.html#a95583374b3f692fa84833a0e08575665',1,'jwt::builder']]], + ['set_5fissued_5fat_7',['set_issued_at',['../classjwt_1_1builder.html#a92bfe54290a13c640db23240536993c7',1,'jwt::builder']]], + ['set_5fissuer_8',['set_issuer',['../classjwt_1_1builder.html#ab6f6203620218fbdec21c5afda7d11fc',1,'jwt::builder']]], + ['set_5fkey_5fid_9',['set_key_id',['../classjwt_1_1builder.html#ab5bc32a6f2cd89f65e558fd38dae21b0',1,'jwt::builder']]], + ['set_5fnot_5fbefore_10',['set_not_before',['../classjwt_1_1builder.html#a82784887801a2fcf4b132b03444a4da7',1,'jwt::builder']]], + ['set_5fpayload_5fclaim_11',['set_payload_claim',['../classjwt_1_1builder.html#a42e050718f31a284e08142030ca91930',1,'jwt::builder::set_payload_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)'],['../classjwt_1_1builder.html#a0d63ee3ba1a3bf7047239e8502e565ab',1,'jwt::builder::set_payload_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)']]], + ['set_5fsubject_12',['set_subject',['../classjwt_1_1builder.html#a4506fc0956549155546d4c80fa94ae45',1,'jwt::builder']]], + ['set_5ftype_13',['set_type',['../classjwt_1_1builder.html#aaa284acea472b10e6a1ee142336a01aa',1,'jwt::builder']]], + ['sign_14',['sign',['../classjwt_1_1builder.html#a1e594d5e35cbd6b799acb1a247618a40',1,'jwt::builder::sign(const Algo &algo, Encode encode) const'],['../classjwt_1_1builder.html#a18ede7eb3d5502f17f2b7c3cf31d2f1c',1,'jwt::builder::sign(const Algo &algo) const'],['../classjwt_1_1builder.html#aff43371359a2f8bc6cabd2c976050233',1,'jwt::builder::sign(const Algo &algo, Encode encode, std::error_code &ec) const'],['../classjwt_1_1builder.html#ad7d743a548c14c91c87450929cda8bb9',1,'jwt::builder::sign(const Algo &algo, std::error_code &ec) const']]], + ['signature_15',['signature',['../classjwt_1_1decoded__jwt.html#a029ac1ee047b99ac75265755a3107ccb',1,'jwt::decoded_jwt']]], + ['signature_5fbase64_16',['signature_base64',['../classjwt_1_1decoded__jwt.html#a8ccaba87d81df84591da392cb8702f2e',1,'jwt::decoded_jwt']]], + ['signature_5fgeneration_5ferror_17',['signature_generation_error',['../namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cd',1,'jwt::error']]], + ['signature_5fgeneration_5ferror_5fcategory_18',['signature_generation_error_category',['../namespacejwt_1_1error.html#a86c5b0c1df898d66161455b323b8053e',1,'jwt::error']]], + ['signature_5fgeneration_5fexception_19',['signature_generation_exception',['../structjwt_1_1error_1_1signature__generation__exception.html',1,'jwt::error']]], + ['signature_5fverification_5ferror_20',['signature_verification_error',['../namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244',1,'jwt::error']]], + ['signature_5fverification_5ferror_5fcategory_21',['signature_verification_error_category',['../namespacejwt_1_1error.html#a7c0e4691aa8c55743300cd068ad23aec',1,'jwt::error']]], + ['signature_5fverification_5fexception_22',['signature_verification_exception',['../structjwt_1_1error_1_1signature__verification__exception.html',1,'jwt::error']]], + ['signing_20tokens_23',['Signing Tokens',['../md_docs_2signing.html',1,'']]] +]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 000000000..128467355 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['to_5fjson_0',['to_json',['../classjwt_1_1basic__claim.html#ae47b0e6de750563a2ba1f9e5628b72ee',1,'jwt::basic_claim']]], + ['token_1',['token',['../classjwt_1_1decoded__jwt.html#a1f564f04da292da715126b57fa4c735e',1,'jwt::decoded_jwt']]], + ['token_5fverification_5ferror_2',['token_verification_error',['../namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baed',1,'jwt::error']]], + ['token_5fverification_5ferror_5fcategory_3',['token_verification_error_category',['../namespacejwt_1_1error.html#a187142c60516cc974c86efb5e277922d',1,'jwt::error']]], + ['token_5fverification_5fexception_4',['token_verification_exception',['../structjwt_1_1error_1_1token__verification__exception.html',1,'jwt::error']]], + ['tokens_5',['Signing Tokens',['../md_docs_2signing.html',1,'']]], + ['traits_6',['JSON Traits',['../md_docs_2traits.html',1,'']]], + ['type_7',['type',['../namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3e',1,'jwt::json']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 000000000..9b598a447 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['verifier_0',['verifier',['../classjwt_1_1verifier.html',1,'jwt::verifier< Clock, json_traits >'],['../classjwt_1_1verifier.html#aa4764c828213d9ef1537d2490ed98b45',1,'jwt::verifier::verifier(Clock c)']]], + ['verify_1',['verify',['../classjwt_1_1verifier.html#aa275e9eedac41ad8d8a0f2a3300acda2',1,'jwt::verifier::verify(const decoded_jwt< json_traits > &jwt) const'],['../classjwt_1_1verifier.html#a448cd954e1ea53ff2bcb39b7cc30cc65',1,'jwt::verifier::verify(const decoded_jwt< json_traits > &jwt, std::error_code &ec) const'],['../namespacejwt.html#a05f9a08741bb8d685f0b2dfbc22820b7',1,'jwt::verify(Clock c)'],['../namespacejwt.html#a68225fdaab1a9a068e28d6acec245694',1,'jwt::verify(default_clock c={})'],['../namespacejwt.html#aac658f79d5123d53c3edcbecbbbdc149',1,'jwt::verify()']]], + ['verify_5fcheck_5ffn_5ft_2',['verify_check_fn_t',['../classjwt_1_1verifier.html#a1636f7274f25405fc389e829ca63da43',1,'jwt::verifier']]], + ['verify_5fcontext_3',['verify_context',['../structjwt_1_1verify__ops_1_1verify__context.html',1,'jwt::verify_ops::verify_context< json_traits >'],['../namespacejwt.html#ac6661f443e9d9cdd8ff26b5f59b4777c',1,'jwt::verify_context']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 000000000..7830ef909 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['with_5faudience_0',['with_audience',['../classjwt_1_1verifier.html#a7cf070f76669f32c96e38ee4e9c5cb00',1,'jwt::verifier::with_audience(const typename basic_claim_t::set_t &aud)'],['../classjwt_1_1verifier.html#a9e1129b30859be9d617547e333ad0ca8',1,'jwt::verifier::with_audience(const typename json_traits::string_type &aud)']]], + ['with_5fclaim_1',['with_claim',['../classjwt_1_1verifier.html#a1e21d481d69ebddb1d7275449c35be23',1,'jwt::verifier::with_claim(const typename json_traits::string_type &name, verify_check_fn_t fn)'],['../classjwt_1_1verifier.html#a9ad51170089fb1566c5d97314cc33e41',1,'jwt::verifier::with_claim(const typename json_traits::string_type &name, basic_claim_t c)']]], + ['with_5fid_2',['with_id',['../classjwt_1_1verifier.html#af26d00278aca90b1c4ee80531aebb8ed',1,'jwt::verifier']]], + ['with_5fissuer_3',['with_issuer',['../classjwt_1_1verifier.html#ad7cf48fc13d29bc59643379c891232cb',1,'jwt::verifier']]], + ['with_5fsubject_4',['with_subject',['../classjwt_1_1verifier.html#a7ae6f50c039290ac6f87e7dda905c25c',1,'jwt::verifier']]], + ['with_5ftype_5',['with_type',['../classjwt_1_1verifier.html#ae77119a8c25bb7b906191f0055981a7b',1,'jwt::verifier']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 000000000..2abedbd56 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['claim_0',['claim',['../namespacejwt.html#ac746f304c522d67c96b3b3f8bfa92e98',1,'jwt']]], + ['claim_5fnot_5fpresent_5fexception_1',['claim_not_present_exception',['../structjwt_1_1error_1_1claim__not__present__exception.html',1,'jwt::error']]], + ['convert_5fbase64_5fder_5fto_5fpem_2',['convert_base64_der_to_pem',['../namespacejwt_1_1helper.html#a868bab109dbaf38adc80f4025c9ce378',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str, Decode decode, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a8a6dd42aec39dc85dbc3d14df183f125',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str, Decode decode)'],['../namespacejwt_1_1helper.html#ab58e1f3020d0415a71aa9cea1e9fa4f2',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a792fb50c64b41b4546c2a2b2dfb41746',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str)']]], + ['convert_5fder_5fto_5fpem_3',['convert_der_to_pem',['../namespacejwt_1_1helper.html#aeb9ab265a9a4baeb4c82288dc869f5b2',1,'jwt::helper::convert_der_to_pem(const std::string &cert_der_str, std::error_code &ec)'],['../namespacejwt_1_1helper.html#aabc2a97481e9cbcee6c4a09705cf4c15',1,'jwt::helper::convert_der_to_pem(const std::string &cert_der_str)']]], + ['cpp_4',['JWT-CPP',['../index.html',1,'']]], + ['create_5',['create',['../namespacejwt.html#a2c5962f1775bac1a99e326e761b2e05e',1,'jwt::create()'],['../namespacejwt.html#a119b3861d510205d5c626b794c06d020',1,'jwt::create()']]], + ['cryptography_20libraries_6',['Cryptography Libraries',['../md_docs_2ssl.html',1,'']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 000000000..e569e31e3 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['danielaparker_5fjsoncons_0',['danielaparker_jsoncons',['../structjwt_1_1traits_1_1danielaparker__jsoncons.html',1,'jwt::traits']]], + ['date_1',['date',['../namespacejwt.html#ad1a72c1ea3d67e3d9bd554e26856523d',1,'jwt']]], + ['date_5fafter_5fclaim_2',['date_after_claim',['../structjwt_1_1verify__ops_1_1date__after__claim.html',1,'jwt::verify_ops']]], + ['date_5fbefore_5fclaim_3',['date_before_claim',['../structjwt_1_1verify__ops_1_1date__before__claim.html',1,'jwt::verify_ops']]], + ['decode_4',['decode',['../namespacejwt.html#aefffdd7d2a79d6872c15a7ec1661b149',1,'jwt::decode(const typename json_traits::string_type &token, Decode decode)'],['../namespacejwt.html#ade66496cbe78db1ca2fd769b6982bbc9',1,'jwt::decode(const typename json_traits::string_type &token)'],['../namespacejwt.html#ae63bcbdf9caf43a79f3c140708552761',1,'jwt::decode(const std::string &token)'],['../namespacejwt.html#a1888325882765254b8d2680ff1cf3210',1,'jwt::decode(const std::string &token, Decode decode)'],['../namespacejwt.html#a98607d668bf63870e5dab3f81afe0320',1,'jwt::decode(const std::string &token, Decode decode)'],['../namespacejwt.html#a627d2f26db17185e7eb7bb92defa70cc',1,'jwt::decode(const std::string &token, Decode decode)'],['../namespacejwt.html#a65d515aeb39cb5829c7af774051ae91e',1,'jwt::decode(const std::string &token, Decode decode)']]], + ['decoded_5fjwt_5',['decoded_jwt',['../classjwt_1_1decoded__jwt.html',1,'jwt::decoded_jwt< json_traits >'],['../classjwt_1_1decoded__jwt.html#a74547d7eee095f9bb440b572da5edd39',1,'jwt::decoded_jwt::decoded_jwt(const typename json_traits::string_type &token)'],['../classjwt_1_1decoded__jwt.html#a8517ef5dd3f099223ec4477aff546ac8',1,'jwt::decoded_jwt::decoded_jwt(const typename json_traits::string_type &token, Decode decode)']]], + ['default_5fclock_6',['default_clock',['../structjwt_1_1default__clock.html',1,'jwt']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 000000000..e7aafe99d --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['ecdsa_5ferror_0',['ecdsa_error',['../namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3',1,'jwt::error']]], + ['ecdsa_5ferror_5fcategory_1',['ecdsa_error_category',['../namespacejwt_1_1error.html#a641d06c74f6ed676ac0636215b50e2b2',1,'jwt::error']]], + ['ecdsa_5fexception_2',['ecdsa_exception',['../structjwt_1_1error_1_1ecdsa__exception.html',1,'jwt::error']]], + ['equals_5fclaim_3',['equals_claim',['../structjwt_1_1verify__ops_1_1equals__claim.html',1,'jwt::verify_ops']]], + ['evp_5fpkey_5fhandle_4',['evp_pkey_handle',['../classjwt_1_1helper_1_1evp__pkey__handle.html',1,'jwt::helper::evp_pkey_handle'],['../classjwt_1_1helper_1_1evp__pkey__handle.html#a9948effb83d8dcd17447eff28c852f6f',1,'jwt::helper::evp_pkey_handle::evp_pkey_handle()']]], + ['expires_5fat_5fleeway_5',['expires_at_leeway',['../classjwt_1_1verifier.html#a157d3a7b128aaac1b37a9ba47dd72718',1,'jwt::verifier']]], + ['extract_5fpubkey_5ffrom_5fcert_6',['extract_pubkey_from_cert',['../namespacejwt_1_1helper.html#a85fab72593fea9a3bb704464be2bfc18',1,'jwt::helper::extract_pubkey_from_cert(const std::string &certstr, const std::string &pw, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a8a102b1b679467ba520e8cae3ceed9da',1,'jwt::helper::extract_pubkey_from_cert(const std::string &certstr, const std::string &pw="")']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 000000000..546872a25 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['frequently_20asked_20questions_0',['Frequently Asked Questions',['../md_docs_2faqs.html',1,'']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 000000000..aab5e736b --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['get_5falgorithm_0',['get_algorithm',['../classjwt_1_1jwk.html#a50b2c64b52a7028acfad1e4ac64c8e66',1,'jwt::jwk::get_algorithm()'],['../classjwt_1_1header.html#a8ac7e7c26859e172a3f0f22ded7b307f',1,'jwt::header::get_algorithm()']]], + ['get_5faudience_1',['get_audience',['../classjwt_1_1payload.html#a0131e3f94dc5deaef9f2128e61675ef3',1,'jwt::payload']]], + ['get_5fclaims_2',['get_claims',['../classjwt_1_1jwk.html#a5628cd17ea929a33e6d40eef5b073d0d',1,'jwt::jwk']]], + ['get_5fcontent_5ftype_3',['get_content_type',['../classjwt_1_1header.html#ae2cb8d327ed651286af732663ef23c44',1,'jwt::header']]], + ['get_5fcurve_4',['get_curve',['../classjwt_1_1jwk.html#a09d3afa0dcca94aee47c8cb9eb42dc9f',1,'jwt::jwk']]], + ['get_5fexpires_5fat_5',['get_expires_at',['../classjwt_1_1payload.html#adab036c2f63dad223d163ad6689938e5',1,'jwt::payload']]], + ['get_5fheader_6',['get_header',['../classjwt_1_1decoded__jwt.html#a00a77aedba4b77d9ee0a6f32307c2f92',1,'jwt::decoded_jwt']]], + ['get_5fheader_5fbase64_7',['get_header_base64',['../classjwt_1_1decoded__jwt.html#af55156d334c665ad0b11cb6881d242c2',1,'jwt::decoded_jwt']]], + ['get_5fheader_5fclaim_8',['get_header_claim',['../classjwt_1_1header.html#ad941b52adacc083b2b895fbfa23f938b',1,'jwt::header::get_header_claim()'],['../classjwt_1_1decoded__jwt.html#a807f00ca32b360b69b4d8555f7cb7795',1,'jwt::decoded_jwt::get_header_claim(const typename json_traits::string_type &name) const']]], + ['get_5fheader_5fjson_9',['get_header_json',['../classjwt_1_1decoded__jwt.html#acc90b0d668345b0f3c41d382fe087a08',1,'jwt::decoded_jwt']]], + ['get_5fid_10',['get_id',['../classjwt_1_1payload.html#a0cb0076f6d6ca4c8acb498076c8f5721',1,'jwt::payload']]], + ['get_5fissued_5fat_11',['get_issued_at',['../classjwt_1_1payload.html#aa1efb5105a9c3efb49d08b8651069d15',1,'jwt::payload']]], + ['get_5fissuer_12',['get_issuer',['../classjwt_1_1payload.html#afbad104eceb35855baa247ec211eeac4',1,'jwt::payload']]], + ['get_5fjwk_13',['get_jwk',['../classjwt_1_1jwks.html#ab76e769ff422c308ee17ead4ea8d8d95',1,'jwt::jwks']]], + ['get_5fjwk_5fclaim_14',['get_jwk_claim',['../classjwt_1_1jwk.html#af814feaeb94f0394d14341e4e7024ebb',1,'jwt::jwk']]], + ['get_5fkey_5fid_15',['get_key_id',['../classjwt_1_1header.html#ad9e1ae6bf5aecf92d533028bc6f9b973',1,'jwt::header::get_key_id()'],['../classjwt_1_1jwk.html#a6ff417d9e099f70183e5b065130f420f',1,'jwt::jwk::get_key_id() const']]], + ['get_5fkey_5foperations_16',['get_key_operations',['../classjwt_1_1jwk.html#ae5f0bb1bc9728e721c62e7aa0ab1ce5a',1,'jwt::jwk']]], + ['get_5fkey_5ftype_17',['get_key_type',['../classjwt_1_1jwk.html#afcfb7ade4ffa503db7c5b92280b49514',1,'jwt::jwk']]], + ['get_5fnot_5fbefore_18',['get_not_before',['../classjwt_1_1payload.html#a60f492d8bda3225155b6f10f05273f35',1,'jwt::payload']]], + ['get_5fpayload_19',['get_payload',['../classjwt_1_1decoded__jwt.html#adb1dc325d49e01838e78e9cd809aaa2b',1,'jwt::decoded_jwt']]], + ['get_5fpayload_5fbase64_20',['get_payload_base64',['../classjwt_1_1decoded__jwt.html#aa137fa9dfcf54444901618bfa0fc2ac4',1,'jwt::decoded_jwt']]], + ['get_5fpayload_5fclaim_21',['get_payload_claim',['../classjwt_1_1payload.html#aabe0fc87ca6261eae5b7b32b7f2fd531',1,'jwt::payload::get_payload_claim()'],['../classjwt_1_1decoded__jwt.html#a6a86e22661351e17f8880d6b4801ea9a',1,'jwt::decoded_jwt::get_payload_claim(const typename json_traits::string_type &name) const']]], + ['get_5fpayload_5fjson_22',['get_payload_json',['../classjwt_1_1decoded__jwt.html#a8a4dea7cc8187e496feaf3112a6de419',1,'jwt::decoded_jwt']]], + ['get_5fsignature_23',['get_signature',['../classjwt_1_1decoded__jwt.html#a715bf6407901d555442ba79e68e96ddb',1,'jwt::decoded_jwt']]], + ['get_5fsignature_5fbase64_24',['get_signature_base64',['../classjwt_1_1decoded__jwt.html#a0210f5688a6b0327b781fbd3d6e124f7',1,'jwt::decoded_jwt']]], + ['get_5fsubject_25',['get_subject',['../classjwt_1_1payload.html#adb0c71f6a7ea21910314ff4372a945dd',1,'jwt::payload']]], + ['get_5ftoken_26',['get_token',['../classjwt_1_1decoded__jwt.html#ac6dce886f27c3a5afadea6ae991063fb',1,'jwt::decoded_jwt']]], + ['get_5ftype_27',['get_type',['../classjwt_1_1basic__claim.html#a59be52f75f5d32386f0e57be25dda38a',1,'jwt::basic_claim::get_type()'],['../classjwt_1_1header.html#a0bed2e5b52abbefda5317a2712c08e8a',1,'jwt::header::get_type()']]], + ['get_5fuse_28',['get_use',['../classjwt_1_1jwk.html#a8581a05f8628ce98a898e36fb30649df',1,'jwt::jwk']]], + ['get_5fx5c_29',['get_x5c',['../classjwt_1_1jwk.html#a50c5eb1410fc69363527329efd58d09c',1,'jwt::jwk']]], + ['get_5fx5c_5fkey_5fvalue_30',['get_x5c_key_value',['../classjwt_1_1jwk.html#a5e3675060ca4b75d675ed4a301abac95',1,'jwt::jwk']]], + ['get_5fx5t_31',['get_x5t',['../classjwt_1_1jwk.html#a5a1e7e2940e23e2e2a4f64e1db9d5f38',1,'jwt::jwk']]], + ['get_5fx5t_5fsha256_32',['get_x5t_sha256',['../classjwt_1_1jwk.html#a6f49dc9f0e73b9f34044ee56b49c8baa',1,'jwt::jwk']]], + ['get_5fx5u_33',['get_x5u',['../classjwt_1_1jwk.html#af9e5af688ecdc3c88579ba5bfcfa4f17',1,'jwt::jwk']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 000000000..83eac9dc6 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['has_5falgorithm_0',['has_algorithm',['../classjwt_1_1header.html#a59cc46de655365a8c1d99c60828051c0',1,'jwt::header::has_algorithm()'],['../classjwt_1_1jwk.html#a7791ca410ed90a89a4325b990efdb1bd',1,'jwt::jwk::has_algorithm()']]], + ['has_5faudience_1',['has_audience',['../classjwt_1_1payload.html#ad9f078e20d3cb6ce1ee135b2698a7059',1,'jwt::payload']]], + ['has_5fcontent_5ftype_2',['has_content_type',['../classjwt_1_1header.html#a9b9e6f2fd191afd8a167591818ad26da',1,'jwt::header']]], + ['has_5fcurve_3',['has_curve',['../classjwt_1_1jwk.html#ae97c9750a6a65d7b6a5cc16a3e3d5c6b',1,'jwt::jwk']]], + ['has_5fexpires_5fat_4',['has_expires_at',['../classjwt_1_1payload.html#a8577be97185f42d58ba0ca0b31c1a116',1,'jwt::payload']]], + ['has_5fheader_5fclaim_5',['has_header_claim',['../classjwt_1_1header.html#a2d5ee46b83e06da380bcbe20c5362b59',1,'jwt::header']]], + ['has_5fid_6',['has_id',['../classjwt_1_1payload.html#a78fd663cc80012d9bbf1a948d246a69d',1,'jwt::payload']]], + ['has_5fissued_5fat_7',['has_issued_at',['../classjwt_1_1payload.html#a0d1df458e88887342373b4ddb1c6b8f2',1,'jwt::payload']]], + ['has_5fissuer_8',['has_issuer',['../classjwt_1_1payload.html#a69dcb60e7108e6d124135e1a079943ca',1,'jwt::payload']]], + ['has_5fjwk_9',['has_jwk',['../classjwt_1_1jwks.html#aedd6c046ef7c08fcf8ab71158d3bafc5',1,'jwt::jwks']]], + ['has_5fjwk_5fclaim_10',['has_jwk_claim',['../classjwt_1_1jwk.html#ac7776dfc51fca7a44ffdf80e1c9e699b',1,'jwt::jwk']]], + ['has_5fkey_5fid_11',['has_key_id',['../classjwt_1_1jwk.html#a8fd4f19ffb59645a70182aa53ee773d8',1,'jwt::jwk::has_key_id()'],['../classjwt_1_1header.html#af8fb4b77c7c066bb4a6ffefc0d459000',1,'jwt::header::has_key_id()']]], + ['has_5fkey_5foperations_12',['has_key_operations',['../classjwt_1_1jwk.html#aa774d9e337af22dbb482efe480725593',1,'jwt::jwk']]], + ['has_5fkey_5ftype_13',['has_key_type',['../classjwt_1_1jwk.html#af2955f1903c7c25c07390b8734b1278b',1,'jwt::jwk']]], + ['has_5fnot_5fbefore_14',['has_not_before',['../classjwt_1_1payload.html#a151f3aed388ffeba63e14379808f3e53',1,'jwt::payload']]], + ['has_5fpayload_5fclaim_15',['has_payload_claim',['../classjwt_1_1payload.html#a3d7fce2a8b0ad4965671009baa619fa9',1,'jwt::payload']]], + ['has_5fsubject_16',['has_subject',['../classjwt_1_1payload.html#a3f9fd30aae3e7cb5fa4f5332cf9cc9e6',1,'jwt::payload']]], + ['has_5ftype_17',['has_type',['../classjwt_1_1header.html#a6904ba9440815ca602f5a819224333b6',1,'jwt::header']]], + ['has_5fuse_18',['has_use',['../classjwt_1_1jwk.html#aab3976b190dfb7753a67525a1aacf3e9',1,'jwt::jwk']]], + ['has_5fx5c_19',['has_x5c',['../classjwt_1_1jwk.html#a04b9237225866306df0b06d0be1c49df',1,'jwt::jwk']]], + ['has_5fx5t_20',['has_x5t',['../classjwt_1_1jwk.html#aad5f938603c9354d0ef0316dcc55c9e5',1,'jwt::jwk']]], + ['has_5fx5t_5fsha256_21',['has_x5t_sha256',['../classjwt_1_1jwk.html#a1c7acee846b84aa4c26094b8f71739c6',1,'jwt::jwk']]], + ['has_5fx5u_22',['has_x5u',['../classjwt_1_1jwk.html#a92093f86bd99995f21f3efdde09e1370',1,'jwt::jwk']]], + ['header_23',['header',['../classjwt_1_1header.html',1,'jwt::header< json_traits >'],['../classjwt_1_1decoded__jwt.html#a1029396a3c9d1a6a9946ab000546b58f',1,'jwt::decoded_jwt::header']]], + ['header_5fbase64_24',['header_base64',['../classjwt_1_1decoded__jwt.html#a1b5eb0489af7f8158779b59d03bc0431',1,'jwt::decoded_jwt']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 000000000..007de2af6 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['insensitive_5fstring_5fclaim_0',['insensitive_string_claim',['../structjwt_1_1verify__ops_1_1insensitive__string__claim.html',1,'jwt::verify_ops']]], + ['invalid_5fjson_5fexception_1',['invalid_json_exception',['../structjwt_1_1error_1_1invalid__json__exception.html',1,'jwt::error']]], + ['is_5fsubset_5fclaim_2',['is_subset_claim',['../structjwt_1_1verify__ops_1_1is__subset__claim.html',1,'jwt::verify_ops']]], + ['issued_5fat_5fleeway_3',['issued_at_leeway',['../classjwt_1_1verifier.html#a6d5c5569c3ec1f91393ea4dcf6c3e21f',1,'jwt::verifier']]], + ['issues_4',['Reporting Security Issues',['../md__8github_2security.html',1,'']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 000000000..07ffc543a --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['json_20traits_0',['JSON Traits',['../md_docs_2traits.html',1,'']]], + ['jwk_1',['jwk',['../classjwt_1_1jwk.html',1,'jwt']]], + ['jwks_2',['jwks',['../classjwt_1_1jwks.html',1,'jwt']]], + ['jwt_3',['jwt',['../namespacejwt.html',1,'']]], + ['jwt_20cpp_4',['JWT-CPP',['../index.html',1,'']]], + ['jwt_3a_3aalgorithm_5',['algorithm',['../namespacejwt_1_1algorithm.html',1,'jwt']]], + ['jwt_3a_3aalphabet_6',['alphabet',['../namespacejwt_1_1alphabet.html',1,'jwt']]], + ['jwt_3a_3abase_7',['base',['../namespacejwt_1_1base.html',1,'jwt']]], + ['jwt_3a_3aerror_8',['error',['../namespacejwt_1_1error.html',1,'jwt']]], + ['jwt_3a_3ahelper_9',['helper',['../namespacejwt_1_1helper.html',1,'jwt']]], + ['jwt_3a_3ajson_10',['json',['../namespacejwt_1_1json.html',1,'jwt']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 000000000..0391e2d8b --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kazuho_5fpicojson_0',['kazuho_picojson',['../structjwt_1_1traits_1_1kazuho__picojson.html',1,'jwt::traits']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 000000000..68b3ad887 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['leeway_0',['leeway',['../classjwt_1_1verifier.html#abb8a3e9d1decf63758baec48e964e3cd',1,'jwt::verifier']]], + ['libraries_1',['Cryptography Libraries',['../md_docs_2ssl.html',1,'']]], + ['load_5fprivate_5fec_5fkey_5ffrom_5fstring_2',['load_private_ec_key_from_string',['../namespacejwt_1_1helper.html#a63731359f8e1b6d0b31f3a768fc355f1',1,'jwt::helper::load_private_ec_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#ad23f6478334425f86a75b659981187ca',1,'jwt::helper::load_private_ec_key_from_string(const std::string &key, const std::string &password="")']]], + ['load_5fprivate_5fkey_5ffrom_5fstring_3',['load_private_key_from_string',['../namespacejwt_1_1helper.html#aec26aaa1b60b17039046cd5043a520f8',1,'jwt::helper::load_private_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#aa14d03fa5947ac066d8890a050116b93',1,'jwt::helper::load_private_key_from_string(const std::string &key, const std::string &password="")']]], + ['load_5fpublic_5fec_5fkey_5ffrom_5fstring_4',['load_public_ec_key_from_string',['../namespacejwt_1_1helper.html#a366b03033ec53d5321256b9f05238b38',1,'jwt::helper::load_public_ec_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a7ca85602a4520008b1b624e1b175bba5',1,'jwt::helper::load_public_ec_key_from_string(const std::string &key, const std::string &password="")']]], + ['load_5fpublic_5fkey_5ffrom_5fstring_5',['load_public_key_from_string',['../namespacejwt_1_1helper.html#aff6d5a71d864f47402606ce7d22ae5aa',1,'jwt::helper::load_public_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a026ca0f48025b1ec3502e3ea42efd2ab',1,'jwt::helper::load_public_key_from_string(const std::string &key, const std::string &password="")']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 000000000..5631d8a5f --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nlohmann_5fjson_0',['nlohmann_json',['../structjwt_1_1traits_1_1nlohmann__json.html',1,'jwt::traits']]], + ['not_5fbefore_5fleeway_1',['not_before_leeway',['../classjwt_1_1verifier.html#a5ae0c09cc67ccc009149ca36d84d0fbf',1,'jwt::verifier']]] +]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 000000000..39db78cfd --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['object_5ftype_0',['object_type',['../structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html',1,'jwt::traits::danielaparker_jsoncons']]], + ['operator_3c_3c_1',['operator<<',['../classjwt_1_1basic__claim.html#acb0dd9d4a9c683a33877b56c386a1428',1,'jwt::basic_claim']]], + ['operator_3e_3e_2',['operator>>',['../classjwt_1_1basic__claim.html#a81c5d71c9421d074f766e7c5a16106b2',1,'jwt::basic_claim']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 000000000..026ad5b13 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['parse_5fjwk_0',['parse_jwk',['../namespacejwt.html#a8948012a32d2d558ced39f6101c5c7e0',1,'jwt::parse_jwk(const typename json_traits::string_type &jwk_)'],['../namespacejwt.html#a400ddb1cef610c92831bd577fd81d4e6',1,'jwt::parse_jwk(const traits::boost_json::string_type &token)']]], + ['parse_5fjwks_1',['parse_jwks',['../namespacejwt.html#a978368e4ebd959166629b689fbe3e4ec',1,'jwt::parse_jwks(const typename json_traits::string_type &jwks_)'],['../namespacejwt.html#a19ba6f93afb62925496c134f15c89116',1,'jwt::parse_jwks(const traits::boost_json::string_type &token)']]], + ['payload_2',['payload',['../classjwt_1_1payload.html',1,'jwt::payload< json_traits >'],['../classjwt_1_1decoded__jwt.html#af9b33ca8b170b91f255ff7afe9fbf3c1',1,'jwt::decoded_jwt::payload']]], + ['payload_5fbase64_3',['payload_base64',['../classjwt_1_1decoded__jwt.html#af9013de47f7e628c23b80f55d84b03d1',1,'jwt::decoded_jwt']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 000000000..6178922e6 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['questions_0',['Frequently Asked Questions',['../md_docs_2faqs.html',1,'']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 000000000..abf1bda9c --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['base64_0',['base64',['../structjwt_1_1alphabet_1_1base64.html',1,'jwt::alphabet']]], + ['base64url_1',['base64url',['../structjwt_1_1alphabet_1_1base64url.html',1,'jwt::alphabet']]], + ['base64url_5fpercent_5fencoding_2',['base64url_percent_encoding',['../structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html',1,'jwt::alphabet::helper']]], + ['basic_5fclaim_3',['basic_claim',['../classjwt_1_1basic__claim.html',1,'jwt']]], + ['boost_5fjson_4',['boost_json',['../structjwt_1_1traits_1_1boost__json.html',1,'jwt::traits']]], + ['builder_5',['builder',['../classjwt_1_1builder.html',1,'jwt']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 000000000..926c94fa4 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['claim_5fnot_5fpresent_5fexception_0',['claim_not_present_exception',['../structjwt_1_1error_1_1claim__not__present__exception.html',1,'jwt::error']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 000000000..a1b62a8f6 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['danielaparker_5fjsoncons_0',['danielaparker_jsoncons',['../structjwt_1_1traits_1_1danielaparker__jsoncons.html',1,'jwt::traits']]], + ['date_5fafter_5fclaim_1',['date_after_claim',['../structjwt_1_1verify__ops_1_1date__after__claim.html',1,'jwt::verify_ops']]], + ['date_5fbefore_5fclaim_2',['date_before_claim',['../structjwt_1_1verify__ops_1_1date__before__claim.html',1,'jwt::verify_ops']]], + ['decoded_5fjwt_3',['decoded_jwt',['../classjwt_1_1decoded__jwt.html',1,'jwt']]], + ['default_5fclock_4',['default_clock',['../structjwt_1_1default__clock.html',1,'jwt']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 000000000..ea87b93b8 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['ecdsa_5fexception_0',['ecdsa_exception',['../structjwt_1_1error_1_1ecdsa__exception.html',1,'jwt::error']]], + ['equals_5fclaim_1',['equals_claim',['../structjwt_1_1verify__ops_1_1equals__claim.html',1,'jwt::verify_ops']]], + ['evp_5fpkey_5fhandle_2',['evp_pkey_handle',['../classjwt_1_1helper_1_1evp__pkey__handle.html',1,'jwt::helper']]] +]; diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 000000000..7e58c15b8 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['header_0',['header',['../classjwt_1_1header.html',1,'jwt']]] +]; diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 000000000..bd757e779 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['insensitive_5fstring_5fclaim_0',['insensitive_string_claim',['../structjwt_1_1verify__ops_1_1insensitive__string__claim.html',1,'jwt::verify_ops']]], + ['invalid_5fjson_5fexception_1',['invalid_json_exception',['../structjwt_1_1error_1_1invalid__json__exception.html',1,'jwt::error']]], + ['is_5fsubset_5fclaim_2',['is_subset_claim',['../structjwt_1_1verify__ops_1_1is__subset__claim.html',1,'jwt::verify_ops']]] +]; diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 000000000..e24e33cff --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['jwk_0',['jwk',['../classjwt_1_1jwk.html',1,'jwt']]], + ['jwks_1',['jwks',['../classjwt_1_1jwks.html',1,'jwt']]] +]; diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 000000000..0391e2d8b --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['kazuho_5fpicojson_0',['kazuho_picojson',['../structjwt_1_1traits_1_1kazuho__picojson.html',1,'jwt::traits']]] +]; diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 000000000..7443eadbf --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nlohmann_5fjson_0',['nlohmann_json',['../structjwt_1_1traits_1_1nlohmann__json.html',1,'jwt::traits']]] +]; diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 000000000..b5280afbd --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['object_5ftype_0',['object_type',['../structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html',1,'jwt::traits::danielaparker_jsoncons']]] +]; diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 000000000..0f97646ef --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['payload_0',['payload',['../classjwt_1_1payload.html',1,'jwt']]] +]; diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 000000000..46e3f7113 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rsa_5fexception_0',['rsa_exception',['../structjwt_1_1error_1_1rsa__exception.html',1,'jwt::error']]] +]; diff --git a/search/classes_c.js b/search/classes_c.js new file mode 100644 index 000000000..c1d9d5ec1 --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['signature_5fgeneration_5fexception_0',['signature_generation_exception',['../structjwt_1_1error_1_1signature__generation__exception.html',1,'jwt::error']]], + ['signature_5fverification_5fexception_1',['signature_verification_exception',['../structjwt_1_1error_1_1signature__verification__exception.html',1,'jwt::error']]] +]; diff --git a/search/classes_d.js b/search/classes_d.js new file mode 100644 index 000000000..78bea800c --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['token_5fverification_5fexception_0',['token_verification_exception',['../structjwt_1_1error_1_1token__verification__exception.html',1,'jwt::error']]] +]; diff --git a/search/classes_e.js b/search/classes_e.js new file mode 100644 index 000000000..e02960835 --- /dev/null +++ b/search/classes_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['verifier_0',['verifier',['../classjwt_1_1verifier.html',1,'jwt']]], + ['verify_5fcontext_1',['verify_context',['../structjwt_1_1verify__ops_1_1verify__context.html',1,'jwt::verify_ops']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 000000000..337d6cc13 --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 000000000..b7670d6e9 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ecdsa_5ferror_0',['ecdsa_error',['../namespacejwt_1_1error.html#a88d41131fbb9462f2f6e269d573484d3',1,'jwt::error']]] +]; diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 000000000..2edd1e114 --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rsa_5ferror_0',['rsa_error',['../namespacejwt_1_1error.html#a98235b94b0e6df132992e15d5da6b9a7',1,'jwt::error']]] +]; diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 000000000..d58f1a94a --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['signature_5fgeneration_5ferror_0',['signature_generation_error',['../namespacejwt_1_1error.html#aa5bd68bdbf7467bc15ca7786e2aeb1cd',1,'jwt::error']]], + ['signature_5fverification_5ferror_1',['signature_verification_error',['../namespacejwt_1_1error.html#a016a92ceca8cb48466c0e250b4fca244',1,'jwt::error']]] +]; diff --git a/search/enums_3.js b/search/enums_3.js new file mode 100644 index 000000000..8ba1c33cf --- /dev/null +++ b/search/enums_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['token_5fverification_5ferror_0',['token_verification_error',['../namespacejwt_1_1error.html#ac047d0bfdb503f2f68c4133f1a69baed',1,'jwt::error']]], + ['type_1',['type',['../namespacejwt_1_1json.html#aa4e55c1854b652f73fad3b811ff94a3e',1,'jwt::json']]] +]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 000000000..4d21ccf62 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['allow_5falgorithm_0',['allow_algorithm',['../classjwt_1_1verifier.html#ae2cc9d0125be58b51f4c4aa30878aa41',1,'jwt::verifier']]], + ['as_5farray_1',['as_array',['../classjwt_1_1basic__claim.html#af06fe57ced0b69e5d3e0480b283ac31f',1,'jwt::basic_claim']]], + ['as_5fboolean_2',['as_boolean',['../classjwt_1_1basic__claim.html#a97442d8e2ba7ac24201d1d16d6c32aef',1,'jwt::basic_claim']]], + ['as_5fdate_3',['as_date',['../classjwt_1_1basic__claim.html#aadef1dd6e6275680067940fedb06ab08',1,'jwt::basic_claim']]], + ['as_5finteger_4',['as_integer',['../classjwt_1_1basic__claim.html#ae2c58375c443bfc1037066edaf88be53',1,'jwt::basic_claim']]], + ['as_5fnumber_5',['as_number',['../classjwt_1_1basic__claim.html#a2000561f92e202acdeb532f15056e764',1,'jwt::basic_claim']]], + ['as_5fset_6',['as_set',['../classjwt_1_1basic__claim.html#a33b043d261a23cd108778893a24ae976',1,'jwt::basic_claim']]], + ['as_5fstring_7',['as_string',['../classjwt_1_1basic__claim.html#afe7cd8e0feebff55c05adfe71748e1fd',1,'jwt::basic_claim']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 000000000..c09dcdeac --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bn2raw_0',['bn2raw',['../namespacejwt_1_1helper.html#aa75689cc6b3d9f710b5c050cc9bff5ff',1,'jwt::helper']]] +]; diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 000000000..7830ef909 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['with_5faudience_0',['with_audience',['../classjwt_1_1verifier.html#a7cf070f76669f32c96e38ee4e9c5cb00',1,'jwt::verifier::with_audience(const typename basic_claim_t::set_t &aud)'],['../classjwt_1_1verifier.html#a9e1129b30859be9d617547e333ad0ca8',1,'jwt::verifier::with_audience(const typename json_traits::string_type &aud)']]], + ['with_5fclaim_1',['with_claim',['../classjwt_1_1verifier.html#a1e21d481d69ebddb1d7275449c35be23',1,'jwt::verifier::with_claim(const typename json_traits::string_type &name, verify_check_fn_t fn)'],['../classjwt_1_1verifier.html#a9ad51170089fb1566c5d97314cc33e41',1,'jwt::verifier::with_claim(const typename json_traits::string_type &name, basic_claim_t c)']]], + ['with_5fid_2',['with_id',['../classjwt_1_1verifier.html#af26d00278aca90b1c4ee80531aebb8ed',1,'jwt::verifier']]], + ['with_5fissuer_3',['with_issuer',['../classjwt_1_1verifier.html#ad7cf48fc13d29bc59643379c891232cb',1,'jwt::verifier']]], + ['with_5fsubject_4',['with_subject',['../classjwt_1_1verifier.html#a7ae6f50c039290ac6f87e7dda905c25c',1,'jwt::verifier']]], + ['with_5ftype_5',['with_type',['../classjwt_1_1verifier.html#ae77119a8c25bb7b906191f0055981a7b',1,'jwt::verifier']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 000000000..542ca950c --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['convert_5fbase64_5fder_5fto_5fpem_0',['convert_base64_der_to_pem',['../namespacejwt_1_1helper.html#a868bab109dbaf38adc80f4025c9ce378',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str, Decode decode, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a8a6dd42aec39dc85dbc3d14df183f125',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str, Decode decode)'],['../namespacejwt_1_1helper.html#ab58e1f3020d0415a71aa9cea1e9fa4f2',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a792fb50c64b41b4546c2a2b2dfb41746',1,'jwt::helper::convert_base64_der_to_pem(const std::string &cert_base64_der_str)']]], + ['convert_5fder_5fto_5fpem_1',['convert_der_to_pem',['../namespacejwt_1_1helper.html#aeb9ab265a9a4baeb4c82288dc869f5b2',1,'jwt::helper::convert_der_to_pem(const std::string &cert_der_str, std::error_code &ec)'],['../namespacejwt_1_1helper.html#aabc2a97481e9cbcee6c4a09705cf4c15',1,'jwt::helper::convert_der_to_pem(const std::string &cert_der_str)']]], + ['create_2',['create',['../namespacejwt.html#a2c5962f1775bac1a99e326e761b2e05e',1,'jwt::create()'],['../namespacejwt.html#a119b3861d510205d5c626b794c06d020',1,'jwt::create()']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 000000000..74be7011d --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['decode_0',['decode',['../namespacejwt.html#aefffdd7d2a79d6872c15a7ec1661b149',1,'jwt::decode(const typename json_traits::string_type &token, Decode decode)'],['../namespacejwt.html#ade66496cbe78db1ca2fd769b6982bbc9',1,'jwt::decode(const typename json_traits::string_type &token)'],['../namespacejwt.html#ae63bcbdf9caf43a79f3c140708552761',1,'jwt::decode(const std::string &token)'],['../namespacejwt.html#a1888325882765254b8d2680ff1cf3210',1,'jwt::decode(const std::string &token, Decode decode)'],['../namespacejwt.html#a98607d668bf63870e5dab3f81afe0320',1,'jwt::decode(const std::string &token, Decode decode)'],['../namespacejwt.html#a627d2f26db17185e7eb7bb92defa70cc',1,'jwt::decode(const std::string &token, Decode decode)'],['../namespacejwt.html#a65d515aeb39cb5829c7af774051ae91e',1,'jwt::decode(const std::string &token, Decode decode)']]], + ['decoded_5fjwt_1',['decoded_jwt',['../classjwt_1_1decoded__jwt.html#a74547d7eee095f9bb440b572da5edd39',1,'jwt::decoded_jwt::decoded_jwt(const typename json_traits::string_type &token)'],['../classjwt_1_1decoded__jwt.html#a8517ef5dd3f099223ec4477aff546ac8',1,'jwt::decoded_jwt::decoded_jwt(const typename json_traits::string_type &token, Decode decode)']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 000000000..777b1f082 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ecdsa_5ferror_5fcategory_0',['ecdsa_error_category',['../namespacejwt_1_1error.html#a641d06c74f6ed676ac0636215b50e2b2',1,'jwt::error']]], + ['evp_5fpkey_5fhandle_1',['evp_pkey_handle',['../classjwt_1_1helper_1_1evp__pkey__handle.html#a9948effb83d8dcd17447eff28c852f6f',1,'jwt::helper::evp_pkey_handle']]], + ['expires_5fat_5fleeway_2',['expires_at_leeway',['../classjwt_1_1verifier.html#a157d3a7b128aaac1b37a9ba47dd72718',1,'jwt::verifier']]], + ['extract_5fpubkey_5ffrom_5fcert_3',['extract_pubkey_from_cert',['../namespacejwt_1_1helper.html#a85fab72593fea9a3bb704464be2bfc18',1,'jwt::helper::extract_pubkey_from_cert(const std::string &certstr, const std::string &pw, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a8a102b1b679467ba520e8cae3ceed9da',1,'jwt::helper::extract_pubkey_from_cert(const std::string &certstr, const std::string &pw="")']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 000000000..aab5e736b --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['get_5falgorithm_0',['get_algorithm',['../classjwt_1_1jwk.html#a50b2c64b52a7028acfad1e4ac64c8e66',1,'jwt::jwk::get_algorithm()'],['../classjwt_1_1header.html#a8ac7e7c26859e172a3f0f22ded7b307f',1,'jwt::header::get_algorithm()']]], + ['get_5faudience_1',['get_audience',['../classjwt_1_1payload.html#a0131e3f94dc5deaef9f2128e61675ef3',1,'jwt::payload']]], + ['get_5fclaims_2',['get_claims',['../classjwt_1_1jwk.html#a5628cd17ea929a33e6d40eef5b073d0d',1,'jwt::jwk']]], + ['get_5fcontent_5ftype_3',['get_content_type',['../classjwt_1_1header.html#ae2cb8d327ed651286af732663ef23c44',1,'jwt::header']]], + ['get_5fcurve_4',['get_curve',['../classjwt_1_1jwk.html#a09d3afa0dcca94aee47c8cb9eb42dc9f',1,'jwt::jwk']]], + ['get_5fexpires_5fat_5',['get_expires_at',['../classjwt_1_1payload.html#adab036c2f63dad223d163ad6689938e5',1,'jwt::payload']]], + ['get_5fheader_6',['get_header',['../classjwt_1_1decoded__jwt.html#a00a77aedba4b77d9ee0a6f32307c2f92',1,'jwt::decoded_jwt']]], + ['get_5fheader_5fbase64_7',['get_header_base64',['../classjwt_1_1decoded__jwt.html#af55156d334c665ad0b11cb6881d242c2',1,'jwt::decoded_jwt']]], + ['get_5fheader_5fclaim_8',['get_header_claim',['../classjwt_1_1header.html#ad941b52adacc083b2b895fbfa23f938b',1,'jwt::header::get_header_claim()'],['../classjwt_1_1decoded__jwt.html#a807f00ca32b360b69b4d8555f7cb7795',1,'jwt::decoded_jwt::get_header_claim(const typename json_traits::string_type &name) const']]], + ['get_5fheader_5fjson_9',['get_header_json',['../classjwt_1_1decoded__jwt.html#acc90b0d668345b0f3c41d382fe087a08',1,'jwt::decoded_jwt']]], + ['get_5fid_10',['get_id',['../classjwt_1_1payload.html#a0cb0076f6d6ca4c8acb498076c8f5721',1,'jwt::payload']]], + ['get_5fissued_5fat_11',['get_issued_at',['../classjwt_1_1payload.html#aa1efb5105a9c3efb49d08b8651069d15',1,'jwt::payload']]], + ['get_5fissuer_12',['get_issuer',['../classjwt_1_1payload.html#afbad104eceb35855baa247ec211eeac4',1,'jwt::payload']]], + ['get_5fjwk_13',['get_jwk',['../classjwt_1_1jwks.html#ab76e769ff422c308ee17ead4ea8d8d95',1,'jwt::jwks']]], + ['get_5fjwk_5fclaim_14',['get_jwk_claim',['../classjwt_1_1jwk.html#af814feaeb94f0394d14341e4e7024ebb',1,'jwt::jwk']]], + ['get_5fkey_5fid_15',['get_key_id',['../classjwt_1_1header.html#ad9e1ae6bf5aecf92d533028bc6f9b973',1,'jwt::header::get_key_id()'],['../classjwt_1_1jwk.html#a6ff417d9e099f70183e5b065130f420f',1,'jwt::jwk::get_key_id() const']]], + ['get_5fkey_5foperations_16',['get_key_operations',['../classjwt_1_1jwk.html#ae5f0bb1bc9728e721c62e7aa0ab1ce5a',1,'jwt::jwk']]], + ['get_5fkey_5ftype_17',['get_key_type',['../classjwt_1_1jwk.html#afcfb7ade4ffa503db7c5b92280b49514',1,'jwt::jwk']]], + ['get_5fnot_5fbefore_18',['get_not_before',['../classjwt_1_1payload.html#a60f492d8bda3225155b6f10f05273f35',1,'jwt::payload']]], + ['get_5fpayload_19',['get_payload',['../classjwt_1_1decoded__jwt.html#adb1dc325d49e01838e78e9cd809aaa2b',1,'jwt::decoded_jwt']]], + ['get_5fpayload_5fbase64_20',['get_payload_base64',['../classjwt_1_1decoded__jwt.html#aa137fa9dfcf54444901618bfa0fc2ac4',1,'jwt::decoded_jwt']]], + ['get_5fpayload_5fclaim_21',['get_payload_claim',['../classjwt_1_1payload.html#aabe0fc87ca6261eae5b7b32b7f2fd531',1,'jwt::payload::get_payload_claim()'],['../classjwt_1_1decoded__jwt.html#a6a86e22661351e17f8880d6b4801ea9a',1,'jwt::decoded_jwt::get_payload_claim(const typename json_traits::string_type &name) const']]], + ['get_5fpayload_5fjson_22',['get_payload_json',['../classjwt_1_1decoded__jwt.html#a8a4dea7cc8187e496feaf3112a6de419',1,'jwt::decoded_jwt']]], + ['get_5fsignature_23',['get_signature',['../classjwt_1_1decoded__jwt.html#a715bf6407901d555442ba79e68e96ddb',1,'jwt::decoded_jwt']]], + ['get_5fsignature_5fbase64_24',['get_signature_base64',['../classjwt_1_1decoded__jwt.html#a0210f5688a6b0327b781fbd3d6e124f7',1,'jwt::decoded_jwt']]], + ['get_5fsubject_25',['get_subject',['../classjwt_1_1payload.html#adb0c71f6a7ea21910314ff4372a945dd',1,'jwt::payload']]], + ['get_5ftoken_26',['get_token',['../classjwt_1_1decoded__jwt.html#ac6dce886f27c3a5afadea6ae991063fb',1,'jwt::decoded_jwt']]], + ['get_5ftype_27',['get_type',['../classjwt_1_1basic__claim.html#a59be52f75f5d32386f0e57be25dda38a',1,'jwt::basic_claim::get_type()'],['../classjwt_1_1header.html#a0bed2e5b52abbefda5317a2712c08e8a',1,'jwt::header::get_type()']]], + ['get_5fuse_28',['get_use',['../classjwt_1_1jwk.html#a8581a05f8628ce98a898e36fb30649df',1,'jwt::jwk']]], + ['get_5fx5c_29',['get_x5c',['../classjwt_1_1jwk.html#a50c5eb1410fc69363527329efd58d09c',1,'jwt::jwk']]], + ['get_5fx5c_5fkey_5fvalue_30',['get_x5c_key_value',['../classjwt_1_1jwk.html#a5e3675060ca4b75d675ed4a301abac95',1,'jwt::jwk']]], + ['get_5fx5t_31',['get_x5t',['../classjwt_1_1jwk.html#a5a1e7e2940e23e2e2a4f64e1db9d5f38',1,'jwt::jwk']]], + ['get_5fx5t_5fsha256_32',['get_x5t_sha256',['../classjwt_1_1jwk.html#a6f49dc9f0e73b9f34044ee56b49c8baa',1,'jwt::jwk']]], + ['get_5fx5u_33',['get_x5u',['../classjwt_1_1jwk.html#af9e5af688ecdc3c88579ba5bfcfa4f17',1,'jwt::jwk']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 000000000..94fe92751 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['has_5falgorithm_0',['has_algorithm',['../classjwt_1_1jwk.html#a7791ca410ed90a89a4325b990efdb1bd',1,'jwt::jwk::has_algorithm()'],['../classjwt_1_1header.html#a59cc46de655365a8c1d99c60828051c0',1,'jwt::header::has_algorithm()']]], + ['has_5faudience_1',['has_audience',['../classjwt_1_1payload.html#ad9f078e20d3cb6ce1ee135b2698a7059',1,'jwt::payload']]], + ['has_5fcontent_5ftype_2',['has_content_type',['../classjwt_1_1header.html#a9b9e6f2fd191afd8a167591818ad26da',1,'jwt::header']]], + ['has_5fcurve_3',['has_curve',['../classjwt_1_1jwk.html#ae97c9750a6a65d7b6a5cc16a3e3d5c6b',1,'jwt::jwk']]], + ['has_5fexpires_5fat_4',['has_expires_at',['../classjwt_1_1payload.html#a8577be97185f42d58ba0ca0b31c1a116',1,'jwt::payload']]], + ['has_5fheader_5fclaim_5',['has_header_claim',['../classjwt_1_1header.html#a2d5ee46b83e06da380bcbe20c5362b59',1,'jwt::header']]], + ['has_5fid_6',['has_id',['../classjwt_1_1payload.html#a78fd663cc80012d9bbf1a948d246a69d',1,'jwt::payload']]], + ['has_5fissued_5fat_7',['has_issued_at',['../classjwt_1_1payload.html#a0d1df458e88887342373b4ddb1c6b8f2',1,'jwt::payload']]], + ['has_5fissuer_8',['has_issuer',['../classjwt_1_1payload.html#a69dcb60e7108e6d124135e1a079943ca',1,'jwt::payload']]], + ['has_5fjwk_9',['has_jwk',['../classjwt_1_1jwks.html#aedd6c046ef7c08fcf8ab71158d3bafc5',1,'jwt::jwks']]], + ['has_5fjwk_5fclaim_10',['has_jwk_claim',['../classjwt_1_1jwk.html#ac7776dfc51fca7a44ffdf80e1c9e699b',1,'jwt::jwk']]], + ['has_5fkey_5fid_11',['has_key_id',['../classjwt_1_1header.html#af8fb4b77c7c066bb4a6ffefc0d459000',1,'jwt::header::has_key_id()'],['../classjwt_1_1jwk.html#a8fd4f19ffb59645a70182aa53ee773d8',1,'jwt::jwk::has_key_id() const noexcept']]], + ['has_5fkey_5foperations_12',['has_key_operations',['../classjwt_1_1jwk.html#aa774d9e337af22dbb482efe480725593',1,'jwt::jwk']]], + ['has_5fkey_5ftype_13',['has_key_type',['../classjwt_1_1jwk.html#af2955f1903c7c25c07390b8734b1278b',1,'jwt::jwk']]], + ['has_5fnot_5fbefore_14',['has_not_before',['../classjwt_1_1payload.html#a151f3aed388ffeba63e14379808f3e53',1,'jwt::payload']]], + ['has_5fpayload_5fclaim_15',['has_payload_claim',['../classjwt_1_1payload.html#a3d7fce2a8b0ad4965671009baa619fa9',1,'jwt::payload']]], + ['has_5fsubject_16',['has_subject',['../classjwt_1_1payload.html#a3f9fd30aae3e7cb5fa4f5332cf9cc9e6',1,'jwt::payload']]], + ['has_5ftype_17',['has_type',['../classjwt_1_1header.html#a6904ba9440815ca602f5a819224333b6',1,'jwt::header']]], + ['has_5fuse_18',['has_use',['../classjwt_1_1jwk.html#aab3976b190dfb7753a67525a1aacf3e9',1,'jwt::jwk']]], + ['has_5fx5c_19',['has_x5c',['../classjwt_1_1jwk.html#a04b9237225866306df0b06d0be1c49df',1,'jwt::jwk']]], + ['has_5fx5t_20',['has_x5t',['../classjwt_1_1jwk.html#aad5f938603c9354d0ef0316dcc55c9e5',1,'jwt::jwk']]], + ['has_5fx5t_5fsha256_21',['has_x5t_sha256',['../classjwt_1_1jwk.html#a1c7acee846b84aa4c26094b8f71739c6',1,'jwt::jwk']]], + ['has_5fx5u_22',['has_x5u',['../classjwt_1_1jwk.html#a92093f86bd99995f21f3efdde09e1370',1,'jwt::jwk']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 000000000..9b37427cb --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['issued_5fat_5fleeway_0',['issued_at_leeway',['../classjwt_1_1verifier.html#a6d5c5569c3ec1f91393ea4dcf6c3e21f',1,'jwt::verifier']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 000000000..2714d308f --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['leeway_0',['leeway',['../classjwt_1_1verifier.html#abb8a3e9d1decf63758baec48e964e3cd',1,'jwt::verifier']]], + ['load_5fprivate_5fec_5fkey_5ffrom_5fstring_1',['load_private_ec_key_from_string',['../namespacejwt_1_1helper.html#a63731359f8e1b6d0b31f3a768fc355f1',1,'jwt::helper::load_private_ec_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#ad23f6478334425f86a75b659981187ca',1,'jwt::helper::load_private_ec_key_from_string(const std::string &key, const std::string &password="")']]], + ['load_5fprivate_5fkey_5ffrom_5fstring_2',['load_private_key_from_string',['../namespacejwt_1_1helper.html#aec26aaa1b60b17039046cd5043a520f8',1,'jwt::helper::load_private_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#aa14d03fa5947ac066d8890a050116b93',1,'jwt::helper::load_private_key_from_string(const std::string &key, const std::string &password="")']]], + ['load_5fpublic_5fec_5fkey_5ffrom_5fstring_3',['load_public_ec_key_from_string',['../namespacejwt_1_1helper.html#a366b03033ec53d5321256b9f05238b38',1,'jwt::helper::load_public_ec_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a7ca85602a4520008b1b624e1b175bba5',1,'jwt::helper::load_public_ec_key_from_string(const std::string &key, const std::string &password="")']]], + ['load_5fpublic_5fkey_5ffrom_5fstring_4',['load_public_key_from_string',['../namespacejwt_1_1helper.html#aff6d5a71d864f47402606ce7d22ae5aa',1,'jwt::helper::load_public_key_from_string(const std::string &key, const std::string &password, std::error_code &ec)'],['../namespacejwt_1_1helper.html#a026ca0f48025b1ec3502e3ea42efd2ab',1,'jwt::helper::load_public_key_from_string(const std::string &key, const std::string &password="")']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 000000000..f7f12eeef --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['not_5fbefore_5fleeway_0',['not_before_leeway',['../classjwt_1_1verifier.html#a5ae0c09cc67ccc009149ca36d84d0fbf',1,'jwt::verifier']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 000000000..262cf4f69 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_3c_3c_0',['operator<<',['../classjwt_1_1basic__claim.html#acb0dd9d4a9c683a33877b56c386a1428',1,'jwt::basic_claim']]], + ['operator_3e_3e_1',['operator>>',['../classjwt_1_1basic__claim.html#a81c5d71c9421d074f766e7c5a16106b2',1,'jwt::basic_claim']]] +]; diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 000000000..1e6bb27cb --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['parse_5fjwk_0',['parse_jwk',['../namespacejwt.html#a8948012a32d2d558ced39f6101c5c7e0',1,'jwt::parse_jwk(const typename json_traits::string_type &jwk_)'],['../namespacejwt.html#a400ddb1cef610c92831bd577fd81d4e6',1,'jwt::parse_jwk(const traits::boost_json::string_type &token)']]], + ['parse_5fjwks_1',['parse_jwks',['../namespacejwt.html#a978368e4ebd959166629b689fbe3e4ec',1,'jwt::parse_jwks(const typename json_traits::string_type &jwks_)'],['../namespacejwt.html#a19ba6f93afb62925496c134f15c89116',1,'jwt::parse_jwks(const traits::boost_json::string_type &token)']]] +]; diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 000000000..abe099243 --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['raw2bn_0',['raw2bn',['../namespacejwt_1_1helper.html#aedff25cd41e1136d225e172e1fa61461',1,'jwt::helper']]], + ['rsa_5ferror_5fcategory_1',['rsa_error_category',['../namespacejwt_1_1error.html#a7fd09a10a0c499fe063293a10caf89e9',1,'jwt::error']]] +]; diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 000000000..c419eb042 --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['set_5falgorithm_0',['set_algorithm',['../classjwt_1_1builder.html#ad6a378577e46c3e12f3242c625f2f623',1,'jwt::builder']]], + ['set_5faudience_1',['set_audience',['../classjwt_1_1builder.html#a20358aa8be0179eaa53055aaca8a7f21',1,'jwt::builder::set_audience(typename json_traits::array_type a)'],['../classjwt_1_1builder.html#a1e764196824144648b2b2c490bdc328d',1,'jwt::builder::set_audience(typename json_traits::string_type aud)']]], + ['set_5fcontent_5ftype_2',['set_content_type',['../classjwt_1_1builder.html#a66d603ae007cb796667b4abd095e06cb',1,'jwt::builder']]], + ['set_5fexpires_5fat_3',['set_expires_at',['../classjwt_1_1builder.html#ae3de63621c8f7b3da8415030225cd67e',1,'jwt::builder']]], + ['set_5fheader_5fclaim_4',['set_header_claim',['../classjwt_1_1builder.html#ac8f57f1c8d27e6117c508a3619ed4561',1,'jwt::builder::set_header_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)'],['../classjwt_1_1builder.html#a388749e54d6b89b9da6a75494fb0757e',1,'jwt::builder::set_header_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)']]], + ['set_5fid_5',['set_id',['../classjwt_1_1builder.html#a95583374b3f692fa84833a0e08575665',1,'jwt::builder']]], + ['set_5fissued_5fat_6',['set_issued_at',['../classjwt_1_1builder.html#a92bfe54290a13c640db23240536993c7',1,'jwt::builder']]], + ['set_5fissuer_7',['set_issuer',['../classjwt_1_1builder.html#ab6f6203620218fbdec21c5afda7d11fc',1,'jwt::builder']]], + ['set_5fkey_5fid_8',['set_key_id',['../classjwt_1_1builder.html#ab5bc32a6f2cd89f65e558fd38dae21b0',1,'jwt::builder']]], + ['set_5fnot_5fbefore_9',['set_not_before',['../classjwt_1_1builder.html#a82784887801a2fcf4b132b03444a4da7',1,'jwt::builder']]], + ['set_5fpayload_5fclaim_10',['set_payload_claim',['../classjwt_1_1builder.html#a0d63ee3ba1a3bf7047239e8502e565ab',1,'jwt::builder::set_payload_claim(const typename json_traits::string_type &id, typename json_traits::value_type c)'],['../classjwt_1_1builder.html#a42e050718f31a284e08142030ca91930',1,'jwt::builder::set_payload_claim(const typename json_traits::string_type &id, basic_claim< json_traits > c)']]], + ['set_5fsubject_11',['set_subject',['../classjwt_1_1builder.html#a4506fc0956549155546d4c80fa94ae45',1,'jwt::builder']]], + ['set_5ftype_12',['set_type',['../classjwt_1_1builder.html#aaa284acea472b10e6a1ee142336a01aa',1,'jwt::builder']]], + ['sign_13',['sign',['../classjwt_1_1builder.html#a1e594d5e35cbd6b799acb1a247618a40',1,'jwt::builder::sign(const Algo &algo, Encode encode) const'],['../classjwt_1_1builder.html#a18ede7eb3d5502f17f2b7c3cf31d2f1c',1,'jwt::builder::sign(const Algo &algo) const'],['../classjwt_1_1builder.html#aff43371359a2f8bc6cabd2c976050233',1,'jwt::builder::sign(const Algo &algo, Encode encode, std::error_code &ec) const'],['../classjwt_1_1builder.html#ad7d743a548c14c91c87450929cda8bb9',1,'jwt::builder::sign(const Algo &algo, std::error_code &ec) const']]], + ['signature_5fgeneration_5ferror_5fcategory_14',['signature_generation_error_category',['../namespacejwt_1_1error.html#a86c5b0c1df898d66161455b323b8053e',1,'jwt::error']]], + ['signature_5fverification_5ferror_5fcategory_15',['signature_verification_error_category',['../namespacejwt_1_1error.html#a7c0e4691aa8c55743300cd068ad23aec',1,'jwt::error']]] +]; diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 000000000..069298738 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['to_5fjson_0',['to_json',['../classjwt_1_1basic__claim.html#ae47b0e6de750563a2ba1f9e5628b72ee',1,'jwt::basic_claim']]], + ['token_5fverification_5ferror_5fcategory_1',['token_verification_error_category',['../namespacejwt_1_1error.html#a187142c60516cc974c86efb5e277922d',1,'jwt::error']]] +]; diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 000000000..1b15c4aa2 --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['verifier_0',['verifier',['../classjwt_1_1verifier.html#aa4764c828213d9ef1537d2490ed98b45',1,'jwt::verifier']]], + ['verify_1',['verify',['../classjwt_1_1verifier.html#aa275e9eedac41ad8d8a0f2a3300acda2',1,'jwt::verifier::verify(const decoded_jwt< json_traits > &jwt) const'],['../classjwt_1_1verifier.html#a448cd954e1ea53ff2bcb39b7cc30cc65',1,'jwt::verifier::verify(const decoded_jwt< json_traits > &jwt, std::error_code &ec) const'],['../namespacejwt.html#a05f9a08741bb8d685f0b2dfbc22820b7',1,'jwt::verify(Clock c)'],['../namespacejwt.html#a68225fdaab1a9a068e28d6acec245694',1,'jwt::verify(default_clock c={})'],['../namespacejwt.html#aac658f79d5123d53c3edcbecbbbdc149',1,'jwt::verify()']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 000000000..ffb6cf0d0 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 000000000..4122773f9 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 000000000..553dba877 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 000000000..c906f84c8 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/namespaces_0.js b/search/namespaces_0.js new file mode 100644 index 000000000..e4548333a --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['jwt_0',['jwt',['../namespacejwt.html',1,'']]], + ['jwt_3a_3aalgorithm_1',['algorithm',['../namespacejwt_1_1algorithm.html',1,'jwt']]], + ['jwt_3a_3aalphabet_2',['alphabet',['../namespacejwt_1_1alphabet.html',1,'jwt']]], + ['jwt_3a_3abase_3',['base',['../namespacejwt_1_1base.html',1,'jwt']]], + ['jwt_3a_3aerror_4',['error',['../namespacejwt_1_1error.html',1,'jwt']]], + ['jwt_3a_3ahelper_5',['helper',['../namespacejwt_1_1helper.html',1,'jwt']]], + ['jwt_3a_3ajson_6',['json',['../namespacejwt_1_1json.html',1,'jwt']]] +]; diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 000000000..2706a2dbc --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['asked_20questions_0',['Frequently Asked Questions',['../md_docs_2faqs.html',1,'']]] +]; diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 000000000..fbea79999 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cpp_0',['JWT-CPP',['../index.html',1,'']]], + ['cryptography_20libraries_1',['Cryptography Libraries',['../md_docs_2ssl.html',1,'']]] +]; diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 000000000..546872a25 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['frequently_20asked_20questions_0',['Frequently Asked Questions',['../md_docs_2faqs.html',1,'']]] +]; diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 000000000..84122a447 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['issues_0',['Reporting Security Issues',['../md__8github_2security.html',1,'']]] +]; diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 000000000..e68d43f4c --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['json_20traits_0',['JSON Traits',['../md_docs_2traits.html',1,'']]], + ['jwt_20cpp_1',['JWT-CPP',['../index.html',1,'']]] +]; diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 000000000..68df418b7 --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['libraries_0',['Cryptography Libraries',['../md_docs_2ssl.html',1,'']]] +]; diff --git a/search/pages_6.js b/search/pages_6.js new file mode 100644 index 000000000..6178922e6 --- /dev/null +++ b/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['questions_0',['Frequently Asked Questions',['../md_docs_2faqs.html',1,'']]] +]; diff --git a/search/pages_7.js b/search/pages_7.js new file mode 100644 index 000000000..587c8b7f1 --- /dev/null +++ b/search/pages_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['reporting_20security_20issues_0',['Reporting Security Issues',['../md__8github_2security.html',1,'']]] +]; diff --git a/search/pages_8.js b/search/pages_8.js new file mode 100644 index 000000000..b1254b5b7 --- /dev/null +++ b/search/pages_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['security_20issues_0',['Reporting Security Issues',['../md__8github_2security.html',1,'']]], + ['signing_20tokens_1',['Signing Tokens',['../md_docs_2signing.html',1,'']]] +]; diff --git a/search/pages_9.js b/search/pages_9.js new file mode 100644 index 000000000..0370adb36 --- /dev/null +++ b/search/pages_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tokens_0',['Signing Tokens',['../md_docs_2signing.html',1,'']]], + ['traits_1',['JSON Traits',['../md_docs_2traits.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 000000000..d7b0f90b7 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 000000000..6fd40c677 --- /dev/null +++ b/search/search.js @@ -0,0 +1,840 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::alphabet::base64 Member List
    +
    +
    + +

    This is the complete list of members for jwt::alphabet::base64, including all inherited members.

    + + + +
    data() (defined in jwt::alphabet::base64)jwt::alphabet::base64inlinestatic
    fill() (defined in jwt::alphabet::base64)jwt::alphabet::base64inlinestatic
    +
    + + + + diff --git a/structjwt_1_1alphabet_1_1base64.html b/structjwt_1_1alphabet_1_1base64.html new file mode 100644 index 000000000..e237e7fed --- /dev/null +++ b/structjwt_1_1alphabet_1_1base64.html @@ -0,0 +1,130 @@ + + + + + + + +JWT-CPP: jwt::alphabet::base64 Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::alphabet::base64 Struct Reference
    +
    +
    + +

    #include <base.h>

    + + + + + + +

    +Static Public Member Functions

    +static const std::array< char, 64 > & data ()
     
    +static const std::string & fill ()
     
    +

    Detailed Description

    +

    valid list of character when working with Base64

    +

    As directed in X.509 Parameter certificate chains are base64-encoded as per Section 4 of RFC4648

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structjwt_1_1alphabet_1_1base64url-members.html b/structjwt_1_1alphabet_1_1base64url-members.html new file mode 100644 index 000000000..5b6e131a9 --- /dev/null +++ b/structjwt_1_1alphabet_1_1base64url-members.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::alphabet::base64url Member List
    +
    +
    + +

    This is the complete list of members for jwt::alphabet::base64url, including all inherited members.

    + + + +
    data() (defined in jwt::alphabet::base64url)jwt::alphabet::base64urlinlinestatic
    fill() (defined in jwt::alphabet::base64url)jwt::alphabet::base64urlinlinestatic
    +
    + + + + diff --git a/structjwt_1_1alphabet_1_1base64url.html b/structjwt_1_1alphabet_1_1base64url.html new file mode 100644 index 000000000..9c64ad617 --- /dev/null +++ b/structjwt_1_1alphabet_1_1base64url.html @@ -0,0 +1,133 @@ + + + + + + + +JWT-CPP: jwt::alphabet::base64url Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::alphabet::base64url Struct Reference
    +
    +
    + +

    #include <base.h>

    + + + + + + +

    +Static Public Member Functions

    +static const std::array< char, 64 > & data ()
     
    +static const std::string & fill ()
     
    +

    Detailed Description

    +

    valid list of character when working with Base64URL

    +

    As directed by RFC 7519 Terminology set the definition of Base64URL encoding as that in RFC 7515 that states:

    +
    +

    ‍Base64 encoding using the URL- and filename-safe character set defined in Section 5 of RFC 4648 RFC4648, with all trailing '=' characters omitted

    +
    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding-members.html b/structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding-members.html new file mode 100644 index 000000000..e28493eaa --- /dev/null +++ b/structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding-members.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::alphabet::helper::base64url_percent_encoding Member List
    +
    + +
    + + + + diff --git a/structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html b/structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html new file mode 100644 index 000000000..b09ebd6ff --- /dev/null +++ b/structjwt_1_1alphabet_1_1helper_1_1base64url__percent__encoding.html @@ -0,0 +1,130 @@ + + + + + + + +JWT-CPP: jwt::alphabet::helper::base64url_percent_encoding Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::alphabet::helper::base64url_percent_encoding Struct Reference
    +
    +
    + +

    #include <base.h>

    + + + + + + +

    +Static Public Member Functions

    +static const std::array< char, 64 > & data ()
     
    +static const std::vector< std::string > & fill ()
     
    +

    Detailed Description

    +

    A General purpose base64url alphabet respecting the URI Case Normalization

    +

    This is useful in situations outside of JWT encoding/decoding and is provided as a helper

    +

    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structjwt_1_1default__clock-members.html b/structjwt_1_1default__clock-members.html new file mode 100644 index 000000000..f022ae570 --- /dev/null +++ b/structjwt_1_1default__clock-members.html @@ -0,0 +1,112 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::default_clock Member List
    +
    +
    + +

    This is the complete list of members for jwt::default_clock, including all inherited members.

    + + +
    now() const (defined in jwt::default_clock)jwt::default_clockinline
    +
    + + + + diff --git a/structjwt_1_1default__clock.html b/structjwt_1_1default__clock.html new file mode 100644 index 000000000..6ec6e3bf3 --- /dev/null +++ b/structjwt_1_1default__clock.html @@ -0,0 +1,126 @@ + + + + + + + +JWT-CPP: jwt::default_clock Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::default_clock Struct Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + +

    +Public Member Functions

    +date now () const
     
    +

    Detailed Description

    +

    Default clock class using std::chrono::system_clock as a backend.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1claim__not__present__exception-members.html b/structjwt_1_1error_1_1claim__not__present__exception-members.html new file mode 100644 index 000000000..be4d2ade9 --- /dev/null +++ b/structjwt_1_1error_1_1claim__not__present__exception-members.html @@ -0,0 +1,112 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::claim_not_present_exception Member List
    +
    +
    + +

    This is the complete list of members for jwt::error::claim_not_present_exception, including all inherited members.

    + + +
    claim_not_present_exception() (defined in jwt::error::claim_not_present_exception)jwt::error::claim_not_present_exceptioninline
    +
    + + + + diff --git a/structjwt_1_1error_1_1claim__not__present__exception.html b/structjwt_1_1error_1_1claim__not__present__exception.html new file mode 100644 index 000000000..776abc0ec --- /dev/null +++ b/structjwt_1_1error_1_1claim__not__present__exception.html @@ -0,0 +1,123 @@ + + + + + + + +JWT-CPP: jwt::error::claim_not_present_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::error::claim_not_present_exception Struct Reference
    +
    +
    + +

    #include <jwt.h>

    +
    +Inheritance diagram for jwt::error::claim_not_present_exception:
    +
    +
    +
    [legend]
    +

    Detailed Description

    +

    Attempt to access claim was unsuccessful.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.map b/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.map new file mode 100644 index 000000000..ea7ef97c8 --- /dev/null +++ b/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.md5 b/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.md5 new file mode 100644 index 000000000..7120e00d2 --- /dev/null +++ b/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.md5 @@ -0,0 +1 @@ +6a71b8a8641d5739b76dcd1c01545d18 \ No newline at end of file diff --git a/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.svg b/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.svg new file mode 100644 index 000000000..9e6163e35 --- /dev/null +++ b/structjwt_1_1error_1_1claim__not__present__exception__inherit__graph.svg @@ -0,0 +1,76 @@ + + + + + + +jwt::error::claim_not_present_exception + + +Node1 + + +jwt::error::claim_not +_present_exception + + + + + +Node2 + + +std::out_of_range + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +std::logic_error + + + + + +Node3->Node2 + + + + + + + + +Node4 + + +std::exception + + + + + +Node4->Node3 + + + + + + + + diff --git a/structjwt_1_1error_1_1ecdsa__exception.html b/structjwt_1_1error_1_1ecdsa__exception.html new file mode 100644 index 000000000..c92518269 --- /dev/null +++ b/structjwt_1_1error_1_1ecdsa__exception.html @@ -0,0 +1,117 @@ + + + + + + + +JWT-CPP: jwt::error::ecdsa_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::ecdsa_exception Struct Reference
    +
    +
    +
    +Inheritance diagram for jwt::error::ecdsa_exception:
    +
    +
    +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.map b/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.map new file mode 100644 index 000000000..e2843bc30 --- /dev/null +++ b/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.md5 b/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.md5 new file mode 100644 index 000000000..5d827f34b --- /dev/null +++ b/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.md5 @@ -0,0 +1 @@ +dee3d841b698f216b178da61597b0d78 \ No newline at end of file diff --git a/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.svg b/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.svg new file mode 100644 index 000000000..923e4b77d --- /dev/null +++ b/structjwt_1_1error_1_1ecdsa__exception__inherit__graph.svg @@ -0,0 +1,39 @@ + + + + + + +jwt::error::ecdsa_exception + + +Node1 + + +jwt::error::ecdsa_exception + + + + + +Node2 + + +std::system_error + + + + + +Node2->Node1 + + + + + + + + diff --git a/structjwt_1_1error_1_1invalid__json__exception-members.html b/structjwt_1_1error_1_1invalid__json__exception-members.html new file mode 100644 index 000000000..a390f7ec3 --- /dev/null +++ b/structjwt_1_1error_1_1invalid__json__exception-members.html @@ -0,0 +1,112 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::invalid_json_exception Member List
    +
    +
    + +

    This is the complete list of members for jwt::error::invalid_json_exception, including all inherited members.

    + + +
    invalid_json_exception() (defined in jwt::error::invalid_json_exception)jwt::error::invalid_json_exceptioninline
    +
    + + + + diff --git a/structjwt_1_1error_1_1invalid__json__exception.html b/structjwt_1_1error_1_1invalid__json__exception.html new file mode 100644 index 000000000..7f20d3f04 --- /dev/null +++ b/structjwt_1_1error_1_1invalid__json__exception.html @@ -0,0 +1,123 @@ + + + + + + + +JWT-CPP: jwt::error::invalid_json_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::error::invalid_json_exception Struct Reference
    +
    +
    + +

    #include <jwt.h>

    +
    +Inheritance diagram for jwt::error::invalid_json_exception:
    +
    +
    +
    [legend]
    +

    Detailed Description

    +

    Attempt to parse JSON was unsuccessful.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.map b/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.map new file mode 100644 index 000000000..3689f738e --- /dev/null +++ b/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.md5 b/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.md5 new file mode 100644 index 000000000..adc33aa2b --- /dev/null +++ b/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.md5 @@ -0,0 +1 @@ +b4cbe67cbc99339bd75185a83cf70b7b \ No newline at end of file diff --git a/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.svg b/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.svg new file mode 100644 index 000000000..f0f0c56b7 --- /dev/null +++ b/structjwt_1_1error_1_1invalid__json__exception__inherit__graph.svg @@ -0,0 +1,58 @@ + + + + + + +jwt::error::invalid_json_exception + + +Node1 + + +jwt::error::invalid +_json_exception + + + + + +Node2 + + +std::runtime_error + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +std::exception + + + + + +Node3->Node2 + + + + + + + + diff --git a/structjwt_1_1error_1_1rsa__exception.html b/structjwt_1_1error_1_1rsa__exception.html new file mode 100644 index 000000000..7556efdaf --- /dev/null +++ b/structjwt_1_1error_1_1rsa__exception.html @@ -0,0 +1,117 @@ + + + + + + + +JWT-CPP: jwt::error::rsa_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::rsa_exception Struct Reference
    +
    +
    +
    +Inheritance diagram for jwt::error::rsa_exception:
    +
    +
    +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1rsa__exception__inherit__graph.map b/structjwt_1_1error_1_1rsa__exception__inherit__graph.map new file mode 100644 index 000000000..d67a95b56 --- /dev/null +++ b/structjwt_1_1error_1_1rsa__exception__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structjwt_1_1error_1_1rsa__exception__inherit__graph.md5 b/structjwt_1_1error_1_1rsa__exception__inherit__graph.md5 new file mode 100644 index 000000000..cb1aa2052 --- /dev/null +++ b/structjwt_1_1error_1_1rsa__exception__inherit__graph.md5 @@ -0,0 +1 @@ +4eeb7bc7c0621bb1a607010d5b86200b \ No newline at end of file diff --git a/structjwt_1_1error_1_1rsa__exception__inherit__graph.svg b/structjwt_1_1error_1_1rsa__exception__inherit__graph.svg new file mode 100644 index 000000000..3109c00d4 --- /dev/null +++ b/structjwt_1_1error_1_1rsa__exception__inherit__graph.svg @@ -0,0 +1,39 @@ + + + + + + +jwt::error::rsa_exception + + +Node1 + + +jwt::error::rsa_exception + + + + + +Node2 + + +std::system_error + + + + + +Node2->Node1 + + + + + + + + diff --git a/structjwt_1_1error_1_1signature__generation__exception.html b/structjwt_1_1error_1_1signature__generation__exception.html new file mode 100644 index 000000000..ef23fb96a --- /dev/null +++ b/structjwt_1_1error_1_1signature__generation__exception.html @@ -0,0 +1,117 @@ + + + + + + + +JWT-CPP: jwt::error::signature_generation_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::signature_generation_exception Struct Reference
    +
    +
    +
    +Inheritance diagram for jwt::error::signature_generation_exception:
    +
    +
    +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.map b/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.map new file mode 100644 index 000000000..fffb2d1bd --- /dev/null +++ b/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.md5 b/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.md5 new file mode 100644 index 000000000..31312e16b --- /dev/null +++ b/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.md5 @@ -0,0 +1 @@ +62698366a2f643dff378a67f8cf6ddec \ No newline at end of file diff --git a/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.svg b/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.svg new file mode 100644 index 000000000..bd7b440f2 --- /dev/null +++ b/structjwt_1_1error_1_1signature__generation__exception__inherit__graph.svg @@ -0,0 +1,40 @@ + + + + + + +jwt::error::signature_generation_exception + + +Node1 + + +jwt::error::signature +_generation_exception + + + + + +Node2 + + +std::system_error + + + + + +Node2->Node1 + + + + + + + + diff --git a/structjwt_1_1error_1_1signature__verification__exception.html b/structjwt_1_1error_1_1signature__verification__exception.html new file mode 100644 index 000000000..7f28f5c65 --- /dev/null +++ b/structjwt_1_1error_1_1signature__verification__exception.html @@ -0,0 +1,117 @@ + + + + + + + +JWT-CPP: jwt::error::signature_verification_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::signature_verification_exception Struct Reference
    +
    +
    +
    +Inheritance diagram for jwt::error::signature_verification_exception:
    +
    +
    +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.map b/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.map new file mode 100644 index 000000000..30d7c660c --- /dev/null +++ b/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.md5 b/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.md5 new file mode 100644 index 000000000..be14f6777 --- /dev/null +++ b/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.md5 @@ -0,0 +1 @@ +365da1610143c763e82005ebeddebe04 \ No newline at end of file diff --git a/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.svg b/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.svg new file mode 100644 index 000000000..896841c2a --- /dev/null +++ b/structjwt_1_1error_1_1signature__verification__exception__inherit__graph.svg @@ -0,0 +1,40 @@ + + + + + + +jwt::error::signature_verification_exception + + +Node1 + + +jwt::error::signature +_verification_exception + + + + + +Node2 + + +std::system_error + + + + + +Node2->Node1 + + + + + + + + diff --git a/structjwt_1_1error_1_1token__verification__exception.html b/structjwt_1_1error_1_1token__verification__exception.html new file mode 100644 index 000000000..59a6fc645 --- /dev/null +++ b/structjwt_1_1error_1_1token__verification__exception.html @@ -0,0 +1,117 @@ + + + + + + + +JWT-CPP: jwt::error::token_verification_exception Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::error::token_verification_exception Struct Reference
    +
    +
    +
    +Inheritance diagram for jwt::error::token_verification_exception:
    +
    +
    +
    [legend]
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1error_1_1token__verification__exception__inherit__graph.map b/structjwt_1_1error_1_1token__verification__exception__inherit__graph.map new file mode 100644 index 000000000..c484ec40b --- /dev/null +++ b/structjwt_1_1error_1_1token__verification__exception__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structjwt_1_1error_1_1token__verification__exception__inherit__graph.md5 b/structjwt_1_1error_1_1token__verification__exception__inherit__graph.md5 new file mode 100644 index 000000000..aa0d90cec --- /dev/null +++ b/structjwt_1_1error_1_1token__verification__exception__inherit__graph.md5 @@ -0,0 +1 @@ +3c9b06cfd36e6e25beec55f10d9f0d96 \ No newline at end of file diff --git a/structjwt_1_1error_1_1token__verification__exception__inherit__graph.svg b/structjwt_1_1error_1_1token__verification__exception__inherit__graph.svg new file mode 100644 index 000000000..8ce255c85 --- /dev/null +++ b/structjwt_1_1error_1_1token__verification__exception__inherit__graph.svg @@ -0,0 +1,40 @@ + + + + + + +jwt::error::token_verification_exception + + +Node1 + + +jwt::error::token_verification +_exception + + + + + +Node2 + + +std::system_error + + + + + +Node2->Node1 + + + + + + + + diff --git a/structjwt_1_1traits_1_1boost__json-members.html b/structjwt_1_1traits_1_1boost__json-members.html new file mode 100644 index 000000000..016e17b9b --- /dev/null +++ b/structjwt_1_1traits_1_1boost__json-members.html @@ -0,0 +1,127 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::traits::boost_json Member List
    +
    +
    + +

    This is the complete list of members for jwt::traits::boost_json, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    array_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    as_array(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    as_boolean(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    as_integer(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    as_number(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    as_object(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    as_string(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    boolean_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    get_type(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    integer_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    number_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    object_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    parse(value_type &val, string_type str) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    serialize(const value_type &val) (defined in jwt::traits::boost_json)jwt::traits::boost_jsoninlinestatic
    string_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    value_type typedef (defined in jwt::traits::boost_json)jwt::traits::boost_json
    +
    + + + + diff --git a/structjwt_1_1traits_1_1boost__json.html b/structjwt_1_1traits_1_1boost__json.html new file mode 100644 index 000000000..e95168e8d --- /dev/null +++ b/structjwt_1_1traits_1_1boost__json.html @@ -0,0 +1,171 @@ + + + + + + + +JWT-CPP: jwt::traits::boost_json Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::traits::boost_json Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = json::value
     
    +using object_type = json::object
     
    +using array_type = json::array
     
    +using string_type = std::string
     
    +using number_type = double
     
    +using integer_type = std::int64_t
     
    +using boolean_type = bool
     
    + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    +static jwt::json::type get_type (const value_type &val)
     
    +static object_type as_object (const value_type &val)
     
    +static array_type as_array (const value_type &val)
     
    +static string_type as_string (const value_type &val)
     
    +static integer_type as_integer (const value_type &val)
     
    +static boolean_type as_boolean (const value_type &val)
     
    +static number_type as_number (const value_type &val)
     
    +static bool parse (value_type &val, string_type str)
     
    +static std::string serialize (const value_type &val)
     
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/traits/boost-json/traits.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons-members.html b/structjwt_1_1traits_1_1danielaparker__jsoncons-members.html new file mode 100644 index 000000000..990cc4d4d --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons-members.html @@ -0,0 +1,127 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::traits::danielaparker_jsoncons Member List
    +
    +
    + +

    This is the complete list of members for jwt::traits::danielaparker_jsoncons, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    array_type typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    as_array(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    as_boolean(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    as_integer(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    as_number(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    as_object(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    as_string(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    boolean_type typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    get_type(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    integer_type typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    json typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    number_type typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    parse(json &val, const std::string &str) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    serialize(const json &val) (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsonconsinlinestatic
    string_type typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    value_type typedef (defined in jwt::traits::danielaparker_jsoncons)jwt::traits::danielaparker_jsoncons
    +
    + + + + diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons.html b/structjwt_1_1traits_1_1danielaparker__jsoncons.html new file mode 100644 index 000000000..f7b05991e --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons.html @@ -0,0 +1,177 @@ + + + + + + + +JWT-CPP: jwt::traits::danielaparker_jsoncons Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::traits::danielaparker_jsoncons Struct Reference
    +
    +
    + + + + +

    +Classes

    struct  object_type
     
    + + + + + + + + + + + + + + + +

    +Public Types

    +using json = jsoncons::json
     
    +using value_type = json
     
    +using array_type = json::array
     
    +using string_type = std::string
     
    +using number_type = double
     
    +using integer_type = int64_t
     
    +using boolean_type = bool
     
    + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    +static jwt::json::type get_type (const json &val)
     
    +static object_type as_object (const json &val)
     
    +static array_type as_array (const json &val)
     
    +static string_type as_string (const json &val)
     
    +static number_type as_number (const json &val)
     
    +static integer_type as_integer (const json &val)
     
    +static boolean_type as_boolean (const json &val)
     
    +static bool parse (json &val, const std::string &str)
     
    +static std::string serialize (const json &val)
     
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/traits/danielaparker-jsoncons/traits.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons.js b/structjwt_1_1traits_1_1danielaparker__jsoncons.js new file mode 100644 index 000000000..c6e1c03ae --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons.js @@ -0,0 +1,4 @@ +var structjwt_1_1traits_1_1danielaparker__jsoncons = +[ + [ "object_type", "structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html", null ] +]; \ No newline at end of file diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type-members.html b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type-members.html new file mode 100644 index 000000000..b5904b2dc --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type-members.html @@ -0,0 +1,125 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::traits::danielaparker_jsoncons::object_type Member List
    +
    +
    + +

    This is the complete list of members for jwt::traits::danielaparker_jsoncons::object_type, including all inherited members.

    + + + + + + + + + + + + + + + +
    at(const key_type &key) const (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_typeinline
    count(const key_type &key) const (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_typeinline
    mapped_type typedef (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    object_type()=default (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    object_type(const object_type &)=default (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    object_type(const json::object &o) (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_typeinlineexplicit
    object_type(object_type &&)=default (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    object_type(json::object &&o) (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_typeinlineexplicit
    operator=(const object_type &o)=default (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    operator=(object_type &&o) noexcept=default (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    operator[](const key_type &key) (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_typeinline
    size_type typedef (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    value_type typedef (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    ~object_type()=default (defined in jwt::traits::danielaparker_jsoncons::object_type)jwt::traits::danielaparker_jsoncons::object_type
    +
    + + + + diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html new file mode 100644 index 000000000..93c7dd56c --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type.html @@ -0,0 +1,164 @@ + + + + + + + +JWT-CPP: jwt::traits::danielaparker_jsoncons::object_type Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::traits::danielaparker_jsoncons::object_type Struct Reference
    +
    +
    +
    +Inheritance diagram for jwt::traits::danielaparker_jsoncons::object_type:
    +
    +
    +
    [legend]
    + + + + + + + + +

    +Public Types

    +using value_type = key_value_type
     
    +using mapped_type = key_value_type::value_type
     
    +using size_type = size_t
     
    + + + + + + + + + + + + + + + + + + + +

    +Public Member Functions

    object_type (const object_type &)=default
     
    object_type (const json::object &o)
     
    object_type (object_type &&)=default
     
    object_type (json::object &&o)
     
    +object_typeoperator= (const object_type &o)=default
     
    +object_typeoperator= (object_type &&o) noexcept=default
     
    +mapped_type & operator[] (const key_type &key)
     
    +const mapped_type & at (const key_type &key) const
     
    +size_type count (const key_type &key) const
     
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/traits/danielaparker-jsoncons/traits.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.map b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.map new file mode 100644 index 000000000..c2c0fc21d --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.md5 b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.md5 new file mode 100644 index 000000000..4db174cf9 --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.md5 @@ -0,0 +1 @@ +9521ea75ba125144a1a4bb166a967420 \ No newline at end of file diff --git a/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.svg b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.svg new file mode 100644 index 000000000..fc8f8cec9 --- /dev/null +++ b/structjwt_1_1traits_1_1danielaparker__jsoncons_1_1object__type__inherit__graph.svg @@ -0,0 +1,40 @@ + + + + + + +jwt::traits::danielaparker_jsoncons::object_type + + +Node1 + + +jwt::traits::danielaparker +_jsoncons::object_type + + + + + +Node2 + + +json::object + + + + + +Node2->Node1 + + + + + + + + diff --git a/structjwt_1_1traits_1_1kazuho__picojson-members.html b/structjwt_1_1traits_1_1kazuho__picojson-members.html new file mode 100644 index 000000000..3f3bd233e --- /dev/null +++ b/structjwt_1_1traits_1_1kazuho__picojson-members.html @@ -0,0 +1,127 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::traits::kazuho_picojson Member List
    +
    +
    + +

    This is the complete list of members for jwt::traits::kazuho_picojson, including all inherited members.

    + + + + + + + + + + + + + + + + + +
    array_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    as_array(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    as_boolean(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    as_integer(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    as_number(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    as_object(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    as_string(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    boolean_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    get_type(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    integer_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    number_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    object_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    parse(picojson::value &val, const std::string &str) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    serialize(const picojson::value &val) (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojsoninlinestatic
    string_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    value_type typedef (defined in jwt::traits::kazuho_picojson)jwt::traits::kazuho_picojson
    +
    + + + + diff --git a/structjwt_1_1traits_1_1kazuho__picojson.html b/structjwt_1_1traits_1_1kazuho__picojson.html new file mode 100644 index 000000000..f82fe236f --- /dev/null +++ b/structjwt_1_1traits_1_1kazuho__picojson.html @@ -0,0 +1,171 @@ + + + + + + + +JWT-CPP: jwt::traits::kazuho_picojson Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::traits::kazuho_picojson Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Types

    +using value_type = picojson::value
     
    +using object_type = picojson::object
     
    +using array_type = picojson::array
     
    +using string_type = std::string
     
    +using number_type = double
     
    +using integer_type = int64_t
     
    +using boolean_type = bool
     
    + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    +static json::type get_type (const picojson::value &val)
     
    +static picojson::object as_object (const picojson::value &val)
     
    +static std::string as_string (const picojson::value &val)
     
    +static picojson::array as_array (const picojson::value &val)
     
    +static int64_t as_integer (const picojson::value &val)
     
    +static bool as_boolean (const picojson::value &val)
     
    +static double as_number (const picojson::value &val)
     
    +static bool parse (picojson::value &val, const std::string &str)
     
    +static std::string serialize (const picojson::value &val)
     
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/traits/kazuho-picojson/traits.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1traits_1_1nlohmann__json-members.html b/structjwt_1_1traits_1_1nlohmann__json-members.html new file mode 100644 index 000000000..6f2652614 --- /dev/null +++ b/structjwt_1_1traits_1_1nlohmann__json-members.html @@ -0,0 +1,128 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::traits::nlohmann_json Member List
    +
    +
    + +

    This is the complete list of members for jwt::traits::nlohmann_json, including all inherited members.

    + + + + + + + + + + + + + + + + + + +
    array_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    as_array(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    as_boolean(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    as_integer(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    as_number(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    as_object(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    as_string(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    boolean_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    get_type(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    integer_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    json typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    number_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    object_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    parse(json &val, std::string str) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    serialize(const json &val) (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_jsoninlinestatic
    string_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    value_type typedef (defined in jwt::traits::nlohmann_json)jwt::traits::nlohmann_json
    +
    + + + + diff --git a/structjwt_1_1traits_1_1nlohmann__json.html b/structjwt_1_1traits_1_1nlohmann__json.html new file mode 100644 index 000000000..ca6b66fe7 --- /dev/null +++ b/structjwt_1_1traits_1_1nlohmann__json.html @@ -0,0 +1,174 @@ + + + + + + + +JWT-CPP: jwt::traits::nlohmann_json Struct Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::traits::nlohmann_json Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + + + +

    +Public Types

    +using json = nlohmann::json
     
    +using value_type = json
     
    +using object_type = json::object_t
     
    +using array_type = json::array_t
     
    +using string_type = std::string
     
    +using number_type = json::number_float_t
     
    +using integer_type = json::number_integer_t
     
    +using boolean_type = json::boolean_t
     
    + + + + + + + + + + + + + + + + + + + +

    +Static Public Member Functions

    +static jwt::json::type get_type (const json &val)
     
    +static json::object_t as_object (const json &val)
     
    +static std::string as_string (const json &val)
     
    +static json::array_t as_array (const json &val)
     
    +static int64_t as_integer (const json &val)
     
    +static bool as_boolean (const json &val)
     
    +static double as_number (const json &val)
     
    +static bool parse (json &val, std::string str)
     
    +static std::string serialize (const json &val)
     
    +
    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/traits/nlohmann-json/traits.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1date__after__claim-members.html b/structjwt_1_1verify__ops_1_1date__after__claim-members.html new file mode 100644 index 000000000..a812b0542 --- /dev/null +++ b/structjwt_1_1verify__ops_1_1date__after__claim-members.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::verify_ops::date_after_claim< json_traits, in_header > Member List
    +
    +
    + +

    This is the complete list of members for jwt::verify_ops::date_after_claim< json_traits, in_header >, including all inherited members.

    + + + +
    leeway (defined in jwt::verify_ops::date_after_claim< json_traits, in_header >)jwt::verify_ops::date_after_claim< json_traits, in_header >
    operator()(const verify_context< json_traits > &ctx, std::error_code &ec) const (defined in jwt::verify_ops::date_after_claim< json_traits, in_header >)jwt::verify_ops::date_after_claim< json_traits, in_header >inline
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1date__after__claim.html b/structjwt_1_1verify__ops_1_1date__after__claim.html new file mode 100644 index 000000000..068b0efbc --- /dev/null +++ b/structjwt_1_1verify__ops_1_1date__after__claim.html @@ -0,0 +1,135 @@ + + + + + + + +JWT-CPP: jwt::verify_ops::date_after_claim< json_traits, in_header > Struct Template Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::verify_ops::date_after_claim< json_traits, in_header > Struct Template Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + +

    +Public Member Functions

    +void operator() (const verify_context< json_traits > &ctx, std::error_code &ec) const
     
    + + + +

    +Public Attributes

    +const size_t leeway
     
    +

    Detailed Description

    +
    template<typename json_traits, bool in_header = false>
    +struct jwt::verify_ops::date_after_claim< json_traits, in_header >

    Checks that the current time is after the time specified in the given claim.

    +

    This is identical to how the "nbf" and "iat" check works.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1date__before__claim-members.html b/structjwt_1_1verify__ops_1_1date__before__claim-members.html new file mode 100644 index 000000000..aaa0042a6 --- /dev/null +++ b/structjwt_1_1verify__ops_1_1date__before__claim-members.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::verify_ops::date_before_claim< json_traits, in_header > Member List
    +
    +
    + +

    This is the complete list of members for jwt::verify_ops::date_before_claim< json_traits, in_header >, including all inherited members.

    + + + +
    leeway (defined in jwt::verify_ops::date_before_claim< json_traits, in_header >)jwt::verify_ops::date_before_claim< json_traits, in_header >
    operator()(const verify_context< json_traits > &ctx, std::error_code &ec) const (defined in jwt::verify_ops::date_before_claim< json_traits, in_header >)jwt::verify_ops::date_before_claim< json_traits, in_header >inline
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1date__before__claim.html b/structjwt_1_1verify__ops_1_1date__before__claim.html new file mode 100644 index 000000000..bb16d03e2 --- /dev/null +++ b/structjwt_1_1verify__ops_1_1date__before__claim.html @@ -0,0 +1,135 @@ + + + + + + + +JWT-CPP: jwt::verify_ops::date_before_claim< json_traits, in_header > Struct Template Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::verify_ops::date_before_claim< json_traits, in_header > Struct Template Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + +

    +Public Member Functions

    +void operator() (const verify_context< json_traits > &ctx, std::error_code &ec) const
     
    + + + +

    +Public Attributes

    +const size_t leeway
     
    +

    Detailed Description

    +
    template<typename json_traits, bool in_header = false>
    +struct jwt::verify_ops::date_before_claim< json_traits, in_header >

    Checks that the current time is before the time specified in the given claim.

    +

    This is identical to how the "exp" check works.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1equals__claim-members.html b/structjwt_1_1verify__ops_1_1equals__claim-members.html new file mode 100644 index 000000000..057ab2c11 --- /dev/null +++ b/structjwt_1_1verify__ops_1_1equals__claim-members.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::verify_ops::equals_claim< json_traits, in_header > Member List
    +
    +
    + +

    This is the complete list of members for jwt::verify_ops::equals_claim< json_traits, in_header >, including all inherited members.

    + + + +
    expected (defined in jwt::verify_ops::equals_claim< json_traits, in_header >)jwt::verify_ops::equals_claim< json_traits, in_header >
    operator()(const verify_context< json_traits > &ctx, std::error_code &ec) const (defined in jwt::verify_ops::equals_claim< json_traits, in_header >)jwt::verify_ops::equals_claim< json_traits, in_header >inline
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1equals__claim.html b/structjwt_1_1verify__ops_1_1equals__claim.html new file mode 100644 index 000000000..95fd7d02f --- /dev/null +++ b/structjwt_1_1verify__ops_1_1equals__claim.html @@ -0,0 +1,134 @@ + + + + + + + +JWT-CPP: jwt::verify_ops::equals_claim< json_traits, in_header > Struct Template Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::verify_ops::equals_claim< json_traits, in_header > Struct Template Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + +

    +Public Member Functions

    +void operator() (const verify_context< json_traits > &ctx, std::error_code &ec) const
     
    + + + +

    +Public Attributes

    +const basic_claim< json_traits > expected
     
    +

    Detailed Description

    +
    template<typename json_traits, bool in_header = false>
    +struct jwt::verify_ops::equals_claim< json_traits, in_header >

    This is the default operation and does case sensitive matching.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1insensitive__string__claim-members.html b/structjwt_1_1verify__ops_1_1insensitive__string__claim-members.html new file mode 100644 index 000000000..67518a00d --- /dev/null +++ b/structjwt_1_1verify__ops_1_1insensitive__string__claim-members.html @@ -0,0 +1,116 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::verify_ops::insensitive_string_claim< json_traits, in_header > Member List
    +
    + +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1insensitive__string__claim.html b/structjwt_1_1verify__ops_1_1insensitive__string__claim.html new file mode 100644 index 000000000..04d67e6f2 --- /dev/null +++ b/structjwt_1_1verify__ops_1_1insensitive__string__claim.html @@ -0,0 +1,147 @@ + + + + + + + +JWT-CPP: jwt::verify_ops::insensitive_string_claim< json_traits, in_header > Struct Template Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::verify_ops::insensitive_string_claim< json_traits, in_header > Struct Template Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + + + +

    +Public Member Functions

    insensitive_string_claim (const typename json_traits::string_type &e, std::locale loc)
     
    +void operator() (const verify_context< json_traits > &ctx, std::error_code &ec) const
     
    + + + +

    +Static Public Member Functions

    +static std::string to_lower_unicode (const std::string &str, const std::locale &loc)
     
    + + + + + +

    +Public Attributes

    +const json_traits::string_type expected
     
    +std::locale locale
     
    +

    Detailed Description

    +
    template<typename json_traits, bool in_header = false>
    +struct jwt::verify_ops::insensitive_string_claim< json_traits, in_header >

    Checks if the claim is a string and does an case insensitive comparison.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1is__subset__claim-members.html b/structjwt_1_1verify__ops_1_1is__subset__claim-members.html new file mode 100644 index 000000000..491076986 --- /dev/null +++ b/structjwt_1_1verify__ops_1_1is__subset__claim-members.html @@ -0,0 +1,113 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::verify_ops::is_subset_claim< json_traits, in_header > Member List
    +
    +
    + +

    This is the complete list of members for jwt::verify_ops::is_subset_claim< json_traits, in_header >, including all inherited members.

    + + + +
    expected (defined in jwt::verify_ops::is_subset_claim< json_traits, in_header >)jwt::verify_ops::is_subset_claim< json_traits, in_header >
    operator()(const verify_context< json_traits > &ctx, std::error_code &ec) const (defined in jwt::verify_ops::is_subset_claim< json_traits, in_header >)jwt::verify_ops::is_subset_claim< json_traits, in_header >inline
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1is__subset__claim.html b/structjwt_1_1verify__ops_1_1is__subset__claim.html new file mode 100644 index 000000000..f9275501f --- /dev/null +++ b/structjwt_1_1verify__ops_1_1is__subset__claim.html @@ -0,0 +1,135 @@ + + + + + + + +JWT-CPP: jwt::verify_ops::is_subset_claim< json_traits, in_header > Struct Template Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::verify_ops::is_subset_claim< json_traits, in_header > Struct Template Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + +

    +Public Member Functions

    +void operator() (const verify_context< json_traits > &ctx, std::error_code &ec) const
     
    + + + +

    +Public Attributes

    +const basic_claim< json_traits >::set_t expected
     
    +

    Detailed Description

    +
    template<typename json_traits, bool in_header = false>
    +struct jwt::verify_ops::is_subset_claim< json_traits, in_header >

    Checks if the given set is a subset of the set inside the token.

    +

    If the token value is a string it is traited as a set of a single element. The comparison is case sensitive.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1verify__context-members.html b/structjwt_1_1verify__ops_1_1verify__context-members.html new file mode 100644 index 000000000..3476cc43e --- /dev/null +++ b/structjwt_1_1verify__ops_1_1verify__context-members.html @@ -0,0 +1,120 @@ + + + + + + + +JWT-CPP: Member List + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    jwt::verify_ops::verify_context< json_traits > Member List
    +
    + +
    + + + + diff --git a/structjwt_1_1verify__ops_1_1verify__context.html b/structjwt_1_1verify__ops_1_1verify__context.html new file mode 100644 index 000000000..7ade985ad --- /dev/null +++ b/structjwt_1_1verify__ops_1_1verify__context.html @@ -0,0 +1,155 @@ + + + + + + + +JWT-CPP: jwt::verify_ops::verify_context< json_traits > Struct Template Reference + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    JWT-CPP v0.6.0 +
    +
    A header only library for creating and validating JSON Web Tokens (JWT) in C++
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    jwt::verify_ops::verify_context< json_traits > Struct Template Reference
    +
    +
    + +

    #include <jwt.h>

    + + + + + + + + + + + + +

    +Public Member Functions

    verify_context (date ctime, const decoded_jwt< json_traits > &j, size_t l)
     
    +basic_claim< json_traits > get_claim (bool in_header, std::error_code &ec) const
     
    +basic_claim< json_traits > get_claim (bool in_header, json::type t, std::error_code &ec) const
     
    +basic_claim< json_traits > get_claim (std::error_code &ec) const
     
    +basic_claim< json_traits > get_claim (json::type t, std::error_code &ec) const
     
    + + + + + + + + + +

    +Public Attributes

    +date current_time
     
    +const decoded_jwt< json_traits > & jwt
     
    +size_t default_leeway {0}
     
    +json_traits::string_type claim_key {}
     
    +

    Detailed Description

    +
    template<typename json_traits>
    +struct jwt::verify_ops::verify_context< json_traits >

    This is the base container which holds the token that need to be verified.

    +

    The documentation for this struct was generated from the following file:
      +
    • include/jwt-cpp/jwt.h
    • +
    +
    +
    + + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 000000000..3b443fc62 Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 000000000..e08320fb6 Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 000000000..3b725c41c Binary files /dev/null and b/tab_a.png differ diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 000000000..e34850acf Binary files /dev/null and b/tab_ad.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 000000000..e2b4a8638 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_bd.png b/tab_bd.png new file mode 100644 index 000000000..91c252498 Binary files /dev/null and b/tab_bd.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 000000000..fd5cb7054 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_hd.png b/tab_hd.png new file mode 100644 index 000000000..2489273d4 Binary files /dev/null and b/tab_hd.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 000000000..ab478c95b Binary files /dev/null and b/tab_s.png differ diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 000000000..757a565ce Binary files /dev/null and b/tab_sd.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 000000000..89201170c --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important;color:#555555;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} \ No newline at end of file