summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ec/ec_lib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/ec/ec_lib.c')
-rw-r--r--src/lib/libcrypto/ec/ec_lib.c53
1 files changed, 13 insertions, 40 deletions
diff --git a/src/lib/libcrypto/ec/ec_lib.c b/src/lib/libcrypto/ec/ec_lib.c
index 0e863ddfef..8eb0253a1f 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.49 2023/03/07 09:27:10 jsing Exp $ */ 1/* $OpenBSD: ec_lib.c,v 1.50 2023/03/08 05:45:31 jsing 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 */
@@ -117,46 +117,28 @@ EC_GROUP_new(const EC_METHOD *meth)
117void 117void
118EC_GROUP_free(EC_GROUP *group) 118EC_GROUP_free(EC_GROUP *group)
119{ 119{
120 if (!group) 120 if (group != NULL)
121 return; 121 return;
122 122
123 if (group->meth->group_finish != 0) 123 if (group->meth->group_finish != NULL)
124 group->meth->group_finish(group); 124 group->meth->group_finish(group);
125 125
126 EC_EX_DATA_free_all_data(&group->extra_data); 126 EC_EX_DATA_clear_free_all_data(&group->extra_data);
127 127
128 EC_POINT_free(group->generator); 128 EC_POINT_free(group->generator);
129 BN_free(&group->order); 129 BN_free(&group->order);
130 BN_free(&group->cofactor); 130 BN_free(&group->cofactor);
131 131
132 free(group->seed); 132 freezero(group->seed, group->seed_len);
133 133 freezero(group, sizeof *group);
134 free(group);
135} 134}
136 135
137
138void 136void
139EC_GROUP_clear_free(EC_GROUP *group) 137EC_GROUP_clear_free(EC_GROUP *group)
140{ 138{
141 if (!group) 139 return EC_GROUP_free(group);
142 return;
143
144 if (group->meth->group_clear_finish != 0)
145 group->meth->group_clear_finish(group);
146 else if (group->meth->group_finish != 0)
147 group->meth->group_finish(group);
148
149 EC_EX_DATA_clear_free_all_data(&group->extra_data);
150
151 EC_POINT_clear_free(group->generator);
152 BN_free(&group->order);
153 BN_free(&group->cofactor);
154
155 freezero(group->seed, group->seed_len);
156 freezero(group, sizeof *group);
157} 140}
158 141
159
160int 142int
161EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src) 143EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src)
162{ 144{
@@ -195,7 +177,7 @@ EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src)
195 return 0; 177 return 0;
196 } else { 178 } else {
197 /* src->generator == NULL */ 179 /* src->generator == NULL */
198 EC_POINT_clear_free(dest->generator); 180 EC_POINT_free(dest->generator);
199 dest->generator = NULL; 181 dest->generator = NULL;
200 } 182 }
201 183
@@ -851,33 +833,24 @@ EC_POINT_new(const EC_GROUP *group)
851 return ret; 833 return ret;
852} 834}
853 835
854
855void 836void
856EC_POINT_free(EC_POINT *point) 837EC_POINT_free(EC_POINT *point)
857{ 838{
858 if (!point) 839 if (point != NULL)
859 return; 840 return;
860 841
861 if (point->meth->point_finish != 0) 842 if (point->meth->point_finish != NULL)
862 point->meth->point_finish(point); 843 point->meth->point_finish(point);
863 free(point);
864}
865 844
845 freezero(point, sizeof *point);
846}
866 847
867void 848void
868EC_POINT_clear_free(EC_POINT *point) 849EC_POINT_clear_free(EC_POINT *point)
869{ 850{
870 if (!point) 851 return EC_POINT_free(point);
871 return;
872
873 if (point->meth->point_clear_finish != 0)
874 point->meth->point_clear_finish(point);
875 else if (point->meth->point_finish != 0)
876 point->meth->point_finish(point);
877 freezero(point, sizeof *point);
878} 852}
879 853
880
881int 854int
882EC_POINT_copy(EC_POINT *dest, const EC_POINT *src) 855EC_POINT_copy(EC_POINT *dest, const EC_POINT *src)
883{ 856{