blob: 16ba9648c98e8656a987a5b74e7670313194038c [file] [log] [blame]
Manuel Pégourié-Gonnard4d8685b2015-08-05 15:44:42 +02001/* BEGIN_HEADER */
2#include "mbedtls/ecjpake.h"
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +02003
Manuel Pégourié-Gonnardcd345892015-08-18 21:05:18 +02004#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_SHA256_C)
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +02005static const unsigned char ecjpake_test_x1[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +02006 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
7 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
8 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x21
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +02009};
10
11static const unsigned char ecjpake_test_x2[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020012 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
13 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
14 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020015};
16
17static const unsigned char ecjpake_test_x3[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020018 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b,
19 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
20 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020021};
22
23static const unsigned char ecjpake_test_x4[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020024 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb,
25 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
26 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe1
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020027};
28
29static const unsigned char ecjpake_test_X1[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020030 0x04, 0xac, 0xcf, 0x01, 0x06, 0xef, 0x85, 0x8f, 0xa2, 0xd9, 0x19,
31 0x33, 0x13, 0x46, 0x80, 0x5a, 0x78, 0xb5, 0x8b, 0xba, 0xd0, 0xb8,
32 0x44, 0xe5, 0xc7, 0x89, 0x28, 0x79, 0x14, 0x61, 0x87, 0xdd, 0x26,
33 0x66, 0xad, 0xa7, 0x81, 0xbb, 0x7f, 0x11, 0x13, 0x72, 0x25, 0x1a,
34 0x89, 0x10, 0x62, 0x1f, 0x63, 0x4d, 0xf1, 0x28, 0xac, 0x48, 0xe3,
35 0x81, 0xfd, 0x6e, 0xf9, 0x06, 0x07, 0x31, 0xf6, 0x94, 0xa4
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020036};
37
38static const unsigned char ecjpake_test_X2[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020039 0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb,
40 0xd7, 0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc,
41 0x18, 0x40, 0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02,
42 0xe1, 0x47, 0x79, 0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab,
43 0x0f, 0x6c, 0x7f, 0xd1, 0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba,
44 0x37, 0xec, 0x91, 0xb7, 0xe3, 0x2b, 0xb0, 0x13, 0xbb, 0x2b
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020045};
46
47static const unsigned char ecjpake_test_X3[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020048 0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb,
49 0xd7, 0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc,
50 0x18, 0x40, 0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02,
51 0xe1, 0x47, 0x79, 0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab,
52 0x0f, 0x6c, 0x7f, 0xd1, 0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba,
53 0x37, 0xec, 0x91, 0xb7, 0xe3, 0x2b, 0xb0, 0x13, 0xbb, 0x2b
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020054};
55
56static const unsigned char ecjpake_test_X4[] = {
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020057 0x04, 0x19, 0x0a, 0x07, 0x70, 0x0f, 0xfa, 0x4b, 0xe6, 0xae, 0x1d,
58 0x79, 0xee, 0x0f, 0x06, 0xae, 0xb5, 0x44, 0xcd, 0x5a, 0xdd, 0xaa,
59 0xbe, 0xdf, 0x70, 0xf8, 0x62, 0x33, 0x21, 0x33, 0x2c, 0x54, 0xf3,
60 0x55, 0xf0, 0xfb, 0xfe, 0xc7, 0x83, 0xed, 0x35, 0x9e, 0x5d, 0x0b,
61 0xf7, 0x37, 0x7a, 0x0f, 0xc4, 0xea, 0x7a, 0xce, 0x47, 0x3c, 0x9c,
62 0x11, 0x2b, 0x41, 0xcc, 0xd4, 0x1a, 0xc5, 0x6a, 0x56, 0x12
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020063};
64
65/* Load my private and public keys, and peer's public keys */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020066static int ecjpake_test_load(mbedtls_ecjpake_context *ctx,
67 const unsigned char *xm1,
68 size_t len_xm1,
69 const unsigned char *xm2,
70 size_t len_xm2,
71 const unsigned char *Xm1,
72 size_t len_Xm1,
73 const unsigned char *Xm2,
74 size_t len_Xm2,
75 const unsigned char *Xp1,
76 size_t len_Xp1,
77 const unsigned char *Xp2,
78 size_t len_Xp2)
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020079{
80 int ret;
81
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020082 MBEDTLS_MPI_CHK(mbedtls_mpi_read_binary(&ctx->xm1, xm1, len_xm1));
83 MBEDTLS_MPI_CHK(mbedtls_mpi_read_binary(&ctx->xm2, xm2, len_xm2));
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020084
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020085 MBEDTLS_MPI_CHK(
86 mbedtls_ecp_point_read_binary(&ctx->grp, &ctx->Xm1, Xm1, len_Xm1));
87 MBEDTLS_MPI_CHK(
88 mbedtls_ecp_point_read_binary(&ctx->grp, &ctx->Xm2, Xm2, len_Xm2));
89 MBEDTLS_MPI_CHK(
90 mbedtls_ecp_point_read_binary(&ctx->grp, &ctx->Xp1, Xp1, len_Xp1));
91 MBEDTLS_MPI_CHK(
92 mbedtls_ecp_point_read_binary(&ctx->grp, &ctx->Xp2, Xp2, len_Xp2));
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020093
94cleanup:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020095 return ret;
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +020096}
97
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +020098# define ADD_SIZE(x) x, sizeof(x)
Manuel Pégourié-Gonnardcd345892015-08-18 21:05:18 +020099#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED && MBEDTLS_SHA256_C */
Manuel Pégourié-Gonnard4d8685b2015-08-05 15:44:42 +0200100/* END_HEADER */
101
102/* BEGIN_DEPENDENCIES
103 * depends_on:MBEDTLS_ECJPAKE_C
104 * END_DEPENDENCIES
105 */
106
TRodziewicz062f3532021-05-25 15:15:57 +0200107/* BEGIN_CASE depends_on:NOT_DEFINED */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200108void ecjpake_invalid_param()
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500109{
110 mbedtls_ecjpake_context ctx;
111 unsigned char buf[42] = { 0 };
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200112 size_t const len = sizeof(buf);
113 mbedtls_ecjpake_role invalid_role = (mbedtls_ecjpake_role)42;
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500114 mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256;
115 mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP256R1;
116
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200117 TEST_EQUAL(MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
118 mbedtls_ecjpake_setup(&ctx, invalid_role, valid_md, valid_group,
119 buf, len));
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500120
121exit:
122 return;
123}
124/* END_CASE */
125
Manuel Pégourié-Gonnard4d8685b2015-08-05 15:44:42 +0200126/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200127void ecjpake_selftest()
Manuel Pégourié-Gonnard4d8685b2015-08-05 15:44:42 +0200128{
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200129 TEST_ASSERT(mbedtls_ecjpake_self_test(1) == 0);
Manuel Pégourié-Gonnard4d8685b2015-08-05 15:44:42 +0200130}
131/* END_CASE */
Manuel Pégourié-Gonnardbbe4e522015-08-14 17:12:50 +0200132
133/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_SHA256_C */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200134void read_bad_md(data_t *msg)
k-stachowiak01b3be42019-06-28 14:17:04 +0200135{
136 mbedtls_ecjpake_context corrupt_ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200137 const unsigned char *pw = NULL;
k-stachowiak01b3be42019-06-28 14:17:04 +0200138 const size_t pw_len = 0;
139 int any_role = MBEDTLS_ECJPAKE_CLIENT;
140
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200141 mbedtls_ecjpake_init(&corrupt_ctx);
142 TEST_ASSERT(mbedtls_ecjpake_setup(&corrupt_ctx, any_role, MBEDTLS_MD_SHA256,
143 MBEDTLS_ECP_DP_SECP256R1, pw,
144 pw_len) == 0);
k-stachowiak01b3be42019-06-28 14:17:04 +0200145 corrupt_ctx.md_info = NULL;
146
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200147 TEST_ASSERT(
148 mbedtls_ecjpake_read_round_one(&corrupt_ctx, msg->x, msg->len) ==
149 MBEDTLS_ERR_MD_BAD_INPUT_DATA);
k-stachowiak01b3be42019-06-28 14:17:04 +0200150
151exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200152 mbedtls_ecjpake_free(&corrupt_ctx);
k-stachowiak01b3be42019-06-28 14:17:04 +0200153}
154/* END_CASE */
155
156/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_SHA256_C */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200157void read_round_one(int role, data_t *msg, int ref_ret)
Manuel Pégourié-Gonnardbbe4e522015-08-14 17:12:50 +0200158{
159 mbedtls_ecjpake_context ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200160 const unsigned char *pw = NULL;
Hanno Becker8435c382017-06-05 15:02:46 +0100161 const size_t pw_len = 0;
162
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200163 mbedtls_ecjpake_init(&ctx);
Manuel Pégourié-Gonnardbbe4e522015-08-14 17:12:50 +0200164
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200165 TEST_ASSERT(mbedtls_ecjpake_setup(&ctx, role, MBEDTLS_MD_SHA256,
166 MBEDTLS_ECP_DP_SECP256R1, pw,
167 pw_len) == 0);
Manuel Pégourié-Gonnardbbe4e522015-08-14 17:12:50 +0200168
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200169 TEST_ASSERT(mbedtls_ecjpake_read_round_one(&ctx, msg->x, msg->len) ==
170 ref_ret);
Manuel Pégourié-Gonnardbbe4e522015-08-14 17:12:50 +0200171
172exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200173 mbedtls_ecjpake_free(&ctx);
Manuel Pégourié-Gonnardbbe4e522015-08-14 17:12:50 +0200174}
175/* END_CASE */
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200176
177/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_SHA256_C */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200178void read_round_two_cli(data_t *msg, int ref_ret)
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200179{
180 mbedtls_ecjpake_context ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200181 const unsigned char *pw = NULL;
Hanno Becker8435c382017-06-05 15:02:46 +0100182 const size_t pw_len = 0;
183
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200184 mbedtls_ecjpake_init(&ctx);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200185
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200186 TEST_ASSERT(
187 mbedtls_ecjpake_setup(&ctx, MBEDTLS_ECJPAKE_CLIENT, MBEDTLS_MD_SHA256,
188 MBEDTLS_ECP_DP_SECP256R1, pw, pw_len) == 0);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200189
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200190 TEST_ASSERT(ecjpake_test_load(
191 &ctx, ADD_SIZE(ecjpake_test_x1), ADD_SIZE(ecjpake_test_x2),
192 ADD_SIZE(ecjpake_test_X1), ADD_SIZE(ecjpake_test_X2),
193 ADD_SIZE(ecjpake_test_X3), ADD_SIZE(ecjpake_test_X4)) == 0);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200194
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200195 TEST_ASSERT(mbedtls_ecjpake_read_round_two(&ctx, msg->x, msg->len) ==
196 ref_ret);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200197
198exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200199 mbedtls_ecjpake_free(&ctx);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200200}
201/* END_CASE */
202
203/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_SHA256_C */
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200204void read_round_two_srv(data_t *msg, int ref_ret)
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200205{
206 mbedtls_ecjpake_context ctx;
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200207 const unsigned char *pw = NULL;
Hanno Becker8435c382017-06-05 15:02:46 +0100208 const size_t pw_len = 0;
209
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200210 mbedtls_ecjpake_init(&ctx);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200211
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200212 TEST_ASSERT(
213 mbedtls_ecjpake_setup(&ctx, MBEDTLS_ECJPAKE_SERVER, MBEDTLS_MD_SHA256,
214 MBEDTLS_ECP_DP_SECP256R1, pw, pw_len) == 0);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200215
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200216 TEST_ASSERT(ecjpake_test_load(
217 &ctx, ADD_SIZE(ecjpake_test_x3), ADD_SIZE(ecjpake_test_x4),
218 ADD_SIZE(ecjpake_test_X3), ADD_SIZE(ecjpake_test_X4),
219 ADD_SIZE(ecjpake_test_X1), ADD_SIZE(ecjpake_test_X2)) == 0);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200220
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200221 TEST_ASSERT(mbedtls_ecjpake_read_round_two(&ctx, msg->x, msg->len) ==
222 ref_ret);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200223
224exit:
Mateusz Starzykc0eabdc2021-08-03 14:09:02 +0200225 mbedtls_ecjpake_free(&ctx);
Manuel Pégourié-Gonnardd9802af2015-08-17 12:47:38 +0200226}
227/* END_CASE */