Apache2
apr_jose.h
Go to the documentation of this file.
1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2  * contributor license agreements. See the NOTICE file distributed with
3  * this work for additional information regarding copyright ownership.
4  * The ASF licenses this file to You under the Apache License, Version 2.0
5  * (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
20 #ifndef APR_JOSE_H
21 #define APR_JOSE_H
22 
51 #include "apr.h"
52 #include "apr_pools.h"
53 #include "apu_errno.h"
54 #include "apr_strings.h"
55 #include "apr_buckets.h"
56 #include "apr_json.h"
57 
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
61 
72 #define APR_JOSE_JWA_HS256 "HS256"
73 
79 #define APR_JOSE_JWA_HS384 "HS384"
80 
86 #define APR_JOSE_JWA_HS512 "HS512"
87 
93 #define APR_JOSE_JWA_RS256 "RS256"
94 
100 #define APR_JOSE_JWA_RS384 "RS384"
101 
107 #define APR_JOSE_JWA_RS512 "RS512"
108 
114 #define APR_JOSE_JWA_ES256 "ES256"
115 
121 #define APR_JOSE_JWA_ES384 "ES384"
122 
128 #define APR_JOSE_JWA_ES512 "ES512"
129 
135 #define APR_JOSE_JWA_PS256 "PS256"
136 
142 #define APR_JOSE_JWA_PS384 "PS384"
143 
149 #define APR_JOSE_JWA_PS512 "PS512"
150 
156 #define APR_JOSE_JWA_NONE "none"
157 
163 #define APR_JOSE_JWK_KEY_TYPE "kty"
164 
170 #define APR_JOSE_JWK_PUBLIC_KEY_USE "use"
171 
177 #define APR_JOSE_JWK_KEY_OPERATIONS "key_ops"
178 
184 #define APR_JOSE_JWK_KEYS "keys"
185 
193 #define APR_JOSE_JWKSE_ALGORITHM "alg"
194 
200 #define APR_JOSE_JWE_ENCRYPTION "enc"
201 
207 #define APR_JOSE_JWE_COMPRESSION "zip"
208 
215 #define APR_JOSE_JWSE_JWK_SET_URL "jku"
216 
223 #define APR_JOSE_JWSE_JWK "jwk"
224 
231 #define APR_JOSE_JWKSE_KEYID "kid"
232 
239 #define APR_JOSE_JWKSE_X509_URL "x5u"
240 
247 #define APR_JOSE_JWKSE_X509_CHAIN "x5c"
248 
255 #define APR_JOSE_JWKSE_X509_SHA1_THUMBPRINT "x5t"
256 
264 #define APR_JOSE_JWKSE_X509_SHA256_THUMBPRINT "x5t#S256"
265 
272 #define APR_JOSE_JWSE_TYPE "typ"
273 
280 #define APR_JOSE_JWSE_CONTENT_TYPE "cty"
281 
288 #define APR_JOSE_JWSE_CRITICAL "crit"
289 
295 #define APR_JOSE_JWS_PAYLOAD "payload"
296 
302 #define APR_JOSE_JWS_SIGNATURES "signatures"
303 
310 #define APR_JOSE_JWSE_PROTECTED "protected"
311 
318 #define APR_JOSE_JWSE_HEADER "header"
319 
325 #define APR_JOSE_JWS_SIGNATURE "signature"
326 
332 #define APR_JOSE_JWE_UNPROTECTED "unprotected"
333 
339 #define APR_JOSE_JWE_CIPHERTEXT "ciphertext"
340 
346 #define APR_JOSE_JWE_RECIPIENTS "recipients"
347 
353 #define APR_JOSE_JWE_EKEY "encrypted_key"
354 
360 #define APR_JOSE_JWE_IV "iv"
361 
367 #define APR_JOSE_JWE_TAG "tag"
368 
374 #define APR_JOSE_JWE_AAD "aad"
375 
381 #define APR_JOSE_JWT_ISSUER "iss"
382 
388 #define APR_JOSE_JWT_SUBJECT "sub"
389 
395 #define APR_JOSE_JWT_AUDIENCE "aud"
396 
402 #define APR_JOSE_JWT_EXPIRATION_TIME "exp"
403 
409 #define APR_JOSE_JWT_NOT_BEFORE "nbf"
410 
416 #define APR_JOSE_JWT_ISSUED_AT "iat"
417 
423 #define APR_JOSE_JWT_ID "jti"
424 
430 #define APR_JOSE_JWSE_TYPE_JWT "JWT"
431 
435 #define APR_JOSE_FLAG_NONE 0
436 
440 #define APR_JOSE_FLAG_DECODE_ALL 1
441 
451 #define APR_JOSE_FLAG_BREAK 2
452 
456 typedef struct apr_jose_t apr_jose_t;
457 
461 typedef enum apr_jose_type_e {
485 
489 typedef struct apr_jose_data_t {
491  const unsigned char *data;
495 
499 typedef struct apr_jose_text_t {
501  const char *text;
505 
509 typedef struct apr_jose_json_t {
513 
517 typedef struct apr_jose_jwk_t {
521 
525 typedef struct apr_jose_jwks_t {
529 
533 typedef struct apr_jose_signature_t {
541  void *ctx;
545 
549 typedef struct apr_jose_jws_t {
557 
561 typedef struct apr_jose_encryption_t {
565  apr_json_value_t *protected;
579 
583 typedef struct apr_jose_recipient_t {
589  void *ctx;
593 
597 typedef struct apr_jose_jwe_t {
607 
611 typedef struct apr_jose_jwt_t {
615 
619 struct apr_jose_t {
623  const char *typ;
625  const char *cty;
631  union {
640  } jose;
641 };
642 
646 typedef struct apr_jose_cb_t {
736  apr_jose_recipient_t *recipient, apr_jose_encryption_t *encryption,
737  void *ctx, apr_pool_t *pool);
833  apr_jose_recipient_t *recipient, apr_jose_encryption_t *encryption,
834  apr_json_value_t *header, apr_jose_text_t *ph64,
835  apr_jose_text_t *aad64, void *ctx, int *dflags, apr_pool_t *pool);
864  apr_jose_signature_t *signature, void *ctx, apr_pool_t *pool);
909  apr_jose_signature_t *signature, void *ctx, int *vflags,
910  apr_pool_t *pool);
912  void *ctx;
914 
922  __attribute__((nonnull(1)));
923 
934  apr_pool_t *pool)
935  __attribute__((nonnull(3)));
936 
948  __attribute__((nonnull(3)));
949 
961  __attribute__((nonnull(3)));
962 
974  apr_jose_signature_t *signature, apr_json_value_t *header,
975  apr_json_value_t *protected, void *ctx, apr_pool_t *pool)
976  __attribute__((nonnull(5)));
977 
988  apr_json_value_t *unprotected, void *ctx, apr_pool_t *pool)
989  __attribute__((nonnull(4)));
990 
1001  apr_json_value_t *unprotected, apr_json_value_t *protected,
1002  apr_pool_t *pool)
1003  __attribute__((nonnull(4)));
1004 
1018  apr_jose_recipient_t *recipient, apr_array_header_t *recipients,
1019  apr_jose_encryption_t *encryption, apr_jose_t *payload,
1020  apr_pool_t *pool)
1021  __attribute__((nonnull(6)));
1022 
1036  apr_jose_recipient_t *recipient,
1037  apr_array_header_t *recipients, apr_jose_encryption_t *encryption,
1038  apr_jose_t *payload, apr_pool_t *pool)
1039  __attribute__((nonnull(6)));
1040 
1053  apr_jose_signature_t *signature, apr_array_header_t *signatures,
1054  apr_jose_t *payload, apr_pool_t *pool)
1055  __attribute__((nonnull(5)));
1056 
1069  apr_jose_signature_t *signature, apr_array_header_t *signatures,
1070  apr_jose_t *payload, apr_pool_t *pool)
1071  __attribute__((nonnull(5)));
1072 
1086  apr_json_value_t *claims, apr_pool_t *pool)
1087  __attribute__((nonnull(3)));
1088 
1101  const unsigned char *in, apr_size_t inlen, apr_pool_t *pool)
1102  __attribute__((nonnull(5)));
1103 
1117  const char *in, apr_size_t inlen, apr_pool_t *pool)
1118  __attribute__((nonnull(5)));
1119 
1132  __attribute__((nonnull(4)));
1133 
1147  apr_brigade_flush flush, void *ctx, apr_jose_t *jose,
1149  __attribute__((nonnull(1, 4, 6)));
1150 
1167  apr_bucket_brigade *brigade, apr_jose_cb_t *cb, int level, int flags,
1168  apr_pool_t *pool)
1169  __attribute__((nonnull(1, 3, 7)));
1170 
1171 
1172 #ifdef __cplusplus
1173 }
1174 #endif
1176 #endif /* APR_JOSE_H */
APR Platform Definitions.
APR-UTIL Buckets/Bucket Brigades.
APR-UTIL JSON Library.
APR memory allocation.
APR Strings library.
APR-Util Error Codes.
apr_status_t(* apr_brigade_flush)(apr_bucket_brigade *bb, void *ctx)
Definition: apr_buckets.h:287
apr_jose_t * apr_jose_jws_make(apr_jose_t *jose, apr_jose_signature_t *signature, apr_array_header_t *signatures, apr_jose_t *payload, apr_pool_t *pool) __attribute__((nonnull(5)))
apr_jose_t * apr_jose_text_make(apr_jose_t *jose, const char *cty, const char *in, apr_size_t inlen, apr_pool_t *pool) __attribute__((nonnull(5)))
struct apr_jose_jwe_t apr_jose_jwe_t
apr_jose_encryption_t * apr_jose_encryption_make(apr_jose_encryption_t *encryption, apr_json_value_t *unprotected, apr_json_value_t *protected, apr_pool_t *pool) __attribute__((nonnull(4)))
apr_status_t apr_jose_encode(apr_bucket_brigade *brigade, apr_brigade_flush flush, void *ctx, apr_jose_t *jose, apr_jose_cb_t *cb, apr_pool_t *pool) __attribute__((nonnull(1
struct apr_jose_jwt_t apr_jose_jwt_t
struct apr_jose_encryption_t apr_jose_encryption_t
apr_jose_t * apr_jose_make(apr_jose_t *jose, apr_jose_type_e type, apr_pool_t *pool) __attribute__((nonnull(3)))
struct apr_jose_cb_t apr_jose_cb_t
apr_jose_t * apr_jose_jwt_make(apr_jose_t *jose, apr_json_value_t *claims, apr_pool_t *pool) __attribute__((nonnull(3)))
struct apr_jose_recipient_t apr_jose_recipient_t
apr_jose_t * apr_jose_jws_json_make(apr_jose_t *jose, apr_jose_signature_t *signature, apr_array_header_t *signatures, apr_jose_t *payload, apr_pool_t *pool) __attribute__((nonnull(5)))
struct apr_jose_text_t apr_jose_text_t
apr_jose_type_e
Definition: apr_jose.h:461
apr_jose_t * apr_jose_jwe_make(apr_jose_t *jose, apr_jose_recipient_t *recipient, apr_array_header_t *recipients, apr_jose_encryption_t *encryption, apr_jose_t *payload, apr_pool_t *pool) __attribute__((nonnull(6)))
struct apr_jose_data_t apr_jose_data_t
struct apr_jose_json_t apr_jose_json_t
apu_err_t * apr_jose_error(apr_jose_t *jose) __attribute__((nonnull(1)))
Get the result of the last operation on the jose. If the result is NULL, the operation was successful...
struct apr_jose_jws_t apr_jose_jws_t
apr_jose_signature_t * apr_jose_signature_make(apr_jose_signature_t *signature, apr_json_value_t *header, apr_json_value_t *protected, void *ctx, apr_pool_t *pool) __attribute__((nonnull(5)))
apr_jose_recipient_t * apr_jose_recipient_make(apr_jose_recipient_t *recipient, apr_json_value_t *unprotected, void *ctx, apr_pool_t *pool) __attribute__((nonnull(4)))
struct apr_jose_signature_t apr_jose_signature_t
apr_jose_t * apr_jose_jwks_make(apr_jose_t *jose, apr_json_value_t *keys, apr_pool_t *pool) __attribute__((nonnull(3)))
apr_jose_t * apr_jose_json_make(apr_jose_t *jose, const char *cty, apr_json_value_t *json, apr_pool_t *pool) __attribute__((nonnull(4)))
apr_status_t apr_status_t apr_jose_decode(apr_jose_t **jose, const char *typ, apr_bucket_brigade *brigade, apr_jose_cb_t *cb, int level, int flags, apr_pool_t *pool) __attribute__((nonnull(1
apr_jose_t * apr_jose_data_make(apr_jose_t *jose, const char *typ, const unsigned char *in, apr_size_t inlen, apr_pool_t *pool) __attribute__((nonnull(5)))
apr_jose_t * apr_jose_jwe_json_make(apr_jose_t *jose, apr_jose_recipient_t *recipient, apr_array_header_t *recipients, apr_jose_encryption_t *encryption, apr_jose_t *payload, apr_pool_t *pool) __attribute__((nonnull(6)))
struct apr_jose_jwks_t apr_jose_jwks_t
apr_jose_t * apr_jose_jwk_make(apr_jose_t *jose, apr_json_value_t *key, apr_pool_t *pool) __attribute__((nonnull(3)))
struct apr_jose_jwk_t apr_jose_jwk_t
@ APR_JOSE_TYPE_JSON
Definition: apr_jose.h:483
@ APR_JOSE_TYPE_JWS_JSON
Definition: apr_jose.h:471
@ APR_JOSE_TYPE_JWKS
Definition: apr_jose.h:467
@ APR_JOSE_TYPE_DATA
Definition: apr_jose.h:479
@ APR_JOSE_TYPE_JWE
Definition: apr_jose.h:473
@ APR_JOSE_TYPE_JWE_JSON
Definition: apr_jose.h:475
@ APR_JOSE_TYPE_JWT
Definition: apr_jose.h:477
@ APR_JOSE_TYPE_TEXT
Definition: apr_jose.h:481
@ APR_JOSE_TYPE_JWK
Definition: apr_jose.h:465
@ APR_JOSE_TYPE_NONE
Definition: apr_jose.h:463
@ APR_JOSE_TYPE_JWS
Definition: apr_jose.h:469
dav_resource int dav_locktoken dav_response int flags
Definition: mod_dav.h:1458
apr_bucket_brigade * bb
Definition: mod_dav.h:555
apr_bucket_brigade request_rec apr_pool_t * pool
Definition: mod_dav.h:557
int apr_status_t
Definition: apr_errno.h:44
#define __attribute__(__x)
Definition: apr.h:63
size_t apr_size_t
Definition: apr.h:394
struct apr_pool_t apr_pool_t
Definition: apr_pools.h:60
#define APR_DECLARE(x)
Definition: macros.h:6
Definition: apr_tables.h:62
Definition: apr_buckets.h:263
Definition: apr_jose.h:646
void * ctx
Definition: apr_jose.h:912
apr_status_t(* encrypt)(apr_bucket_brigade *bb, apr_jose_t *jose, apr_jose_recipient_t *recipient, apr_jose_encryption_t *encryption, void *ctx, apr_pool_t *pool)
Definition: apr_jose.h:735
apr_status_t(* sign)(apr_bucket_brigade *bb, apr_jose_t *jose, apr_jose_signature_t *signature, void *ctx, apr_pool_t *pool)
Definition: apr_jose.h:863
apr_status_t(* verify)(apr_bucket_brigade *bb, apr_jose_t *jose, apr_jose_signature_t *signature, void *ctx, int *vflags, apr_pool_t *pool)
Definition: apr_jose.h:908
apr_status_t(* decrypt)(apr_bucket_brigade *bb, apr_jose_t *jose, apr_jose_recipient_t *recipient, apr_jose_encryption_t *encryption, apr_json_value_t *header, apr_jose_text_t *ph64, apr_jose_text_t *aad64, void *ctx, int *dflags, apr_pool_t *pool)
Definition: apr_jose.h:832
Definition: apr_jose.h:489
const unsigned char * data
Definition: apr_jose.h:491
apr_size_t len
Definition: apr_jose.h:493
Definition: apr_jose.h:561
apr_jose_data_t iv
Definition: apr_jose.h:569
apr_jose_data_t cipher
Definition: apr_jose.h:575
apr_json_value_t * unprotected
Definition: apr_jose.h:563
apr_jose_data_t aad
Definition: apr_jose.h:571
apr_jose_text_t aad64
Definition: apr_jose.h:573
apr_jose_text_t protected64
Definition: apr_jose.h:567
apr_jose_data_t tag
Definition: apr_jose.h:577
Definition: apr_jose.h:509
apr_json_value_t * json
Definition: apr_jose.h:511
Definition: apr_jose.h:597
apr_jose_t * payload
Definition: apr_jose.h:605
apr_jose_encryption_t * encryption
Definition: apr_jose.h:603
apr_jose_recipient_t * recipient
Definition: apr_jose.h:599
apr_array_header_t * recipients
Definition: apr_jose.h:601
Definition: apr_jose.h:517
apr_json_value_t * key
Definition: apr_jose.h:519
Definition: apr_jose.h:525
apr_json_value_t * keys
Definition: apr_jose.h:527
Definition: apr_jose.h:549
apr_array_header_t * signatures
Definition: apr_jose.h:553
apr_jose_t * payload
Definition: apr_jose.h:555
apr_jose_signature_t * signature
Definition: apr_jose.h:551
Definition: apr_jose.h:611
apr_json_value_t * claims
Definition: apr_jose.h:613
Definition: apr_jose.h:583
apr_json_value_t * header
Definition: apr_jose.h:585
apr_jose_data_t ekey
Definition: apr_jose.h:587
apr_status_t status
Definition: apr_jose.h:591
void * ctx
Definition: apr_jose.h:589
Definition: apr_jose.h:533
void * ctx
Definition: apr_jose.h:541
apr_json_value_t * header
Definition: apr_jose.h:535
apr_json_value_t * protected_header
Definition: apr_jose.h:537
apr_status_t status
Definition: apr_jose.h:543
apr_jose_data_t sig
Definition: apr_jose.h:539
Definition: apr_jose.h:619
apr_jose_jwe_t * jwe
Definition: apr_jose.h:635
apr_jose_json_t * json
Definition: apr_jose.h:639
apr_pool_t * pool
Definition: apr_jose.h:621
union apr_jose_t::@16 jose
apr_jose_text_t * text
Definition: apr_jose.h:638
const char * cty
Definition: apr_jose.h:625
const char * typ
Definition: apr_jose.h:623
apr_jose_jws_t * jws
Definition: apr_jose.h:634
apr_jose_jwt_t * jwt
Definition: apr_jose.h:636
apr_jose_data_t * data
Definition: apr_jose.h:637
apr_jose_jwks_t * jwks
Definition: apr_jose.h:633
apr_jose_jwk_t * jwk
Definition: apr_jose.h:632
apr_jose_type_e type
Definition: apr_jose.h:629
apu_err_t result
Definition: apr_jose.h:627
Definition: apr_jose.h:499
const char * text
Definition: apr_jose.h:501
apr_size_t len
Definition: apr_jose.h:503
Definition: apr_json.h:123
Definition: apu_errno.h:169