CJOSE  0.6.0
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 {
37 
46 const char *cjose_jwk_name_for_kty(cjose_jwk_kty_t kty, cjose_err *err);
47 
49 typedef struct _cjose_jwk_int cjose_jwk_t;
50 
61 
74 
84 
93 size_t cjose_jwk_get_keysize(const cjose_jwk_t *jwk, cjose_err *err);
94 
105 void *cjose_jwk_get_keydata(const cjose_jwk_t *jwk, cjose_err *err);
106 
116 const char *cjose_jwk_get_kid(const cjose_jwk_t *jwk, cjose_err *err);
117 
130 bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err);
131 
143 char *cjose_jwk_to_json(const cjose_jwk_t *jwk, bool priv, cjose_err *err);
144 
146 typedef struct
147 {
149  uint8_t *e;
151  size_t elen;
153  uint8_t *n;
155  size_t nlen;
157  uint8_t *d;
159  size_t dlen;
161  uint8_t *p;
163  size_t plen;
165  uint8_t *q;
167  size_t qlen;
169  uint8_t *dp;
171  size_t dplen;
173  uint8_t *dq;
175  size_t dqlen;
177  uint8_t *qi;
179  size_t qilen;
181 
195 cjose_jwk_t *cjose_jwk_create_RSA_random(size_t keysize, const uint8_t *e, size_t elen, cjose_err *err);
196 
213 
215 typedef enum {
217  CJOSE_JWK_EC_P_256 = NID_X9_62_prime256v1,
219  CJOSE_JWK_EC_P_384 = NID_secp384r1,
221  CJOSE_JWK_EC_P_521 = NID_secp521r1,
225 
227 typedef struct
228 {
232  uint8_t *d;
234  size_t dlen;
236  uint8_t *x;
238  size_t xlen;
240  uint8_t *y;
242  size_t ylen;
244 
257 
274 
284 
297 
313 cjose_jwk_t *cjose_jwk_create_oct_spec(const uint8_t *data, size_t len, cjose_err *err);
314 
331 cjose_jwk_t *cjose_jwk_import(const char *json, size_t len, cjose_err *err);
332 
349 
365 cjose_jwk_t *cjose_jwk_derive_ecdh_ephemeral_key(const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, cjose_err *err);
366 
370 cjose_jwk_t *cjose_jwk_derive_ecdh_secret(const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, cjose_err *err);
371 
372 #ifdef __cplusplus
373 }
374 #endif
375 
376 #endif // CJOSE_JWK_H
cjose_jwk_t * cjose_jwk_derive_ecdh_secret(const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, cjose_err *err)
Definition: jwk.h:33
size_t xlen
Definition: jwk.h:238
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:29
bool cjose_jwk_release(cjose_jwk_t *jwk)
Functions and data structures for interacting with JSON Web Signature (JWS) objects.
cjose_jwk_ec_curve
Definition: jwk.h:215
Definition: jwk.h:35
size_t nlen
Definition: jwk.h:155
cjose_jwk_t * cjose_jwk_create_oct_random(size_t size, cjose_err *err)
const cjose_jwk_ec_curve cjose_jwk_EC_get_curve(const cjose_jwk_t *jwk, 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:242
uint8_t * y
Definition: jwk.h:240
Definition: jwk.h:217
Definition: jwk.h:221
Definition: jwk.h:227
struct _cjose_jwk_int cjose_jwk_t
Definition: jwk.h:49
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:177
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:173
size_t qlen
Definition: jwk.h:167
size_t plen
Definition: jwk.h:163
uint8_t * x
Definition: jwk.h:236
size_t dplen
Definition: jwk.h:171
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)
struct json_t cjose_header_t
Definition: header.h:96
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)
cjose_jwk_t * cjose_jwk_derive_ecdh_ephemeral_key(const cjose_jwk_t *jwk_self, const cjose_jwk_t *jwk_peer, cjose_err *err)
uint8_t * dp
Definition: jwk.h:169
cjose_jwk_t * cjose_jwk_create_RSA_spec(const cjose_jwk_rsa_keyspec *spec, cjose_err *err)
size_t dqlen
Definition: jwk.h:175
bool cjose_jwk_set_kid(cjose_jwk_t *jwk, const char *kid, size_t len, cjose_err *err)
size_t dlen
Definition: jwk.h:159
cjose_jwk_ec_curve crv
Definition: jwk.h:230
Definition: jwk.h:223
uint8_t * d
Definition: jwk.h:232
Definition: jwk.h:31
cjose_jwk_t * cjose_jwk_create_EC_random(cjose_jwk_ec_curve crv, cjose_err *err)
size_t qilen
Definition: jwk.h:179
cjose_jwk_t * cjose_jwk_import_json(cjose_header_t *json, cjose_err *err)
Definition: jwk.h:219
uint8_t * d
Definition: jwk.h:157
size_t dlen
Definition: jwk.h:234
Definition: jwk.h:146
size_t elen
Definition: jwk.h:151
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:149
uint8_t * p
Definition: jwk.h:161
uint8_t * q
Definition: jwk.h:165
uint8_t * n
Definition: jwk.h:153