libjwt-1.12.0
jwt.h
Go to the documentation of this file.
1 /* Copyright (C) 2015-2018 Ben Collins <ben@cyphre.com>
2  This file is part of the JWT C Library
3 
4  This Source Code Form is subject to the terms of the Mozilla Public
5  License, v. 2.0. If a copy of the MPL was not distributed with this
6  file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 
13 #ifndef JWT_H
14 #define JWT_H
15 
16 #include <stdio.h>
17 #include <time.h>
18 
19 #ifdef _MSC_VER
20 
21  #define DEPRECATED(func) __declspec(deprecated) func
22 
23  #define alloca _alloca
24  #define strcasecmp _stricmp
25  #define strdup _strdup
26 
27  #ifdef JWT_DLL_CONFIG
28  #ifdef JWT_BUILD_SHARED_LIBRARY
29  #define JWT_EXPORT __declspec(dllexport)
30  #else
31  #define JWT_EXPORT __declspec(dllimport)
32  #endif
33  #else
34  #define JWT_EXPORT
35  #endif
36 
37 #else
38 
39  #define DEPRECATED(func) func __attribute__ ((deprecated))
40  #define JWT_EXPORT
41 
42 #endif
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
49 typedef struct jwt jwt_t;
50 
52 typedef struct jwt_valid jwt_valid_t;
53 
55 typedef enum jwt_alg {
67 } jwt_alg_t;
68 
69 #define JWT_ALG_INVAL JWT_ALG_TERM
70 
72 #define JWT_VALIDATION_SUCCESS 0x0000
73 #define JWT_VALIDATION_ERROR 0x0001 /* General failures */
74 #define JWT_VALIDATION_ALG_MISMATCH 0x0002
75 #define JWT_VALIDATION_EXPIRED 0x0004
76 #define JWT_VALIDATION_TOO_NEW 0x0008
77 #define JWT_VALIDATION_ISS_MISMATCH 0x0010
78 #define JWT_VALIDATION_SUB_MISMATCH 0x0020
79 #define JWT_VALIDATION_AUD_MISMATCH 0x0040
80 #define JWT_VALIDATION_GRANT_MISSING 0x0080
81 #define JWT_VALIDATION_GRANT_MISMATCH 0x0100
82 
84 typedef void *(*jwt_malloc_t)(size_t);
85 typedef void *(*jwt_realloc_t)(void *, size_t);
86 typedef void (*jwt_free_t)(void *);
87 
114 JWT_EXPORT int jwt_new(jwt_t **jwt);
115 
140 JWT_EXPORT int jwt_decode(jwt_t **jwt, const char *token,
141  const unsigned char *key, int key_len);
142 
152 JWT_EXPORT void jwt_free(jwt_t *jwt);
153 
164 
190 JWT_EXPORT const char *jwt_get_grant(jwt_t *jwt, const char *grant);
191 
208 JWT_EXPORT long jwt_get_grant_int(jwt_t *jwt, const char *grant);
209 
226 JWT_EXPORT int jwt_get_grant_bool(jwt_t *jwt, const char *grant);
227 
241 JWT_EXPORT char *jwt_get_grants_json(jwt_t *jwt, const char *grant);
242 
261 JWT_EXPORT int jwt_add_grant(jwt_t *jwt, const char *grant, const char *val);
262 
280 JWT_EXPORT int jwt_add_grant_int(jwt_t *jwt, const char *grant, long val);
281 
299 JWT_EXPORT int jwt_add_grant_bool(jwt_t *jwt, const char *grant, int val);
300 
313 JWT_EXPORT int jwt_add_grants_json(jwt_t *jwt, const char *json);
314 
327 JWT_EXPORT int jwt_del_grants(jwt_t *jwt, const char *grant);
328 
340 DEPRECATED(JWT_EXPORT int jwt_del_grant(jwt_t *jwt, const char *grant));
341 
367 JWT_EXPORT const char *jwt_get_header(jwt_t *jwt, const char *header);
368 
385 JWT_EXPORT long jwt_get_header_int(jwt_t *jwt, const char *header);
386 
403 JWT_EXPORT int jwt_get_header_bool(jwt_t *jwt, const char *header);
404 
418 JWT_EXPORT char *jwt_get_headers_json(jwt_t *jwt, const char *header);
419 
438 JWT_EXPORT int jwt_add_header(jwt_t *jwt, const char *header, const char *val);
439 
457 JWT_EXPORT int jwt_add_header_int(jwt_t *jwt, const char *header, long val);
458 
476 JWT_EXPORT int jwt_add_header_bool(jwt_t *jwt, const char *header, int val);
477 
490 JWT_EXPORT int jwt_add_headers_json(jwt_t *jwt, const char *json);
491 
504 JWT_EXPORT int jwt_del_headers(jwt_t *jwt, const char *header);
505 
535 JWT_EXPORT int jwt_dump_fp(jwt_t *jwt, FILE *fp, int pretty);
536 
555 JWT_EXPORT char *jwt_dump_str(jwt_t *jwt, int pretty);
556 
568 JWT_EXPORT int jwt_encode_fp(jwt_t *jwt, FILE *fp);
569 
581 JWT_EXPORT char *jwt_encode_str(jwt_t *jwt);
582 
589 JWT_EXPORT void jwt_free_str(char *str);
590 
618 JWT_EXPORT int jwt_set_alg(jwt_t *jwt, jwt_alg_t alg, const unsigned char *key, int len);
619 
629 
639 JWT_EXPORT const char *jwt_alg_str(jwt_alg_t alg);
640 
652 JWT_EXPORT jwt_alg_t jwt_str_alg(const char *alg);
653 
686 JWT_EXPORT int jwt_set_alloc(jwt_malloc_t pmalloc, jwt_realloc_t prealloc, jwt_free_t pfree);
687 
695 JWT_EXPORT void jwt_get_alloc(jwt_malloc_t *pmalloc, jwt_realloc_t *prealloc, jwt_free_t *pfree);
696 
723 JWT_EXPORT unsigned int jwt_validate(jwt_t *jwt, jwt_valid_t *jwt_valid);
724 
737 JWT_EXPORT int jwt_valid_new(jwt_valid_t **jwt_valid, jwt_alg_t alg);
738 
748 JWT_EXPORT void jwt_valid_free(jwt_valid_t *jwt_valid);
749 
760 JWT_EXPORT unsigned int jwt_valid_get_status(jwt_valid_t *jwt_valid);
761 
775 JWT_EXPORT int jwt_valid_add_grant(jwt_valid_t *jwt_valid, const char *grant, const char *val);
776 
793 JWT_EXPORT const char *jwt_valid_get_grant(jwt_valid_t *jwt_valid, const char *grant);
794 
807 JWT_EXPORT int jwt_valid_add_grant_int(jwt_valid_t *jwt_valid, const char *grant, long val);
808 
825 JWT_EXPORT long jwt_valid_get_grant_int(jwt_valid_t *jwt_valid, const char *grant);
826 
844 JWT_EXPORT int jwt_valid_add_grant_bool(jwt_valid_t *jwt_valid, const char *grant, int val);
845 
862 JWT_EXPORT int jwt_valid_get_grant_bool(jwt_valid_t *jwt_valid, const char *grant);
863 
874 JWT_EXPORT int jwt_valid_add_grants_json(jwt_valid_t *jwt_valid, const char *json);
875 
888 JWT_EXPORT char* jwt_valid_get_grants_json(jwt_valid_t *jwt_valid, const char *grant);
889 
902 JWT_EXPORT int jwt_valid_del_grants(jwt_valid_t *jwt, const char *grant);
903 
914 JWT_EXPORT int jwt_valid_set_now(jwt_valid_t *jwt_valid, const time_t now);
915 
929 JWT_EXPORT int jwt_valid_set_headers(jwt_valid_t *jwt_valid, int hdr);
930 
933 #ifdef __cplusplus
934 }
935 #endif
936 
937 #endif /* JWT_H */
char * jwt_get_headers_json(jwt_t *jwt, const char *header)
Return the value of a header as JSON encoded object string.
int jwt_add_grant_int(jwt_t *jwt, const char *grant, long val)
Add a new integer grant to this JWT object.
#define JWT_EXPORT
Definition: jwt.h:40
void jwt_valid_free(jwt_valid_t *jwt_valid)
Free a JWT validation object and any other resources it is using.
jwt_alg_t jwt_str_alg(const char *alg)
Convert alg string to type.
void jwt_free_str(char *str)
Free a string returned from the library.
const char * jwt_get_grant(jwt_t *jwt, const char *grant)
Return the value of a string grant.
void jwt_get_alloc(jwt_malloc_t *pmalloc, jwt_realloc_t *prealloc, jwt_free_t *pfree)
Get functions used for allocating and freeing memory.
void *(* jwt_malloc_t)(size_t)
JWT Memory allocation overrides.
Definition: jwt.h:84
int jwt_valid_add_grants_json(jwt_valid_t *jwt_valid, const char *json)
Add required grants from a JSON encoded object string.
long jwt_get_header_int(jwt_t *jwt, const char *header)
Return the value of an integer header.
int jwt_add_header_bool(jwt_t *jwt, const char *header, int val)
Add a new boolean header to this JWT object.
enum jwt_alg jwt_alg_t
JWT algorithm types.
int jwt_get_header_bool(jwt_t *jwt, const char *header)
Return the value of an boolean header.
int jwt_del_grant(jwt_t *jwt, const char *grant)
int jwt_add_headers_json(jwt_t *jwt, const char *json)
Add headers from a JSON encoded object string.
#define DEPRECATED(func)
Definition: jwt.h:39
int jwt_valid_del_grants(jwt_valid_t *jwt, const char *grant)
Delete a grant from this JWT object.
int jwt_del_grants(jwt_t *jwt, const char *grant)
Delete a grant from this JWT object.
int jwt_valid_set_headers(jwt_valid_t *jwt_valid, int hdr)
Set validation for replicated claims in headers.
void *(* jwt_realloc_t)(void *, size_t)
Definition: jwt.h:85
int jwt_valid_new(jwt_valid_t **jwt_valid, jwt_alg_t alg)
Allocate a new, JWT validation object.
int jwt_encode_fp(jwt_t *jwt, FILE *fp)
Fully encode a JWT object and write it to FILE.
unsigned int jwt_validate(jwt_t *jwt, jwt_valid_t *jwt_valid)
Validate a JWT object with a validation object.
jwt_alg
JWT algorithm types.
Definition: jwt.h:55
int jwt_valid_add_grant_bool(jwt_valid_t *jwt_valid, const char *grant, int val)
Add a new boolean required grant to this JWT validation object.
void(* jwt_free_t)(void *)
Definition: jwt.h:86
const char * jwt_get_header(jwt_t *jwt, const char *header)
Return the value of a string header.
int jwt_add_header_int(jwt_t *jwt, const char *header, long val)
Add a new integer header to this JWT object.
int jwt_valid_add_grant_int(jwt_valid_t *jwt_valid, const char *grant, long val)
Add a new integer grant requirement to this JWT validation object.
char * jwt_encode_str(jwt_t *jwt)
Fully encode a JWT object and return as a string.
int jwt_valid_add_grant(jwt_valid_t *jwt_valid, const char *grant, const char *val)
Add a new string grant requirement to this JWT validation object.
int jwt_add_grant_bool(jwt_t *jwt, const char *grant, int val)
Add a new boolean grant to this JWT object.
int jwt_set_alg(jwt_t *jwt, jwt_alg_t alg, const unsigned char *key, int len)
Set an algorithm from jwt_alg_t for this JWT object.
jwt_alg_t jwt_get_alg(jwt_t *jwt)
Get the jwt_alg_t set for this JWT object.
const char * jwt_alg_str(jwt_alg_t alg)
Convert alg type to it&#39;s string representation.
char * jwt_dump_str(jwt_t *jwt, int pretty)
Return plain text representation as a string.
int jwt_valid_set_now(jwt_valid_t *jwt_valid, const time_t now)
Set the time for which expires and not-before claims should be evaluated.
struct jwt_valid jwt_valid_t
Opaque JWT validation object.
Definition: jwt.h:52
long jwt_get_grant_int(jwt_t *jwt, const char *grant)
Return the value of an integer grant.
int jwt_dump_fp(jwt_t *jwt, FILE *fp, int pretty)
Output plain text representation to a FILE pointer.
int jwt_get_grant_bool(jwt_t *jwt, const char *grant)
Return the value of an boolean grant.
int jwt_set_alloc(jwt_malloc_t pmalloc, jwt_realloc_t prealloc, jwt_free_t pfree)
Set functions to be used for allocating and freeing memory.
int jwt_new(jwt_t **jwt)
Allocate a new, empty, JWT object.
const char * jwt_valid_get_grant(jwt_valid_t *jwt_valid, const char *grant)
Return the value of a string required grant.
jwt_t * jwt_dup(jwt_t *jwt)
Duplicate an existing JWT object.
long jwt_valid_get_grant_int(jwt_valid_t *jwt_valid, const char *grant)
Return the value of an integer required grant.
struct jwt jwt_t
Opaque JWT object.
Definition: jwt.h:49
int jwt_add_grants_json(jwt_t *jwt, const char *json)
Add grants from a JSON encoded object string.
int jwt_valid_get_grant_bool(jwt_valid_t *jwt_valid, const char *grant)
Return the value of an boolean required grant.
char * jwt_valid_get_grants_json(jwt_valid_t *jwt_valid, const char *grant)
Return the value of a grant as JSON encoded object string.
int jwt_add_grant(jwt_t *jwt, const char *grant, const char *val)
Add a new string grant to this JWT object.
int jwt_decode(jwt_t **jwt, const char *token, const unsigned char *key, int key_len)
Verify an existing JWT and allocate a new JWT object from it.
int jwt_add_header(jwt_t *jwt, const char *header, const char *val)
Add a new string header to this JWT object.
void jwt_free(jwt_t *jwt)
Free a JWT object and any other resources it is using.
unsigned int jwt_valid_get_status(jwt_valid_t *jwt_valid)
Return the status string for the validation object.
int jwt_del_headers(jwt_t *jwt, const char *header)
Delete a header from this JWT object.
char * jwt_get_grants_json(jwt_t *jwt, const char *grant)
Return the value of a grant as JSON encoded object string.