1*1c60b9acSAndroid Build Coastguard Worker /*
2*1c60b9acSAndroid Build Coastguard Worker * lws-api-test-gencrypto - lws-genaes
3*1c60b9acSAndroid Build Coastguard Worker *
4*1c60b9acSAndroid Build Coastguard Worker * Written in 2010-2018 by Andy Green <[email protected]>
5*1c60b9acSAndroid Build Coastguard Worker *
6*1c60b9acSAndroid Build Coastguard Worker * This file is made available under the Creative Commons CC0 1.0
7*1c60b9acSAndroid Build Coastguard Worker * Universal Public Domain Dedication.
8*1c60b9acSAndroid Build Coastguard Worker */
9*1c60b9acSAndroid Build Coastguard Worker
10*1c60b9acSAndroid Build Coastguard Worker #include <libwebsockets.h>
11*1c60b9acSAndroid Build Coastguard Worker
12*1c60b9acSAndroid Build Coastguard Worker
13*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CBC))) || \
14*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cbc))
15*1c60b9acSAndroid Build Coastguard Worker
16*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
17*1c60b9acSAndroid Build Coastguard Worker /*
18*1c60b9acSAndroid Build Coastguard Worker * produced with (plaintext.txt contains "test plaintext\0\0")
19*1c60b9acSAndroid Build Coastguard Worker *
20*1c60b9acSAndroid Build Coastguard Worker * openssl enc -aes256 \
21*1c60b9acSAndroid Build Coastguard Worker * -K "0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210" \
22*1c60b9acSAndroid Build Coastguard Worker * -iv "0123456789abcdeffedcba9876543210"
23*1c60b9acSAndroid Build Coastguard Worker * -in plaintext.txt -out out.enc
24*1c60b9acSAndroid Build Coastguard Worker *
25*1c60b9acSAndroid Build Coastguard Worker */
26*1c60b9acSAndroid Build Coastguard Worker *cbc256 = (uint8_t *)"test plaintext\0\0",
27*1c60b9acSAndroid Build Coastguard Worker cbc256_enc[] = {
28*1c60b9acSAndroid Build Coastguard Worker 0x2b, 0x5d, 0xb2, 0xa8, 0x5a, 0x5a, 0xf4, 0x2e,
29*1c60b9acSAndroid Build Coastguard Worker 0xf7, 0xf9, 0xc5, 0x3c, 0x73, 0xef, 0x40, 0x88,
30*1c60b9acSAndroid Build Coastguard Worker }, cbc256_iv[] = {
31*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
32*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
33*1c60b9acSAndroid Build Coastguard Worker }, cbc256_key[] = {
34*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
35*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
36*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
37*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
38*1c60b9acSAndroid Build Coastguard Worker }
39*1c60b9acSAndroid Build Coastguard Worker ;
40*1c60b9acSAndroid Build Coastguard Worker
41*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_cbc(void)42*1c60b9acSAndroid Build Coastguard Worker test_genaes_cbc(void)
43*1c60b9acSAndroid Build Coastguard Worker {
44*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
45*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
46*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32];
47*1c60b9acSAndroid Build Coastguard Worker
48*1c60b9acSAndroid Build Coastguard Worker /*
49*1c60b9acSAndroid Build Coastguard Worker * As part of a jwk, these are allocated. But here we just use one as
50*1c60b9acSAndroid Build Coastguard Worker * a wrapper on a static binary key.
51*1c60b9acSAndroid Build Coastguard Worker */
52*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)cbc256_key;
53*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(cbc256_key);
54*1c60b9acSAndroid Build Coastguard Worker
55*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CBC, &e, 0, NULL)) {
56*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
57*1c60b9acSAndroid Build Coastguard Worker return 1;
58*1c60b9acSAndroid Build Coastguard Worker }
59*1c60b9acSAndroid Build Coastguard Worker
60*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv,
61*1c60b9acSAndroid Build Coastguard Worker NULL, NULL, 0)) {
62*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
63*1c60b9acSAndroid Build Coastguard Worker goto bail;
64*1c60b9acSAndroid Build Coastguard Worker }
65*1c60b9acSAndroid Build Coastguard Worker
66*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
67*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy enc failed\n", __func__);
68*1c60b9acSAndroid Build Coastguard Worker return -1;
69*1c60b9acSAndroid Build Coastguard Worker }
70*1c60b9acSAndroid Build Coastguard Worker
71*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) {
72*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
73*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
74*1c60b9acSAndroid Build Coastguard Worker return -1;
75*1c60b9acSAndroid Build Coastguard Worker }
76*1c60b9acSAndroid Build Coastguard Worker
77*1c60b9acSAndroid Build Coastguard Worker
78*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, 0, NULL)) {
79*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
80*1c60b9acSAndroid Build Coastguard Worker return -1;
81*1c60b9acSAndroid Build Coastguard Worker }
82*1c60b9acSAndroid Build Coastguard Worker
83*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv,
84*1c60b9acSAndroid Build Coastguard Worker NULL, NULL, 0)) {
85*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
86*1c60b9acSAndroid Build Coastguard Worker goto bail;
87*1c60b9acSAndroid Build Coastguard Worker }
88*1c60b9acSAndroid Build Coastguard Worker
89*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
90*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy dec failed\n", __func__);
91*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res1, 16);
92*1c60b9acSAndroid Build Coastguard Worker return -1;
93*1c60b9acSAndroid Build Coastguard Worker }
94*1c60b9acSAndroid Build Coastguard Worker
95*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(cbc256, res1, 16)) {
96*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
97*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
98*1c60b9acSAndroid Build Coastguard Worker return -1;
99*1c60b9acSAndroid Build Coastguard Worker }
100*1c60b9acSAndroid Build Coastguard Worker
101*1c60b9acSAndroid Build Coastguard Worker return 0;
102*1c60b9acSAndroid Build Coastguard Worker
103*1c60b9acSAndroid Build Coastguard Worker bail:
104*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
105*1c60b9acSAndroid Build Coastguard Worker
106*1c60b9acSAndroid Build Coastguard Worker return -1;
107*1c60b9acSAndroid Build Coastguard Worker }
108*1c60b9acSAndroid Build Coastguard Worker #endif
109*1c60b9acSAndroid Build Coastguard Worker
110*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \
111*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb128))
112*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
113*1c60b9acSAndroid Build Coastguard Worker /*
114*1c60b9acSAndroid Build Coastguard Worker * produced with (plaintext.txt contains "test plaintext\0\0")
115*1c60b9acSAndroid Build Coastguard Worker *
116*1c60b9acSAndroid Build Coastguard Worker * openssl enc -aes-128-cfb \
117*1c60b9acSAndroid Build Coastguard Worker * -K "0123456789abcdeffedcba9876543210" \
118*1c60b9acSAndroid Build Coastguard Worker * -iv "0123456789abcdeffedcba9876543210"
119*1c60b9acSAndroid Build Coastguard Worker * -in plaintext.txt -out out.enc
120*1c60b9acSAndroid Build Coastguard Worker *
121*1c60b9acSAndroid Build Coastguard Worker */
122*1c60b9acSAndroid Build Coastguard Worker *cfb128 = (uint8_t *)"test plaintext\0\0",
123*1c60b9acSAndroid Build Coastguard Worker cfb128_enc[] = {
124*1c60b9acSAndroid Build Coastguard Worker 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04,
125*1c60b9acSAndroid Build Coastguard Worker 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71
126*1c60b9acSAndroid Build Coastguard Worker }, cfb128_iv[] = {
127*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
128*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
129*1c60b9acSAndroid Build Coastguard Worker }, cfb128_key[] = {
130*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
131*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
132*1c60b9acSAndroid Build Coastguard Worker };
133*1c60b9acSAndroid Build Coastguard Worker
134*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_cfb128(void)135*1c60b9acSAndroid Build Coastguard Worker test_genaes_cfb128(void)
136*1c60b9acSAndroid Build Coastguard Worker {
137*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
138*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
139*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32];
140*1c60b9acSAndroid Build Coastguard Worker size_t iv_off = 0;
141*1c60b9acSAndroid Build Coastguard Worker
142*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)cfb128_key;
143*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(cfb128_key);
144*1c60b9acSAndroid Build Coastguard Worker
145*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CFB128, &e, 0, NULL)) {
146*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
147*1c60b9acSAndroid Build Coastguard Worker return 1;
148*1c60b9acSAndroid Build Coastguard Worker }
149*1c60b9acSAndroid Build Coastguard Worker
150*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, cfb128, 16, res, (uint8_t *)cfb128_iv,
151*1c60b9acSAndroid Build Coastguard Worker NULL, &iv_off, 0)) {
152*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
153*1c60b9acSAndroid Build Coastguard Worker goto bail;
154*1c60b9acSAndroid Build Coastguard Worker }
155*1c60b9acSAndroid Build Coastguard Worker
156*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
157*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
158*1c60b9acSAndroid Build Coastguard Worker return -1;
159*1c60b9acSAndroid Build Coastguard Worker }
160*1c60b9acSAndroid Build Coastguard Worker
161*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(cfb128_enc, res, 16)) {
162*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
163*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
164*1c60b9acSAndroid Build Coastguard Worker return -1;
165*1c60b9acSAndroid Build Coastguard Worker }
166*1c60b9acSAndroid Build Coastguard Worker
167*1c60b9acSAndroid Build Coastguard Worker iv_off = 0;
168*1c60b9acSAndroid Build Coastguard Worker
169*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CFB128, &e, 0, NULL)) {
170*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
171*1c60b9acSAndroid Build Coastguard Worker return -1;
172*1c60b9acSAndroid Build Coastguard Worker }
173*1c60b9acSAndroid Build Coastguard Worker
174*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cfb128_iv,
175*1c60b9acSAndroid Build Coastguard Worker NULL, &iv_off, 0)) {
176*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
177*1c60b9acSAndroid Build Coastguard Worker goto bail;
178*1c60b9acSAndroid Build Coastguard Worker }
179*1c60b9acSAndroid Build Coastguard Worker
180*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
181*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
182*1c60b9acSAndroid Build Coastguard Worker return -1;
183*1c60b9acSAndroid Build Coastguard Worker }
184*1c60b9acSAndroid Build Coastguard Worker
185*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(cfb128, res1, 16)) {
186*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
187*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res1, 16);
188*1c60b9acSAndroid Build Coastguard Worker return -1;
189*1c60b9acSAndroid Build Coastguard Worker }
190*1c60b9acSAndroid Build Coastguard Worker
191*1c60b9acSAndroid Build Coastguard Worker return 0;
192*1c60b9acSAndroid Build Coastguard Worker
193*1c60b9acSAndroid Build Coastguard Worker bail:
194*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
195*1c60b9acSAndroid Build Coastguard Worker
196*1c60b9acSAndroid Build Coastguard Worker return -1;
197*1c60b9acSAndroid Build Coastguard Worker }
198*1c60b9acSAndroid Build Coastguard Worker #endif
199*1c60b9acSAndroid Build Coastguard Worker
200*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \
201*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb8))
202*1c60b9acSAndroid Build Coastguard Worker
203*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
204*1c60b9acSAndroid Build Coastguard Worker /*
205*1c60b9acSAndroid Build Coastguard Worker * produced with (plaintext.txt contains "test plaintext\0\0")
206*1c60b9acSAndroid Build Coastguard Worker *
207*1c60b9acSAndroid Build Coastguard Worker * openssl enc -aes-128-cfb8 \
208*1c60b9acSAndroid Build Coastguard Worker * -K "0123456789abcdeffedcba9876543210" \
209*1c60b9acSAndroid Build Coastguard Worker * -iv "0123456789abcdeffedcba9876543210"
210*1c60b9acSAndroid Build Coastguard Worker * -in plaintext.txt -out out.enc
211*1c60b9acSAndroid Build Coastguard Worker *
212*1c60b9acSAndroid Build Coastguard Worker */
213*1c60b9acSAndroid Build Coastguard Worker *cfb8 = (uint8_t *)"test plaintext\0\0",
214*1c60b9acSAndroid Build Coastguard Worker cfb8_enc[] = {
215*1c60b9acSAndroid Build Coastguard Worker 0xd2, 0x91, 0x06, 0x2d, 0x1b, 0x1e, 0x9b, 0x39,
216*1c60b9acSAndroid Build Coastguard Worker 0xa6, 0x65, 0x8e, 0xbe, 0x68, 0x32, 0x3d, 0xab
217*1c60b9acSAndroid Build Coastguard Worker }, cfb8_iv[] = {
218*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
219*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
220*1c60b9acSAndroid Build Coastguard Worker }, cfb8_key[] = {
221*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
222*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
223*1c60b9acSAndroid Build Coastguard Worker };
224*1c60b9acSAndroid Build Coastguard Worker
225*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_cfb8(void)226*1c60b9acSAndroid Build Coastguard Worker test_genaes_cfb8(void)
227*1c60b9acSAndroid Build Coastguard Worker {
228*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
229*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
230*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32];
231*1c60b9acSAndroid Build Coastguard Worker
232*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)cfb8_key;
233*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(cfb8_key);
234*1c60b9acSAndroid Build Coastguard Worker
235*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CFB8, &e, 0, NULL)) {
236*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
237*1c60b9acSAndroid Build Coastguard Worker return 1;
238*1c60b9acSAndroid Build Coastguard Worker }
239*1c60b9acSAndroid Build Coastguard Worker
240*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, cfb8, 16, res, (uint8_t *)cfb8_iv,
241*1c60b9acSAndroid Build Coastguard Worker NULL, NULL, 0)) {
242*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
243*1c60b9acSAndroid Build Coastguard Worker goto bail;
244*1c60b9acSAndroid Build Coastguard Worker }
245*1c60b9acSAndroid Build Coastguard Worker
246*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
247*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
248*1c60b9acSAndroid Build Coastguard Worker return -1;
249*1c60b9acSAndroid Build Coastguard Worker }
250*1c60b9acSAndroid Build Coastguard Worker
251*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(cfb8_enc, res, 16)) {
252*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
253*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
254*1c60b9acSAndroid Build Coastguard Worker return -1;
255*1c60b9acSAndroid Build Coastguard Worker }
256*1c60b9acSAndroid Build Coastguard Worker
257*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CFB8, &e, 0, NULL)) {
258*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
259*1c60b9acSAndroid Build Coastguard Worker return -1;
260*1c60b9acSAndroid Build Coastguard Worker }
261*1c60b9acSAndroid Build Coastguard Worker
262*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)cfb8_iv,
263*1c60b9acSAndroid Build Coastguard Worker NULL, NULL, 0)) {
264*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
265*1c60b9acSAndroid Build Coastguard Worker goto bail;
266*1c60b9acSAndroid Build Coastguard Worker }
267*1c60b9acSAndroid Build Coastguard Worker
268*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
269*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
270*1c60b9acSAndroid Build Coastguard Worker return -1;
271*1c60b9acSAndroid Build Coastguard Worker }
272*1c60b9acSAndroid Build Coastguard Worker
273*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(cfb8, res1, 16)) {
274*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
275*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res1, 16);
276*1c60b9acSAndroid Build Coastguard Worker return -1;
277*1c60b9acSAndroid Build Coastguard Worker }
278*1c60b9acSAndroid Build Coastguard Worker
279*1c60b9acSAndroid Build Coastguard Worker return 0;
280*1c60b9acSAndroid Build Coastguard Worker
281*1c60b9acSAndroid Build Coastguard Worker bail:
282*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
283*1c60b9acSAndroid Build Coastguard Worker
284*1c60b9acSAndroid Build Coastguard Worker return -1;
285*1c60b9acSAndroid Build Coastguard Worker }
286*1c60b9acSAndroid Build Coastguard Worker #endif
287*1c60b9acSAndroid Build Coastguard Worker
288*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CTR))) || \
289*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ctr))
290*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
291*1c60b9acSAndroid Build Coastguard Worker /*
292*1c60b9acSAndroid Build Coastguard Worker * produced with (plaintext.txt contains "test plaintext\0\0")
293*1c60b9acSAndroid Build Coastguard Worker *
294*1c60b9acSAndroid Build Coastguard Worker * openssl enc -aes-128-ctr \
295*1c60b9acSAndroid Build Coastguard Worker * -K "0123456789abcdeffedcba9876543210" \
296*1c60b9acSAndroid Build Coastguard Worker * -iv "0123456789abcdeffedcba9876543210"
297*1c60b9acSAndroid Build Coastguard Worker * -in plaintext.txt -out out.enc
298*1c60b9acSAndroid Build Coastguard Worker *
299*1c60b9acSAndroid Build Coastguard Worker */
300*1c60b9acSAndroid Build Coastguard Worker *ctr = (uint8_t *)"test plaintext\0\0",
301*1c60b9acSAndroid Build Coastguard Worker ctr_enc[] = {
302*1c60b9acSAndroid Build Coastguard Worker 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04,
303*1c60b9acSAndroid Build Coastguard Worker 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71
304*1c60b9acSAndroid Build Coastguard Worker }, ctr_iv[] = {
305*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
306*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
307*1c60b9acSAndroid Build Coastguard Worker }, ctr_key[] = {
308*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
309*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
310*1c60b9acSAndroid Build Coastguard Worker };
311*1c60b9acSAndroid Build Coastguard Worker
312*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_ctr(void)313*1c60b9acSAndroid Build Coastguard Worker test_genaes_ctr(void)
314*1c60b9acSAndroid Build Coastguard Worker {
315*1c60b9acSAndroid Build Coastguard Worker uint8_t nonce_counter[16], sb[16];
316*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
317*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
318*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32];
319*1c60b9acSAndroid Build Coastguard Worker size_t nc_off = 0;
320*1c60b9acSAndroid Build Coastguard Worker
321*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)ctr_key;
322*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(ctr_key);
323*1c60b9acSAndroid Build Coastguard Worker
324*1c60b9acSAndroid Build Coastguard Worker memset(sb, 0, sizeof(nonce_counter));
325*1c60b9acSAndroid Build Coastguard Worker memcpy(nonce_counter, ctr_iv, sizeof(ctr_iv));
326*1c60b9acSAndroid Build Coastguard Worker
327*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_CTR, &e, 0, NULL)) {
328*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
329*1c60b9acSAndroid Build Coastguard Worker return 1;
330*1c60b9acSAndroid Build Coastguard Worker }
331*1c60b9acSAndroid Build Coastguard Worker
332*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, ctr, 16, res, nonce_counter, sb, &nc_off, 0)) {
333*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
334*1c60b9acSAndroid Build Coastguard Worker goto bail;
335*1c60b9acSAndroid Build Coastguard Worker }
336*1c60b9acSAndroid Build Coastguard Worker
337*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
338*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
339*1c60b9acSAndroid Build Coastguard Worker return -1;
340*1c60b9acSAndroid Build Coastguard Worker }
341*1c60b9acSAndroid Build Coastguard Worker
342*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(ctr_enc, res, 16)) {
343*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
344*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
345*1c60b9acSAndroid Build Coastguard Worker return -1;
346*1c60b9acSAndroid Build Coastguard Worker }
347*1c60b9acSAndroid Build Coastguard Worker
348*1c60b9acSAndroid Build Coastguard Worker nc_off = 0;
349*1c60b9acSAndroid Build Coastguard Worker memset(sb , 0, sizeof(nonce_counter));
350*1c60b9acSAndroid Build Coastguard Worker memcpy(nonce_counter, ctr_iv, sizeof(ctr_iv));
351*1c60b9acSAndroid Build Coastguard Worker
352*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CTR, &e, 0, NULL)) {
353*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
354*1c60b9acSAndroid Build Coastguard Worker return -1;
355*1c60b9acSAndroid Build Coastguard Worker }
356*1c60b9acSAndroid Build Coastguard Worker
357*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, nonce_counter, sb, &nc_off, 0)) {
358*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
359*1c60b9acSAndroid Build Coastguard Worker goto bail;
360*1c60b9acSAndroid Build Coastguard Worker }
361*1c60b9acSAndroid Build Coastguard Worker
362*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
363*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
364*1c60b9acSAndroid Build Coastguard Worker return -1;
365*1c60b9acSAndroid Build Coastguard Worker }
366*1c60b9acSAndroid Build Coastguard Worker
367*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(ctr, res1, 16)) {
368*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
369*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res1, 16);
370*1c60b9acSAndroid Build Coastguard Worker return -1;
371*1c60b9acSAndroid Build Coastguard Worker }
372*1c60b9acSAndroid Build Coastguard Worker
373*1c60b9acSAndroid Build Coastguard Worker lws_explicit_bzero(sb, sizeof(sb));
374*1c60b9acSAndroid Build Coastguard Worker
375*1c60b9acSAndroid Build Coastguard Worker return 0;
376*1c60b9acSAndroid Build Coastguard Worker
377*1c60b9acSAndroid Build Coastguard Worker bail:
378*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
379*1c60b9acSAndroid Build Coastguard Worker
380*1c60b9acSAndroid Build Coastguard Worker return -1;
381*1c60b9acSAndroid Build Coastguard Worker }
382*1c60b9acSAndroid Build Coastguard Worker #endif
383*1c60b9acSAndroid Build Coastguard Worker
384*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS)) || \
385*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ecb))
386*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
387*1c60b9acSAndroid Build Coastguard Worker /*
388*1c60b9acSAndroid Build Coastguard Worker * produced with (plaintext.txt contains "test plaintext\0\0")
389*1c60b9acSAndroid Build Coastguard Worker *
390*1c60b9acSAndroid Build Coastguard Worker * openssl enc -aes-128-ecb \
391*1c60b9acSAndroid Build Coastguard Worker * -K "0123456789abcdeffedcba9876543210" \
392*1c60b9acSAndroid Build Coastguard Worker * -in plaintext.txt -out out.enc
393*1c60b9acSAndroid Build Coastguard Worker *
394*1c60b9acSAndroid Build Coastguard Worker */
395*1c60b9acSAndroid Build Coastguard Worker *ecb = (uint8_t *)"test plaintext\0\0",
396*1c60b9acSAndroid Build Coastguard Worker ecb_enc[] = {
397*1c60b9acSAndroid Build Coastguard Worker 0xf3, 0xe5, 0x6c, 0x80, 0x3a, 0xf1, 0xc4, 0xa0,
398*1c60b9acSAndroid Build Coastguard Worker 0x7e, 0xdf, 0x86, 0x0f, 0x6d, 0xca, 0x5d, 0x36,
399*1c60b9acSAndroid Build Coastguard Worker 0x17, 0x22, 0x37, 0x42, 0x47, 0x41, 0x67, 0x7d,
400*1c60b9acSAndroid Build Coastguard Worker 0x99, 0x25, 0x02, 0x6b, 0x6b, 0x8f, 0x9c, 0x7f
401*1c60b9acSAndroid Build Coastguard Worker }, ecb_key[] = {
402*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
403*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
404*1c60b9acSAndroid Build Coastguard Worker };
405*1c60b9acSAndroid Build Coastguard Worker
406*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_ecb(void)407*1c60b9acSAndroid Build Coastguard Worker test_genaes_ecb(void)
408*1c60b9acSAndroid Build Coastguard Worker {
409*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
410*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
411*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32];
412*1c60b9acSAndroid Build Coastguard Worker
413*1c60b9acSAndroid Build Coastguard Worker /*
414*1c60b9acSAndroid Build Coastguard Worker * As part of a jwk, these are allocated. But here we just use one as
415*1c60b9acSAndroid Build Coastguard Worker * a wrapper on a static binary key.
416*1c60b9acSAndroid Build Coastguard Worker */
417*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)ecb_key;
418*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(ecb_key);
419*1c60b9acSAndroid Build Coastguard Worker
420*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_ECB, &e, 0, NULL)) {
421*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
422*1c60b9acSAndroid Build Coastguard Worker return 1;
423*1c60b9acSAndroid Build Coastguard Worker }
424*1c60b9acSAndroid Build Coastguard Worker
425*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, ecb, 16, res, NULL, NULL, NULL, 0)) {
426*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
427*1c60b9acSAndroid Build Coastguard Worker goto bail;
428*1c60b9acSAndroid Build Coastguard Worker }
429*1c60b9acSAndroid Build Coastguard Worker
430*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
431*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
432*1c60b9acSAndroid Build Coastguard Worker return -1;
433*1c60b9acSAndroid Build Coastguard Worker }
434*1c60b9acSAndroid Build Coastguard Worker
435*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(ecb_enc, res, 16)) {
436*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
437*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
438*1c60b9acSAndroid Build Coastguard Worker return -1;
439*1c60b9acSAndroid Build Coastguard Worker }
440*1c60b9acSAndroid Build Coastguard Worker
441*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_ECB, &e, 0, NULL)) {
442*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
443*1c60b9acSAndroid Build Coastguard Worker return -1;
444*1c60b9acSAndroid Build Coastguard Worker }
445*1c60b9acSAndroid Build Coastguard Worker
446*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, NULL, NULL, NULL, 0)) {
447*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
448*1c60b9acSAndroid Build Coastguard Worker goto bail;
449*1c60b9acSAndroid Build Coastguard Worker }
450*1c60b9acSAndroid Build Coastguard Worker
451*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
452*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
453*1c60b9acSAndroid Build Coastguard Worker return -1;
454*1c60b9acSAndroid Build Coastguard Worker }
455*1c60b9acSAndroid Build Coastguard Worker
456*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(ecb, res1, 16)) {
457*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
458*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
459*1c60b9acSAndroid Build Coastguard Worker return -1;
460*1c60b9acSAndroid Build Coastguard Worker }
461*1c60b9acSAndroid Build Coastguard Worker
462*1c60b9acSAndroid Build Coastguard Worker return 0;
463*1c60b9acSAndroid Build Coastguard Worker
464*1c60b9acSAndroid Build Coastguard Worker bail:
465*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
466*1c60b9acSAndroid Build Coastguard Worker
467*1c60b9acSAndroid Build Coastguard Worker return -1;
468*1c60b9acSAndroid Build Coastguard Worker }
469*1c60b9acSAndroid Build Coastguard Worker #endif
470*1c60b9acSAndroid Build Coastguard Worker
471*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_OFB))) || \
472*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ofb))
473*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
474*1c60b9acSAndroid Build Coastguard Worker /*
475*1c60b9acSAndroid Build Coastguard Worker * produced with (plaintext.txt contains "test plaintext\0\0")
476*1c60b9acSAndroid Build Coastguard Worker *
477*1c60b9acSAndroid Build Coastguard Worker * openssl enc -aes-128-ofb \
478*1c60b9acSAndroid Build Coastguard Worker * -K "0123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210" \
479*1c60b9acSAndroid Build Coastguard Worker * -iv "0123456789abcdeffedcba9876543210"
480*1c60b9acSAndroid Build Coastguard Worker * -in plaintext.txt -out out.enc
481*1c60b9acSAndroid Build Coastguard Worker *
482*1c60b9acSAndroid Build Coastguard Worker */
483*1c60b9acSAndroid Build Coastguard Worker *ofb = (uint8_t *)"test plaintext\0\0",
484*1c60b9acSAndroid Build Coastguard Worker ofb_enc[] = {
485*1c60b9acSAndroid Build Coastguard Worker /* !!! ugh... openssl app produces this... */
486*1c60b9acSAndroid Build Coastguard Worker // 0xd2, 0x11, 0x86, 0xd7, 0xa9, 0x55, 0x59, 0x04,
487*1c60b9acSAndroid Build Coastguard Worker // 0x4f, 0x63, 0x7c, 0xb9, 0xc6, 0xa1, 0xc9, 0x71,
488*1c60b9acSAndroid Build Coastguard Worker /* but both OpenSSL and mbedTLS produce this */
489*1c60b9acSAndroid Build Coastguard Worker 0x11, 0x33, 0x6D, 0xFC, 0x88, 0x4C, 0x28, 0xBA,
490*1c60b9acSAndroid Build Coastguard Worker 0xD0, 0xF2, 0x6C, 0xBC, 0xDE, 0x4A, 0x56, 0x20
491*1c60b9acSAndroid Build Coastguard Worker }, ofb_iv[] = {
492*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
493*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
494*1c60b9acSAndroid Build Coastguard Worker }, ofb_key[] = {
495*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
496*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
497*1c60b9acSAndroid Build Coastguard Worker 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
498*1c60b9acSAndroid Build Coastguard Worker 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
499*1c60b9acSAndroid Build Coastguard Worker }
500*1c60b9acSAndroid Build Coastguard Worker ;
501*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_ofb(void)502*1c60b9acSAndroid Build Coastguard Worker test_genaes_ofb(void)
503*1c60b9acSAndroid Build Coastguard Worker {
504*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
505*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
506*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32];
507*1c60b9acSAndroid Build Coastguard Worker size_t iv_off = 0;
508*1c60b9acSAndroid Build Coastguard Worker
509*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)ofb_key;
510*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(ofb_key);
511*1c60b9acSAndroid Build Coastguard Worker
512*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_OFB, &e, 0, NULL)) {
513*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
514*1c60b9acSAndroid Build Coastguard Worker return 1;
515*1c60b9acSAndroid Build Coastguard Worker }
516*1c60b9acSAndroid Build Coastguard Worker
517*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, ofb, 16, res, (uint8_t *)ofb_iv, NULL,
518*1c60b9acSAndroid Build Coastguard Worker &iv_off, 0)) {
519*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
520*1c60b9acSAndroid Build Coastguard Worker goto bail;
521*1c60b9acSAndroid Build Coastguard Worker }
522*1c60b9acSAndroid Build Coastguard Worker
523*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
524*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
525*1c60b9acSAndroid Build Coastguard Worker return -1;
526*1c60b9acSAndroid Build Coastguard Worker }
527*1c60b9acSAndroid Build Coastguard Worker
528*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(ofb_enc, res, 16)) {
529*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
530*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
531*1c60b9acSAndroid Build Coastguard Worker return -1;
532*1c60b9acSAndroid Build Coastguard Worker }
533*1c60b9acSAndroid Build Coastguard Worker
534*1c60b9acSAndroid Build Coastguard Worker iv_off = 0;
535*1c60b9acSAndroid Build Coastguard Worker
536*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_OFB, &e, 0, NULL)) {
537*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
538*1c60b9acSAndroid Build Coastguard Worker return -1;
539*1c60b9acSAndroid Build Coastguard Worker }
540*1c60b9acSAndroid Build Coastguard Worker
541*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, (uint8_t *)ofb_iv, NULL,
542*1c60b9acSAndroid Build Coastguard Worker &iv_off, 0)) {
543*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
544*1c60b9acSAndroid Build Coastguard Worker goto bail;
545*1c60b9acSAndroid Build Coastguard Worker }
546*1c60b9acSAndroid Build Coastguard Worker
547*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
548*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
549*1c60b9acSAndroid Build Coastguard Worker return -1;
550*1c60b9acSAndroid Build Coastguard Worker }
551*1c60b9acSAndroid Build Coastguard Worker
552*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(ofb, res1, 16)) {
553*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
554*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
555*1c60b9acSAndroid Build Coastguard Worker return -1;
556*1c60b9acSAndroid Build Coastguard Worker }
557*1c60b9acSAndroid Build Coastguard Worker
558*1c60b9acSAndroid Build Coastguard Worker return 0;
559*1c60b9acSAndroid Build Coastguard Worker
560*1c60b9acSAndroid Build Coastguard Worker bail:
561*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
562*1c60b9acSAndroid Build Coastguard Worker
563*1c60b9acSAndroid Build Coastguard Worker return -1;
564*1c60b9acSAndroid Build Coastguard Worker }
565*1c60b9acSAndroid Build Coastguard Worker
566*1c60b9acSAndroid Build Coastguard Worker #endif
567*1c60b9acSAndroid Build Coastguard Worker
568*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_XTS))) || \
569*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_xts))
570*1c60b9acSAndroid Build Coastguard Worker
571*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
572*1c60b9acSAndroid Build Coastguard Worker /*
573*1c60b9acSAndroid Build Coastguard Worker * Fedora openssl tool doesn't support xts... this data produced
574*1c60b9acSAndroid Build Coastguard Worker * by testing on mbedtls + OpenSSL and getting the same result
575*1c60b9acSAndroid Build Coastguard Worker *
576*1c60b9acSAndroid Build Coastguard Worker * NOTICE that xts requires a double-length key... OpenSSL now checks
577*1c60b9acSAndroid Build Coastguard Worker * the key for duplication so we use a random key
578*1c60b9acSAndroid Build Coastguard Worker */
579*1c60b9acSAndroid Build Coastguard Worker *xts = (uint8_t *)"test plaintext\0\0",
580*1c60b9acSAndroid Build Coastguard Worker xts_enc[] = {
581*1c60b9acSAndroid Build Coastguard Worker 0x87, 0x83, 0x20, 0x8B, 0x15, 0x89, 0xA1, 0x13,
582*1c60b9acSAndroid Build Coastguard Worker 0xDC, 0xEA, 0x82, 0xB6, 0xFF, 0x8D, 0x76, 0x3A
583*1c60b9acSAndroid Build Coastguard Worker }, xts_key[] = {
584*1c60b9acSAndroid Build Coastguard Worker 0xa4, 0xd6, 0xa2, 0x1a, 0x3b, 0x34, 0x34, 0x43,
585*1c60b9acSAndroid Build Coastguard Worker 0x9a, 0xe2, 0x6a, 0x01, 0x1c, 0x73, 0x80, 0x3b,
586*1c60b9acSAndroid Build Coastguard Worker 0xdd, 0xf6, 0xd4, 0x37, 0x5e, 0x0e, 0x1c, 0x72,
587*1c60b9acSAndroid Build Coastguard Worker 0x8e, 0xe5, 0x18, 0x69, 0xfd, 0x08, 0x40, 0x2b,
588*1c60b9acSAndroid Build Coastguard Worker 0x98, 0xf9, 0x75, 0xa8, 0x36, 0xd5, 0x0f, 0xa2,
589*1c60b9acSAndroid Build Coastguard Worker 0x20, 0x04, 0x43, 0xa7, 0x3a, 0xa6, 0x4a, 0xdc,
590*1c60b9acSAndroid Build Coastguard Worker 0xe9, 0x54, 0x50, 0xfa, 0x38, 0xad, 0x6d, 0x96,
591*1c60b9acSAndroid Build Coastguard Worker 0x5f, 0x31, 0x9e, 0xcd, 0x33, 0x08, 0xa0, 0x44
592*1c60b9acSAndroid Build Coastguard Worker }
593*1c60b9acSAndroid Build Coastguard Worker ;
594*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_xts(void)595*1c60b9acSAndroid Build Coastguard Worker test_genaes_xts(void)
596*1c60b9acSAndroid Build Coastguard Worker {
597*1c60b9acSAndroid Build Coastguard Worker
598*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
599*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
600*1c60b9acSAndroid Build Coastguard Worker uint8_t res[32], res1[32], data_unit[16];
601*1c60b9acSAndroid Build Coastguard Worker
602*1c60b9acSAndroid Build Coastguard Worker memset(data_unit, 0, sizeof(data_unit));
603*1c60b9acSAndroid Build Coastguard Worker
604*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)xts_key;
605*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(xts_key);
606*1c60b9acSAndroid Build Coastguard Worker
607*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_XTS, &e, 0, NULL)) {
608*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
609*1c60b9acSAndroid Build Coastguard Worker return 1;
610*1c60b9acSAndroid Build Coastguard Worker }
611*1c60b9acSAndroid Build Coastguard Worker
612*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, xts, 16, res, data_unit, NULL, NULL, 0)) {
613*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt failed\n", __func__);
614*1c60b9acSAndroid Build Coastguard Worker goto bail;
615*1c60b9acSAndroid Build Coastguard Worker }
616*1c60b9acSAndroid Build Coastguard Worker
617*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
618*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
619*1c60b9acSAndroid Build Coastguard Worker return -1;
620*1c60b9acSAndroid Build Coastguard Worker }
621*1c60b9acSAndroid Build Coastguard Worker
622*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(xts_enc, res, 16)) {
623*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
624*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
625*1c60b9acSAndroid Build Coastguard Worker return -1;
626*1c60b9acSAndroid Build Coastguard Worker }
627*1c60b9acSAndroid Build Coastguard Worker
628*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_XTS, &e, 0, NULL)) {
629*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create dec failed\n", __func__);
630*1c60b9acSAndroid Build Coastguard Worker return -1;
631*1c60b9acSAndroid Build Coastguard Worker }
632*1c60b9acSAndroid Build Coastguard Worker
633*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, res, 16, res1, data_unit, NULL, NULL, 0)) {
634*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt dec failed\n", __func__);
635*1c60b9acSAndroid Build Coastguard Worker goto bail;
636*1c60b9acSAndroid Build Coastguard Worker }
637*1c60b9acSAndroid Build Coastguard Worker
638*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, NULL, 0)) {
639*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy failed\n", __func__);
640*1c60b9acSAndroid Build Coastguard Worker return -1;
641*1c60b9acSAndroid Build Coastguard Worker }
642*1c60b9acSAndroid Build Coastguard Worker
643*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(xts, res1, 16)) {
644*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
645*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, 16);
646*1c60b9acSAndroid Build Coastguard Worker return -1;
647*1c60b9acSAndroid Build Coastguard Worker }
648*1c60b9acSAndroid Build Coastguard Worker
649*1c60b9acSAndroid Build Coastguard Worker return 0;
650*1c60b9acSAndroid Build Coastguard Worker
651*1c60b9acSAndroid Build Coastguard Worker bail:
652*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
653*1c60b9acSAndroid Build Coastguard Worker
654*1c60b9acSAndroid Build Coastguard Worker return -1;
655*1c60b9acSAndroid Build Coastguard Worker }
656*1c60b9acSAndroid Build Coastguard Worker #endif
657*1c60b9acSAndroid Build Coastguard Worker
658*1c60b9acSAndroid Build Coastguard Worker static const uint8_t
659*1c60b9acSAndroid Build Coastguard Worker /*
660*1c60b9acSAndroid Build Coastguard Worker * https://csrc.nist.gov/CSRC/media/Projects/
661*1c60b9acSAndroid Build Coastguard Worker * Cryptographic-Algorithm-Validation-Program/
662*1c60b9acSAndroid Build Coastguard Worker * documents/mac/gcmtestvectors.zip
663*1c60b9acSAndroid Build Coastguard Worker */
664*1c60b9acSAndroid Build Coastguard Worker
665*1c60b9acSAndroid Build Coastguard Worker gcm_ct[] = {
666*1c60b9acSAndroid Build Coastguard Worker 0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c,
667*1c60b9acSAndroid Build Coastguard Worker 0xd5, 0x36, 0x86, 0x7e, 0xb9, 0xf2, 0x17, 0x36
668*1c60b9acSAndroid Build Coastguard Worker }, gcm_iv[] = {
669*1c60b9acSAndroid Build Coastguard Worker 0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0,
670*1c60b9acSAndroid Build Coastguard Worker 0xee, 0xd0, 0x66, 0x84
671*1c60b9acSAndroid Build Coastguard Worker }, gcm_key[] = {
672*1c60b9acSAndroid Build Coastguard Worker 0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92,
673*1c60b9acSAndroid Build Coastguard Worker 0x1c, 0x04, 0x65, 0x66, 0x5f, 0x8a, 0xe6, 0xd1,
674*1c60b9acSAndroid Build Coastguard Worker 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,
675*1c60b9acSAndroid Build Coastguard Worker 0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
676*1c60b9acSAndroid Build Coastguard Worker }, gcm_pt[] = {
677*1c60b9acSAndroid Build Coastguard Worker 0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e,
678*1c60b9acSAndroid Build Coastguard Worker 0xeb, 0x31, 0xb2, 0xea, 0xcc, 0x2b, 0xf2, 0xa5
679*1c60b9acSAndroid Build Coastguard Worker }, gcm_aad[] = {
680*1c60b9acSAndroid Build Coastguard Worker 0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b,
681*1c60b9acSAndroid Build Coastguard Worker 0xdb, 0x37, 0x0c, 0x43, 0x7f, 0xec, 0x78, 0xde
682*1c60b9acSAndroid Build Coastguard Worker }, gcm_tag[] = {
683*1c60b9acSAndroid Build Coastguard Worker 0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87,
684*1c60b9acSAndroid Build Coastguard Worker 0xd7, 0x37, 0xee, 0x62, 0x98, 0xf7, 0x7e, 0x0c
685*1c60b9acSAndroid Build Coastguard Worker };
686*1c60b9acSAndroid Build Coastguard Worker
687*1c60b9acSAndroid Build Coastguard Worker static int
test_genaes_gcm(void)688*1c60b9acSAndroid Build Coastguard Worker test_genaes_gcm(void)
689*1c60b9acSAndroid Build Coastguard Worker {
690*1c60b9acSAndroid Build Coastguard Worker uint8_t res[sizeof(gcm_ct)], tag[sizeof(gcm_tag)];
691*1c60b9acSAndroid Build Coastguard Worker struct lws_genaes_ctx ctx;
692*1c60b9acSAndroid Build Coastguard Worker struct lws_gencrypto_keyelem e;
693*1c60b9acSAndroid Build Coastguard Worker size_t iv_off = 0;
694*1c60b9acSAndroid Build Coastguard Worker
695*1c60b9acSAndroid Build Coastguard Worker e.buf = (uint8_t *)gcm_key;
696*1c60b9acSAndroid Build Coastguard Worker e.len = sizeof(gcm_key);
697*1c60b9acSAndroid Build Coastguard Worker
698*1c60b9acSAndroid Build Coastguard Worker /* Encrypt */
699*1c60b9acSAndroid Build Coastguard Worker
700*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_ENC, LWS_GAESM_GCM, &e, 0, NULL)) {
701*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
702*1c60b9acSAndroid Build Coastguard Worker return 1;
703*1c60b9acSAndroid Build Coastguard Worker }
704*1c60b9acSAndroid Build Coastguard Worker
705*1c60b9acSAndroid Build Coastguard Worker /* first we set the iv and aad */
706*1c60b9acSAndroid Build Coastguard Worker
707*1c60b9acSAndroid Build Coastguard Worker iv_off = sizeof(gcm_iv);
708*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, gcm_aad, sizeof(gcm_aad), NULL,
709*1c60b9acSAndroid Build Coastguard Worker (uint8_t *)gcm_iv, (uint8_t *)gcm_tag,
710*1c60b9acSAndroid Build Coastguard Worker &iv_off, sizeof(gcm_tag))) {
711*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt 1 failed\n", __func__);
712*1c60b9acSAndroid Build Coastguard Worker goto bail;
713*1c60b9acSAndroid Build Coastguard Worker }
714*1c60b9acSAndroid Build Coastguard Worker
715*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, gcm_pt, sizeof(gcm_pt), res,
716*1c60b9acSAndroid Build Coastguard Worker NULL, NULL, NULL, 0)) {
717*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt 2 failed\n", __func__);
718*1c60b9acSAndroid Build Coastguard Worker goto bail;
719*1c60b9acSAndroid Build Coastguard Worker }
720*1c60b9acSAndroid Build Coastguard Worker
721*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, tag, sizeof(tag))) {
722*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy enc failed\n", __func__);
723*1c60b9acSAndroid Build Coastguard Worker return -1;
724*1c60b9acSAndroid Build Coastguard Worker }
725*1c60b9acSAndroid Build Coastguard Worker
726*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(gcm_ct, res, sizeof(gcm_ct))) {
727*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt encoding mismatch\n", __func__);
728*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, sizeof(gcm_ct));
729*1c60b9acSAndroid Build Coastguard Worker return -1;
730*1c60b9acSAndroid Build Coastguard Worker }
731*1c60b9acSAndroid Build Coastguard Worker
732*1c60b9acSAndroid Build Coastguard Worker
733*1c60b9acSAndroid Build Coastguard Worker /* Decrypt */
734*1c60b9acSAndroid Build Coastguard Worker
735*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_GCM, &e, 0, NULL)) {
736*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_create failed\n", __func__);
737*1c60b9acSAndroid Build Coastguard Worker return 1;
738*1c60b9acSAndroid Build Coastguard Worker }
739*1c60b9acSAndroid Build Coastguard Worker
740*1c60b9acSAndroid Build Coastguard Worker iv_off = sizeof(gcm_iv); /* initial call sets iv + aad + tag */
741*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, gcm_aad, sizeof(gcm_aad), NULL,
742*1c60b9acSAndroid Build Coastguard Worker (uint8_t *)gcm_iv, (uint8_t *)gcm_tag,
743*1c60b9acSAndroid Build Coastguard Worker &iv_off, sizeof(gcm_tag))) {
744*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt 1 failed\n", __func__);
745*1c60b9acSAndroid Build Coastguard Worker goto bail;
746*1c60b9acSAndroid Build Coastguard Worker }
747*1c60b9acSAndroid Build Coastguard Worker
748*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_crypt(&ctx, gcm_ct, sizeof(gcm_ct), res,
749*1c60b9acSAndroid Build Coastguard Worker NULL, NULL, NULL, 0)) {
750*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt 2 failed\n", __func__);
751*1c60b9acSAndroid Build Coastguard Worker goto bail;
752*1c60b9acSAndroid Build Coastguard Worker }
753*1c60b9acSAndroid Build Coastguard Worker
754*1c60b9acSAndroid Build Coastguard Worker if (lws_genaes_destroy(&ctx, tag, sizeof(tag))) {
755*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_destroy dec failed\n", __func__);
756*1c60b9acSAndroid Build Coastguard Worker return -1;
757*1c60b9acSAndroid Build Coastguard Worker }
758*1c60b9acSAndroid Build Coastguard Worker
759*1c60b9acSAndroid Build Coastguard Worker if (lws_timingsafe_bcmp(gcm_pt, res, sizeof(gcm_pt))) {
760*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: lws_genaes_crypt decoding mismatch\n", __func__);
761*1c60b9acSAndroid Build Coastguard Worker lwsl_hexdump_notice(res, sizeof(gcm_ct));
762*1c60b9acSAndroid Build Coastguard Worker return -1;
763*1c60b9acSAndroid Build Coastguard Worker }
764*1c60b9acSAndroid Build Coastguard Worker
765*1c60b9acSAndroid Build Coastguard Worker return 0;
766*1c60b9acSAndroid Build Coastguard Worker
767*1c60b9acSAndroid Build Coastguard Worker bail:
768*1c60b9acSAndroid Build Coastguard Worker lws_genaes_destroy(&ctx, NULL, 0);
769*1c60b9acSAndroid Build Coastguard Worker
770*1c60b9acSAndroid Build Coastguard Worker return -1;
771*1c60b9acSAndroid Build Coastguard Worker }
772*1c60b9acSAndroid Build Coastguard Worker
773*1c60b9acSAndroid Build Coastguard Worker int
test_genaes(struct lws_context * context)774*1c60b9acSAndroid Build Coastguard Worker test_genaes(struct lws_context *context)
775*1c60b9acSAndroid Build Coastguard Worker {
776*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CBC))) || \
777*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cbc))
778*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_cbc())
779*1c60b9acSAndroid Build Coastguard Worker goto bail;
780*1c60b9acSAndroid Build Coastguard Worker #endif
781*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \
782*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb128))
783*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_cfb128())
784*1c60b9acSAndroid Build Coastguard Worker goto bail;
785*1c60b9acSAndroid Build Coastguard Worker #endif
786*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CFB))) || \
787*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_cfb8))
788*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_cfb8())
789*1c60b9acSAndroid Build Coastguard Worker goto bail;
790*1c60b9acSAndroid Build Coastguard Worker #endif
791*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_CTR))) || \
792*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ctr))
793*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_ctr())
794*1c60b9acSAndroid Build Coastguard Worker goto bail;
795*1c60b9acSAndroid Build Coastguard Worker #endif
796*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS)) || \
797*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ecb))
798*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_ecb())
799*1c60b9acSAndroid Build Coastguard Worker goto bail;
800*1c60b9acSAndroid Build Coastguard Worker #endif
801*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_OFB))) || \
802*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_ofb))
803*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_ofb())
804*1c60b9acSAndroid Build Coastguard Worker goto bail;
805*1c60b9acSAndroid Build Coastguard Worker #endif
806*1c60b9acSAndroid Build Coastguard Worker #if (defined(LWS_WITH_MBEDTLS) && (!defined(MBEDTLS_CONFIG_H) || defined(MBEDTLS_CIPHER_MODE_XTS))) || \
807*1c60b9acSAndroid Build Coastguard Worker (!defined(LWS_WITH_MBEDTLS) && defined(LWS_HAVE_EVP_aes_128_xts))
808*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_xts())
809*1c60b9acSAndroid Build Coastguard Worker goto bail;
810*1c60b9acSAndroid Build Coastguard Worker #endif
811*1c60b9acSAndroid Build Coastguard Worker
812*1c60b9acSAndroid Build Coastguard Worker if (test_genaes_gcm())
813*1c60b9acSAndroid Build Coastguard Worker goto bail;
814*1c60b9acSAndroid Build Coastguard Worker
815*1c60b9acSAndroid Build Coastguard Worker /* end */
816*1c60b9acSAndroid Build Coastguard Worker
817*1c60b9acSAndroid Build Coastguard Worker lwsl_notice("%s: selftest OK\n", __func__);
818*1c60b9acSAndroid Build Coastguard Worker
819*1c60b9acSAndroid Build Coastguard Worker return 0;
820*1c60b9acSAndroid Build Coastguard Worker
821*1c60b9acSAndroid Build Coastguard Worker bail:
822*1c60b9acSAndroid Build Coastguard Worker lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__);
823*1c60b9acSAndroid Build Coastguard Worker
824*1c60b9acSAndroid Build Coastguard Worker return 1;
825*1c60b9acSAndroid Build Coastguard Worker }
826