CJOSE  0.5.1
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 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
28 typedef enum {
36 
45 const char *cjose_jwk_name_for_kty(cjose_jwk_kty_t kty, cjose_err *err);
46 
48 typedef struct _cjose_jwk_int cjose_jwk_t;
49 
60 
73 
82 cjose_jwk_kty_t cjose_jwk_get_kty(const cjose_jwk_t *jwk, cjose_err *err);
83 
92 size_t cjose_jwk_get_keysize(const cjose_jwk_t *jwk, cjose_err *err);
93 
104 void *cjose_jwk_get_keydata(const cjose_jwk_t *jwk, cjose_err *err);
105 
115 const char *cjose_jwk_get_kid(const cjose_jwk_t *jwk, cjose_err *err);
116 
129 bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err);
130 
142 char *cjose_jwk_to_json(const cjose_jwk_t *jwk, bool priv, cjose_err *err);
143 
145 typedef struct
146 {
148  uint8_t *e;
150  size_t elen;
152  uint8_t *n;
154  size_t nlen;
156  uint8_t *d;
158  size_t dlen;
160  uint8_t *p;
162  size_t plen;
164  uint8_t *q;
166  size_t qlen;
168  uint8_t *dp;
170  size_t dplen;
172  uint8_t *dq;
174  size_t dqlen;
176  uint8_t *qi;
178  size_t qilen;
180 
194 cjose_jwk_t *cjose_jwk_create_RSA_random(size_t keysize, const uint8_t *e, size_t elen, cjose_err *err);
195 
212 
214 typedef enum {
216  CJOSE_JWK_EC_P_256 = NID_X9_62_prime256v1,
218  CJOSE_JWK_EC_P_384 = NID_secp384r1,
220  CJOSE_JWK_EC_P_521 = NID_secp521r1
222 
224 typedef struct
225 {
227  cjose_jwk_ec_curve crv;
229  uint8_t *d;
231  size_t dlen;
233  uint8_t *x;
235  size_t xlen;
237  uint8_t *y;
239  size_t ylen;
241 
253 cjose_jwk_t *cjose_jwk_create_EC_random(cjose_jwk_ec_curve crv, cjose_err *err);
254 
271 
284 
300 cjose_jwk_t *cjose_jwk_create_oct_spec(const uint8_t *data, size_t len, cjose_err *err);
301 
318 cjose_jwk_t *cjose_jwk_import(const char *json, size_t len, cjose_err *err);
319 
336 
341 
342 #ifdef __cplusplus
343 }
344 #endif
345 
346 #endif // CJOSE_JWK_H
Definition: jwk.h:32
size_t xlen
Definition: jwk.h:235
cjose_jwk_t * cjose_jwk_create_oct_spec(const uint8_t *data, size_t len, cjose_err *err)
cjose_jwk_kty_t
Definition: jwk.h:28
bool cjose_jwk_release(cjose_jwk_t *jwk)
cjose_jwk_ec_curve
Definition: jwk.h:214
cjose_jwk_t * cjose_jwk_derive_ecdh_secret(cjose_jwk_t *jwk_self, cjose_jwk_t *jwk_peer, cjose_err *err)
Definition: jwk.h:34
size_t nlen
Definition: jwk.h:154
cjose_jwk_t * cjose_jwk_create_oct_random(size_t size, cjose_err *err)
cjose_jwk_kty_t cjose_jwk_get_kty(const cjose_jwk_t *jwk, cjose_err *err)
size_t ylen
Definition: jwk.h:239
uint8_t * y
Definition: jwk.h:237
Definition: jwk.h:216
Definition: jwk.h:220
Definition: jwk.h:224
struct _cjose_jwk_int cjose_jwk_t
Definition: jwk.h:48
cjose_jwk_t * cjose_jwk_create_RSA_random(size_t keysize, const uint8_t *e, size_t elen, cjose_err *err)
uint8_t * qi
Definition: jwk.h:176
Datatypes and functions for error reporting.
const char * cjose_jwk_name_for_kty(cjose_jwk_kty_t kty, cjose_err *err)
cjose_jwk_t * cjose_jwk_retain(cjose_jwk_t *jwk, cjose_err *err)
uint8_t * dq
Definition: jwk.h:172
size_t qlen
Definition: jwk.h:166
size_t plen
Definition: jwk.h:162
uint8_t * x
Definition: jwk.h:233
size_t dplen
Definition: jwk.h:170
const char * cjose_jwk_get_kid(const cjose_jwk_t *jwk, cjose_err *err)
size_t cjose_jwk_get_keysize(const cjose_jwk_t *jwk, cjose_err *err)
void * cjose_jwk_get_keydata(const cjose_jwk_t *jwk, cjose_err *err)
Definition: error.h:65
cjose_jwk_t * cjose_jwk_create_EC_spec(const cjose_jwk_ec_keyspec *spec, cjose_err *err)
uint8_t * dp
Definition: jwk.h:168
cjose_jwk_t * cjose_jwk_create_RSA_spec(const cjose_jwk_rsa_keyspec *spec, cjose_err *err)
size_t dqlen
Definition: jwk.h:174
bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err)
size_t dlen
Definition: jwk.h:158
cjose_jwk_ec_curve crv
Definition: jwk.h:227
cjose_jwk_t * cjose_jwk_derive_ecdh_ephemeral_key(cjose_jwk_t *jwk_self, cjose_jwk_t *jwk_peer, cjose_err *err)
uint8_t * d
Definition: jwk.h:229
Definition: jwk.h:30
cjose_jwk_t * cjose_jwk_create_EC_random(cjose_jwk_ec_curve crv, cjose_err *err)
size_t qilen
Definition: jwk.h:178
Definition: jwk.h:218
uint8_t * d
Definition: jwk.h:156
size_t dlen
Definition: jwk.h:231
Definition: jwk.h:145
size_t elen
Definition: jwk.h:150
char * cjose_jwk_to_json(const cjose_jwk_t *jwk, bool priv, cjose_err *err)
cjose_jwk_t * cjose_jwk_import(const char *json, size_t len, cjose_err *err)
uint8_t * e
Definition: jwk.h:148
uint8_t * p
Definition: jwk.h:160
uint8_t * q
Definition: jwk.h:164
uint8_t * n
Definition: jwk.h:152