1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/* Public domain, no copyright. Use at your own risk. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include "jwt_tests.h"
START_TEST(test_jwks_ec_pub_missing)
{
const char *json = "{\"kty\":\"EC\"}";
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item;
const char exp[] = "Missing or invalid type for one of crv, x, or y for pub key";
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_nonnull(item);
ck_assert_int_ne(jwks_item_error(item), 0);
ck_assert_str_eq(exp, jwks_item_error_msg(item));
jwks_free(jwk_set);
}
END_TEST
START_TEST(test_jwks_ec_pub_bad_type)
{
const char *json = "{\"kty\":\"EC\",\"crv\":\"prime6v1\",\"x\":\"sd+#(@#($(ada\",\"y\":1}";
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item;
const char exp[] = "Missing or invalid type for one of crv, x, or y for pub key";
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_nonnull(item);
ck_assert_int_ne(jwks_item_error(item), 0);
ck_assert_str_eq(exp, jwks_item_error_msg(item));
jwks_free(jwk_set);
}
END_TEST
START_TEST(test_jwks_ec_pub_bad64)
{
const char *json = "{\"kty\":\"EC\",\"crv\":\"prime6v1\",\"x\":\"\",\"y\":\"asaad\"}";
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item;
const char exp[] = "Error generating pub key from components";
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_nonnull(item);
ck_assert_int_ne(jwks_item_error(item), 0);
ck_assert_str_eq(exp, jwks_item_error_msg(item));
jwks_free(jwk_set);
}
END_TEST
START_TEST(test_jwks_ec_pub_bad_points)
{
const char *json = "{\"kty\":\"EC\",\"crv\":\"prime256v1\",\"x\":\"YmFkdmFsdWUK\",\"y\":\"YmFkdmFsdWUK\"}";
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item;
const char exp[] = "Error generating pub key from components";
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_nonnull(item);
ck_assert_int_ne(jwks_item_error(item), 0);
ck_assert_str_eq(exp, jwks_item_error_msg(item));
jwks_free(jwk_set);
}
END_TEST
static Suite *libjwt_suite(const char *title)
{
Suite *s;
TCase *tc_core;
int i = ARRAY_SIZE(jwt_test_ops);
s = suite_create(title);
tc_core = tcase_create("jwt_jwks_ec");
/* EC specific error path tests */
tcase_add_loop_test(tc_core, test_jwks_ec_pub_missing, 0, i);
tcase_add_loop_test(tc_core, test_jwks_ec_pub_bad64, 0, i);
tcase_add_loop_test(tc_core, test_jwks_ec_pub_bad_type, 0, i);
tcase_add_loop_test(tc_core, test_jwks_ec_pub_bad_points, 0, i);
tcase_set_timeout(tc_core, 30);
suite_add_tcase(s, tc_core);
return s;
}
int main(void)
{
JWT_TEST_MAIN("LibJWT JWKS Error Path Testing EC");
}
|