summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2023-11-13 16:16:14 +0000
committertb <>2023-11-13 16:16:14 +0000
commitdafc9641de7c842b3e4f4f884ba8c77ccf9b1052 (patch)
tree7a64dbc70711c29ed81a983742deaeb381eb8323
parentda9360872bc2fd8e8a1a9cfeafe335fd0c356342 (diff)
downloadopenbsd-dafc9641de7c842b3e4f4f884ba8c77ccf9b1052.tar.gz
openbsd-dafc9641de7c842b3e4f4f884ba8c77ccf9b1052.tar.bz2
openbsd-dafc9641de7c842b3e4f4f884ba8c77ccf9b1052.zip
Make X509_certificate_type() less bad
This converts to proper single exit and undoes a number of unnecessarily silly muppet antics. ok beck
-rw-r--r--src/lib/libcrypto/x509/x509type.c53
1 files changed, 29 insertions, 24 deletions
diff --git a/src/lib/libcrypto/x509/x509type.c b/src/lib/libcrypto/x509/x509type.c
index 7d07d2b5fe..1698d8a0ab 100644
--- a/src/lib/libcrypto/x509/x509type.c
+++ b/src/lib/libcrypto/x509/x509type.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509type.c,v 1.23 2023/11/13 15:44:15 tb Exp $ */ 1/* $OpenBSD: x509type.c,v 1.24 2023/11/13 16:16:14 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -73,12 +73,12 @@ X509_certificate_type(const X509 *x, const EVP_PKEY *pkey)
73 int ret = 0; 73 int ret = 0;
74 74
75 if (x == NULL) 75 if (x == NULL)
76 return (0); 76 goto done;
77 77
78 if (pk == NULL) { 78 if (pk == NULL)
79 if ((pk = X509_get0_pubkey(x)) == NULL) 79 pk = X509_get0_pubkey(x);
80 return (0); 80 if (pk == NULL)
81 } 81 goto done;
82 82
83 switch (pk->type) { 83 switch (pk->type) {
84 case EVP_PKEY_RSA: 84 case EVP_PKEY_RSA:
@@ -107,25 +107,30 @@ X509_certificate_type(const X509 *x, const EVP_PKEY *pkey)
107 break; 107 break;
108 } 108 }
109 109
110 nid = X509_get_signature_nid(x); 110 if ((nid = X509_get_signature_nid(x)) == NID_undef)
111 if (nid && OBJ_find_sigid_algs(nid, NULL, &nid)) { 111 goto done;
112 switch (nid) { 112
113 case NID_rsaEncryption: 113 if (!OBJ_find_sigid_algs(nid, NULL, &nid))
114 case NID_rsa: 114 goto done;
115 ret |= EVP_PKS_RSA; 115
116 break; 116 switch (nid) {
117 case NID_dsa: 117 case NID_rsaEncryption:
118 case NID_dsa_2: 118 case NID_rsa:
119 ret |= EVP_PKS_DSA; 119 ret |= EVP_PKS_RSA;
120 break; 120 break;
121 case NID_X9_62_id_ecPublicKey: 121 case NID_dsa:
122 ret |= EVP_PKS_EC; 122 case NID_dsa_2:
123 break; 123 ret |= EVP_PKS_DSA;
124 default: 124 break;
125 break; 125 case NID_X9_62_id_ecPublicKey:
126 } 126 ret |= EVP_PKS_EC;
127 break;
128 default:
129 break;
127 } 130 }
128 131
129 return (ret); 132 done:
133
134 return ret;
130} 135}
131LCRYPTO_ALIAS(X509_certificate_type); 136LCRYPTO_ALIAS(X509_certificate_type);