summaryrefslogtreecommitdiff
path: root/lib/libcrypto/ec/ecp_smpl.c
diff options
context:
space:
mode:
authorJoel Sing <jsing@cvs.openbsd.org>2015-02-09 15:49:23 +0000
committerJoel Sing <jsing@cvs.openbsd.org>2015-02-09 15:49:23 +0000
commit6cbf53f9a6696e529e5224265cfa1741775d5cfa (patch)
tree7e9f6e4f5a2e4ca31dd5118e845b28f43df1db26 /lib/libcrypto/ec/ecp_smpl.c
parentd566de171fae9cff9702bb783eefe844380a4f04 (diff)
BN_CTX_get() can fail - consistently check its return value.
There are currently cases where the return from each call is checked, the return from only the last call is checked and cases where it is not checked at all (including code in bn, ec and engine). Checking the last return value is valid as once the function fails it will continue to return NULL. However, in order to be consistent check each call with the same idiom. This makes it easy to verify. Note there are still a handful of cases that do not follow the idiom - these will be handled separately. ok beck@ doug@
Diffstat (limited to 'lib/libcrypto/ec/ecp_smpl.c')
-rw-r--r--lib/libcrypto/ec/ecp_smpl.c101
1 files changed, 58 insertions, 43 deletions
diff --git a/lib/libcrypto/ec/ecp_smpl.c b/lib/libcrypto/ec/ecp_smpl.c
index 7b3bb2364d9..f6db4dc9b19 100644
--- a/lib/libcrypto/ec/ecp_smpl.c
+++ b/lib/libcrypto/ec/ecp_smpl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ecp_smpl.c,v 1.14 2015/02/08 22:25:03 miod Exp $ */
+/* $OpenBSD: ecp_smpl.c,v 1.15 2015/02/09 15:49:22 jsing Exp $ */
/* Includes code written by Lenka Fibikova <fibikova@exp-math.uni-essen.de>
* for the OpenSSL project.
* Includes code written by Bodo Moeller for the OpenSSL project.
@@ -188,8 +188,7 @@ ec_GFp_simple_group_set_curve(EC_GROUP * group,
return 0;
}
BN_CTX_start(ctx);
- tmp_a = BN_CTX_get(ctx);
- if (tmp_a == NULL)
+ if ((tmp_a = BN_CTX_get(ctx)) == NULL)
goto err;
/* group->field */
@@ -294,12 +293,15 @@ ec_GFp_simple_group_check_discriminant(const EC_GROUP * group, BN_CTX * ctx)
}
}
BN_CTX_start(ctx);
- a = BN_CTX_get(ctx);
- b = BN_CTX_get(ctx);
- tmp_1 = BN_CTX_get(ctx);
- tmp_2 = BN_CTX_get(ctx);
- order = BN_CTX_get(ctx);
- if (order == NULL)
+ if ((a = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((b = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((tmp_1 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((tmp_2 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((order = BN_CTX_get(ctx)) == NULL)
goto err;
if (group->meth->field_decode) {
@@ -539,11 +541,13 @@ ec_GFp_simple_point_get_affine_coordinates(const EC_GROUP * group, const EC_POIN
return 0;
}
BN_CTX_start(ctx);
- Z = BN_CTX_get(ctx);
- Z_1 = BN_CTX_get(ctx);
- Z_2 = BN_CTX_get(ctx);
- Z_3 = BN_CTX_get(ctx);
- if (Z_3 == NULL)
+ if ((Z = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((Z_1 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((Z_2 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((Z_3 = BN_CTX_get(ctx)) == NULL)
goto err;
/* transform (X, Y, Z) into (x, y) := (X/Z^2, Y/Z^3) */
@@ -652,14 +656,19 @@ ec_GFp_simple_add(const EC_GROUP * group, EC_POINT * r, const EC_POINT * a, cons
return 0;
}
BN_CTX_start(ctx);
- n0 = BN_CTX_get(ctx);
- n1 = BN_CTX_get(ctx);
- n2 = BN_CTX_get(ctx);
- n3 = BN_CTX_get(ctx);
- n4 = BN_CTX_get(ctx);
- n5 = BN_CTX_get(ctx);
- n6 = BN_CTX_get(ctx);
- if (n6 == NULL)
+ if ((n0 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((n1 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((n2 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((n3 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((n4 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((n5 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((n6 = BN_CTX_get(ctx)) == NULL)
goto end;
/*
@@ -834,11 +843,13 @@ ec_GFp_simple_dbl(const EC_GROUP * group, EC_POINT * r, const EC_POINT * a, BN_C
return 0;
}
BN_CTX_start(ctx);
- n0 = BN_CTX_get(ctx);
- n1 = BN_CTX_get(ctx);
- n2 = BN_CTX_get(ctx);
- n3 = BN_CTX_get(ctx);
- if (n3 == NULL)
+ if ((n0 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((n1 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((n2 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((n3 = BN_CTX_get(ctx)) == NULL)
goto err;
/*
@@ -990,11 +1001,13 @@ ec_GFp_simple_is_on_curve(const EC_GROUP * group, const EC_POINT * point, BN_CTX
return -1;
}
BN_CTX_start(ctx);
- rh = BN_CTX_get(ctx);
- tmp = BN_CTX_get(ctx);
- Z4 = BN_CTX_get(ctx);
- Z6 = BN_CTX_get(ctx);
- if (Z6 == NULL)
+ if ((rh = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((tmp = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((Z4 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((Z6 = BN_CTX_get(ctx)) == NULL)
goto err;
/*
@@ -1101,11 +1114,13 @@ ec_GFp_simple_cmp(const EC_GROUP * group, const EC_POINT * a, const EC_POINT * b
return -1;
}
BN_CTX_start(ctx);
- tmp1 = BN_CTX_get(ctx);
- tmp2 = BN_CTX_get(ctx);
- Za23 = BN_CTX_get(ctx);
- Zb23 = BN_CTX_get(ctx);
- if (Zb23 == NULL)
+ if ((tmp1 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((tmp2 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((Za23 = BN_CTX_get(ctx)) == NULL)
+ goto end;
+ if ((Zb23 = BN_CTX_get(ctx)) == NULL)
goto end;
/*
@@ -1184,9 +1199,9 @@ ec_GFp_simple_make_affine(const EC_GROUP * group, EC_POINT * point, BN_CTX * ctx
return 0;
}
BN_CTX_start(ctx);
- x = BN_CTX_get(ctx);
- y = BN_CTX_get(ctx);
- if (y == NULL)
+ if ((x = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((y = BN_CTX_get(ctx)) == NULL)
goto err;
if (!EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx))
@@ -1225,9 +1240,9 @@ ec_GFp_simple_points_make_affine(const EC_GROUP * group, size_t num, EC_POINT *
return 0;
}
BN_CTX_start(ctx);
- tmp0 = BN_CTX_get(ctx);
- tmp1 = BN_CTX_get(ctx);
- if (tmp0 == NULL || tmp1 == NULL)
+ if ((tmp0 = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if ((tmp1 = BN_CTX_get(ctx)) == NULL)
goto err;
/*