CJOSE  0.6.2.2
jwk.h
Go to the documentation of this file.
1 /*
2  * Copyrights
3  *
4  * Portions created or assigned to Cisco Systems, Inc. are
5  * Copyright (c) 2014-2016 Cisco Systems, Inc. All Rights Reserved.
6  */
14 #ifndef CJOSE_JWK_H
15 #define CJOSE_JWK_H
16 
17 #include <stdbool.h>
18 #include <stdint.h>
19 #include <stddef.h>
20 #include <openssl/obj_mac.h>
21 #include "cjose/error.h"
22 #include "cjose/header.h"
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
29 typedef enum
30 {
38 
47 const char *cjose_jwk_name_for_kty(cjose_jwk_kty_t kty, cjose_err *err);
48 
50 typedef struct _cjose_jwk_int cjose_jwk_t;
51 
62 
75 
85 
94 size_t cjose_jwk_get_keysize(const cjose_jwk_t *jwk, cjose_err *err);
95 
106 void *cjose_jwk_get_keydata(const cjose_jwk_t *jwk, cjose_err *err);
107 
117 const char *cjose_jwk_get_kid(const cjose_jwk_t *jwk, cjose_err *err);
118 
131 bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err);
132 
144 char *cjose_jwk_to_json(const cjose_jwk_t *jwk, bool priv, cjose_err *err);
145 
147 typedef struct
148 {
150  uint8_t *e;
152  size_t elen;
154  uint8_t *n;
156  size_t nlen;
158  uint8_t *d;
160  size_t dlen;
162  uint8_t *p;
164  size_t plen;
166  uint8_t *q;
168  size_t qlen;
170  uint8_t *dp;
172  size_t dplen;
174  uint8_t *dq;
176  size_t dqlen;
178  uint8_t *qi;
180  size_t qilen;
182 
196 cjose_jwk_t *cjose_jwk_create_RSA_random(size_t keysize, const uint8_t *e, size_t elen, cjose_err *err);
197 
214 
216 typedef enum
217 {
219  CJOSE_JWK_EC_P_256 = NID_X9_62_prime256v1,
221  CJOSE_JWK_EC_P_384 = NID_secp384r1,
223  CJOSE_JWK_EC_P_521 = NID_secp521r1,
227 
229 typedef struct
230 {
234  uint8_t *d;
236  size_t dlen;
238  uint8_t *x;
240  size_t xlen;
242  uint8_t *y;
244  size_t ylen;
246 
259 
276 
286 
299 
315 cjose_jwk_t *cjose_jwk_create_oct_spec(const uint8_t *data, size_t len, cjose_err *err);
316 
333 cjose_jwk_t *cjose_jwk_import(const char *json, size_t len, cjose_err *err);
334 
351 
370  const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, const uint8_t *salt, size_t salt_len, cjose_err *err);
371 
376  const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, const uint8_t *salt, size_t salt_len, cjose_err *err);
377 
378 #ifdef __cplusplus
379 }
380 #endif
381 
382 #endif // CJOSE_JWK_H
cjose_jwk_rsa_keyspec::d
uint8_t * d
Definition: jwk.h:158
cjose_jwk_rsa_keyspec::dp
uint8_t * dp
Definition: jwk.h:170
cjose_jwk_rsa_keyspec::qilen
size_t qilen
Definition: jwk.h:180
cjose_jwk_derive_ecdh_ephemeral_key
cjose_jwk_t * cjose_jwk_derive_ecdh_ephemeral_key(const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, const uint8_t *salt, size_t salt_len, cjose_err *err)
cjose_jwk_create_oct_spec
cjose_jwk_t * cjose_jwk_create_oct_spec(const uint8_t *data, size_t len, cjose_err *err)
cjose_jwk_rsa_keyspec::dq
uint8_t * dq
Definition: jwk.h:174
cjose_jwk_ec_curve
cjose_jwk_ec_curve
Definition: jwk.h:216
cjose_jwk_create_EC_spec
cjose_jwk_t * cjose_jwk_create_EC_spec(const cjose_jwk_ec_keyspec *spec, cjose_err *err)
cjose_jwk_rsa_keyspec::nlen
size_t nlen
Definition: jwk.h:156
cjose_jwk_rsa_keyspec::p
uint8_t * p
Definition: jwk.h:162
cjose_jwk_t
struct _cjose_jwk_int cjose_jwk_t
Definition: jwk.h:50
cjose_jwk_get_keysize
size_t cjose_jwk_get_keysize(const cjose_jwk_t *jwk, cjose_err *err)
cjose_jwk_create_RSA_random
cjose_jwk_t * cjose_jwk_create_RSA_random(size_t keysize, const uint8_t *e, size_t elen, cjose_err *err)
CJOSE_JWK_KTY_RSA
@ CJOSE_JWK_KTY_RSA
Definition: jwk.h:32
cjose_jwk_to_json
char * cjose_jwk_to_json(const cjose_jwk_t *jwk, bool priv, cjose_err *err)
cjose_jwk_create_RSA_spec
cjose_jwk_t * cjose_jwk_create_RSA_spec(const cjose_jwk_rsa_keyspec *spec, cjose_err *err)
cjose_jwk_kty_t
cjose_jwk_kty_t
Definition: jwk.h:29
cjose_jwk_get_kty
cjose_jwk_kty_t cjose_jwk_get_kty(const cjose_jwk_t *jwk, cjose_err *err)
cjose_jwk_rsa_keyspec::dlen
size_t dlen
Definition: jwk.h:160
cjose_jwk_create_EC_random
cjose_jwk_t * cjose_jwk_create_EC_random(cjose_jwk_ec_curve crv, cjose_err *err)
cjose_jwk_ec_keyspec::d
uint8_t * d
Definition: jwk.h:234
cjose_jwk_rsa_keyspec::q
uint8_t * q
Definition: jwk.h:166
cjose_jwk_ec_keyspec::y
uint8_t * y
Definition: jwk.h:242
CJOSE_JWK_EC_P_384
@ CJOSE_JWK_EC_P_384
Definition: jwk.h:221
cjose_jwk_rsa_keyspec::dplen
size_t dplen
Definition: jwk.h:172
cjose_jwk_ec_keyspec::ylen
size_t ylen
Definition: jwk.h:244
error.h
Datatypes and functions for error reporting.
cjose_jwk_set_kid
bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err)
cjose_jwk_rsa_keyspec::elen
size_t elen
Definition: jwk.h:152
CJOSE_JWK_EC_P_521
@ CJOSE_JWK_EC_P_521
Definition: jwk.h:223
cjose_jwk_derive_ecdh_secret
cjose_jwk_t * cjose_jwk_derive_ecdh_secret(const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, const uint8_t *salt, size_t salt_len, cjose_err *err)
cjose_jwk_get_keydata
void * cjose_jwk_get_keydata(const cjose_jwk_t *jwk, cjose_err *err)
CJOSE_JWK_EC_INVALID
@ CJOSE_JWK_EC_INVALID
Definition: jwk.h:225
cjose_jwk_name_for_kty
const char * cjose_jwk_name_for_kty(cjose_jwk_kty_t kty, cjose_err *err)
cjose_jwk_rsa_keyspec::n
uint8_t * n
Definition: jwk.h:154
cjose_jwk_rsa_keyspec::qlen
size_t qlen
Definition: jwk.h:168
CJOSE_JWK_EC_P_256
@ CJOSE_JWK_EC_P_256
Definition: jwk.h:219
cjose_err
Definition: error.h:66
cjose_jwk_get_kid
const char * cjose_jwk_get_kid(const cjose_jwk_t *jwk, cjose_err *err)
cjose_jwk_ec_keyspec
Definition: jwk.h:229
cjose_jwk_rsa_keyspec::dqlen
size_t dqlen
Definition: jwk.h:176
cjose_jwk_rsa_keyspec::e
uint8_t * e
Definition: jwk.h:150
cjose_jwk_import_json
cjose_jwk_t * cjose_jwk_import_json(cjose_header_t *json, cjose_err *err)
cjose_jwk_EC_get_curve
const cjose_jwk_ec_curve cjose_jwk_EC_get_curve(const cjose_jwk_t *jwk, cjose_err *err)
cjose_jwk_rsa_keyspec::qi
uint8_t * qi
Definition: jwk.h:178
cjose_header_t
struct json_t cjose_header_t
Definition: header.h:98
cjose_jwk_retain
cjose_jwk_t * cjose_jwk_retain(cjose_jwk_t *jwk, cjose_err *err)
cjose_jwk_rsa_keyspec
Definition: jwk.h:147
cjose_jwk_rsa_keyspec::plen
size_t plen
Definition: jwk.h:164
CJOSE_JWK_KTY_EC
@ CJOSE_JWK_KTY_EC
Definition: jwk.h:34
cjose_jwk_ec_keyspec::crv
cjose_jwk_ec_curve crv
Definition: jwk.h:232
cjose_jwk_import
cjose_jwk_t * cjose_jwk_import(const char *json, size_t len, cjose_err *err)
cjose_jwk_create_oct_random
cjose_jwk_t * cjose_jwk_create_oct_random(size_t size, cjose_err *err)
cjose_jwk_ec_keyspec::x
uint8_t * x
Definition: jwk.h:238
cjose_jwk_ec_keyspec::dlen
size_t dlen
Definition: jwk.h:236
header.h
Functions and data structures for interacting with JSON Web Signature (JWS) objects.
CJOSE_JWK_KTY_OCT
@ CJOSE_JWK_KTY_OCT
Definition: jwk.h:36
cjose_jwk_release
bool cjose_jwk_release(cjose_jwk_t *jwk)
cjose_jwk_ec_keyspec::xlen
size_t xlen
Definition: jwk.h:240