libwebsockets
Lightweight C library for HTML5 websockets
Toggle main menu visibility
class="ui-resizable-handle">
Loading...
Searching...
No Matches
lws-genaes.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
35
36
#if defined(LWS_WITH_MBEDTLS)
37
#include <mbedtls/aes.h>
38
#include <mbedtls/gcm.h>
39
#endif
40
41
enum
enum_aes_modes
{
42
LWS_GAESM_CBC
,
43
LWS_GAESM_CFB128
,
44
LWS_GAESM_CFB8
,
45
LWS_GAESM_CTR
,
46
LWS_GAESM_ECB
,
47
LWS_GAESM_OFB
,
48
LWS_GAESM_XTS
,
/* care... requires double-length key */
49
LWS_GAESM_GCM
,
50
LWS_GAESM_KW
,
51
};
52
53
enum
enum_aes_operation
{
54
LWS_GAESO_ENC
,
55
LWS_GAESO_DEC
56
};
57
58
enum
enum_aes_padding
{
59
LWS_GAESP_NO_PADDING
,
60
LWS_GAESP_WITH_PADDING
61
};
62
63
/* include/libwebsockets/lws-jwk.h must be included before this */
64
65
#define LWS_AES_BLOCKSIZE 128
66
#define LWS_AES_CBC_BLOCKLEN 16
67
68
struct
lws_genaes_ctx
{
69
#if defined(LWS_WITH_MBEDTLS)
70
union
{
71
mbedtls_aes_context
ctx
;
72
#if defined(MBEDTLS_CIPHER_MODE_XTS)
73
mbedtls_aes_xts_context ctx_xts;
74
#endif
75
mbedtls_gcm_context ctx_gcm;
76
} u;
77
#elif defined(LWS_WITH_SCHANNEL)
78
struct
{
79
void
*hAlg;
80
void
*hKey;
81
void
*pbMacContext;
82
size_t
cbMacContext;
83
void
*pbNonce;
84
size_t
cbNonce;
85
void
*pbTag;
86
size_t
cbTag;
87
void
*pbAuthData;
88
size_t
cbAuthData;
89
unsigned
char
iv[
LWS_AES_CBC_BLOCKLEN
];
/* Internal IV buffer for chaining */
90
} u;
91
#elif defined(LWS_WITH_GNUTLS)
92
gnutls_cipher_hd_t
ctx
;
93
int
gnutls_gcm_initialized;
94
#elif defined(LWS_WITH_BEARSSL)
95
union
{
96
br_aes_ct_cbcenc_keys cbcenc;
97
br_aes_ct_cbcdec_keys cbcdec;
98
br_aes_ct_ctr_keys ctr;
99
} u;
100
br_gcm_context gcm;
101
const
br_block_cbcenc_class *cbcenc_vtable;
102
const
br_block_cbcdec_class *cbcdec_vtable;
103
const
br_block_ctr_class *ctr_vtable;
104
#else
105
EVP_CIPHER_CTX *
ctx
;
106
const
EVP_CIPHER *
cipher
;
107
ENGINE *
engine
;
108
char
init
;
109
#endif
110
unsigned
char
tag
[16];
111
struct
lws_gencrypto_keyelem
*
k
;
112
enum
enum_aes_operation
op
;
113
enum
enum_aes_modes
mode
;
114
enum
enum_aes_padding
padding
;
115
int
taglen
;
116
char
underway
;
117
#if !defined(LWS_WITH_MBEDTLS) && !defined(LWS_WITH_OPENSSL)
118
unsigned
char
buf
[16];
/* partial block */
119
int
buf_len
;
/* length of partial block */
120
#endif
121
};
122
139
LWS_VISIBLE
LWS_EXTERN
int
140
lws_genaes_create
(
struct
lws_genaes_ctx
*ctx,
enum
enum_aes_operation
op,
141
enum
enum_aes_modes
mode,
struct
lws_gencrypto_keyelem
*el,
142
enum
enum_aes_padding
padding,
void
*engine);
143
156
LWS_VISIBLE
LWS_EXTERN
int
157
lws_genaes_destroy
(
struct
lws_genaes_ctx
*ctx,
unsigned
char
*tag,
size_t
tlen);
158
194
LWS_VISIBLE
LWS_EXTERN
int
195
lws_genaes_crypt
(
struct
lws_genaes_ctx
*ctx,
const
uint8_t
*in,
size_t
len
,
196
uint8_t
*out,
197
uint8_t
*iv_or_nonce_ctr_or_data_unit_16,
198
uint8_t
*stream_block_16,
199
size_t
*nc_or_iv_off,
int
taglen);
200
lws_genaes_ctx::cipher
const EVP_CIPHER * cipher
Definition
lws-genaes.h:106
lws_genaes_ctx::taglen
int taglen
Definition
lws-genaes.h:115
lws_genaes_ctx::engine
ENGINE * engine
Definition
lws-genaes.h:107
lws_genaes_ctx::mode
enum enum_aes_modes mode
Definition
lws-genaes.h:113
lws_genaes_ctx::underway
char underway
Definition
lws-genaes.h:116
lws_genaes_ctx::buf_len
int buf_len
Definition
lws-genaes.h:119
lws_genaes_ctx::op
enum enum_aes_operation op
Definition
lws-genaes.h:112
lws_genaes_ctx::ctx
EVP_CIPHER_CTX * ctx
Definition
lws-genaes.h:105
lws_genaes_ctx::buf
unsigned char buf[16]
Definition
lws-genaes.h:118
lws_genaes_ctx::tag
unsigned char tag[16]
Definition
lws-genaes.h:110
lws_genaes_ctx::k
struct lws_gencrypto_keyelem * k
Definition
lws-genaes.h:111
lws_genaes_ctx::init
char init
Definition
lws-genaes.h:108
lws_genaes_ctx::padding
enum enum_aes_padding padding
Definition
lws-genaes.h:114
enum_aes_modes
enum_aes_modes
Definition
lws-genaes.h:41
enum_aes_operation
enum_aes_operation
Definition
lws-genaes.h:53
lws_genaes_crypt
LWS_VISIBLE LWS_EXTERN int lws_genaes_crypt(struct lws_genaes_ctx *ctx, const uint8_t *in, size_t len, uint8_t *out, uint8_t *iv_or_nonce_ctr_or_data_unit_16, uint8_t *stream_block_16, size_t *nc_or_iv_off, int taglen)
enum_aes_padding
enum_aes_padding
Definition
lws-genaes.h:58
lws_genaes_destroy
LWS_VISIBLE LWS_EXTERN int lws_genaes_destroy(struct lws_genaes_ctx *ctx, unsigned char *tag, size_t tlen)
lws_genaes_create
LWS_VISIBLE LWS_EXTERN int lws_genaes_create(struct lws_genaes_ctx *ctx, enum enum_aes_operation op, enum enum_aes_modes mode, struct lws_gencrypto_keyelem *el, enum enum_aes_padding padding, void *engine)
LWS_AES_CBC_BLOCKLEN
#define LWS_AES_CBC_BLOCKLEN
Definition
lws-genaes.h:66
LWS_GAESM_CFB128
@ LWS_GAESM_CFB128
Definition
lws-genaes.h:43
LWS_GAESM_CBC
@ LWS_GAESM_CBC
Definition
lws-genaes.h:42
LWS_GAESM_OFB
@ LWS_GAESM_OFB
Definition
lws-genaes.h:47
LWS_GAESM_KW
@ LWS_GAESM_KW
Definition
lws-genaes.h:50
LWS_GAESM_CFB8
@ LWS_GAESM_CFB8
Definition
lws-genaes.h:44
LWS_GAESM_ECB
@ LWS_GAESM_ECB
Definition
lws-genaes.h:46
LWS_GAESM_GCM
@ LWS_GAESM_GCM
Definition
lws-genaes.h:49
LWS_GAESM_XTS
@ LWS_GAESM_XTS
Definition
lws-genaes.h:48
LWS_GAESM_CTR
@ LWS_GAESM_CTR
Definition
lws-genaes.h:45
LWS_GAESO_DEC
@ LWS_GAESO_DEC
Definition
lws-genaes.h:55
LWS_GAESO_ENC
@ LWS_GAESO_ENC
Definition
lws-genaes.h:54
LWS_GAESP_NO_PADDING
@ LWS_GAESP_NO_PADDING
Definition
lws-genaes.h:59
LWS_GAESP_WITH_PADDING
@ LWS_GAESP_WITH_PADDING
Definition
lws-genaes.h:60
lws_genaes_ctx
Definition
lws-genaes.h:68
LWS_EXTERN
#define LWS_EXTERN
Definition
libwebsockets.h:296
uint8_t
unsigned char uint8_t
Definition
libwebsockets.h:697
LWS_VISIBLE
#define LWS_VISIBLE
Definition
libwebsockets.h:291
lws_gencrypto_keyelem::len
uint32_t len
Definition
lws-gencrypto.h:111
lws_gencrypto_keyelem
Definition
lws-gencrypto.h:109
include
libwebsockets
lws-genaes.h
Generated on
for libwebsockets by
1.18.0