X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=crypto%2Fec%2Fecp_nist.c;h=ad9bb70181676c712003e191c8c8fc6a93970f34;hp=156bc54a07bbfcc76bc2c257161484937fa21283;hb=7eef2b0cd712d987b0bd556ad8ec637332ff32fb;hpb=b53e44e57259b2b015c54de8ecbcf4e06be23298 diff --git a/crypto/ec/ecp_nist.c b/crypto/ec/ecp_nist.c index 156bc54a07..ad9bb70181 100644 --- a/crypto/ec/ecp_nist.c +++ b/crypto/ec/ecp_nist.c @@ -3,7 +3,7 @@ * Written by Nils Larsch for the OpenSSL project. */ /* ==================================================================== - * Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved. + * Copyright (c) 1998-2003 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -61,6 +61,10 @@ * and contributed to the OpenSSL project. */ +#define OPENSSL_FIPSAPI + +#include + #include #include #include "ec_lcl.h" @@ -68,10 +72,11 @@ const EC_METHOD *EC_GFp_nist_method(void) { static const EC_METHOD ret = { + EC_FLAGS_DEFAULT_OCT, NID_X9_62_prime_field, - ec_GFp_nist_group_init, - ec_GFp_nist_group_finish, - ec_GFp_nist_group_clear_finish, + ec_GFp_simple_group_init, + ec_GFp_simple_group_finish, + ec_GFp_simple_group_clear_finish, ec_GFp_nist_group_copy, ec_GFp_nist_group_set_curve, ec_GFp_simple_group_get_curve, @@ -86,19 +91,18 @@ const EC_METHOD *EC_GFp_nist_method(void) ec_GFp_simple_get_Jprojective_coordinates_GFp, ec_GFp_simple_point_set_affine_coordinates, ec_GFp_simple_point_get_affine_coordinates, - ec_GFp_simple_set_compressed_coordinates, - ec_GFp_simple_point2oct, - ec_GFp_simple_oct2point, + 0,0,0, ec_GFp_simple_add, ec_GFp_simple_dbl, ec_GFp_simple_invert, - 0 /* mul */, - 0 /* precompute_mult */, ec_GFp_simple_is_at_infinity, ec_GFp_simple_is_on_curve, ec_GFp_simple_cmp, ec_GFp_simple_make_affine, ec_GFp_simple_points_make_affine, + 0 /* mul */, + 0 /* precompute_mult */, + 0 /* have_precompute_mult */, ec_GFp_nist_field_mul, ec_GFp_nist_field_sqr, 0 /* field_div */, @@ -109,35 +113,13 @@ const EC_METHOD *EC_GFp_nist_method(void) return &ret; } -#if BN_BITS2 == 64 && UINT_MAX != 4294967295UL && ULONG_MAX != 4294967295UL -#define NO_32_BIT_TYPE -#endif - -int ec_GFp_nist_group_init(EC_GROUP *group) - { - int ok; - - ok = ec_GFp_simple_group_init(group); - group->field_data1 = NULL; - return ok; - } - -void ec_GFp_nist_group_finish(EC_GROUP *group) +int ec_GFp_nist_group_copy(EC_GROUP *dest, const EC_GROUP *src) { - BN_free(&group->field); - BN_free(&group->a); - BN_free(&group->b); - } + dest->field_mod_func = src->field_mod_func; - -void ec_GFp_nist_group_clear_finish(EC_GROUP *group) - { - BN_clear_free(&group->field); - BN_clear_free(&group->a); - BN_clear_free(&group->b); + return ec_GFp_simple_group_copy(dest, src); } - int ec_GFp_nist_group_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) { @@ -154,56 +136,20 @@ int ec_GFp_nist_group_set_curve(EC_GROUP *group, const BIGNUM *p, if (BN_ucmp(BN_get0_nist_prime_192(), p) == 0) group->field_mod_func = BN_nist_mod_192; else if (BN_ucmp(BN_get0_nist_prime_224(), p) == 0) - { -#if !defined(NO_32_BIT_TYPE) || defined(OPENSSL_NO_ASM) group->field_mod_func = BN_nist_mod_224; -#else - ECerr(EC_F_EC_GFP_NIST_GROUP_SET_CURVE_GFP, EC_R_NOT_A_SUPPORTED_NIST_PRIME); - goto err; -#endif - } else if (BN_ucmp(BN_get0_nist_prime_256(), p) == 0) - { -#if !defined(NO_32_BIT_TYPE) || defined(OPENSSL_NO_ASM) group->field_mod_func = BN_nist_mod_256; -#else - ECerr(EC_F_EC_GFP_NIST_GROUP_SET_CURVE_GFP, EC_R_NOT_A_SUPPORTED_NIST_PRIME); - goto err; -#endif - } else if (BN_ucmp(BN_get0_nist_prime_384(), p) == 0) - { -#if !defined(NO_32_BIT_TYPE) || defined(OPENSSL_NO_ASM) group->field_mod_func = BN_nist_mod_384; -#else - ECerr(EC_F_EC_GFP_NIST_GROUP_SET_CURVE_GFP, EC_R_NOT_A_SUPPORTED_NIST_PRIME); - goto err; -#endif - } else if (BN_ucmp(BN_get0_nist_prime_521(), p) == 0) - /* this one works in the NO_32_BIT_TYPE case */ group->field_mod_func = BN_nist_mod_521; else { - ECerr(EC_F_EC_GFP_NIST_GROUP_SET_CURVE_GFP, EC_R_NOT_A_NIST_PRIME); + ECerr(EC_F_EC_GFP_NIST_GROUP_SET_CURVE, EC_R_NOT_A_NIST_PRIME); goto err; } - /* group->field */ - if (!BN_copy(&group->field, p)) goto err; - BN_set_sign(&group->field, 0); - - /* group->a */ - if (!group->field_mod_func(&group->a, a, p, ctx)) goto err; - - /* group->b */ - if (!group->field_mod_func(&group->b, b, p, ctx)) goto err; - - /* group->a_is_minus3 */ - if (!BN_add_word(tmp_bn, 3)) goto err; - group->a_is_minus3 = (0 == BN_cmp(tmp_bn, &group->field)); - - ret = 1; + ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx); err: BN_CTX_end(ctx); @@ -212,26 +158,6 @@ int ec_GFp_nist_group_set_curve(EC_GROUP *group, const BIGNUM *p, return ret; } -int ec_GFp_nist_group_copy(EC_GROUP *dest, const EC_GROUP *src) - { - if (dest == NULL || src == NULL) - return 0; - - if (!BN_copy(&dest->field, &src->field)) - return 0; - if (!BN_copy(&dest->a, &src->a)) - return 0; - if (!BN_copy(&dest->b, &src->b)) - return 0; - - dest->curve_name = src->curve_name; - - dest->a_is_minus3 = src->a_is_minus3; - - dest->field_data1 = src->field_data1; - - return 1; - } int ec_GFp_nist_field_mul(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) @@ -258,6 +184,7 @@ err: return ret; } + int ec_GFp_nist_field_sqr(const EC_GROUP *group, BIGNUM *r, const BIGNUM *a, BN_CTX *ctx) {