RT2680: Public EC key is shown as private
authorRich Salz <rsalz@akamai.com>
Sun, 26 Jun 2016 18:34:00 +0000 (14:34 -0400)
committerRich Salz <rsalz@openssl.org>
Sun, 26 Jun 2016 21:28:16 +0000 (17:28 -0400)
Re-implemented as suggested by Steve Henson.
Also change ECParameters_print the same way.

Reviewed-by: Dr. Stephen Henson <steve@openssl.org>
crypto/ec/ec_ameth.c
crypto/ec/eck_prn.c

index 6567a2f398cfcc219c2c250e0e5796653e31e081..7fcc2c804327596278e84d08275309e35f1bdc13 100644 (file)
@@ -543,6 +543,19 @@ const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = {
     old_ec_priv_encode
 };
 
     old_ec_priv_encode
 };
 
+int EC_KEY_print(BIO *bp, const EC_KEY *x, int off)
+{
+    int private = EC_KEY_get0_private_key(x) != NULL;
+
+    return do_EC_KEY_print(bp, x, off,
+                private ? EC_KEY_PRINT_PUBLIC : EC_KEY_PRINT_PUBLIC);
+}
+
+int ECParameters_print(BIO *bp, const EC_KEY *x)
+{
+    return do_EC_KEY_print(bp, x, 4, EC_KEY_PRINT_PARAM);
+}
+
 #ifndef OPENSSL_NO_CMS
 
 static int ecdh_cms_set_peerkey(EVP_PKEY_CTX *pctx,
 #ifndef OPENSSL_NO_CMS
 
 static int ecdh_cms_set_peerkey(EVP_PKEY_CTX *pctx,
index c23d36f5d849e529161c4757222bf74aad5c7908..dd3f8579c34d054201edda12643e2ce8581be050 100644 (file)
@@ -66,30 +66,6 @@ int ECParameters_print_fp(FILE *fp, const EC_KEY *x)
 }
 #endif
 
 }
 #endif
 
-int EC_KEY_print(BIO *bp, const EC_KEY *x, int off)
-{
-    EVP_PKEY *pk;
-    int ret;
-    pk = EVP_PKEY_new();
-    if (pk == NULL || !EVP_PKEY_set1_EC_KEY(pk, (EC_KEY *)x))
-        return 0;
-    ret = EVP_PKEY_print_private(bp, pk, off, NULL);
-    EVP_PKEY_free(pk);
-    return ret;
-}
-
-int ECParameters_print(BIO *bp, const EC_KEY *x)
-{
-    EVP_PKEY *pk;
-    int ret;
-    pk = EVP_PKEY_new();
-    if (pk == NULL || !EVP_PKEY_set1_EC_KEY(pk, (EC_KEY *)x))
-        return 0;
-    ret = EVP_PKEY_print_params(bp, pk, 4, NULL);
-    EVP_PKEY_free(pk);
-    return ret;
-}
-
 static int print_bin(BIO *fp, const char *str, const unsigned char *num,
                      size_t len, int off);
 
 static int print_bin(BIO *fp, const char *str, const unsigned char *num,
                      size_t len, int off);