mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-03 20:22:59 -05:00 
			
		
		
		
	Added a few test cases for addition
This commit is contained in:
		
							parent
							
								
									847395a8a9
								
							
						
					
					
						commit
						d0dc6317e1
					
				@ -244,12 +244,77 @@ int ecp_add( const ecp_group *grp, ecp_point *R,
 | 
			
		||||
 | 
			
		||||
#if defined(POLARSSL_SELF_TEST)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Return true iff P and Q are the same point
 | 
			
		||||
 */
 | 
			
		||||
static int ecp_point_eq( const ecp_point *P, const ecp_point *Q )
 | 
			
		||||
{
 | 
			
		||||
    if( P->is_zero || Q->is_zero )
 | 
			
		||||
        return( P->is_zero && Q->is_zero );
 | 
			
		||||
 | 
			
		||||
    return( mpi_cmp_mpi( &P->X, &Q->X ) == 0 &&
 | 
			
		||||
            mpi_cmp_mpi( &P->Y, &Q->Y ) == 0 );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Checkup routine
 | 
			
		||||
 *
 | 
			
		||||
 * Data gathered from http://danher6.100webspace.net/ecc/#EFp_interactivo
 | 
			
		||||
 * and double-checked using Pari-GP
 | 
			
		||||
 */
 | 
			
		||||
int ecp_self_test( int verbose )
 | 
			
		||||
{
 | 
			
		||||
    return( verbose++ );
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    size_t i;
 | 
			
		||||
    ecp_group grp;
 | 
			
		||||
    ecp_point O, A, B, C, D, E, F, G, TMP;
 | 
			
		||||
    ecp_point add_table[][3] =
 | 
			
		||||
    {
 | 
			
		||||
        {O, O, O},  {O, A, A},  {A, O, A},
 | 
			
		||||
        {A, A, O},  {B, C, O},  {C, B, O},
 | 
			
		||||
        {A, D, E},  {D, A, E},  {B, D, F},  {D, B, F},
 | 
			
		||||
        {D, D, G},
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    ecp_set_zero( &O );
 | 
			
		||||
    MPI_CHK( ecp_group_read_string( &grp, 10, "47", "4", "17", "42", "13" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &A, 10, "13",  "0" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &B, 10, "14", "11" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &C, 10, "14", "36" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &D, 10, "37", "31" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &E, 10, "34", "14" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &F, 10, "45",  "7" ) );
 | 
			
		||||
    MPI_CHK( ecp_point_read_string( &E, 10, "21", "32" ) );
 | 
			
		||||
 | 
			
		||||
    if( verbose != 0 )
 | 
			
		||||
        printf( "  ECP test #1 (ecp_add): " );
 | 
			
		||||
 | 
			
		||||
    for( i = 0; i < sizeof( add_table ) / sizeof( add_table[0] ); i++ )
 | 
			
		||||
    {
 | 
			
		||||
        MPI_CHK( ecp_add( &grp, &TMP, &add_table[i][0], &add_table[i][1] ) );
 | 
			
		||||
        if( ! ecp_point_eq( &TMP, &add_table[i][2] ) )
 | 
			
		||||
        {
 | 
			
		||||
            if( verbose != 0 )
 | 
			
		||||
                printf(" failed (%zu)\n", i);
 | 
			
		||||
 | 
			
		||||
            return( 1 );
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
 | 
			
		||||
    if( ret != 0 && verbose != 0 )
 | 
			
		||||
        printf( "Unexpected error, return code = %08X\n", ret );
 | 
			
		||||
 | 
			
		||||
    ecp_group_free( &grp );
 | 
			
		||||
    ecp_point_free( &O ); ecp_point_free( &A ); ecp_point_free( &B );
 | 
			
		||||
    ecp_point_free( &C ); ecp_point_free( &D ); ecp_point_free( &E );
 | 
			
		||||
    ecp_point_free( &F ); ecp_point_free( &G );
 | 
			
		||||
 | 
			
		||||
    if( verbose != 0 )
 | 
			
		||||
        printf( "\n" );
 | 
			
		||||
 | 
			
		||||
    return( ret );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user