Option to set current cert to server certificate.
[openssl.git] / crypto / ec / ec_lib.c
index a987d8985d66d6810c4836ae1fbbb405ef15e8f4..f7b2025ea6f2a9fd6626b3471559159bb98adc1d 100644 (file)
@@ -61,6 +61,8 @@
  * SUN MICROSYSTEMS, INC., and contributed to the OpenSSL project.
  */
 
+#define OPENSSL_FIPSAPI
+
 #include <string.h>
 
 #include <openssl/err.h>
@@ -68,6 +70,7 @@
 
 #include "ec_lcl.h"
 
+__fips_constseg
 static const char EC_version[] = "EC" OPENSSL_VERSION_PTEXT;
 
 
@@ -79,7 +82,7 @@ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth)
 
        if (meth == NULL)
                {
-               ECerr(EC_F_EC_GROUP_NEW, ERR_R_PASSED_NULL_PARAMETER);
+               ECerr(EC_F_EC_GROUP_NEW, EC_R_SLOT_FULL);
                return NULL;
                }
        if (meth->group_init == 0)
@@ -147,7 +150,7 @@ void EC_GROUP_clear_free(EC_GROUP *group)
 
        if (group->meth->group_clear_finish != 0)
                group->meth->group_clear_finish(group);
-       else if (group->meth != NULL && group->meth->group_finish != 0)
+       else if (group->meth->group_finish != 0)
                group->meth->group_finish(group);
 
        EC_EX_DATA_clear_free_all_data(&group->extra_data);
@@ -425,7 +428,7 @@ int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *
        return group->meth->group_get_curve(group, p, a, b, ctx);
        }
 
-
+#ifndef OPENSSL_NO_EC2M
 int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
        {
        if (group->meth->group_set_curve == 0)
@@ -446,7 +449,7 @@ int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM
                }
        return group->meth->group_get_curve(group, p, a, b, ctx);
        }
-
+#endif
 
 int EC_GROUP_get_degree(const EC_GROUP *group)
        {
@@ -480,10 +483,10 @@ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx)
        if (EC_METHOD_get_field_type(EC_GROUP_method_of(a)) !=
            EC_METHOD_get_field_type(EC_GROUP_method_of(b)))
                return 1;
-       /* compare the curve name (if present) */
+       /* compare the curve name (if present in both) */
        if (EC_GROUP_get_curve_name(a) && EC_GROUP_get_curve_name(b) &&
-           EC_GROUP_get_curve_name(a) == EC_GROUP_get_curve_name(b))
-               return 0;
+           EC_GROUP_get_curve_name(a) != EC_GROUP_get_curve_name(b))
+               return 1;
 
        if (!ctx)
                ctx_new = ctx = BN_CTX_new();
@@ -740,7 +743,7 @@ void EC_POINT_clear_free(EC_POINT *point)
 
        if (point->meth->point_clear_finish != 0)
                point->meth->point_clear_finish(point);
-       else if (point->meth != NULL && point->meth->point_finish != 0)
+       else if (point->meth->point_finish != 0)
                point->meth->point_finish(point);
        OPENSSL_cleanse(point, sizeof *point);
        OPENSSL_free(point);
@@ -856,7 +859,7 @@ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *point,
        return group->meth->point_set_affine_coordinates(group, point, x, y, ctx);
        }
 
-
+#ifndef OPENSSL_NO_EC2M
 int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *point,
        const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx)
        {
@@ -872,7 +875,7 @@ int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *point,
                }
        return group->meth->point_set_affine_coordinates(group, point, x, y, ctx);
        }
-
+#endif
 
 int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, const EC_POINT *point,
        BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
@@ -890,7 +893,7 @@ int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group, const EC_POINT *p
        return group->meth->point_get_affine_coordinates(group, point, x, y, ctx);
        }
 
-
+#ifndef OPENSSL_NO_EC2M
 int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, const EC_POINT *point,
        BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
        {
@@ -906,75 +909,7 @@ int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group, const EC_POINT *
                }
        return group->meth->point_get_affine_coordinates(group, point, x, y, ctx);
        }
-
-
-int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *point,
-       const BIGNUM *x, int y_bit, BN_CTX *ctx)
-       {
-       if (group->meth->point_set_compressed_coordinates == 0)
-               {
-               ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-               return 0;
-               }
-       if (group->meth != point->meth)
-               {
-               ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GFP, EC_R_INCOMPATIBLE_OBJECTS);
-               return 0;
-               }
-       return group->meth->point_set_compressed_coordinates(group, point, x, y_bit, ctx);
-       }
-
-
-int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *point,
-       const BIGNUM *x, int y_bit, BN_CTX *ctx)
-       {
-       if (group->meth->point_set_compressed_coordinates == 0)
-               {
-               ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-               return 0;
-               }
-       if (group->meth != point->meth)
-               {
-               ECerr(EC_F_EC_POINT_SET_COMPRESSED_COORDINATES_GF2M, EC_R_INCOMPATIBLE_OBJECTS);
-               return 0;
-               }
-       return group->meth->point_set_compressed_coordinates(group, point, x, y_bit, ctx);
-       }
-
-
-size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *point, point_conversion_form_t form,
-        unsigned char *buf, size_t len, BN_CTX *ctx)
-       {
-       if (group->meth->point2oct == 0)
-               {
-               ECerr(EC_F_EC_POINT_POINT2OCT, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-               return 0;
-               }
-       if (group->meth != point->meth)
-               {
-               ECerr(EC_F_EC_POINT_POINT2OCT, EC_R_INCOMPATIBLE_OBJECTS);
-               return 0;
-               }
-       return group->meth->point2oct(group, point, form, buf, len, ctx);
-       }
-
-
-int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *point,
-        const unsigned char *buf, size_t len, BN_CTX *ctx)
-       {
-       if (group->meth->oct2point == 0)
-               {
-               ECerr(EC_F_EC_POINT_OCT2POINT, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-               return 0;
-               }
-       if (group->meth != point->meth)
-               {
-               ECerr(EC_F_EC_POINT_OCT2POINT, EC_R_INCOMPATIBLE_OBJECTS);
-               return 0;
-               }
-       return group->meth->oct2point(group, point, buf, len, ctx);
-       }
-
+#endif
 
 int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx)
        {
@@ -1061,12 +996,12 @@ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN
        if (group->meth->point_cmp == 0)
                {
                ECerr(EC_F_EC_POINT_CMP, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
-               return 0;
+               return -1;
                }
        if ((group->meth != a->meth) || (a->meth != b->meth))
                {
                ECerr(EC_F_EC_POINT_CMP, EC_R_INCOMPATIBLE_OBJECTS);
-               return 0;
+               return -1;
                }
        return group->meth->point_cmp(group, a, b, ctx);
        }