libwebsockets
Lightweight C library for HTML5 websockets
Toggle main menu visibility
Loading...
Searching...
No Matches
lws-gencrypto.h
Go to the documentation of this file.
1
/*
2
* libwebsockets - small server side websockets and web server implementation
3
*
4
* Copyright (C) 2010 - 2020 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
/*
26
* These are gencrypto-level constants... they are used by both JOSE and direct
27
* gencrypto code. However while JWK relies on these, using gencrypto apis has
28
* no dependency at all on any JOSE type.
29
*/
30
31
enum
lws_gencrypto_kty
{
32
LWS_GENCRYPTO_KTY_UNKNOWN
,
33
34
LWS_GENCRYPTO_KTY_OCT
,
35
LWS_GENCRYPTO_KTY_RSA
,
36
LWS_GENCRYPTO_KTY_EC
,
37
LWS_GENCRYPTO_KTY_OKP
38
};
39
40
/*
41
* Keytypes where the same element name is reused must all agree to put the
42
* same-named element at the same e[] index. It's because when used with jwk,
43
* we parse and store in incoming key data, but we may not be informed of the
44
* definitive keytype until the end.
45
*/
46
47
enum
lws_gencrypto_oct_tok
{
48
LWS_GENCRYPTO_OCT_KEYEL_K
,
/* note... same offset as AES K */
49
50
LWS_GENCRYPTO_OCT_KEYEL_COUNT
51
};
52
53
enum
lws_gencrypto_rsa_tok
{
54
LWS_GENCRYPTO_RSA_KEYEL_E
,
55
LWS_GENCRYPTO_RSA_KEYEL_N
,
56
LWS_GENCRYPTO_RSA_KEYEL_D
,
/* note... same offset as EC D */
57
LWS_GENCRYPTO_RSA_KEYEL_P
,
58
LWS_GENCRYPTO_RSA_KEYEL_Q
,
59
LWS_GENCRYPTO_RSA_KEYEL_DP
,
60
LWS_GENCRYPTO_RSA_KEYEL_DQ
,
61
LWS_GENCRYPTO_RSA_KEYEL_QI
,
62
63
/* we don't actively use these if given, but may come from COSE */
64
65
LWS_GENCRYPTO_RSA_KEYEL_OTHER
,
66
LWS_GENCRYPTO_RSA_KEYEL_RI
,
67
LWS_GENCRYPTO_RSA_KEYEL_DI
,
68
LWS_GENCRYPTO_RSA_KEYEL_TI
,
69
70
LWS_GENCRYPTO_RSA_KEYEL_COUNT
71
};
72
73
enum
lws_gencrypto_ec_tok
{
74
LWS_GENCRYPTO_EC_KEYEL_CRV
,
75
LWS_GENCRYPTO_EC_KEYEL_X
,
76
/* note... same offset as RSA D */
77
LWS_GENCRYPTO_EC_KEYEL_D
=
LWS_GENCRYPTO_RSA_KEYEL_D
,
78
LWS_GENCRYPTO_EC_KEYEL_Y
,
79
80
LWS_GENCRYPTO_EC_KEYEL_COUNT
81
};
82
83
enum
lws_gencrypto_aes_tok
{
84
/* note... same offset as OCT K */
85
LWS_GENCRYPTO_AES_KEYEL_K
=
LWS_GENCRYPTO_OCT_KEYEL_K
,
86
87
LWS_GENCRYPTO_AES_KEYEL_COUNT
88
};
89
90
enum
lws_gencrypto_okp_tok
{
91
LWS_GENCRYPTO_OKP_KEYEL_CRV
,
92
LWS_GENCRYPTO_OKP_KEYEL_X
,
93
/* note... same offset as RSA D */
94
LWS_GENCRYPTO_OKP_KEYEL_D
=
LWS_GENCRYPTO_RSA_KEYEL_D
,
95
96
LWS_GENCRYPTO_OKP_KEYEL_COUNT
97
};
98
99
/* largest number of key elements for any algorithm */
100
#define LWS_GENCRYPTO_MAX_KEYEL_COUNT LWS_GENCRYPTO_RSA_KEYEL_COUNT
101
102
/* this "stretchy" type holds individual key element data in binary form.
103
* It's typcially used in an array with the layout mapping the element index to
104
* the key element meaning defined by the enums above. An array of these of
105
* length LWS_GENCRYPTO_MAX_KEYEL_COUNT can define key elements for any key
106
* type.
107
*/
108
109
typedef
struct
lws_gencrypto_keyelem
{
110
uint8_t
*
buf
;
111
uint32_t
len
;
112
}
lws_gc_elem_t
;
113
114
123
LWS_VISIBLE
LWS_EXTERN
int
124
lws_gencrypto_bits_to_bytes
(
int
bits);
125
134
LWS_VISIBLE
LWS_EXTERN
int
135
lws_base64_size
(
int
bytes);
136
146
LWS_VISIBLE
LWS_EXTERN
size_t
147
lws_gencrypto_padded_length
(
size_t
block_size,
size_t
len);
uint32_t
unsigned int uint32_t
Definition
libwebsockets.h:697
LWS_EXTERN
#define LWS_EXTERN
Definition
libwebsockets.h:296
uint8_t
unsigned char uint8_t
Definition
libwebsockets.h:699
LWS_VISIBLE
#define LWS_VISIBLE
Definition
libwebsockets.h:291
lws_gencrypto_ec_tok
lws_gencrypto_ec_tok
Definition
lws-gencrypto.h:73
LWS_GENCRYPTO_EC_KEYEL_X
@ LWS_GENCRYPTO_EC_KEYEL_X
Definition
lws-gencrypto.h:75
LWS_GENCRYPTO_EC_KEYEL_COUNT
@ LWS_GENCRYPTO_EC_KEYEL_COUNT
Definition
lws-gencrypto.h:80
LWS_GENCRYPTO_EC_KEYEL_D
@ LWS_GENCRYPTO_EC_KEYEL_D
Definition
lws-gencrypto.h:77
LWS_GENCRYPTO_EC_KEYEL_CRV
@ LWS_GENCRYPTO_EC_KEYEL_CRV
Definition
lws-gencrypto.h:74
LWS_GENCRYPTO_EC_KEYEL_Y
@ LWS_GENCRYPTO_EC_KEYEL_Y
Definition
lws-gencrypto.h:78
lws_base64_size
LWS_VISIBLE LWS_EXTERN int lws_base64_size(int bytes)
lws_gencrypto_oct_tok
lws_gencrypto_oct_tok
Definition
lws-gencrypto.h:47
LWS_GENCRYPTO_OCT_KEYEL_COUNT
@ LWS_GENCRYPTO_OCT_KEYEL_COUNT
Definition
lws-gencrypto.h:50
LWS_GENCRYPTO_OCT_KEYEL_K
@ LWS_GENCRYPTO_OCT_KEYEL_K
Definition
lws-gencrypto.h:48
lws_gencrypto_keyelem::len
uint32_t len
Definition
lws-gencrypto.h:111
lws_gencrypto_rsa_tok
lws_gencrypto_rsa_tok
Definition
lws-gencrypto.h:53
LWS_GENCRYPTO_RSA_KEYEL_D
@ LWS_GENCRYPTO_RSA_KEYEL_D
Definition
lws-gencrypto.h:56
LWS_GENCRYPTO_RSA_KEYEL_DP
@ LWS_GENCRYPTO_RSA_KEYEL_DP
Definition
lws-gencrypto.h:59
LWS_GENCRYPTO_RSA_KEYEL_QI
@ LWS_GENCRYPTO_RSA_KEYEL_QI
Definition
lws-gencrypto.h:61
LWS_GENCRYPTO_RSA_KEYEL_COUNT
@ LWS_GENCRYPTO_RSA_KEYEL_COUNT
Definition
lws-gencrypto.h:70
LWS_GENCRYPTO_RSA_KEYEL_OTHER
@ LWS_GENCRYPTO_RSA_KEYEL_OTHER
Definition
lws-gencrypto.h:65
LWS_GENCRYPTO_RSA_KEYEL_RI
@ LWS_GENCRYPTO_RSA_KEYEL_RI
Definition
lws-gencrypto.h:66
LWS_GENCRYPTO_RSA_KEYEL_TI
@ LWS_GENCRYPTO_RSA_KEYEL_TI
Definition
lws-gencrypto.h:68
LWS_GENCRYPTO_RSA_KEYEL_E
@ LWS_GENCRYPTO_RSA_KEYEL_E
Definition
lws-gencrypto.h:54
LWS_GENCRYPTO_RSA_KEYEL_DQ
@ LWS_GENCRYPTO_RSA_KEYEL_DQ
Definition
lws-gencrypto.h:60
LWS_GENCRYPTO_RSA_KEYEL_N
@ LWS_GENCRYPTO_RSA_KEYEL_N
Definition
lws-gencrypto.h:55
LWS_GENCRYPTO_RSA_KEYEL_Q
@ LWS_GENCRYPTO_RSA_KEYEL_Q
Definition
lws-gencrypto.h:58
LWS_GENCRYPTO_RSA_KEYEL_P
@ LWS_GENCRYPTO_RSA_KEYEL_P
Definition
lws-gencrypto.h:57
LWS_GENCRYPTO_RSA_KEYEL_DI
@ LWS_GENCRYPTO_RSA_KEYEL_DI
Definition
lws-gencrypto.h:67
lws_gencrypto_okp_tok
lws_gencrypto_okp_tok
Definition
lws-gencrypto.h:90
LWS_GENCRYPTO_OKP_KEYEL_CRV
@ LWS_GENCRYPTO_OKP_KEYEL_CRV
Definition
lws-gencrypto.h:91
LWS_GENCRYPTO_OKP_KEYEL_D
@ LWS_GENCRYPTO_OKP_KEYEL_D
Definition
lws-gencrypto.h:94
LWS_GENCRYPTO_OKP_KEYEL_COUNT
@ LWS_GENCRYPTO_OKP_KEYEL_COUNT
Definition
lws-gencrypto.h:96
LWS_GENCRYPTO_OKP_KEYEL_X
@ LWS_GENCRYPTO_OKP_KEYEL_X
Definition
lws-gencrypto.h:92
lws_gencrypto_kty
lws_gencrypto_kty
Definition
lws-gencrypto.h:31
LWS_GENCRYPTO_KTY_EC
@ LWS_GENCRYPTO_KTY_EC
Definition
lws-gencrypto.h:36
LWS_GENCRYPTO_KTY_RSA
@ LWS_GENCRYPTO_KTY_RSA
Definition
lws-gencrypto.h:35
LWS_GENCRYPTO_KTY_OKP
@ LWS_GENCRYPTO_KTY_OKP
Definition
lws-gencrypto.h:37
LWS_GENCRYPTO_KTY_UNKNOWN
@ LWS_GENCRYPTO_KTY_UNKNOWN
Definition
lws-gencrypto.h:32
LWS_GENCRYPTO_KTY_OCT
@ LWS_GENCRYPTO_KTY_OCT
Definition
lws-gencrypto.h:34
lws_gencrypto_keyelem::buf
uint8_t * buf
Definition
lws-gencrypto.h:110
lws_gc_elem_t
struct lws_gencrypto_keyelem lws_gc_elem_t
lws_gencrypto_bits_to_bytes
LWS_VISIBLE LWS_EXTERN int lws_gencrypto_bits_to_bytes(int bits)
lws_gencrypto_aes_tok
lws_gencrypto_aes_tok
Definition
lws-gencrypto.h:83
LWS_GENCRYPTO_AES_KEYEL_K
@ LWS_GENCRYPTO_AES_KEYEL_K
Definition
lws-gencrypto.h:85
LWS_GENCRYPTO_AES_KEYEL_COUNT
@ LWS_GENCRYPTO_AES_KEYEL_COUNT
Definition
lws-gencrypto.h:87
lws_gencrypto_padded_length
LWS_VISIBLE LWS_EXTERN size_t lws_gencrypto_padded_length(size_t block_size, size_t len)
lws_gencrypto_keyelem
Definition
lws-gencrypto.h:109
include
libwebsockets
lws-gencrypto.h
Generated on
for libwebsockets by
1.18.0