summaryrefslogtreecommitdiff
path: root/ssl
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-11-18 10:43:50 +0100
committerRichard Levitte <levitte@openssl.org>2020-12-08 20:13:54 +0100
commitd8975dec0c3f41a491345f8a3c02612eaf8b30f7 (patch)
treecbfdfa5715166c791a9e055a0668b7eb58261776 /ssl
parent88bddad42ee27483d153a0b0c0edd13b2b5fdbc0 (diff)
downloadopenssl-new-d8975dec0c3f41a491345f8a3c02612eaf8b30f7.tar.gz
TLS: Use EVP_PKEY_get_group_name() to get the group name
For the moment, we translate the result to a NID, because that's still used in several locations in libssl. Future development should change all the internals to be name based instead. Reviewed-by: Matt Caswell <matt@openssl.org> Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org> (Merged from https://github.com/openssl/openssl/pull/13436)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/ssl_local.h2
-rw-r--r--ssl/statem/statem_lib.c4
-rw-r--r--ssl/t1_lib.c30
3 files changed, 18 insertions, 18 deletions
diff --git a/ssl/ssl_local.h b/ssl/ssl_local.h
index d0fd8b926b..c2a4087c3b 100644
--- a/ssl/ssl_local.h
+++ b/ssl/ssl_local.h
@@ -807,6 +807,8 @@ int ssl_hmac_final(SSL_HMAC *ctx, unsigned char *md, size_t *len,
size_t max_size);
size_t ssl_hmac_size(const SSL_HMAC *ctx);
+int ssl_get_EC_curve_nid(const EVP_PKEY *pkey);
+
typedef struct tls_group_info_st {
char *tlsname; /* Curve Name as in TLS specs */
char *realname; /* Curve Name according to provider */
diff --git a/ssl/statem/statem_lib.c b/ssl/statem/statem_lib.c
index 5d89b75c05..44cf5a6ce0 100644
--- a/ssl/statem/statem_lib.c
+++ b/ssl/statem/statem_lib.c
@@ -14,7 +14,6 @@
#include "../ssl_local.h"
#include "statem_local.h"
#include "internal/cryptlib.h"
-#include "internal/evp.h"
#include <openssl/buffer.h>
#include <openssl/objects.h>
#include <openssl/evp.h>
@@ -1555,8 +1554,7 @@ static int is_tls13_capable(const SSL *s)
* more restrictive so check that our sig algs are consistent with this
* EC cert. See section 4.2.3 of RFC8446.
*/
- curve = evp_pkey_get_EC_KEY_curve_nid(s->cert->pkeys[SSL_PKEY_ECC]
- .privatekey);
+ curve = ssl_get_EC_curve_nid(s->cert->pkeys[SSL_PKEY_ECC].privatekey);
if (tls_check_sigalg_curve(s, curve))
return 1;
#else
diff --git a/ssl/t1_lib.c b/ssl/t1_lib.c
index 6ad6f1b26f..bc366c8a7c 100644
--- a/ssl/t1_lib.c
+++ b/ssl/t1_lib.c
@@ -21,7 +21,7 @@
#include <openssl/provider.h>
#include <openssl/param_build.h>
#include "internal/nelem.h"
-#include "internal/evp.h"
+#include "internal/sizes.h"
#include "internal/tlsgroups.h"
#include "ssl_local.h"
#include <openssl/ct.h>
@@ -865,7 +865,7 @@ static int tls1_check_pkey_comp(SSL *s, EVP_PKEY *pkey)
/* Return group id of a key */
static uint16_t tls1_get_group_id(EVP_PKEY *pkey)
{
- int curve_nid = evp_pkey_get_EC_KEY_curve_nid(pkey);
+ int curve_nid = ssl_get_EC_curve_nid(pkey);
if (curve_nid == NID_undef)
return 0;
@@ -1498,7 +1498,7 @@ int tls12_check_peer_sigalg(SSL *s, uint16_t sig, EVP_PKEY *pkey)
/* For TLS 1.3 or Suite B check curve matches signature algorithm */
if (SSL_IS_TLS13(s) || tls1_suiteb(s)) {
- int curve = evp_pkey_get_EC_KEY_curve_nid(pkey);
+ int curve = ssl_get_EC_curve_nid(pkey);
if (lu->curve != NID_undef && curve != lu->curve) {
SSLfatal(s, SSL_AD_ILLEGAL_PARAMETER, SSL_R_WRONG_CURVE);
@@ -3151,14 +3151,10 @@ static const SIGALG_LOOKUP *find_sig_alg(SSL *s, X509 *x, EVP_PKEY *pkey)
: s->cert->pkeys[lu->sig_idx].privatekey;
if (lu->sig == EVP_PKEY_EC) {
-#ifndef OPENSSL_NO_EC
if (curve == -1)
- curve = evp_pkey_get_EC_KEY_curve_nid(tmppkey);
+ curve = ssl_get_EC_curve_nid(tmppkey);
if (lu->curve != NID_undef && curve != lu->curve)
continue;
-#else
- continue;
-#endif
} else if (lu->sig == EVP_PKEY_RSA_PSS) {
/* validate that key is large enough for the signature algorithm */
if (!rsa_pss_check_min_key_size(s->ctx, tmppkey, lu))
@@ -3211,15 +3207,12 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if (SSL_USE_SIGALGS(s)) {
size_t i;
if (s->s3.tmp.peer_sigalgs != NULL) {
-#ifndef OPENSSL_NO_EC
int curve = -1;
/* For Suite B need to match signature algorithm to curve */
if (tls1_suiteb(s))
- curve =
- evp_pkey_get_EC_KEY_curve_nid(s->cert->pkeys[SSL_PKEY_ECC]
- .privatekey);
-#endif
+ curve = ssl_get_EC_curve_nid(s->cert->pkeys[SSL_PKEY_ECC]
+ .privatekey);
/*
* Find highest preference signature algorithm matching
@@ -3248,9 +3241,7 @@ int tls_choose_sigalg(SSL *s, int fatalerrs)
if (!rsa_pss_check_min_key_size(s->ctx, pkey, lu))
continue;
}
-#ifndef OPENSSL_NO_EC
if (curve == -1 || lu->curve == curve)
-#endif
break;
}
#ifndef OPENSSL_NO_GOST
@@ -3454,3 +3445,12 @@ size_t ssl_hmac_size(const SSL_HMAC *ctx)
return 0;
}
+int ssl_get_EC_curve_nid(const EVP_PKEY *pkey)
+{
+ char gname[OSSL_MAX_NAME_SIZE];
+
+ if (EVP_PKEY_get_group_name(pkey, gname, sizeof(gname), NULL) > 0)
+ return OBJ_txt2nid(gname);
+
+ return NID_undef;
+}