diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/ec/ec_lib.c | 42 | 
1 files changed, 15 insertions, 27 deletions
| diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c index c02f054cdc..b136753be9 100644 --- a/src/lib/libcrypto/ec/ec_lib.c +++ b/src/lib/libcrypto/ec/ec_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ec_lib.c,v 1.80 2024/11/06 08:59:32 tb Exp $ */ | 1 | /* $OpenBSD: ec_lib.c,v 1.81 2024/11/06 09:10:55 tb Exp $ */ | 
| 2 | /* | 2 | /* | 
| 3 | * Originally written by Bodo Moeller for the OpenSSL project. | 3 | * Originally written by Bodo Moeller for the OpenSSL project. | 
| 4 | */ | 4 | */ | 
| @@ -154,41 +154,29 @@ EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src) | |||
| 154 | if (dest == src) | 154 | if (dest == src) | 
| 155 | return 1; | 155 | return 1; | 
| 156 | 156 | ||
| 157 | if (!dest->meth->group_copy(dest, src)) | ||
| 158 | return 0; | ||
| 159 | |||
| 160 | EC_POINT_free(dest->generator); | ||
| 161 | dest->generator = NULL; | ||
| 157 | if (src->generator != NULL) { | 162 | if (src->generator != NULL) { | 
| 158 | if (dest->generator == NULL) { | 163 | if (!EC_GROUP_set_generator(dest, src->generator, &src->order, | 
| 159 | dest->generator = EC_POINT_new(dest); | 164 | &src->cofactor)) | 
| 160 | if (dest->generator == NULL) | ||
| 161 | return 0; | ||
| 162 | } | ||
| 163 | if (!EC_POINT_copy(dest->generator, src->generator)) | ||
| 164 | return 0; | 165 | return 0; | 
| 165 | } else { | 166 | } else { | 
| 166 | /* src->generator == NULL */ | 167 | /* XXX - should do the sanity checks as in set_generator() */ | 
| 167 | EC_POINT_free(dest->generator); | 168 | if (!bn_copy(&dest->order, &src->order)) | 
| 168 | dest->generator = NULL; | 169 | return 0; | 
| 170 | if (!bn_copy(&dest->cofactor, &src->cofactor)) | ||
| 171 | return 0; | ||
| 169 | } | 172 | } | 
| 170 | 173 | ||
| 171 | if (!bn_copy(&dest->order, &src->order)) | ||
| 172 | return 0; | ||
| 173 | if (!bn_copy(&dest->cofactor, &src->cofactor)) | ||
| 174 | return 0; | ||
| 175 | |||
| 176 | dest->curve_name = src->curve_name; | 174 | dest->curve_name = src->curve_name; | 
| 177 | dest->asn1_flag = src->asn1_flag; | 175 | dest->asn1_flag = src->asn1_flag; | 
| 178 | dest->asn1_form = src->asn1_form; | 176 | dest->asn1_form = src->asn1_form; | 
| 179 | 177 | ||
| 180 | if (src->seed) { | 178 | if (!EC_GROUP_set_seed(dest, src->seed, src->seed_len)) | 
| 181 | free(dest->seed); | 179 | return 0; | 
| 182 | dest->seed = malloc(src->seed_len); | ||
| 183 | if (dest->seed == NULL) | ||
| 184 | return 0; | ||
| 185 | memcpy(dest->seed, src->seed, src->seed_len); | ||
| 186 | dest->seed_len = src->seed_len; | ||
| 187 | } else { | ||
| 188 | free(dest->seed); | ||
| 189 | dest->seed = NULL; | ||
| 190 | dest->seed_len = 0; | ||
| 191 | } | ||
| 192 | 180 | ||
| 193 | return dest->meth->group_copy(dest, src); | 181 | return dest->meth->group_copy(dest, src); | 
| 194 | } | 182 | } | 
