| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- /*
- * lws-api-test-gencrypto - lws-genec
- *
- * Written in 2010-2018 by Andy Green <[email protected]>
- *
- * This file is made available under the Creative Commons CC0 1.0
- * Universal Public Domain Dedication.
- */
- #include <libwebsockets.h>
- static const uint8_t
- *jwk_ec1 = (uint8_t *)
- "{\"kty\":\"EC\","
- "\"crv\":\"P-256\","
- "\"x\":\"MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4\","
- "\"y\":\"4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM\","
- "\"d\":\"870MB6gfuTJ4HtUnUvYMyJpr5eUZNP4Bk43bVdj3eAE\","
- "\"use\":\"enc\","
- "\"kid\":\"rfc7517-A.2-example private key\"}"
- ;
- static int
- test_genec1(struct lws_context *context)
- {
- struct lws_genec_ctx ctx;
- struct lws_jwk jwk;
- struct lws_gencrypto_keyelem el[LWS_GENCRYPTO_EC_KEYEL_COUNT];
- //uint8_t res[32], res1[32];
- int n;
- memset(el, 0, sizeof(el));
- if (lws_genecdh_create(&ctx, context, NULL))
- return 1;
- /* let's create a new key */
- if (lws_genecdh_new_keypair(&ctx, LDHS_OURS, "P-256", el)) {
- lwsl_err("%s: lws_genec_new_keypair failed\n", __func__);
- return 1;
- }
- lws_genec_dump(el);
- lws_genec_destroy_elements(el);
- lws_genec_destroy(&ctx);
- if (lws_jwk_import(&jwk, NULL, NULL, (char *)jwk_ec1,
- strlen((char *)jwk_ec1)) < 0) {
- lwsl_notice("Failed to decode JWK test key\n");
- return 1;
- }
- lws_jwk_dump(&jwk);
- if (jwk.kty != LWS_GENCRYPTO_KTY_EC) {
- lws_jwk_destroy(&jwk);
- lwsl_err("%s: jwk is not an EC key\n", __func__);
- return 1;
- }
- if (lws_genecdh_create(&ctx, context, NULL))
- return 1;
- n = lws_genecdh_set_key(&ctx, jwk.e, LDHS_OURS);
- if (n) {
- lws_jwk_destroy(&jwk);
- lwsl_err("%s: lws_genec_create failed: %d\n", __func__, n);
- return 1;
- }
- #if 0
- if (lws_genec_crypt(&ctx, cbc256, 16, res, (uint8_t *)cbc256_iv,
- NULL, NULL)) {
- lwsl_err("%s: lws_genec_crypt failed\n", __func__);
- goto bail;
- }
- if (lws_timingsafe_bcmp(cbc256_enc, res, 16)) {
- lwsl_err("%s: lws_genec_crypt encoding mismatch\n", __func__);
- lwsl_hexdump_notice(res, 16);
- goto bail;
- }
- lws_genec_destroy(&ctx);
- if (lws_genec_create(&ctx, LWS_GAESO_DEC, LWS_GAESM_CBC, &e, NULL)) {
- lwsl_err("%s: lws_genec_create dec failed\n", __func__);
- return -1;
- }
- if (lws_genec_crypt(&ctx, res, 16, res1, (uint8_t *)cbc256_iv,
- NULL, NULL)) {
- lwsl_err("%s: lws_genec_crypt dec failed\n", __func__);
- goto bail;
- }
- if (lws_timingsafe_bcmp(cbc256, res1, 16)) {
- lwsl_err("%s: lws_genec_crypt decoding mismatch\n", __func__);
- lwsl_hexdump_notice(res, 16);
- goto bail;
- }
- #endif
- lws_genec_destroy(&ctx);
- lws_jwk_destroy(&jwk);
- return 0;
- //bail:
- // lws_genec_destroy(&ctx);
- // return -1;
- }
- int
- test_genec(struct lws_context *context)
- {
- if (test_genec1(context))
- goto bail;
- /* end */
- lwsl_notice("%s: selftest OK\n", __func__);
- return 0;
- bail:
- lwsl_err("%s: selftest failed ++++++++++++++++++++\n", __func__);
- return 1;
- }
|