summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ecdh/ech_key.c
diff options
context:
space:
mode:
authorbeck <>2017-01-29 17:49:23 +0000
committerbeck <>2017-01-29 17:49:23 +0000
commit957b11334a7afb14537322f0e4795b2e368b3f59 (patch)
tree1a54abba678898ee5270ae4f3404a50ee9a92eea /src/lib/libcrypto/ecdh/ech_key.c
parentdf96e020e729c6c37a8c7fe311fdd1fe6a8718c5 (diff)
downloadopenbsd-957b11334a7afb14537322f0e4795b2e368b3f59.tar.gz
openbsd-957b11334a7afb14537322f0e4795b2e368b3f59.tar.bz2
openbsd-957b11334a7afb14537322f0e4795b2e368b3f59.zip
Send the function codes from the error functions to the bit bucket,
as was done earlier in libssl. Thanks inoguchi@ for noticing libssl had more reacharounds into this. ok jsing@ inoguchi@
Diffstat (limited to 'src/lib/libcrypto/ecdh/ech_key.c')
-rw-r--r--src/lib/libcrypto/ecdh/ech_key.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/lib/libcrypto/ecdh/ech_key.c b/src/lib/libcrypto/ecdh/ech_key.c
index 33ee244499..5c2dc70b63 100644
--- a/src/lib/libcrypto/ecdh/ech_key.c
+++ b/src/lib/libcrypto/ecdh/ech_key.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ech_key.c,v 1.6 2015/09/18 13:04:41 bcook Exp $ */ 1/* $OpenBSD: ech_key.c,v 1.7 2017/01/29 17:49:23 beck Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED. 3 * Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
4 * 4 *
@@ -106,7 +106,7 @@ ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
106 106
107 if (outlen > INT_MAX) { 107 if (outlen > INT_MAX) {
108 /* Sort of, anyway. */ 108 /* Sort of, anyway. */
109 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); 109 ECDHerror(ERR_R_MALLOC_FAILURE);
110 return -1; 110 return -1;
111 } 111 }
112 112
@@ -120,19 +120,18 @@ ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
120 120
121 priv_key = EC_KEY_get0_private_key(ecdh); 121 priv_key = EC_KEY_get0_private_key(ecdh);
122 if (priv_key == NULL) { 122 if (priv_key == NULL) {
123 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_NO_PRIVATE_VALUE); 123 ECDHerror(ECDH_R_NO_PRIVATE_VALUE);
124 goto err; 124 goto err;
125 } 125 }
126 126
127 group = EC_KEY_get0_group(ecdh); 127 group = EC_KEY_get0_group(ecdh);
128 if ((tmp = EC_POINT_new(group)) == NULL) { 128 if ((tmp = EC_POINT_new(group)) == NULL) {
129 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); 129 ECDHerror(ERR_R_MALLOC_FAILURE);
130 goto err; 130 goto err;
131 } 131 }
132 132
133 if (!EC_POINT_mul(group, tmp, NULL, pub_key, priv_key, ctx)) { 133 if (!EC_POINT_mul(group, tmp, NULL, pub_key, priv_key, ctx)) {
134 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, 134 ECDHerror(ECDH_R_POINT_ARITHMETIC_FAILURE);
135 ECDH_R_POINT_ARITHMETIC_FAILURE);
136 goto err; 135 goto err;
137 } 136 }
138 137
@@ -140,8 +139,7 @@ ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
140 NID_X9_62_prime_field) { 139 NID_X9_62_prime_field) {
141 if (!EC_POINT_get_affine_coordinates_GFp(group, tmp, x, y, 140 if (!EC_POINT_get_affine_coordinates_GFp(group, tmp, x, y,
142 ctx)) { 141 ctx)) {
143 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, 142 ECDHerror(ECDH_R_POINT_ARITHMETIC_FAILURE);
144 ECDH_R_POINT_ARITHMETIC_FAILURE);
145 goto err; 143 goto err;
146 } 144 }
147 } 145 }
@@ -149,8 +147,7 @@ ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
149 else { 147 else {
150 if (!EC_POINT_get_affine_coordinates_GF2m(group, tmp, x, y, 148 if (!EC_POINT_get_affine_coordinates_GF2m(group, tmp, x, y,
151 ctx)) { 149 ctx)) {
152 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, 150 ECDHerror(ECDH_R_POINT_ARITHMETIC_FAILURE);
153 ECDH_R_POINT_ARITHMETIC_FAILURE);
154 goto err; 151 goto err;
155 } 152 }
156 } 153 }
@@ -159,28 +156,28 @@ ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
159 buflen = ECDH_size(ecdh); 156 buflen = ECDH_size(ecdh);
160 len = BN_num_bytes(x); 157 len = BN_num_bytes(x);
161 if (len > buflen) { 158 if (len > buflen) {
162 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_INTERNAL_ERROR); 159 ECDHerror(ERR_R_INTERNAL_ERROR);
163 goto err; 160 goto err;
164 } 161 }
165 if (KDF == NULL && outlen < buflen) { 162 if (KDF == NULL && outlen < buflen) {
166 /* The resulting key would be truncated. */ 163 /* The resulting key would be truncated. */
167 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_KEY_TRUNCATION); 164 ECDHerror(ECDH_R_KEY_TRUNCATION);
168 goto err; 165 goto err;
169 } 166 }
170 if ((buf = malloc(buflen)) == NULL) { 167 if ((buf = malloc(buflen)) == NULL) {
171 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); 168 ECDHerror(ERR_R_MALLOC_FAILURE);
172 goto err; 169 goto err;
173 } 170 }
174 171
175 memset(buf, 0, buflen - len); 172 memset(buf, 0, buflen - len);
176 if (len != (size_t)BN_bn2bin(x, buf + buflen - len)) { 173 if (len != (size_t)BN_bn2bin(x, buf + buflen - len)) {
177 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_BN_LIB); 174 ECDHerror(ERR_R_BN_LIB);
178 goto err; 175 goto err;
179 } 176 }
180 177
181 if (KDF != NULL) { 178 if (KDF != NULL) {
182 if (KDF(buf, buflen, out, &outlen) == NULL) { 179 if (KDF(buf, buflen, out, &outlen) == NULL) {
183 ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ECDH_R_KDF_FAILED); 180 ECDHerror(ECDH_R_KDF_FAILED);
184 goto err; 181 goto err;
185 } 182 }
186 ret = outlen; 183 ret = outlen;