2 * lws-api-test-gencrypto - lws-genec
4 * Written in 2010-2018 by Andy Green <andy@warmcat.com>
6 * This file is made available under the Creative Commons CC0 1.0
7 * Universal Public Domain Dedication.
10 #include <libwebsockets.h>
13 *jwk_ec1 = (uint8_t *)
16 "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\","
17 "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\","
18 "\"d\":\"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE\","
20 "\"kid\":\"rfc7517-A.2-example private key\"}"
24 test_genec1(struct lws_context *context)
26 struct lws_genec_ctx ctx;
28 struct lws_gencrypto_keyelem el[LWS_GENCRYPTO_EC_KEYEL_COUNT];
29 //uint8_t res[32], res1[32];
32 memset(el, 0, sizeof(el));
34 if (lws_genecdh_create(&ctx, context, NULL))
37 /* let's create a new key */
39 if (lws_genecdh_new_keypair(&ctx, LDHS_OURS, "P-256", el)) {
40 lwsl_err("%s: lws_genec_new_keypair failed\n", __func__);
45 lws_genec_destroy_elements(el);
47 lws_genec_destroy(&ctx);
49 if (lws_jwk_import(&jwk, NULL, NULL, (char *)jwk_ec1,
50 strlen((char *)jwk_ec1)) < 0) {
51 lwsl_notice("Failed to decode JWK test key\n");
57 if (jwk.kty != LWS_GENCRYPTO_KTY_EC) {
58 lws_jwk_destroy(&jwk);
59 lwsl_err("%s: jwk is not an EC key\n", __func__);
63 if (lws_genecdh_create(&ctx, context, NULL))
66 n = lws_genecdh_set_key(&ctx, jwk.e, LDHS_OURS);
68 lws_jwk_destroy(&jwk);
69 lwsl_err("%s: lws_genec_create failed: %d\n", __func__, n);
73 if (lws_genec_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv,
75 lwsl_err("%s: lws_genec_crypt failed\n", __func__);
79 if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) {
80 lwsl_err("%s: lws_genec_crypt encoding mismatch\n", __func__);
81 lwsl_hexdump_notice(res, 16);
85 lws_genec_destroy(&ctx);
87 if (lws_genec_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, NULL)) {
88 lwsl_err("%s: lws_genec_create dec failed\n", __func__);
92 if (lws_genec_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv,
94 lwsl_err("%s: lws_genec_crypt dec failed\n", __func__);
98 if (lws_timingsafe_bcmp(cbc256, res1, 16)) {
99 lwsl_err("%s: lws_genec_crypt decoding mismatch\n", __func__);
100 lwsl_hexdump_notice(res, 16);
104 lws_genec_destroy(&ctx);
106 lws_jwk_destroy(&jwk);
111 // lws_genec_destroy(&ctx);
117 test_genec(struct lws_context *context)
119 if (test_genec1(context))
124 lwsl_notice("%s: selftest OK\n", __func__);
129 lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__);