libwebsockets
Lightweight C library for HTML5 websockets
Toggle main menu visibility
class="ui-resizable-handle">
Loading...
Searching...
No Matches
lws-jose.h
Go to the documentation of this file.
1
/*
2
* libwebsockets - small server side websockets and web server implementation
3
*
4
* Copyright (C) 2010 - 2019 Andy Green <andy@warmcat.com>
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the "Software"), to
8
* deal in the Software without restriction, including without limitation the
9
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10
* sell copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22
* IN THE SOFTWARE.
23
*/
24
25
enum
lws_jws_jose_hdr_indexes
{
26
LJJHI_ALG
,
/* REQUIRED */
27
LJJHI_JKU
,
/* Optional: string */
28
LJJHI_JWK
,
/* Optional: jwk JSON object: public key: */
29
LJJHI_KID
,
/* Optional: string */
30
LJJHI_X5U
,
/* Optional: string: url of public key cert / chain */
31
LJJHI_X5C
,
/* Optional: base64 (NOT -url): actual cert */
32
LJJHI_X5T
,
/* Optional: base64url: SHA-1 of actual cert */
33
LJJHI_X5T_S256
,
/* Optional: base64url: SHA-256 of actual cert */
34
LJJHI_TYP
,
/* Optional: string: media type */
35
LJJHI_CTY
,
/* Optional: string: content media type */
36
LJJHI_CRIT
,
/* Optional for send, REQUIRED: array of strings:
37
* mustn't contain standardized strings or null set */
38
39
LJJHI_RECIPS_HDR
,
40
LJJHI_RECIPS_HDR_ALG
,
41
LJJHI_RECIPS_HDR_KID
,
42
LJJHI_RECIPS_EKEY
,
43
44
LJJHI_ENC
,
/* JWE only: Optional: string */
45
LJJHI_ZIP
,
/* JWE only: Optional: string ("DEF" = deflate) */
46
47
LJJHI_EPK
,
/* Additional arg for JWE ECDH: ephemeral public key */
48
LJJHI_APU
,
/* Additional arg for JWE ECDH: base64url */
49
LJJHI_APV
,
/* Additional arg for JWE ECDH: base64url */
50
LJJHI_IV
,
/* Additional arg for JWE AES: base64url */
51
LJJHI_TAG
,
/* Additional arg for JWE AES: base64url */
52
LJJHI_P2S
,
/* Additional arg for JWE PBES2: base64url: salt */
53
LJJHI_P2C
,
/* Additional arg for JWE PBES2: integer: count */
54
55
LWS_COUNT_JOSE_HDR_ELEMENTS
56
};
57
58
enum
lws_jose_algtype
{
59
LWS_JOSE_ENCTYPE_NONE
,
60
61
LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5
,
62
LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP
,
63
LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS
,
64
65
LWS_JOSE_ENCTYPE_ECDSA
,
66
LWS_JOSE_ENCTYPE_ECDHES
,
67
68
LWS_JOSE_ENCTYPE_EDDSA
,
69
70
LWS_JOSE_ENCTYPE_AES_CBC
,
71
LWS_JOSE_ENCTYPE_AES_CFB128
,
72
LWS_JOSE_ENCTYPE_AES_CFB8
,
73
LWS_JOSE_ENCTYPE_AES_CTR
,
74
LWS_JOSE_ENCTYPE_AES_ECB
,
75
LWS_JOSE_ENCTYPE_AES_OFB
,
76
LWS_JOSE_ENCTYPE_AES_XTS
,
/* care: requires double-length key */
77
LWS_JOSE_ENCTYPE_AES_GCM
,
78
};
79
80
/* there's a table of these defined in lws-gencrypto-common.c */
81
82
struct
lws_jose_jwe_alg
{
83
enum
lws_genhash_types
hash_type
;
84
enum
lws_genhmac_types
hmac_type
;
85
enum
lws_jose_algtype
algtype_signing
;
/* the signing cipher */
86
enum
lws_jose_algtype
algtype_crypto
;
/* the encryption cipher */
87
const
char
*
alg
;
/* the JWA enc alg name, eg "ES512" */
88
const
char
*
curve_name
;
/* NULL, or, eg, "P-256" */
89
unsigned
short
keybits_min
,
keybits_fixed
;
90
unsigned
short
ivbits
;
91
};
92
93
/*
94
* For JWS, "JOSE header" is defined to be the union of...
95
*
96
* o JWS Protected Header
97
* o JWS Unprotected Header
98
*
99
* For JWE, the "JOSE header" is the union of...
100
*
101
* o JWE Protected Header
102
* o JWE Shared Unprotected Header
103
* o JWE Per-Recipient Unprotected Header
104
*/
105
106
#define LWS_JWS_MAX_RECIPIENTS 3
107
108
struct
lws_jws_recpient
{
109
/*
110
* JOSE per-recipient unprotected header... for JWS this contains
111
* protected / header / signature
112
*/
113
struct
lws_gencrypto_keyelem
unprot
[
LWS_COUNT_JOSE_HDR_ELEMENTS
];
114
struct
lws_jwk
jwk_ephemeral
;
/* recipient ephemeral key if any */
115
struct
lws_jwk
jwk
;
/* recipient "jwk" key if any */
116
};
117
118
struct
lws_jose
{
119
/* JOSE protected and unprotected header elements */
120
struct
lws_gencrypto_keyelem
e
[
LWS_COUNT_JOSE_HDR_ELEMENTS
];
121
122
struct
lws_jws_recpient
recipient
[
LWS_JWS_MAX_RECIPIENTS
];
123
124
char
typ
[32];
125
char
edone
[
LWS_COUNT_JOSE_HDR_ELEMENTS
];
126
127
/* information from the protected header part */
128
const
struct
lws_jose_jwe_alg
*
alg
;
129
const
struct
lws_jose_jwe_alg
*
enc_alg
;
130
131
int
recipients
;
/* count of used recipient[] entries */
132
};
133
139
LWS_VISIBLE
LWS_EXTERN
void
140
lws_jose_init
(
struct
lws_jose
*jose);
141
147
LWS_VISIBLE
LWS_EXTERN
void
148
lws_jose_destroy
(
struct
lws_jose
*jose);
149
158
LWS_VISIBLE
LWS_EXTERN
int
159
lws_gencrypto_jws_alg_to_definition
(
const
char
*
alg
,
160
const
struct
lws_jose_jwe_alg
**jose);
161
170
LWS_VISIBLE
LWS_EXTERN
int
171
lws_gencrypto_jwe_alg_to_definition
(
const
char
*
alg
,
172
const
struct
lws_jose_jwe_alg
**jose);
173
182
LWS_VISIBLE
LWS_EXTERN
int
183
lws_gencrypto_jwe_enc_to_definition
(
const
char
*enc,
184
const
struct
lws_jose_jwe_alg
**jose);
185
198
LWS_VISIBLE
LWS_EXTERN
int
199
lws_jws_parse_jose
(
struct
lws_jose
*jose,
200
const
char
*buf,
int
len,
char
*temp,
int
*temp_len);
201
214
LWS_VISIBLE
LWS_EXTERN
int
215
lws_jwe_parse_jose
(
struct
lws_jose
*jose,
216
const
char
*buf,
int
len,
char
*temp,
int
*temp_len);
217
lws_genhash_types
lws_genhash_types
Definition
lws-genhash.h:44
lws_genhmac_types
lws_genhmac_types
Definition
lws-genhash.h:53
lws_jwk
Definition
lws-jwk.h:50
LWS_EXTERN
#define LWS_EXTERN
Definition
libwebsockets.h:296
LWS_VISIBLE
#define LWS_VISIBLE
Definition
libwebsockets.h:291
lws_gencrypto_keyelem
Definition
lws-gencrypto.h:109
lws_gencrypto_jws_alg_to_definition
LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jws_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose)
lws_jose::recipients
int recipients
Definition
lws-jose.h:131
lws_jose_jwe_alg::keybits_fixed
unsigned short keybits_fixed
Definition
lws-jose.h:89
lws_jose_jwe_alg::curve_name
const char * curve_name
Definition
lws-jose.h:88
lws_jose::enc_alg
const struct lws_jose_jwe_alg * enc_alg
Definition
lws-jose.h:129
lws_jose_init
LWS_VISIBLE LWS_EXTERN void lws_jose_init(struct lws_jose *jose)
lws_jose_jwe_alg::hmac_type
enum lws_genhmac_types hmac_type
Definition
lws-jose.h:84
lws_jws_jose_hdr_indexes
lws_jws_jose_hdr_indexes
Definition
lws-jose.h:25
LJJHI_X5T
@ LJJHI_X5T
Definition
lws-jose.h:32
LJJHI_P2S
@ LJJHI_P2S
Definition
lws-jose.h:52
LJJHI_X5U
@ LJJHI_X5U
Definition
lws-jose.h:30
LJJHI_TAG
@ LJJHI_TAG
Definition
lws-jose.h:51
LWS_COUNT_JOSE_HDR_ELEMENTS
@ LWS_COUNT_JOSE_HDR_ELEMENTS
Definition
lws-jose.h:55
LJJHI_TYP
@ LJJHI_TYP
Definition
lws-jose.h:34
LJJHI_ZIP
@ LJJHI_ZIP
Definition
lws-jose.h:45
LJJHI_RECIPS_HDR
@ LJJHI_RECIPS_HDR
Definition
lws-jose.h:39
LJJHI_CTY
@ LJJHI_CTY
Definition
lws-jose.h:35
LJJHI_JKU
@ LJJHI_JKU
Definition
lws-jose.h:27
LJJHI_P2C
@ LJJHI_P2C
Definition
lws-jose.h:53
LJJHI_RECIPS_HDR_ALG
@ LJJHI_RECIPS_HDR_ALG
Definition
lws-jose.h:40
LJJHI_APU
@ LJJHI_APU
Definition
lws-jose.h:48
LJJHI_RECIPS_HDR_KID
@ LJJHI_RECIPS_HDR_KID
Definition
lws-jose.h:41
LJJHI_APV
@ LJJHI_APV
Definition
lws-jose.h:49
LJJHI_RECIPS_EKEY
@ LJJHI_RECIPS_EKEY
Definition
lws-jose.h:42
LJJHI_ALG
@ LJJHI_ALG
Definition
lws-jose.h:26
LJJHI_KID
@ LJJHI_KID
Definition
lws-jose.h:29
LJJHI_CRIT
@ LJJHI_CRIT
Definition
lws-jose.h:36
LJJHI_X5C
@ LJJHI_X5C
Definition
lws-jose.h:31
LJJHI_X5T_S256
@ LJJHI_X5T_S256
Definition
lws-jose.h:33
LJJHI_IV
@ LJJHI_IV
Definition
lws-jose.h:50
LJJHI_EPK
@ LJJHI_EPK
Definition
lws-jose.h:47
LJJHI_JWK
@ LJJHI_JWK
Definition
lws-jose.h:28
LJJHI_ENC
@ LJJHI_ENC
Definition
lws-jose.h:44
lws_jose_destroy
LWS_VISIBLE LWS_EXTERN void lws_jose_destroy(struct lws_jose *jose)
lws_gencrypto_jwe_alg_to_definition
LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jwe_alg_to_definition(const char *alg, const struct lws_jose_jwe_alg **jose)
lws_jose_jwe_alg::algtype_crypto
enum lws_jose_algtype algtype_crypto
Definition
lws-jose.h:86
lws_jose::alg
const struct lws_jose_jwe_alg * alg
Definition
lws-jose.h:128
LWS_JWS_MAX_RECIPIENTS
#define LWS_JWS_MAX_RECIPIENTS
Definition
lws-jose.h:106
lws_jwe_parse_jose
LWS_VISIBLE LWS_EXTERN int lws_jwe_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len)
lws_jose_algtype
lws_jose_algtype
Definition
lws-jose.h:58
LWS_JOSE_ENCTYPE_AES_CFB128
@ LWS_JOSE_ENCTYPE_AES_CFB128
Definition
lws-jose.h:71
LWS_JOSE_ENCTYPE_AES_CTR
@ LWS_JOSE_ENCTYPE_AES_CTR
Definition
lws-jose.h:73
LWS_JOSE_ENCTYPE_AES_ECB
@ LWS_JOSE_ENCTYPE_AES_ECB
Definition
lws-jose.h:74
LWS_JOSE_ENCTYPE_AES_GCM
@ LWS_JOSE_ENCTYPE_AES_GCM
Definition
lws-jose.h:77
LWS_JOSE_ENCTYPE_AES_CFB8
@ LWS_JOSE_ENCTYPE_AES_CFB8
Definition
lws-jose.h:72
LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP
@ LWS_JOSE_ENCTYPE_RSASSA_PKCS1_OAEP
Definition
lws-jose.h:62
LWS_JOSE_ENCTYPE_AES_OFB
@ LWS_JOSE_ENCTYPE_AES_OFB
Definition
lws-jose.h:75
LWS_JOSE_ENCTYPE_NONE
@ LWS_JOSE_ENCTYPE_NONE
Definition
lws-jose.h:59
LWS_JOSE_ENCTYPE_AES_XTS
@ LWS_JOSE_ENCTYPE_AES_XTS
Definition
lws-jose.h:76
LWS_JOSE_ENCTYPE_EDDSA
@ LWS_JOSE_ENCTYPE_EDDSA
Definition
lws-jose.h:68
LWS_JOSE_ENCTYPE_ECDSA
@ LWS_JOSE_ENCTYPE_ECDSA
Definition
lws-jose.h:65
LWS_JOSE_ENCTYPE_ECDHES
@ LWS_JOSE_ENCTYPE_ECDHES
Definition
lws-jose.h:66
LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS
@ LWS_JOSE_ENCTYPE_RSASSA_PKCS1_PSS
Definition
lws-jose.h:63
LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5
@ LWS_JOSE_ENCTYPE_RSASSA_PKCS1_1_5
Definition
lws-jose.h:61
LWS_JOSE_ENCTYPE_AES_CBC
@ LWS_JOSE_ENCTYPE_AES_CBC
Definition
lws-jose.h:70
lws_jose::edone
char edone[LWS_COUNT_JOSE_HDR_ELEMENTS]
Definition
lws-jose.h:125
lws_jose_jwe_alg::ivbits
unsigned short ivbits
Definition
lws-jose.h:90
lws_jose::e
struct lws_gencrypto_keyelem e[LWS_COUNT_JOSE_HDR_ELEMENTS]
Definition
lws-jose.h:120
lws_gencrypto_jwe_enc_to_definition
LWS_VISIBLE LWS_EXTERN int lws_gencrypto_jwe_enc_to_definition(const char *enc, const struct lws_jose_jwe_alg **jose)
lws_jws_parse_jose
LWS_VISIBLE LWS_EXTERN int lws_jws_parse_jose(struct lws_jose *jose, const char *buf, int len, char *temp, int *temp_len)
lws_jose_jwe_alg::hash_type
enum lws_genhash_types hash_type
Definition
lws-jose.h:83
lws_jose_jwe_alg::alg
const char * alg
Definition
lws-jose.h:87
lws_jose::recipient
struct lws_jws_recpient recipient[LWS_JWS_MAX_RECIPIENTS]
Definition
lws-jose.h:122
lws_jose_jwe_alg::algtype_signing
enum lws_jose_algtype algtype_signing
Definition
lws-jose.h:85
lws_jose::typ
char typ[32]
Definition
lws-jose.h:124
lws_jose_jwe_alg::keybits_min
unsigned short keybits_min
Definition
lws-jose.h:89
lws_jose
Definition
lws-jose.h:118
lws_jose_jwe_alg
Definition
lws-jose.h:82
lws_jws_recpient
Definition
lws-jose.h:108
lws_jws_recpient::jwk
struct lws_jwk jwk
Definition
lws-jose.h:115
lws_jws_recpient::jwk_ephemeral
struct lws_jwk jwk_ephemeral
Definition
lws-jose.h:114
lws_jws_recpient::unprot
struct lws_gencrypto_keyelem unprot[LWS_COUNT_JOSE_HDR_ELEMENTS]
Definition
lws-jose.h:113
include
libwebsockets
lws-jose.h
Generated on
for libwebsockets by
1.18.0