/* BEGIN_HEADER */
#include "mbedtls/ecjpake.h"
#include "mbedtls/legacy_or_psa.h"

#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) && defined(MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA)
static const unsigned char ecjpake_test_x1[] = {
    0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c,
    0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
    0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x21
};

static const unsigned char ecjpake_test_x2[] = {
    0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c,
    0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
    0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81
};

static const unsigned char ecjpake_test_x3[] = {
    0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c,
    0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
    0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x81
};

static const unsigned char ecjpake_test_x4[] = {
    0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc,
    0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
    0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe1
};

static const unsigned char ecjpake_test_X1[] = {
    0x04, 0xac, 0xcf, 0x01, 0x06, 0xef, 0x85, 0x8f, 0xa2, 0xd9, 0x19, 0x33,
    0x13, 0x46, 0x80, 0x5a, 0x78, 0xb5, 0x8b, 0xba, 0xd0, 0xb8, 0x44, 0xe5,
    0xc7, 0x89, 0x28, 0x79, 0x14, 0x61, 0x87, 0xdd, 0x26, 0x66, 0xad, 0xa7,
    0x81, 0xbb, 0x7f, 0x11, 0x13, 0x72, 0x25, 0x1a, 0x89, 0x10, 0x62, 0x1f,
    0x63, 0x4d, 0xf1, 0x28, 0xac, 0x48, 0xe3, 0x81, 0xfd, 0x6e, 0xf9, 0x06,
    0x07, 0x31, 0xf6, 0x94, 0xa4
};

static const unsigned char ecjpake_test_X2[] = {
    0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb, 0xd7,
    0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc, 0x18, 0x40,
    0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02, 0xe1, 0x47, 0x79,
    0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab, 0x0f, 0x6c, 0x7f, 0xd1,
    0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba, 0x37, 0xec, 0x91, 0xb7, 0xe3,
    0x2b, 0xb0, 0x13, 0xbb, 0x2b
};

static const unsigned char ecjpake_test_X3[] = {
    0x04, 0x7e, 0xa6, 0xe3, 0xa4, 0x48, 0x70, 0x37, 0xa9, 0xe0, 0xdb, 0xd7,
    0x92, 0x62, 0xb2, 0xcc, 0x27, 0x3e, 0x77, 0x99, 0x30, 0xfc, 0x18, 0x40,
    0x9a, 0xc5, 0x36, 0x1c, 0x5f, 0xe6, 0x69, 0xd7, 0x02, 0xe1, 0x47, 0x79,
    0x0a, 0xeb, 0x4c, 0xe7, 0xfd, 0x65, 0x75, 0xab, 0x0f, 0x6c, 0x7f, 0xd1,
    0xc3, 0x35, 0x93, 0x9a, 0xa8, 0x63, 0xba, 0x37, 0xec, 0x91, 0xb7, 0xe3,
    0x2b, 0xb0, 0x13, 0xbb, 0x2b
};

static const unsigned char ecjpake_test_X4[] = {
    0x04, 0x19, 0x0a, 0x07, 0x70, 0x0f, 0xfa, 0x4b, 0xe6, 0xae, 0x1d, 0x79,
    0xee, 0x0f, 0x06, 0xae, 0xb5, 0x44, 0xcd, 0x5a, 0xdd, 0xaa, 0xbe, 0xdf,
    0x70, 0xf8, 0x62, 0x33, 0x21, 0x33, 0x2c, 0x54, 0xf3, 0x55, 0xf0, 0xfb,
    0xfe, 0xc7, 0x83, 0xed, 0x35, 0x9e, 0x5d, 0x0b, 0xf7, 0x37, 0x7a, 0x0f,
    0xc4, 0xea, 0x7a, 0xce, 0x47, 0x3c, 0x9c, 0x11, 0x2b, 0x41, 0xcc, 0xd4,
    0x1a, 0xc5, 0x6a, 0x56, 0x12
};

/* Load my private and public keys, and peer's public keys */
static int ecjpake_test_load(mbedtls_ecjpake_context *ctx,
                             const unsigned char *xm1, size_t len_xm1,
                             const unsigned char *xm2, size_t len_xm2,
                             const unsigned char *Xm1, size_t len_Xm1,
                             const unsigned char *Xm2, size_t len_Xm2,
                             const unsigned char *Xp1, size_t len_Xp1,
                             const unsigned char *Xp2, size_t len_Xp2)
{
    int ret;

    MBEDTLS_MPI_CHK(mbedtls_mpi_read_binary(&ctx->xm1, xm1, len_xm1));
    MBEDTLS_MPI_CHK(mbedtls_mpi_read_binary(&ctx->xm2, xm2, len_xm2));

    MBEDTLS_MPI_CHK(mbedtls_ecp_point_read_binary(&ctx->grp,
                                                  &ctx->Xm1, Xm1, len_Xm1));
    MBEDTLS_MPI_CHK(mbedtls_ecp_point_read_binary(&ctx->grp,
                                                  &ctx->Xm2, Xm2, len_Xm2));
    MBEDTLS_MPI_CHK(mbedtls_ecp_point_read_binary(&ctx->grp,
                                                  &ctx->Xp1, Xp1, len_Xp1));
    MBEDTLS_MPI_CHK(mbedtls_ecp_point_read_binary(&ctx->grp,
                                                  &ctx->Xp2, Xp2, len_Xp2));

cleanup:
    return ret;
}

