summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2023-08-10 16:57:15 +0000
committertb <>2023-08-10 16:57:15 +0000
commitcfc6fda1cea3a524ffa03d0983d431358840d850 (patch)
tree40fb1e987c47592cf52cff6541c9dc6003e655f6 /src
parentdef07757d64b92d83a58067e1f7e85b74ef9e7c6 (diff)
downloadopenbsd-cfc6fda1cea3a524ffa03d0983d431358840d850.tar.gz
openbsd-cfc6fda1cea3a524ffa03d0983d431358840d850.tar.bz2
openbsd-cfc6fda1cea3a524ffa03d0983d431358840d850.zip
Convert {dh,dsa}_{pub,priv}_encode() to single exit
Use the same variable names throughout these functions and unify them some more. ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/dh/dh_ameth.c89
-rw-r--r--src/lib/libcrypto/dsa/dsa_ameth.c89
2 files changed, 94 insertions, 84 deletions
diff --git a/src/lib/libcrypto/dh/dh_ameth.c b/src/lib/libcrypto/dh/dh_ameth.c
index 3898db89f0..4a600b3bbd 100644
--- a/src/lib/libcrypto/dh/dh_ameth.c
+++ b/src/lib/libcrypto/dh/dh_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh_ameth.c,v 1.32 2023/08/10 15:11:16 tb Exp $ */ 1/* $OpenBSD: dh_ameth.c,v 1.33 2023/08/10 16:57:15 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2006. 3 * project 2006.
4 */ 4 */
@@ -131,50 +131,52 @@ static int
131dh_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) 131dh_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
132{ 132{
133 const DH *dh = pkey->pkey.dh; 133 const DH *dh = pkey->pkey.dh;
134 ASN1_STRING *str = NULL; 134 ASN1_STRING *params = NULL;
135 int ptype = V_ASN1_SEQUENCE; 135 int ptype = V_ASN1_SEQUENCE;
136 ASN1_INTEGER *pub_key = NULL; 136 ASN1_INTEGER *key = NULL;
137 ASN1_OBJECT *aobj; 137 ASN1_OBJECT *aobj;
138 unsigned char *data = NULL, *penc = NULL; 138 unsigned char *params_der = NULL, *key_der = NULL;
139 int datalen = 0, penclen = 0; 139 int params_len = 0, key_len = 0;
140 int ret = 0;
140 141
141 if ((datalen = i2d_DHparams(dh, &data)) <= 0) { 142 if ((params_len = i2d_DHparams(dh, &params_der)) <= 0) {
142 DHerror(ERR_R_MALLOC_FAILURE); 143 DHerror(ERR_R_MALLOC_FAILURE);
143 datalen = 0; 144 params_len = 0;
144 goto err; 145 goto err;
145 } 146 }
146 if ((str = ASN1_STRING_new()) == NULL) { 147 if ((params = ASN1_STRING_new()) == NULL) {
147 DHerror(ERR_R_MALLOC_FAILURE); 148 DHerror(ERR_R_MALLOC_FAILURE);
148 goto err; 149 goto err;
149 } 150 }
150 ASN1_STRING_set0(str, data, datalen); 151 ASN1_STRING_set0(params, params_der, params_len);
151 data = NULL; 152 params_der = NULL;
152 datalen = 0; 153 params_len = 0;
153 154
154 if ((pub_key = BN_to_ASN1_INTEGER(dh->pub_key, NULL)) == NULL) 155 if ((key = BN_to_ASN1_INTEGER(dh->pub_key, NULL)) == NULL)
155 goto err; 156 goto err;
156 if ((penclen = i2d_ASN1_INTEGER(pub_key, &penc)) <= 0) { 157 if ((key_len = i2d_ASN1_INTEGER(key, &key_der)) <= 0) {
157 DHerror(ERR_R_MALLOC_FAILURE); 158 DHerror(ERR_R_MALLOC_FAILURE);
158 penclen = 0; 159 key_len = 0;
159 goto err; 160 goto err;
160 } 161 }
161 ASN1_INTEGER_free(pub_key);
162 pub_key = NULL;
163 162
164 if ((aobj = OBJ_nid2obj(EVP_PKEY_DH)) == NULL) 163 if ((aobj = OBJ_nid2obj(EVP_PKEY_DH)) == NULL)
165 goto err; 164 goto err;
166 if (!X509_PUBKEY_set0_param(pk, aobj, ptype, str, penc, penclen)) 165 if (!X509_PUBKEY_set0_param(pk, aobj, ptype, params, key_der, key_len))
167 goto err; 166 goto err;
167 params = NULL;
168 key_der = NULL;
169 key_len = 0;
168 170
169 return 1; 171 ret = 1;
170 172
171 err: 173 err:
172 ASN1_STRING_free(str); 174 ASN1_STRING_free(params);
173 ASN1_INTEGER_free(pub_key); 175 ASN1_INTEGER_free(key);
174 freezero(data, datalen); 176 freezero(params_der, params_len);
175 freezero(penc, penclen); 177 freezero(key_der, key_len);
176 178
177 return 0; 179 return ret;
178} 180}
179 181
180/* 182/*
@@ -239,50 +241,53 @@ dh_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)
239{ 241{
240 const DH *dh = pkey->pkey.dh; 242 const DH *dh = pkey->pkey.dh;
241 ASN1_STRING *params = NULL; 243 ASN1_STRING *params = NULL;
242 ASN1_INTEGER *prkey = NULL; 244 int ptype = V_ASN1_SEQUENCE;
245 ASN1_INTEGER *key = NULL;
243 ASN1_OBJECT *aobj; 246 ASN1_OBJECT *aobj;
244 unsigned char *data = NULL, *dp = NULL; 247 unsigned char *params_der = NULL, *key_der = NULL;
245 int datalen = 0, dplen = 0; 248 int params_len = 0, key_len = 0;
249 int ret = 0;
246 250
247 if ((datalen = i2d_DHparams(dh, &data)) <= 0) { 251 if ((params_len = i2d_DHparams(dh, &params_der)) <= 0) {
248 DHerror(ERR_R_MALLOC_FAILURE); 252 DHerror(ERR_R_MALLOC_FAILURE);
249 datalen = 0; 253 params_len = 0;
250 goto err; 254 goto err;
251 } 255 }
252 if ((params = ASN1_STRING_type_new(V_ASN1_SEQUENCE)) == NULL) { 256 if ((params = ASN1_STRING_type_new(V_ASN1_SEQUENCE)) == NULL) {
253 DHerror(ERR_R_MALLOC_FAILURE); 257 DHerror(ERR_R_MALLOC_FAILURE);
254 goto err; 258 goto err;
255 } 259 }
256 ASN1_STRING_set0(params, data, datalen); 260 ASN1_STRING_set0(params, params_der, params_len);
257 data = NULL; 261 params_der = NULL;
258 datalen = 0; 262 params_len = 0;
259 263
260 if ((prkey = BN_to_ASN1_INTEGER(dh->priv_key, NULL)) == NULL) { 264 if ((key = BN_to_ASN1_INTEGER(dh->priv_key, NULL)) == NULL) {
261 DHerror(DH_R_BN_ERROR); 265 DHerror(DH_R_BN_ERROR);
262 goto err; 266 goto err;
263 } 267 }
264 if ((dplen = i2d_ASN1_INTEGER(prkey, &dp)) <= 0) { 268 if ((key_len = i2d_ASN1_INTEGER(key, &key_der)) <= 0) {
265 DHerror(ERR_R_MALLOC_FAILURE); 269 DHerror(ERR_R_MALLOC_FAILURE);
266 dplen = 0; 270 key_len = 0;
267 goto err; 271 goto err;
268 } 272 }
269 ASN1_INTEGER_free(prkey);
270 prkey = NULL;
271 273
272 if ((aobj = OBJ_nid2obj(NID_dhKeyAgreement)) == NULL) 274 if ((aobj = OBJ_nid2obj(NID_dhKeyAgreement)) == NULL)
273 goto err; 275 goto err;
274 if (!PKCS8_pkey_set0(p8, aobj, 0, V_ASN1_SEQUENCE, params, dp, dplen)) 276 if (!PKCS8_pkey_set0(p8, aobj, 0, ptype, params, key_der, key_len))
275 goto err; 277 goto err;
278 params = NULL;
279 key_der = NULL;
280 key_len = 0;
276 281
277 return 1; 282 ret = 1;
278 283
279 err: 284 err:
280 ASN1_STRING_free(params); 285 ASN1_STRING_free(params);
281 ASN1_INTEGER_free(prkey); 286 ASN1_INTEGER_free(key);
282 freezero(data, datalen); 287 freezero(params_der, params_len);
283 freezero(dp, dplen); 288 freezero(key_der, key_len);
284 289
285 return 0; 290 return ret;
286} 291}
287 292
288static int 293static int
diff --git a/src/lib/libcrypto/dsa/dsa_ameth.c b/src/lib/libcrypto/dsa/dsa_ameth.c
index aab4588b5a..28aafebc04 100644
--- a/src/lib/libcrypto/dsa/dsa_ameth.c
+++ b/src/lib/libcrypto/dsa/dsa_ameth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dsa_ameth.c,v 1.45 2023/08/10 15:11:16 tb Exp $ */ 1/* $OpenBSD: dsa_ameth.c,v 1.46 2023/08/10 16:57:15 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project 2006. 3 * project 2006.
4 */ 4 */
@@ -139,55 +139,57 @@ static int
139dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) 139dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
140{ 140{
141 const DSA *dsa = pkey->pkey.dsa; 141 const DSA *dsa = pkey->pkey.dsa;
142 ASN1_STRING *str = NULL; 142 ASN1_STRING *params = NULL;
143 int ptype = V_ASN1_UNDEF; 143 int ptype = V_ASN1_UNDEF;
144 ASN1_INTEGER *pub_key = NULL; 144 ASN1_INTEGER *key = NULL;
145 ASN1_OBJECT *aobj; 145 ASN1_OBJECT *aobj;
146 unsigned char *data = NULL, *penc = NULL; 146 unsigned char *params_der = NULL, *key_der = NULL;
147 int datalen = 0, penclen = 0; 147 int params_len = 0, key_len = 0;
148 int ret = 0;
148 149
149 if (pkey->save_parameters && dsa->p && dsa->q && dsa->g) { 150 if (pkey->save_parameters && dsa->p && dsa->q && dsa->g) {
150 if ((datalen = i2d_DSAparams(dsa, &data)) <= 0) { 151 if ((params_len = i2d_DSAparams(dsa, &params_der)) <= 0) {
151 DSAerror(ERR_R_MALLOC_FAILURE); 152 DSAerror(ERR_R_MALLOC_FAILURE);
152 datalen = 0; 153 params_len = 0;
153 goto err; 154 goto err;
154 } 155 }
155 if ((str = ASN1_STRING_new()) == NULL) { 156 if ((params = ASN1_STRING_new()) == NULL) {
156 DSAerror(ERR_R_MALLOC_FAILURE); 157 DSAerror(ERR_R_MALLOC_FAILURE);
157 goto err; 158 goto err;
158 } 159 }
159 ASN1_STRING_set0(str, data, datalen); 160 ASN1_STRING_set0(params, params_der, params_len);
160 data = NULL; 161 params_der = NULL;
161 datalen = 0; 162 params_len = 0;
162 ptype = V_ASN1_SEQUENCE; 163 ptype = V_ASN1_SEQUENCE;
163 } 164 }
164 165
165 if ((pub_key = BN_to_ASN1_INTEGER(dsa->pub_key, NULL)) == NULL) { 166 if ((key = BN_to_ASN1_INTEGER(dsa->pub_key, NULL)) == NULL) {
166 DSAerror(ERR_R_MALLOC_FAILURE); 167 DSAerror(ERR_R_MALLOC_FAILURE);
167 goto err; 168 goto err;
168 } 169 }
169 if ((penclen = i2d_ASN1_INTEGER(pub_key, &penc)) <= 0) { 170 if ((key_len = i2d_ASN1_INTEGER(key, &key_der)) <= 0) {
170 DSAerror(ERR_R_MALLOC_FAILURE); 171 DSAerror(ERR_R_MALLOC_FAILURE);
171 penclen = 0; 172 key_len = 0;
172 goto err; 173 goto err;
173 } 174 }
174 ASN1_INTEGER_free(pub_key);
175 pub_key = NULL;
176 175
177 if ((aobj = OBJ_nid2obj(EVP_PKEY_DSA)) == NULL) 176 if ((aobj = OBJ_nid2obj(EVP_PKEY_DSA)) == NULL)
178 goto err; 177 goto err;
179 if (!X509_PUBKEY_set0_param(pk, aobj, ptype, str, penc, penclen)) 178 if (!X509_PUBKEY_set0_param(pk, aobj, ptype, params, key_der, key_len))
180 goto err; 179 goto err;
180 params = NULL;
181 key_der = NULL;
182 key_len = 0;
181 183
182 return 1; 184 ret = 1;
183 185
184 err: 186 err:
185 ASN1_STRING_free(str); 187 ASN1_STRING_free(params);
186 ASN1_INTEGER_free(pub_key); 188 ASN1_INTEGER_free(key);
187 freezero(data, datalen); 189 freezero(params_der, params_len);
188 freezero(penc, penclen); 190 freezero(key_der, key_len);
189 191
190 return 0; 192 return ret;
191} 193}
192 194
193/* In PKCS#8 DSA: you just get a private key integer and parameters in the 195/* In PKCS#8 DSA: you just get a private key integer and parameters in the
@@ -274,50 +276,53 @@ dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)
274{ 276{
275 const DSA *dsa = pkey->pkey.dsa; 277 const DSA *dsa = pkey->pkey.dsa;
276 ASN1_STRING *params = NULL; 278 ASN1_STRING *params = NULL;
277 ASN1_INTEGER *prkey = NULL; 279 int ptype = V_ASN1_SEQUENCE;
280 ASN1_INTEGER *key = NULL;
278 ASN1_OBJECT *aobj; 281 ASN1_OBJECT *aobj;
279 unsigned char *data = NULL, *dp = NULL; 282 unsigned char *params_der = NULL, *key_der = NULL;
280 int datalen = 0, dplen = 0; 283 int params_len = 0, key_len = 0;
284 int ret = 0;
281 285
282 if ((datalen = i2d_DSAparams(dsa, &data)) <= 0) { 286 if ((params_len = i2d_DSAparams(dsa, &params_der)) <= 0) {
283 DSAerror(ERR_R_MALLOC_FAILURE); 287 DSAerror(ERR_R_MALLOC_FAILURE);
284 datalen = 0; 288 params_len = 0;
285 goto err; 289 goto err;
286 } 290 }
287 if ((params = ASN1_STRING_type_new(V_ASN1_SEQUENCE)) == NULL) { 291 if ((params = ASN1_STRING_type_new(V_ASN1_SEQUENCE)) == NULL) {
288 DSAerror(ERR_R_MALLOC_FAILURE); 292 DSAerror(ERR_R_MALLOC_FAILURE);
289 goto err; 293 goto err;
290 } 294 }
291 ASN1_STRING_set0(params, data, datalen); 295 ASN1_STRING_set0(params, params_der, params_len);
292 data = NULL; 296 params_der = NULL;
293 datalen = 0; 297 params_len = 0;
294 298
295 if ((prkey = BN_to_ASN1_INTEGER(dsa->priv_key, NULL)) == NULL) { 299 if ((key = BN_to_ASN1_INTEGER(dsa->priv_key, NULL)) == NULL) {
296 DSAerror(DSA_R_BN_ERROR); 300 DSAerror(DSA_R_BN_ERROR);
297 goto err; 301 goto err;
298 } 302 }
299 if ((dplen = i2d_ASN1_INTEGER(prkey, &dp)) <= 0) { 303 if ((key_len = i2d_ASN1_INTEGER(key, &key_der)) <= 0) {
300 DSAerror(ERR_R_MALLOC_FAILURE); 304 DSAerror(ERR_R_MALLOC_FAILURE);
301 dplen = 0; 305 key_len = 0;
302 goto err; 306 goto err;
303 } 307 }
304 ASN1_INTEGER_free(prkey);
305 prkey = NULL;
306 308
307 if ((aobj = OBJ_nid2obj(NID_dsa)) == NULL) 309 if ((aobj = OBJ_nid2obj(NID_dsa)) == NULL)
308 goto err; 310 goto err;
309 if (!PKCS8_pkey_set0(p8, aobj, 0, V_ASN1_SEQUENCE, params, dp, dplen)) 311 if (!PKCS8_pkey_set0(p8, aobj, 0, ptype, params, key_der, key_len))
310 goto err; 312 goto err;
313 params = NULL;
314 key_der = NULL;
315 key_len = 0;
311 316
312 return 1; 317 ret = 1;
313 318
314 err: 319 err:
315 ASN1_STRING_free(params); 320 ASN1_STRING_free(params);
316 ASN1_INTEGER_free(prkey); 321 ASN1_INTEGER_free(key);
317 freezero(data, datalen); 322 freezero(params_der, params_len);
318 freezero(dp, dplen); 323 freezero(key_der, key_len);
319 324
320 return 0; 325 return ret;
321} 326}
322 327
323static int 328static int