CJOSE  0.4.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 
18 #include <stdbool.h>
19 #include <stdint.h>
20 #include <stddef.h>
21 #include <openssl/obj_mac.h>
22 #include "cjose/error.h"
23 
24 #ifdef __cplusplus
25 extern "C"
26 {
27 #endif
28 
30 typedef enum
31 {
39 
48 const char *cjose_jwk_name_for_kty(cjose_jwk_kty_t kty, cjose_err *err);
49 
51 typedef struct _cjose_jwk_int cjose_jwk_t;
52 
63 
76 
85 cjose_jwk_kty_t cjose_jwk_get_kty(const cjose_jwk_t *jwk, cjose_err *err);
86 
95 size_t cjose_jwk_get_keysize(const cjose_jwk_t *jwk, cjose_err *err);
96 
107 void * cjose_jwk_get_keydata(const cjose_jwk_t *jwk, cjose_err *err);
108 
118 const char *cjose_jwk_get_kid(const cjose_jwk_t *jwk, cjose_err *err);
119 
132 bool cjose_jwk_set_kid(
133  cjose_jwk_t *jwk,
134  const char *kid,
135  size_t len,
136  cjose_err *err);
148 char * cjose_jwk_to_json(const cjose_jwk_t *jwk, bool priv, cjose_err *err);
149 
151 typedef struct
152 {
154  uint8_t *e;
156  size_t elen;
158  uint8_t *n;
160  size_t nlen;
162  uint8_t *d;
164  size_t dlen;
166  uint8_t *p;
168  size_t plen;
170  uint8_t *q;
172  size_t qlen;
174  uint8_t *dp;
176  size_t dplen;
178  uint8_t *dq;
180  size_t dqlen;
182  uint8_t *qi;
184  size_t qilen;
186 
201  size_t keysize, const uint8_t *e, size_t elen, cjose_err *err);
202 
219  const cjose_jwk_rsa_keyspec *spec, cjose_err *err);
220 
222 typedef enum
223 {
225  CJOSE_JWK_EC_P_256 = NID_X9_62_prime256v1,
227  CJOSE_JWK_EC_P_384 = NID_secp384r1,
229  CJOSE_JWK_EC_P_521 = NID_secp521r1
231 
233 typedef struct
234 {
236  cjose_jwk_ec_curve crv;
238  uint8_t *d;
240  size_t dlen;
242  uint8_t *x;
244  size_t xlen;
246  uint8_t *y;
248  size_t ylen;
250 
263  cjose_jwk_ec_curve crv, cjose_err *err);
264 
281  const cjose_jwk_ec_keyspec *spec, cjose_err *err);
282 
295 
312  const uint8_t *data, size_t len, cjose_err *err);
313 
330 cjose_jwk_t * cjose_jwk_import(const char *json, size_t len, cjose_err *err);
331 
348  cjose_jwk_t *jwk_self,
349  cjose_jwk_t *jwk_peer,
350  cjose_err *err);
351 
356  cjose_jwk_t *jwk_self,
357  cjose_jwk_t *jwk_peer,
358  cjose_err *err);
359 
360 #ifdef __cplusplus
361 }
362 #endif
363 
364 #endif // CJOSE_JWK_H
Definition: jwk.h:35
size_t xlen
Definition: jwk.h:244
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:30
bool cjose_jwk_release(cjose_jwk_t *jwk)
cjose_jwk_ec_curve
Definition: jwk.h:222
cjose_jwk_t * cjose_jwk_derive_ecdh_secret(cjose_jwk_t *jwk_self, cjose_jwk_t *jwk_peer, cjose_err *err)
Definition: jwk.h:37
size_t nlen
Definition: jwk.h:160
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:248
uint8_t * y
Definition: jwk.h:246
Definition: jwk.h:225
Definition: jwk.h:229
Definition: jwk.h:233
struct _cjose_jwk_int cjose_jwk_t
Definition: jwk.h:51
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:182
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:178
size_t qlen
Definition: jwk.h:172
size_t plen
Definition: jwk.h:168
uint8_t * x
Definition: jwk.h:242
size_t dplen
Definition: jwk.h:176
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:70
cjose_jwk_t * cjose_jwk_create_EC_spec(const cjose_jwk_ec_keyspec *spec, cjose_err *err)
uint8_t * dp
Definition: jwk.h:174
cjose_jwk_t * cjose_jwk_create_RSA_spec(const cjose_jwk_rsa_keyspec *spec, cjose_err *err)
size_t dqlen
Definition: jwk.h:180
bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err)
size_t dlen
Definition: jwk.h:164
cjose_jwk_ec_curve crv
Definition: jwk.h:236
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:238
Definition: jwk.h:33
cjose_jwk_t * cjose_jwk_create_EC_random(cjose_jwk_ec_curve crv, cjose_err *err)
size_t qilen
Definition: jwk.h:184
Definition: jwk.h:227
uint8_t * d
Definition: jwk.h:162
size_t dlen
Definition: jwk.h:240
Definition: jwk.h:151
size_t elen
Definition: jwk.h:156
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:154
uint8_t * p
Definition: jwk.h:166
uint8_t * q
Definition: jwk.h:170
uint8_t * n
Definition: jwk.h:158