cwist
Modern C web framework with libttak runtime
Loading...
Searching...
No Matches
jwt.h
Go to the documentation of this file.
1
10#ifndef __CWIST_SECURITY_JWT_H__
11#define __CWIST_SECURITY_JWT_H__
12
13#include <stdbool.h>
14#include <stddef.h>
15#include <stdint.h>
16#include <time.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
26
40char *cwist_jwt_sign(const char *payload_json, const char *secret, long exp_seconds);
41
55cwist_jwt_claims *cwist_jwt_verify(const char *token, const char *secret);
56
65const char *cwist_jwt_claims_get(const cwist_jwt_claims *claims, const char *key);
66
73
80typedef struct cwist_jwt_chunk {
81 uint8_t *data;
82 size_t len;
84
98cwist_jwt_chunk_t *cwist_jwt_split_chunks(const char *token, uint16_t chunk_payload_size,
99 size_t *out_count);
100
104void cwist_jwt_chunks_free(cwist_jwt_chunk_t *chunks, size_t count);
105
117char *cwist_jwt_join_chunks(const cwist_jwt_chunk_t *chunks, size_t count);
118
134cwist_jwt_chunk_t *cwist_jwt_sign_chunks(const char *payload_json, const char *secret,
135 long exp_seconds, uint16_t chunk_payload_size,
136 size_t *out_count);
137
151 const char *secret);
152
168char *cwist_jwt_sign_es256(const char *payload_json, const char *pem_private_key,
169 const char *kid, long exp_seconds);
170
186cwist_jwt_claims *cwist_jwt_verify_es256(const char *token, const char *pem_key);
187
201char *cwist_jwt_sign_ed25519(const char *payload_json, const char *pem_private_key,
202 const char *kid, long exp_seconds);
203
216cwist_jwt_claims *cwist_jwt_verify_ed25519(const char *token, const char *pem_key);
217
218#ifdef __cplusplus
219}
220#endif
221
222#endif /* __CWIST_SECURITY_JWT_H__ */
const char * cwist_jwt_claims_get(const cwist_jwt_claims *claims, const char *key)
Retrieve a claim value by key from decoded claims.
Definition jwt.c:766
void cwist_jwt_claims_destroy(cwist_jwt_claims *claims)
Free a claims object.
Definition jwt.c:779
cwist_jwt_chunk_t * cwist_jwt_split_chunks(const char *token, uint16_t chunk_payload_size, size_t *out_count)
Split a JWT token into sequenced chunks.
Definition jwt.c:800
struct cwist_jwt_claims cwist_jwt_claims
Opaque JWT claims object returned after successful verification.
Definition jwt.h:25
char * cwist_jwt_join_chunks(const cwist_jwt_chunk_t *chunks, size_t count)
Reassemble a JWT token from sequenced chunks.
Definition jwt.c:852
cwist_jwt_claims * cwist_jwt_verify_es256(const char *token, const char *pem_key)
Verify an ES256-signed JWT token and return the decoded claims.
Definition jwt.c:752
char * cwist_jwt_sign(const char *payload_json, const char *secret, long exp_seconds)
Sign a JWT token with HMAC-SHA256.
Definition jwt.c:620
cwist_jwt_claims * cwist_jwt_verify(const char *token, const char *secret)
Verify a JWT token and return the decoded claims.
Definition jwt.c:748
cwist_jwt_chunk_t * cwist_jwt_sign_chunks(const char *payload_json, const char *secret, long exp_seconds, uint16_t chunk_payload_size, size_t *out_count)
Sign a JWT and immediately split it into sequenced chunks.
Definition jwt.c:897
char * cwist_jwt_sign_es256(const char *payload_json, const char *pem_private_key, const char *kid, long exp_seconds)
Sign a JWT token with ES256 (ECDSA over P-256 with SHA-256).
Definition jwt.c:624
struct cwist_jwt_chunk cwist_jwt_chunk_t
One sequenced JWT chunk produced by cwist_jwt_split_chunks().
cwist_jwt_claims * cwist_jwt_verify_chunks(const cwist_jwt_chunk_t *chunks, size_t count, const char *secret)
Reassemble sequenced JWT chunks and verify the resulting token.
Definition jwt.c:921
void cwist_jwt_chunks_free(cwist_jwt_chunk_t *chunks, size_t count)
Free chunk objects returned by cwist_jwt_split_chunks().
Definition jwt.c:837
cwist_jwt_claims * cwist_jwt_verify_ed25519(const char *token, const char *pem_key)
Verify an Ed25519-signed JWT token and return the decoded claims.
Definition jwt.c:756
char * cwist_jwt_sign_ed25519(const char *payload_json, const char *pem_private_key, const char *kid, long exp_seconds)
Sign a JWT token with EdDSA (Ed25519, RFC 8037).
Definition jwt.c:629
size_t count
Definition otel.c:58
One sequenced JWT chunk produced by cwist_jwt_split_chunks().
Definition jwt.h:80
size_t len
Length of data.
Definition jwt.h:82
uint8_t * data
Chunk bytes (header + payload).
Definition jwt.h:81