Add test for ECP export
Signed-off-by: Przemek Stekiel <przemyslaw.stekiel@mobica.com>
diff --git a/tests/suites/test_suite_ecp.function b/tests/suites/test_suite_ecp.function
index 2afc355..b8b5d9a 100644
--- a/tests/suites/test_suite_ecp.function
+++ b/tests/suites/test_suite_ecp.function
@@ -16,6 +16,44 @@
mbedtls_ecp_point_free( x ); \
mbedtls_ecp_point_init( x );
+/* Auxiliary function to compare two mbedtls_ecp_group objects. */
+inline static int mbedtls_ecp_group_cmp( mbedtls_ecp_group *P,
+ mbedtls_ecp_group *Q )
+{
+ if( mbedtls_mpi_cmp_mpi( &P->P, &Q->P ) != 0 )
+ return 1;
+ if( mbedtls_mpi_cmp_mpi( &P->A, &Q->A ) != 0 )
+ return 1;
+ if( mbedtls_mpi_cmp_mpi( &P->B, &Q->B ) != 0 )
+ return 1;
+ if( mbedtls_mpi_cmp_mpi( &P->N, &Q->N ) != 0 )
+ return 1;
+ if( mbedtls_ecp_point_cmp( &P->G, &Q->G ) != 0 )
+ return 1;
+ if( P->id != Q->id )
+ return 1;
+ if( P->pbits != Q->pbits )
+ return 1;
+ if( P->nbits != Q->nbits )
+ return 1;
+ if( P->h != Q->h )
+ return 1;
+ if( P->modp != Q->modp )
+ return 1;
+ if( P->t_pre != Q->t_pre )
+ return 1;
+ if( P->t_post != Q->t_post )
+ return 1;
+ if( P->t_data != Q->t_data )
+ return 1;
+ if( P->T_size != Q->T_size )
+ return 1;
+ if( P->T != Q->T )
+ return 1;
+
+ return 0;
+}
+
/* END_HEADER */
/* BEGIN_DEPENDENCIES
@@ -988,3 +1026,40 @@
TEST_ASSERT( mbedtls_ecp_self_test( 1 ) == 0 );
}
/* END_CASE */
+
+/* BEGIN_CASE */
+void ecp_export( int id, char * Qx, char * Qy,char * d, int expected_ret, int invalid_grp )
+{
+ mbedtls_ecp_keypair key;
+ mbedtls_ecp_group export_grp;
+ mbedtls_mpi export_d;
+ mbedtls_ecp_point export_Q;
+
+ mbedtls_ecp_group_init( &export_grp );
+ mbedtls_ecp_group_init( &key.grp );
+ mbedtls_mpi_init( &export_d );
+ mbedtls_ecp_point_init( &export_Q );
+
+ mbedtls_ecp_keypair_init( &key );
+ if( invalid_grp == 0 )
+ TEST_ASSERT( mbedtls_ecp_group_load( &key.grp, id ) == 0 );
+ TEST_ASSERT( mbedtls_ecp_point_read_string( &key.Q, 16, Qx, Qy ) == 0 );
+ TEST_ASSERT( mbedtls_test_read_mpi( &key.d, 16, d ) == 0 );
+
+ TEST_EQUAL( mbedtls_ecp_export( &key, &export_grp,
+ &export_d, &export_Q ), expected_ret );
+
+ if( expected_ret == 0 )
+ {
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &key.Q, &export_Q ), 0 );
+ TEST_EQUAL( mbedtls_mpi_cmp_mpi( &key.d, &export_d ), 0 );
+ TEST_EQUAL( mbedtls_ecp_group_cmp( &key.grp, &export_grp ), 0 );
+ }
+
+exit:
+ mbedtls_ecp_keypair_free( &key );
+ mbedtls_ecp_group_free( &export_grp );
+ mbedtls_mpi_free( &export_d );
+ mbedtls_ecp_point_free( &export_Q );
+}
+/* END_CASE */