BEGIN_HEADER
#include <polarssl/ecdh.h>
END_HEADER

BEGIN_DEPENDENCIES
depends_on:POLARSSL_ECDH_C:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
END_DEPENDENCIES

BEGIN_CASE
ecdh_primitive_random:id
{
    ecp_group grp;
    ecp_point qA, qB;
    mpi dA, dB, zA, zB;
    rnd_pseudo_info rnd_info;

    ecp_group_init( &grp );
    ecp_point_init( &qA ); ecp_point_init( &qB );
    mpi_init( &dA ); mpi_init( &dB );
    mpi_init( &zA ); mpi_init( &zB );
    memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );

    TEST_ASSERT( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_{id} ) == 0 );

    TEST_ASSERT( ecdh_gen_public( &grp, &dA, &qA, &rnd_pseudo_rand, &rnd_info )
                 == 0 );
    TEST_ASSERT( ecdh_gen_public( &grp, &dB, &qB, &rnd_pseudo_rand, &rnd_info )
                 == 0 );
    TEST_ASSERT( ecdh_compute_shared( &grp, &zA, &qB, &dA ) == 0 );
    TEST_ASSERT( ecdh_compute_shared( &grp, &zB, &qA, &dB ) == 0 );

    TEST_ASSERT( mpi_cmp_mpi( &zA, &zB ) == 0 );

    ecp_group_free( &grp );
    ecp_point_free( &qA ); ecp_point_free( &qB );
    mpi_free( &dA ); mpi_free( &dB );
    mpi_free( &zA ); mpi_free( &zB );
}
END_CASE

BEGIN_CASE
ecdh_primitive_testvec:id:dA:xA:yA:dB:xB:yB:z
{
    ecp_group grp;
    ecp_point qA, qB;
    mpi dA, dB, zA, zB, check;

    ecp_group_init( &grp );
    ecp_point_init( &qA ); ecp_point_init( &qB );
    mpi_init( &dA ); mpi_init( &dB );
    mpi_init( &zA ); mpi_init( &zB ); mpi_init( &check );

    TEST_ASSERT( ecp_use_known_dp( &grp, POLARSSL_ECP_DP_{id} ) == 0 );

    TEST_ASSERT( ecdh_gen_public( &grp, &dA, &qA, &not_rnd, "{dA}" ) == 0 );
    TEST_ASSERT( ! ecp_is_zero( &qA ) );
    TEST_ASSERT( mpi_read_string( &check, 16, "{xA}" ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &qA.X, &check ) == 0 );
    TEST_ASSERT( mpi_read_string( &check, 16, "{yA}" ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &qA.Y, &check ) == 0 );

    TEST_ASSERT( ecdh_gen_public( &grp, &dB, &qB, &not_rnd, "{dB}" ) == 0 );
    TEST_ASSERT( ! ecp_is_zero( &qB ) );
    TEST_ASSERT( mpi_read_string( &check, 16, "{xB}" ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &qB.X, &check ) == 0 );
    TEST_ASSERT( mpi_read_string( &check, 16, "{yB}" ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &qB.Y, &check ) == 0 );

    TEST_ASSERT( mpi_read_string( &check, 16, "{z}" ) == 0 );
    TEST_ASSERT( ecdh_compute_shared( &grp, &zA, &qB, &dA ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &zA, &check ) == 0 );
    TEST_ASSERT( ecdh_compute_shared( &grp, &zB, &qA, &dB ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &zB, &check ) == 0 );

    ecp_group_free( &grp );
    ecp_point_free( &qA ); ecp_point_free( &qB );
    mpi_free( &dA ); mpi_free( &dB );
    mpi_free( &zA ); mpi_free( &zB ); mpi_free( &check );
}
END_CASE

BEGIN_CASE
ecdh_exchange:id
{
    ecdh_context srv, cli;
    unsigned char buf[1000];
    const unsigned char *vbuf;
    size_t len;
    rnd_pseudo_info rnd_info;

    ecdh_init( &srv );
    ecdh_init( &cli );
    memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );

    TEST_ASSERT( ecp_use_known_dp( &srv.grp, POLARSSL_ECP_DP_{id} ) == 0 );

    memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
    TEST_ASSERT( ecdh_make_params( &srv, &len, buf, 1000,
                                   &rnd_pseudo_rand, &rnd_info ) == 0 );
    TEST_ASSERT( ecdh_read_params( &cli, &vbuf, buf + len ) == 0 );

    memset( buf, 0x00, sizeof( buf ) );
    TEST_ASSERT( ecdh_make_public( &cli, &len, buf, 1000,
                                   &rnd_pseudo_rand, &rnd_info ) == 0 );
    TEST_ASSERT( ecdh_read_public( &srv, buf, len ) == 0 );

    TEST_ASSERT( ecdh_calc_secret( &srv, &len, buf, 1000 ) == 0 );
    TEST_ASSERT( ecdh_calc_secret( &cli, &len, buf, 1000 ) == 0 );
    TEST_ASSERT( mpi_cmp_mpi( &srv.z, &cli.z ) == 0 );

    ecdh_free( &srv );
    ecdh_free( &cli );
}
END_CASE
