Remove last non-static parts of known EC groups

parent 731d08b4
...@@ -527,7 +527,6 @@ int ecp_group_read_string( ecp_group *grp, int radix, ...@@ -527,7 +527,6 @@ int ecp_group_read_string( ecp_group *grp, int radix,
int ret; int ret;
MPI_CHK( mpi_read_string( &grp->P, radix, p ) ); MPI_CHK( mpi_read_string( &grp->P, radix, p ) );
MPI_CHK( mpi_add_int( &grp->A, &grp->P, -3 ) );
MPI_CHK( mpi_read_string( &grp->B, radix, b ) ); MPI_CHK( mpi_read_string( &grp->B, radix, b ) );
MPI_CHK( ecp_point_read_string( &grp->G, radix, gx, gy ) ); MPI_CHK( ecp_point_read_string( &grp->G, radix, gx, gy ) );
MPI_CHK( mpi_read_string( &grp->N, radix, n ) ); MPI_CHK( mpi_read_string( &grp->N, radix, n ) );
...@@ -868,7 +867,17 @@ static int ecp_double_jac( const ecp_group *grp, ecp_point *R, ...@@ -868,7 +867,17 @@ static int ecp_double_jac( const ecp_group *grp, ecp_point *R,
MPI_CHK( mpi_mul_mpi( &Z3, &P->Z, &P->Z ) ); MOD_MUL( Z3 ); MPI_CHK( mpi_mul_mpi( &Z3, &P->Z, &P->Z ) ); MOD_MUL( Z3 );
MPI_CHK( mpi_mul_mpi( &X3, &Z3, &Z3 ) ); MOD_MUL( X3 ); MPI_CHK( mpi_mul_mpi( &X3, &Z3, &Z3 ) ); MOD_MUL( X3 );
MPI_CHK( mpi_mul_int( &T3, &T3, 3 ) ); MOD_ADD( T3 ); MPI_CHK( mpi_mul_int( &T3, &T3, 3 ) ); MOD_ADD( T3 );
MPI_CHK( mpi_mul_mpi( &X3, &X3, &grp->A ) ); MOD_MUL( X3 );
/* Special case for A = -3 */
if( grp->A.p == NULL )
{
MPI_CHK( mpi_mul_int( &X3, &X3, 3 ) );
X3.s = -1; /* mpi_mul_int doesn't handle negative numbers */
MOD_SUB( X3 );
}
else
MPI_CHK( mpi_mul_mpi( &X3, &X3, &grp->A ) ); MOD_MUL( X3 );
MPI_CHK( mpi_add_mpi( &T3, &T3, &X3 ) ); MOD_ADD( T3 ); MPI_CHK( mpi_add_mpi( &T3, &T3, &X3 ) ); MOD_ADD( T3 );
MPI_CHK( mpi_mul_mpi( &X3, &T3, &T3 ) ); MOD_MUL( X3 ); MPI_CHK( mpi_mul_mpi( &X3, &T3, &T3 ) ); MOD_MUL( X3 );
MPI_CHK( mpi_sub_mpi( &X3, &X3, &T1 ) ); MOD_SUB( X3 ); MPI_CHK( mpi_sub_mpi( &X3, &X3, &T1 ) ); MOD_SUB( X3 );
...@@ -1633,7 +1642,17 @@ static int ecp_check_pubkey_sw( const ecp_group *grp, const ecp_point *pt ) ...@@ -1633,7 +1642,17 @@ static int ecp_check_pubkey_sw( const ecp_group *grp, const ecp_point *pt )
*/ */
MPI_CHK( mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); MOD_MUL( YY ); MPI_CHK( mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); MOD_MUL( YY );
MPI_CHK( mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); MOD_MUL( RHS ); MPI_CHK( mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); MOD_MUL( RHS );
MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->A ) ); MOD_ADD( RHS );
/* Special case for A = -3 */
if( grp->A.p == NULL )
{
MPI_CHK( mpi_sub_int( &RHS, &RHS, 3 ) ); MOD_SUB( RHS );
}
else
{
MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->A ) ); MOD_ADD( RHS );
}
MPI_CHK( mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); MOD_MUL( RHS ); MPI_CHK( mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); MOD_MUL( RHS );
MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->B ) ); MOD_ADD( RHS ); MPI_CHK( mpi_add_mpi( &RHS, &RHS, &grp->B ) ); MOD_ADD( RHS );
......
...@@ -450,6 +450,17 @@ static inline void ecp_mpi_load( mpi *X, const t_uint *p, size_t len ) ...@@ -450,6 +450,17 @@ static inline void ecp_mpi_load( mpi *X, const t_uint *p, size_t len )
X->p = (t_uint *) p; X->p = (t_uint *) p;
} }
/*
* Set an MPI to static value 1
*/
static inline void ecp_mpi_set1( mpi *X )
{
static t_uint one[] = { 1 };
X->s = 1;
X->n = 1;
X->p = one;
}
/* /*
* Make group available from embedded constants * Make group available from embedded constants
*/ */
...@@ -461,28 +472,20 @@ static int ecp_group_load( ecp_group *grp, ...@@ -461,28 +472,20 @@ static int ecp_group_load( ecp_group *grp,
const t_uint *gy, size_t gylen, const t_uint *gy, size_t gylen,
const t_uint *n, size_t nlen) const t_uint *n, size_t nlen)
{ {
int ret;
ecp_mpi_load( &grp->P, p, plen ); ecp_mpi_load( &grp->P, p, plen );
if( a != NULL ) if( a != NULL )
ecp_mpi_load( &grp->A, a, alen ); ecp_mpi_load( &grp->A, a, alen );
else
MPI_CHK( mpi_sub_int( &grp->A, &grp->P, 3 ) );
ecp_mpi_load( &grp->B, b, blen ); ecp_mpi_load( &grp->B, b, blen );
ecp_mpi_load( &grp->N, n, nlen ); ecp_mpi_load( &grp->N, n, nlen );
ecp_mpi_load( &grp->G.X, gx, gxlen ); ecp_mpi_load( &grp->G.X, gx, gxlen );
ecp_mpi_load( &grp->G.Y, gy, gylen ); ecp_mpi_load( &grp->G.Y, gy, gylen );
MPI_CHK( mpi_lset( &grp->G.Z, 1 ) ); ecp_mpi_set1( &grp->G.Z );
grp->pbits = mpi_msb( &grp->P ); grp->pbits = mpi_msb( &grp->P );
grp->nbits = mpi_msb( &grp->N ); grp->nbits = mpi_msb( &grp->N );
cleanup: return( 0 );
if( ret != 0 )
ecp_group_free( grp );
return( ret );
} }
#if defined(POLARSSL_ECP_NIST_OPTIM) #if defined(POLARSSL_ECP_NIST_OPTIM)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment