diff options
| author | beck <> | 2017-01-29 17:49:23 +0000 |
|---|---|---|
| committer | beck <> | 2017-01-29 17:49:23 +0000 |
| commit | d1f47bd292f36094480caa49ada36b99a69c59b0 (patch) | |
| tree | 1a54abba678898ee5270ae4f3404a50ee9a92eea /src/lib/libcrypto/ecdh/ech_key.c | |
| parent | f8c627888330b75c2eea8a3c27d0efe947a4f9da (diff) | |
| download | openbsd-d1f47bd292f36094480caa49ada36b99a69c59b0.tar.gz openbsd-d1f47bd292f36094480caa49ada36b99a69c59b0.tar.bz2 openbsd-d1f47bd292f36094480caa49ada36b99a69c59b0.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.c | 27 |
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; |
