Add test case for mbedtls_ecp_set_zero
Tests function with various ECP point conditions, covering freshly
initialized, zeroed, non-zero, and freed points.
Signed-off-by: Werner Lewis <werner.lewis@arm.com>
diff --git a/tests/suites/test_suite_ecp.function b/tests/suites/test_suite_ecp.function
index 2cabef4..65c7067 100644
--- a/tests/suites/test_suite_ecp.function
+++ b/tests/suites/test_suite_ecp.function
@@ -1020,6 +1020,72 @@
}
/* END_CASE */
+/* BEGIN_CASE */
+void ecp_set_zero( int id, data_t * P_bin )
+{
+ mbedtls_ecp_group grp;
+ mbedtls_ecp_point pt, zero_pt, nonzero_pt;
+
+ mbedtls_ecp_group_init( &grp );
+ mbedtls_ecp_point_init( &pt );
+ mbedtls_ecp_point_init( &zero_pt );
+ mbedtls_ecp_point_init( &nonzero_pt );
+
+ // Set zero and non-zero points for comparison
+ TEST_EQUAL( mbedtls_ecp_set_zero( &zero_pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_group_load( &grp, id ), 0 );
+ TEST_EQUAL( mbedtls_ecp_point_read_binary( &grp, &nonzero_pt,
+ P_bin->x, P_bin->len ), 0 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &zero_pt ), 1 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &nonzero_pt ), 0 );
+
+ // Test initialized point
+ TEST_EQUAL( mbedtls_ecp_set_zero( &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &pt ), 1 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &zero_pt, &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &nonzero_pt, &zero_pt ),
+ MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+
+ // Test zeroed point
+ TEST_EQUAL( mbedtls_ecp_set_zero( &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &pt ), 1 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &zero_pt, &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &nonzero_pt, &pt ),
+ MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+
+ // Set point to non-zero value
+ TEST_EQUAL( mbedtls_ecp_point_read_binary( &grp, &pt,
+ P_bin->x, P_bin->len ), 0 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &zero_pt, &pt ),
+ MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &nonzero_pt, &pt), 0 );
+
+ // Test non-zero point
+ TEST_EQUAL( mbedtls_ecp_set_zero( &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &pt ), 1 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &zero_pt, &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &nonzero_pt, &pt ),
+ MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+
+ // Test freed non-zero point
+ TEST_EQUAL( mbedtls_ecp_point_read_binary( &grp, &pt,
+ P_bin->x, P_bin->len ), 0 );
+ mbedtls_ecp_point_free( &pt );
+ TEST_EQUAL( mbedtls_ecp_set_zero( &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_is_zero( &pt ), 1 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &zero_pt, &pt ), 0 );
+ TEST_EQUAL( mbedtls_ecp_point_cmp( &nonzero_pt, &pt),
+ MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+
+exit:
+ mbedtls_ecp_group_free( &grp );
+ mbedtls_ecp_point_free( &pt );
+ mbedtls_ecp_point_free( &zero_pt );
+ mbedtls_ecp_point_free( &nonzero_pt );
+}
+/* END_CASE */
+
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
void ecp_selftest( )
{