#define ADD_SIZE(x)   x, sizeof(x)
#endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED && MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA */
/* END_HEADER */

/* BEGIN_DEPENDENCIES
 * depends_on:MBEDTLS_ECJPAKE_C
 * END_DEPENDENCIES
 */

/* BEGIN_CASE */
void ecjpake_invalid_param()
{
    mbedtls_ecjpake_context ctx;
    unsigned char buf[42] = { 0 };
    size_t const len = sizeof(buf);
    mbedtls_ecjpake_role invalid_role = (mbedtls_ecjpake_role) 42;
    mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256;
    mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP256R1;

    mbedtls_ecjpake_init(&ctx);

    TEST_EQUAL(MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
               mbedtls_ecjpake_setup(&ctx,
                                     invalid_role,
                                     valid_md,
                                     valid_group,
                                     buf, len));
exit:
    return;
}
/* END_CASE */

/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
void ecjpake_selftest()
{
    TEST_ASSERT(mbedtls_ecjpake_self_test(1) == 0);
}
/* END_CASE */

/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA */
void read_bad_md(data_t *msg)
{
    mbedtls_ecjpake_context corrupt_ctx;
    const unsigned char *pw = NULL;
    const size_t pw_len = 0;
    int any_role = MBEDTLS_ECJPAKE_CLIENT;

    mbedtls_ecjpake_init(&corrupt_ctx);
    TEST_ASSERT(mbedtls_ecjpake_setup(&corrupt_ctx, any_role,
                                      MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw,
                                      pw_len) == 0);
    corrupt_ctx.md_type = MBEDTLS_MD_NONE;

    TEST_EQUAL(mbedtls_ecjpake_read_round_one(&corrupt_ctx, msg->x,
                                              msg->len), MBEDTLS_ERR_MD_BAD_INPUT_DATA);

exit:
    mbedtls_ecjpake_free(&corrupt_ctx);
}
/* END_CASE */

/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA */
void read_round_one(int role, data_t *msg, int ref_ret)
{
    mbedtls_ecjpake_context ctx;
    const unsigned char *pw = NULL;
    const size_t pw_len = 0;

    mbedtls_ecjpake_init(&ctx);

    TEST_ASSERT(mbedtls_ecjpake_setup(&ctx, role,
                                      MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw,
                                      pw_len) == 0);

    TEST_ASSERT(mbedtls_ecjpake_read_round_one(&ctx, msg->x, msg->len) == ref_ret);

exit:
    mbedtls_ecjpake_free(&ctx);
}
/* END_CASE */

/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA */
void read_round_two_cli(data_t *msg, int ref_ret)
{
    mbedtls_ecjpake_context ctx;
    const unsigned char *pw = NULL;
    const size_t pw_len = 0;

    mbedtls_ecjpake_init(&ctx);

    TEST_ASSERT(mbedtls_ecjpake_setup(&ctx, MBEDTLS_ECJPAKE_CLIENT,
                                      MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw,
                                      pw_len) == 0);

    TEST_ASSERT(ecjpake_test_load(&ctx,
                                  ADD_SIZE(ecjpake_test_x1), ADD_SIZE(ecjpake_test_x2),
                                  ADD_SIZE(ecjpake_test_X1), ADD_SIZE(ecjpake_test_X2),
                                  ADD_SIZE(ecjpake_test_X3), ADD_SIZE(ecjpake_test_X4))
                == 0);

    TEST_ASSERT(mbedtls_ecjpake_read_round_two(&ctx, msg->x, msg->len) == ref_ret);

exit:
    mbedtls_ecjpake_free(&ctx);
}
/* END_CASE */

/* BEGIN_CASE depends_on:MBEDTLS_ECP_DP_SECP256R1_ENABLED:MBEDTLS_HAS_ALG_SHA_256_VIA_MD_OR_PSA */
void read_round_two_srv(data_t *msg, int ref_ret)
{
    mbedtls_ecjpake_context ctx;
    const unsigned char *pw = NULL;
    const size_t pw_len = 0;

    mbedtls_ecjpake_init(&ctx);

    TEST_ASSERT(mbedtls_ecjpake_setup(&ctx, MBEDTLS_ECJPAKE_SERVER,
                                      MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, pw,
                                      pw_len) == 0);

    TEST_ASSERT(ecjpake_test_load(&ctx,
                                  ADD_SIZE(ecjpake_test_x3), ADD_SIZE(ecjpake_test_x4),
                                  ADD_SIZE(ecjpake_test_X3), ADD_SIZE(ecjpake_test_X4),
                                  ADD_SIZE(ecjpake_test_X1), ADD_SIZE(ecjpake_test_X2))
                == 0);

    TEST_ASSERT(mbedtls_ecjpake_read_round_two(&ctx, msg->x, msg->len) == ref_ret);

exit:
    mbedtls_ecjpake_free(&ctx);
}
/* END_CASE */
