summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dh/dh_ameth.c
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/lib/libcrypto/dh/dh_ameth.c
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/lib/libcrypto/dh/dh_ameth.c')
-rw-r--r--src/lib/libcrypto/dh/dh_ameth.c89
1 files changed, 47 insertions, 42 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