@ -25,7 +25,7 @@
* Initialize a GF ( 2 ^ m ) - based EC_GROUP structure . Note that all other members
* are handled by EC_GROUP_new .
*/
int ec_GF2m_simple_group_init( EC_GROUP * group )
int ossl_ ec_GF2m_simple_group_init( EC_GROUP * group )
{
group - > field = BN_new ( ) ;
group - > a = BN_new ( ) ;
@ -44,7 +44,7 @@ int ec_GF2m_simple_group_init(EC_GROUP *group)
* Free a GF ( 2 ^ m ) - based EC_GROUP structure . Note that all other members are
* handled by EC_GROUP_free .
*/
void ec_GF2m_simple_group_finish( EC_GROUP * group )
void ossl_ ec_GF2m_simple_group_finish( EC_GROUP * group )
{
BN_free ( group - > field ) ;
BN_free ( group - > a ) ;
@ -55,7 +55,7 @@ void ec_GF2m_simple_group_finish(EC_GROUP *group)
* Clear and free a GF ( 2 ^ m ) - based EC_GROUP structure . Note that all other
* members are handled by EC_GROUP_clear_free .
*/
void ec_GF2m_simple_group_clear_finish( EC_GROUP * group )
void ossl_ ec_GF2m_simple_group_clear_finish( EC_GROUP * group )
{
BN_clear_free ( group - > field ) ;
BN_clear_free ( group - > a ) ;
@ -72,7 +72,7 @@ void ec_GF2m_simple_group_clear_finish(EC_GROUP *group)
* Copy a GF ( 2 ^ m ) - based EC_GROUP structure . Note that all other members are
* handled by EC_GROUP_copy .
*/
int ec_GF2m_simple_group_copy( EC_GROUP * dest , const EC_GROUP * src )
int ossl_ ec_GF2m_simple_group_copy( EC_GROUP * dest , const EC_GROUP * src )
{
if ( ! BN_copy ( dest - > field , src - > field ) )
return 0 ;
@ -98,9 +98,9 @@ int ec_GF2m_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src)
}
/* Set the curve parameters of an EC_GROUP structure. */
int ec_GF2m_simple_group_set_curve( EC_GROUP * group ,
const BIGNUM * p , const BIGNUM * a ,
const BIGNUM * b , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_group_set_curve( EC_GROUP * group ,
const BIGNUM * p , const BIGNUM * a ,
const BIGNUM * b , BN_CTX * ctx )
{
int ret = 0 , i ;
@ -138,8 +138,8 @@ int ec_GF2m_simple_group_set_curve(EC_GROUP *group,
* Get the curve parameters of an EC_GROUP structure . If p , a , or b are NULL
* then there values will not be set but the method will return with success .
*/
int ec_GF2m_simple_group_get_curve( const EC_GROUP * group , BIGNUM * p ,
BIGNUM * a , BIGNUM * b , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_group_get_curve( const EC_GROUP * group , BIGNUM * p ,
BIGNUM * a , BIGNUM * b , BN_CTX * ctx )
{
int ret = 0 ;
@ -168,7 +168,7 @@ int ec_GF2m_simple_group_get_curve(const EC_GROUP *group, BIGNUM *p,
* Gets the degree of the field . For a curve over GF ( 2 ^ m ) this is the value
* m .
*/
int ec_GF2m_simple_group_get_degree( const EC_GROUP * group )
int ossl_ ec_GF2m_simple_group_get_degree( const EC_GROUP * group )
{
return BN_num_bits ( group - > field ) - 1 ;
}
@ -177,8 +177,8 @@ int ec_GF2m_simple_group_get_degree(const EC_GROUP *group)
* Checks the discriminant of the curve . y ^ 2 + x * y = x ^ 3 + a * x ^ 2 + b is an
* elliptic curve < = > b ! = 0 ( mod p )
*/
int ec_GF2m_simple_group_check_discriminant( const EC_GROUP * group ,
BN_CTX * ctx )
int ossl_ ec_GF2m_simple_group_check_discriminant( const EC_GROUP * group ,
BN_CTX * ctx )
{
int ret = 0 ;
BIGNUM * b ;
@ -219,7 +219,7 @@ int ec_GF2m_simple_group_check_discriminant(const EC_GROUP *group,
}
/* Initializes an EC_POINT. */
int ec_GF2m_simple_point_init( EC_POINT * point )
int ossl_ ec_GF2m_simple_point_init( EC_POINT * point )
{
point - > X = BN_new ( ) ;
point - > Y = BN_new ( ) ;
@ -235,7 +235,7 @@ int ec_GF2m_simple_point_init(EC_POINT *point)
}
/* Frees an EC_POINT. */
void ec_GF2m_simple_point_finish( EC_POINT * point )
void ossl_ ec_GF2m_simple_point_finish( EC_POINT * point )
{
BN_free ( point - > X ) ;
BN_free ( point - > Y ) ;
@ -243,7 +243,7 @@ void ec_GF2m_simple_point_finish(EC_POINT *point)
}
/* Clears and frees an EC_POINT. */
void ec_GF2m_simple_point_clear_finish( EC_POINT * point )
void ossl_ ec_GF2m_simple_point_clear_finish( EC_POINT * point )
{
BN_clear_free ( point - > X ) ;
BN_clear_free ( point - > Y ) ;
@ -255,7 +255,7 @@ void ec_GF2m_simple_point_clear_finish(EC_POINT *point)
* Copy the contents of one EC_POINT into another . Assumes dest is
* initialized .
*/
int ec_GF2m_simple_point_copy( EC_POINT * dest , const EC_POINT * src )
int ossl_ ec_GF2m_simple_point_copy( EC_POINT * dest , const EC_POINT * src )
{
if ( ! BN_copy ( dest - > X , src - > X ) )
return 0 ;
@ -273,8 +273,8 @@ int ec_GF2m_simple_point_copy(EC_POINT *dest, const EC_POINT *src)
* Set an EC_POINT to the point at infinity . A point at infinity is
* represented by having Z = 0.
*/
int ec_GF2m_simple_point_set_to_infinity( const EC_GROUP * group ,
EC_POINT * point )
int ossl_ ec_GF2m_simple_point_set_to_infinity( const EC_GROUP * group ,
EC_POINT * point )
{
point - > Z_is_one = 0 ;
BN_zero ( point - > Z ) ;
@ -285,10 +285,11 @@ int ec_GF2m_simple_point_set_to_infinity(const EC_GROUP *group,
* Set the coordinates of an EC_POINT using affine coordinates . Note that
* the simple implementation only uses affine coordinates .
*/
int ec_GF2m_simple_point_set_affine_coordinates ( const EC_GROUP * group ,
EC_POINT * point ,
const BIGNUM * x ,
const BIGNUM * y , BN_CTX * ctx )
int ossl_ec_GF2m_simple_point_set_affine_coordinates ( const EC_GROUP * group ,
EC_POINT * point ,
const BIGNUM * x ,
const BIGNUM * y ,
BN_CTX * ctx )
{
int ret = 0 ;
if ( x = = NULL | | y = = NULL ) {
@ -316,10 +317,10 @@ int ec_GF2m_simple_point_set_affine_coordinates(const EC_GROUP *group,
* Gets the affine coordinates of an EC_POINT . Note that the simple
* implementation only uses affine coordinates .
*/
int ec_GF2m_simple_point_get_affine_coordinates( const EC_GROUP * group ,
const EC_POINT * point ,
BIGNUM * x , BIGNUM * y ,
BN_CTX * ctx )
int ossl_ ec_GF2m_simple_point_get_affine_coordinates( const EC_GROUP * group ,
const EC_POINT * point ,
BIGNUM * x , BIGNUM * y ,
BN_CTX * ctx )
{
int ret = 0 ;
@ -352,8 +353,8 @@ int ec_GF2m_simple_point_get_affine_coordinates(const EC_GROUP *group,
* Computes a + b and stores the result in r . r could be a or b , a could be
* b . Uses algorithm A .10 .2 of IEEE P1363 .
*/
int ec_GF2m_simple_add( const EC_GROUP * group , EC_POINT * r , const EC_POINT * a ,
const EC_POINT * b , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_add( const EC_GROUP * group , EC_POINT * r ,
const EC_POINT * a , const EC_POINT * b , BN_CTX * ctx )
{
BIGNUM * x0 , * y0 , * x1 , * y1 , * x2 , * y2 , * s , * t ;
int ret = 0 ;
@ -473,13 +474,14 @@ int ec_GF2m_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
* Computes 2 * a and stores the result in r . r could be a . Uses algorithm
* A .10 .2 of IEEE P1363 .
*/
int ec_GF2m_simple_dbl( const EC_GROUP * group , EC_POINT * r , const EC_POINT * a ,
BN_CTX * ctx )
int ossl_ ec_GF2m_simple_dbl( const EC_GROUP * group , EC_POINT * r ,
const EC_POINT * a , BN_CTX * ctx )
{
return ec_GF2m_simple_add( group , r , a , a , ctx ) ;
return ossl_ ec_GF2m_simple_add( group , r , a , a , ctx ) ;
}
int ec_GF2m_simple_invert ( const EC_GROUP * group , EC_POINT * point , BN_CTX * ctx )
int ossl_ec_GF2m_simple_invert ( const EC_GROUP * group , EC_POINT * point ,
BN_CTX * ctx )
{
if ( EC_POINT_is_at_infinity ( group , point ) | | BN_is_zero ( point - > Y ) )
/* point is its own inverse */
@ -492,8 +494,8 @@ int ec_GF2m_simple_invert(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx)
}
/* Indicates whether the given point is the point at infinity. */
int ec_GF2m_simple_is_at_infinity( const EC_GROUP * group ,
const EC_POINT * point )
int ossl_ ec_GF2m_simple_is_at_infinity( const EC_GROUP * group ,
const EC_POINT * point )
{
return BN_is_zero ( point - > Z ) ;
}
@ -503,8 +505,8 @@ int ec_GF2m_simple_is_at_infinity(const EC_GROUP *group,
* in the EC_GROUP . A point is valid if it satisfies the Weierstrass equation :
* y ^ 2 + x * y = x ^ 3 + a * x ^ 2 + b .
*/
int ec_GF2m_simple_is_on_curve( const EC_GROUP * group , const EC_POINT * point ,
BN_CTX * ctx )
int ossl_ ec_GF2m_simple_is_on_curve( const EC_GROUP * group , const EC_POINT * point ,
BN_CTX * ctx )
{
int ret = - 1 ;
BIGNUM * lh , * y2 ;
@ -576,8 +578,8 @@ int ec_GF2m_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
* 0 equal ( in affine coordinates )
* 1 not equal
*/
int ec_GF2m_simple_cmp( const EC_GROUP * group , const EC_POINT * a ,
const EC_POINT * b , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_cmp( const EC_GROUP * group , const EC_POINT * a ,
const EC_POINT * b , BN_CTX * ctx )
{
BIGNUM * aX , * aY , * bX , * bY ;
int ret = - 1 ;
@ -627,8 +629,8 @@ int ec_GF2m_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
}
/* Forces the given EC_POINT to internally use affine coordinates. */
int ec_GF2m_simple_make_affine( const EC_GROUP * group , EC_POINT * point ,
BN_CTX * ctx )
int ossl_ ec_GF2m_simple_make_affine( const EC_GROUP * group , EC_POINT * point ,
BN_CTX * ctx )
{
BIGNUM * x , * y ;
int ret = 0 ;
@ -676,8 +678,8 @@ int ec_GF2m_simple_make_affine(const EC_GROUP *group, EC_POINT *point,
/*
* Forces each of the EC_POINTs in the given array to use affine coordinates .
*/
int ec_GF2m_simple_points_make_affine( const EC_GROUP * group , size_t num ,
EC_POINT * points [ ] , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_points_make_affine( const EC_GROUP * group , size_t num ,
EC_POINT * points [ ] , BN_CTX * ctx )
{
size_t i ;
@ -690,22 +692,22 @@ int ec_GF2m_simple_points_make_affine(const EC_GROUP *group, size_t num,
}
/* Wrapper to simple binary polynomial field multiplication implementation. */
int ec_GF2m_simple_field_mul( const EC_GROUP * group , BIGNUM * r ,
const BIGNUM * a , const BIGNUM * b , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_field_mul( const EC_GROUP * group , BIGNUM * r ,
const BIGNUM * a , const BIGNUM * b , BN_CTX * ctx )
{
return BN_GF2m_mod_mul_arr ( r , a , b , group - > poly , ctx ) ;
}
/* Wrapper to simple binary polynomial field squaring implementation. */
int ec_GF2m_simple_field_sqr( const EC_GROUP * group , BIGNUM * r ,
const BIGNUM * a , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_field_sqr( const EC_GROUP * group , BIGNUM * r ,
const BIGNUM * a , BN_CTX * ctx )
{
return BN_GF2m_mod_sqr_arr ( r , a , group - > poly , ctx ) ;
}
/* Wrapper to simple binary polynomial field division implementation. */
int ec_GF2m_simple_field_div( const EC_GROUP * group , BIGNUM * r ,
const BIGNUM * a , const BIGNUM * b , BN_CTX * ctx )
int ossl_ ec_GF2m_simple_field_div( const EC_GROUP * group , BIGNUM * r ,
const BIGNUM * a , const BIGNUM * b , BN_CTX * ctx )
{
return BN_GF2m_mod_div ( r , a , b , group - > field , ctx ) ;
}
@ -887,15 +889,15 @@ int ec_GF2m_simple_points_mul(const EC_GROUP *group, EC_POINT *r,
* order or cofactor set to 0.
*/
if ( num > 1 | | BN_is_zero ( group - > order ) | | BN_is_zero ( group - > cofactor ) )
return ec_wNAF_mul( group , r , scalar , num , points , scalars , ctx ) ;
return ossl_ ec_wNAF_mul( group , r , scalar , num , points , scalars , ctx ) ;
if ( scalar ! = NULL & & num = = 0 )
/* Fixed point multiplication */
return ec_scalar_mul_ladder( group , r , scalar , NULL , ctx ) ;
return ossl_ ec_scalar_mul_ladder( group , r , scalar , NULL , ctx ) ;
if ( scalar = = NULL & & num = = 1 )
/* Variable point multiplication */
return ec_scalar_mul_ladder( group , r , scalars [ 0 ] , points [ 0 ] , ctx ) ;
return ossl_ ec_scalar_mul_ladder( group , r , scalars [ 0 ] , points [ 0 ] , ctx ) ;
/*-
* Double point multiplication :
@ -907,8 +909,8 @@ int ec_GF2m_simple_points_mul(const EC_GROUP *group, EC_POINT *r,
return 0 ;
}
if ( ! ec_scalar_mul_ladder( group , t , scalar , NULL , ctx )
| | ! ec_scalar_mul_ladder( group , r , scalars [ 0 ] , points [ 0 ] , ctx )
if ( ! ossl_ ec_scalar_mul_ladder( group , t , scalar , NULL , ctx )
| | ! ossl_ ec_scalar_mul_ladder( group , r , scalars [ 0 ] , points [ 0 ] , ctx )
| | ! EC_POINT_add ( group , r , t , r , ctx ) )
goto err ;
@ -939,55 +941,55 @@ const EC_METHOD *EC_GF2m_simple_method(void)
static const EC_METHOD ret = {
EC_FLAGS_DEFAULT_OCT ,
NID_X9_62_characteristic_two_field ,
ec_GF2m_simple_group_init,
ec_GF2m_simple_group_finish,
ec_GF2m_simple_group_clear_finish,
ec_GF2m_simple_group_copy,
ec_GF2m_simple_group_set_curve,
ec_GF2m_simple_group_get_curve,
ec_GF2m_simple_group_get_degree,
ec_group_simple_order_bits,
ec_GF2m_simple_group_check_discriminant,
ec_GF2m_simple_point_init,
ec_GF2m_simple_point_finish,
ec_GF2m_simple_point_clear_finish,
ec_GF2m_simple_point_copy,
ec_GF2m_simple_point_set_to_infinity,
ec_GF2m_simple_point_set_affine_coordinates,
ec_GF2m_simple_point_get_affine_coordinates,
ossl_ ec_GF2m_simple_group_init,
ossl_ ec_GF2m_simple_group_finish,
ossl_ ec_GF2m_simple_group_clear_finish,
ossl_ ec_GF2m_simple_group_copy,
ossl_ ec_GF2m_simple_group_set_curve,
ossl_ ec_GF2m_simple_group_get_curve,
ossl_ ec_GF2m_simple_group_get_degree,
ossl_ ec_group_simple_order_bits,
ossl_ ec_GF2m_simple_group_check_discriminant,
ossl_ ec_GF2m_simple_point_init,
ossl_ ec_GF2m_simple_point_finish,
ossl_ ec_GF2m_simple_point_clear_finish,
ossl_ ec_GF2m_simple_point_copy,
ossl_ ec_GF2m_simple_point_set_to_infinity,
ossl_ ec_GF2m_simple_point_set_affine_coordinates,
ossl_ ec_GF2m_simple_point_get_affine_coordinates,
0 , /* point_set_compressed_coordinates */
0 , /* point2oct */
0 , /* oct2point */
ec_GF2m_simple_add,
ec_GF2m_simple_dbl,
ec_GF2m_simple_invert,
ec_GF2m_simple_is_at_infinity,
ec_GF2m_simple_is_on_curve,
ec_GF2m_simple_cmp,
ec_GF2m_simple_make_affine,
ec_GF2m_simple_points_make_affine,
ossl_ ec_GF2m_simple_add,
ossl_ ec_GF2m_simple_dbl,
ossl_ ec_GF2m_simple_invert,
ossl_ ec_GF2m_simple_is_at_infinity,
ossl_ ec_GF2m_simple_is_on_curve,
ossl_ ec_GF2m_simple_cmp,
ossl_ ec_GF2m_simple_make_affine,
ossl_ ec_GF2m_simple_points_make_affine,
ec_GF2m_simple_points_mul ,
0 , /* precompute_mult */
0 , /* have_precompute_mult */
ec_GF2m_simple_field_mul,
ec_GF2m_simple_field_sqr,
ec_GF2m_simple_field_div,
ossl_ ec_GF2m_simple_field_mul,
ossl_ ec_GF2m_simple_field_sqr,
ossl_ ec_GF2m_simple_field_div,
ec_GF2m_simple_field_inv ,
0 , /* field_encode */
0 , /* field_decode */
0 , /* field_set_to_one */
ec_key_simple_priv2oct,
ec_key_simple_oct2priv,
ossl_ ec_key_simple_priv2oct,
ossl_ ec_key_simple_oct2priv,
0 , /* set private */
ec_key_simple_generate_key,
ec_key_simple_check_key,
ec_key_simple_generate_public_key,
ossl_ ec_key_simple_generate_key,
ossl_ ec_key_simple_check_key,
ossl_ ec_key_simple_generate_public_key,
0 , /* keycopy */
0 , /* keyfinish */
ecdh_simple_compute_key,
ecdsa_simple_sign_setup,
ecdsa_simple_sign_sig,
ecdsa_simple_verify_sig,
ossl_ ecdh_simple_compute_key,
ossl_ ecdsa_simple_sign_setup,
ossl_ ecdsa_simple_sign_sig,
ossl_ ecdsa_simple_verify_sig,
0 , /* field_inverse_mod_ord */
0 , /* blind_coordinates */
ec_GF2m_simple_ladder_pre ,