Apache2
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 {
543 
547 typedef struct apr_jose_jws_t {
555 
559 typedef struct apr_jose_encryption_t {
563  apr_json_value_t *protected;
577 
581 typedef struct apr_jose_recipient_t {
589 
593 typedef struct apr_jose_jwe_t {
603 
607 typedef struct apr_jose_jwt_t {
611 
615 struct apr_jose_t {
619  const char *typ;
621  const char *cty;
627  union {
636  } jose;
637 };
638 
642 typedef struct apr_jose_cb_t {
732  apr_jose_recipient_t *recipient, apr_jose_encryption_t *encryption,
733  void *ctx, apr_pool_t *pool);
829  apr_jose_recipient_t *recipient, apr_jose_encryption_t *encryption,
830  apr_json_value_t *header, apr_jose_text_t *ph64,
831  apr_jose_text_t *aad64, void *ctx, int *dflags, apr_pool_t *pool);
860  apr_jose_signature_t *signature, void *ctx, apr_pool_t *pool);
905  apr_jose_signature_t *signature, void *ctx, int *vflags,
906  apr_pool_t *pool);
908  void *ctx;
909 } apr_jose_cb_t;
910 
918  __attribute__((nonnull(1)));
919 
930  apr_pool_t *pool)
931  __attribute__((nonnull(3)));
932 
944  __attribute__((nonnull(3)));
945 
957  __attribute__((nonnull(3)));
958 
969  apr_jose_signature_t *signature, apr_json_value_t *header,
970  apr_json_value_t *protected, apr_pool_t *pool)
971  __attribute__((nonnull(4)));
972 
982  apr_json_value_t *unprotected, apr_pool_t *pool)
983  __attribute__((nonnull(3)));
984 
995  apr_json_value_t *unprotected, apr_json_value_t *protected,
996  apr_pool_t *pool)
997  __attribute__((nonnull(4)));
998 
1012  apr_jose_recipient_t *recipient, apr_array_header_t *recipients,
1013  apr_jose_encryption_t *encryption, apr_jose_t *payload,
1014  apr_pool_t *pool)
1015  __attribute__((nonnull(6)));
1016 
1030  apr_jose_recipient_t *recipient,
1031  apr_array_header_t *recipients, apr_jose_encryption_t *encryption,
1032  apr_jose_t *payload, apr_pool_t *pool)
1033  __attribute__((nonnull(6)));
1034 
1047  apr_jose_signature_t *signature, apr_array_header_t *signatures,
1048  apr_jose_t *payload, apr_pool_t *pool)
1049  __attribute__((nonnull(5)));
1050 
1063  apr_jose_signature_t *signature, apr_array_header_t *signatures,
1064  apr_jose_t *payload, apr_pool_t *pool)
1065  __attribute__((nonnull(5)));
1066 
1080  apr_json_value_t *claims, apr_pool_t *pool)
1081  __attribute__((nonnull(3)));
1082 
1094 APR_DECLARE(apr_jose_t *) apr_jose_data_make(apr_jose_t *jose, const char *typ,
1095  const unsigned char *in, apr_size_t inlen, apr_pool_t *pool)
1096  __attribute__((nonnull(5)));
1097 
1110 APR_DECLARE(apr_jose_t *) apr_jose_text_make(apr_jose_t *jose, const char *cty,
1111  const char *in, apr_size_t inlen, apr_pool_t *pool)
1112  __attribute__((nonnull(5)));
1113 
1124 APR_DECLARE(apr_jose_t *) apr_jose_json_make(apr_jose_t *jose, const char *cty,
1126  __attribute__((nonnull(4)));
1127 
1141  apr_brigade_flush flush, void *ctx, apr_jose_t *jose,
1143  __attribute__((nonnull(1, 4, 6)));
1144 
1160 APR_DECLARE(apr_status_t) apr_jose_decode(apr_jose_t **jose, const char *typ,
1161  apr_bucket_brigade *brigade, apr_jose_cb_t *cb, int level, int flags,
1162  apr_pool_t *pool)
1163  __attribute__((nonnull(1, 3, 7)));
1164 
1165 
1166 #ifdef __cplusplus
1167 }
1168 #endif
1169 
1170 #endif /* APR_JOSE_H */
apr_jose_jwe_t * jwe
Definition: apr_jose.h:631
apr_pool_t * pool
Definition: apr_jose.h:617
Definition: apr_jose.h:499
size_t apr_size_t
Definition: apr.h:393
apr_size_t len
Definition: apr_jose.h:493
apr_json_value_t * claims
Definition: apr_jose.h:609
apr_jose_json_t * json
Definition: apr_jose.h:635
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:859
struct apr_jose_jwk_t apr_jose_jwk_t
Definition: apr_tables.h:62
Definition: apr_jose.h:489
struct apr_jose_jwt_t apr_jose_jwt_t
struct apr_jose_json_t apr_jose_json_t
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
Definition: apr_jose.h:469
apr_jose_data_t aad
Definition: apr_jose.h:569
apr_bucket_brigade request_rec apr_pool_t * pool
Definition: mod_dav.h:555
apr_jose_encryption_t * encryption
Definition: apr_jose.h:599
struct apr_jose_data_t apr_jose_data_t
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(* 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:731
Definition: apr_jose.h:547
apr_jose_t * apr_jose_make(apr_jose_t *jose, apr_jose_type_e type, apr_pool_t *pool) __attribute__((nonnull(3)))
Definition: apr_jose.h:533
Definition: apr_jose.h:607
apr_size_t len
Definition: apr_jose.h:503
Definition: apr_jose.h:581
apr_jose_jwk_t * jwk
Definition: apr_jose.h:628
apr_json_value_t * protected_header
Definition: apr_jose.h:537
Definition: apr_jose.h:471
Definition: apr_jose.h:479
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:828
apr_jose_text_t * text
Definition: apr_jose.h:634
apr_jose_jwks_t * jwks
Definition: apr_jose.h:629
struct apr_jose_encryption_t apr_jose_encryption_t
apr_jose_t * payload
Definition: apr_jose.h:553
Definition: apr_buckets.h:258
APR-Util Error Codes.
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)))
Definition: apr_jose.h:642
struct apr_jose_jwks_t apr_jose_jwks_t
apr_jose_t * apr_jose_jwt_make(apr_jose_t *jose, apr_json_value_t *claims, apr_pool_t *pool) __attribute__((nonnull(3)))
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
apr_status_t(* apr_brigade_flush)(apr_bucket_brigade *bb, void *ctx)
Definition: apr_buckets.h:282
Definition: apr_jose.h:593
apr_json_value_t * header
Definition: apr_jose.h:583
Definition: apr_jose.h:559
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)))
apr_json_value_t * json
Definition: apr_jose.h:511
apr_jose_data_t cipher
Definition: apr_jose.h:573
Definition: apr_jose.h:483
Definition: apr_jose.h:477
Definition: apr_jose.h:517
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)))
APR memory allocation.
struct apr_jose_cb_t apr_jose_cb_t
apr_bucket_brigade * bb
Definition: mod_dav.h:555
Definition: apr_json.h:123
Definition: apr_jose.h:467
apr_status_t status
Definition: apr_jose.h:541
const char * cty
Definition: apr_jose.h:621
apr_jose_jwt_t * jwt
Definition: apr_jose.h:632
apr_json_value_t * keys
Definition: apr_jose.h:527
Definition: apr_jose.h:463
apr_array_header_t * recipients
Definition: apr_jose.h:597
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_signature_t * signature
Definition: apr_jose.h:549
void * ctx
Definition: apr_jose.h:908
apr_jose_data_t iv
Definition: apr_jose.h:567
struct apr_jose_jws_t apr_jose_jws_t
const char * text
Definition: apr_jose.h:501
Definition: apr_jose.h:481
apr_jose_recipient_t * apr_jose_recipient_make(apr_jose_recipient_t *recipient, apr_json_value_t *unprotected, apr_pool_t *pool) __attribute__((nonnull(3)))
APR-UTIL Buckets/Bucket Brigades.
apr_jose_data_t * data
Definition: apr_jose.h:633
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_text_t apr_jose_text_t
APR Platform Definitions.
const unsigned char * data
Definition: apr_jose.h:491
Definition: apr_jose.h:475
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...
apu_err_t result
Definition: apr_jose.h:623
union apr_jose_t::@18 jose
apr_json_value_t * key
Definition: apr_jose.h:519
Definition: apr_jose.h:615
apr_json_value_t * header
Definition: apr_jose.h:535
apr_jose_jws_t * jws
Definition: apr_jose.h:630
struct apr_jose_recipient_t apr_jose_recipient_t
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)))
#define APR_DECLARE(x)
Definition: macros.h:6
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)))
APR Strings library.
apr_status_t status
Definition: apr_jose.h:587
apr_jose_signature_t * apr_jose_signature_make(apr_jose_signature_t *signature, apr_json_value_t *header, apr_json_value_t *protected, apr_pool_t *pool) __attribute__((nonnull(4)))
Definition: apr_jose.h:473
struct apr_jose_signature_t apr_jose_signature_t
#define __attribute__(__x)
Definition: apr.h:63
Definition: apu_errno.h:169
Definition: apr_jose.h:525
struct apr_pool_t apr_pool_t
Definition: apr_pools.h:60
int apr_status_t
Definition: apr_errno.h:44
apr_json_value_t * unprotected
Definition: apr_jose.h:561
apr_jose_data_t tag
Definition: apr_jose.h:575
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_jose_data_t sig
Definition: apr_jose.h:539
const char * typ
Definition: apr_jose.h:619
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:904
apr_jose_recipient_t * recipient
Definition: apr_jose.h:595
apr_jose_data_t ekey
Definition: apr_jose.h:585
apr_jose_type_e
Definition: apr_jose.h:461
apr_array_header_t * signatures
Definition: apr_jose.h:551
dav_resource int dav_locktoken dav_response int flags
Definition: mod_dav.h:1452
Definition: apr_jose.h:465
apr_jose_t * payload
Definition: apr_jose.h:601
APR-UTIL JSON Library.
apr_jose_text_t aad64
Definition: apr_jose.h:571
Definition: apr_jose.h:509
apr_jose_text_t protected64
Definition: apr_jose.h:565
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)))
struct apr_jose_jwe_t apr_jose_jwe_t
apr_jose_type_e type
Definition: apr_jose.h:625