summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/ec/ec_lib.c42
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}