Skip to contentSkip to conversation

Print ec bit details, refuse management-external-key if key is not RSA

PATCH Superseded Arne Schwabe 1 participant 1 message Jul 23, 2017

v1 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Print ec bit details, refuse management-external-key if key is not RSA

---
 src/openvpn/ssl_openssl.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)
src/openvpn/ssl_openssl.c +13 -0
index 11f4a567..e1a71267 100644
@@ -1077,6 +1077,12 @@ tls_ctx_use_external_private_key(struct tls_root_ctx *ctx,
     ASSERT(pkey); /* NULL before SSL_CTX_use_certificate() is called */
     pub_rsa = EVP_PKEY_get0_RSA(pkey);
 
+    /* Certificate might not be RSA but DSA or EC */
+    if (!pub_rsa)
+    {
+        crypto_msg (M_FATAL, "management-external-key requires a RSA certificate");
+    }
+        
     /* initialize RSA object */
     const BIGNUM *n = NULL;
     const BIGNUM *e = NULL;
@@ -1695,6 +1701,13 @@ print_details(struct key_state_ssl *ks_ssl, const char *prefix)
                 openvpn_snprintf(s2, sizeof(s2), ", %d bit DSA",
                                  DSA_bits(dsa));
             }
+            else if (EVP_PKEY_id(pkey) == EVP_PKEY_EC && EVP_PKEY_get0_EC_KEY(pkey) != NULL)
+            {
+                EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
+                const EC_GROUP *group = EC_KEY_get0_group(ec);
+                openvpn_snprintf(s2, sizeof(s2), ", %d bit EC",
+                                 EC_GROUP_order_bits(group));
+            }
             EVP_PKEY_free(pkey);
         }
         X509_free(cert);
Signature · 1 line
2.13.3