From 89ec52f5b106a2a03e767b91150d76dffb545e31 Mon Sep 17 00:00:00 2001
From: Sahana Prasad <sahana@redhat.com>
Date: Tue, 10 Dec 2019 21:10:06 +0100
Subject: [PATCH] torture_key: Adds public keys in PEM format - as required by
 p11tool.

Signed-off-by: Sahana Prasad <sahana@redhat.com>
Reviewed-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
---
 tests/torture_key.c | 62 ++++++++++++++++++++++++++++++++++++++++++---
 tests/torture_key.h |  2 ++
 2 files changed, 60 insertions(+), 4 deletions(-)

diff --git a/tests/torture_key.c b/tests/torture_key.c
index 58540268..e8b7d561 100644
--- a/tests/torture_key.c
+++ b/tests/torture_key.c
@@ -197,6 +197,18 @@ static const char torture_rsa_public_testkey[] =
         "QMRjUBThzmDXWeHMfMGL2ow63kPOtlCkPiPSADYs4ekeGg52DVm4esZ "
         "aris@aris-air\n";
 
+static const char torture_rsa_public_testkey_pem[] =
+        "-----BEGIN PUBLIC KEY-----\n"
+        "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArAOREUWlBXJAKZ5hABYy\n"
+        "xnRayDZP1bJeLbPVK+npxemrhHyZgjdbY3ADot+JRyWjvll2w2GI+3blt0j+x/ZW\n"
+        "wjMKu/QYcycYp5HL01goxOxuusZbi+KiHRGB6z0EMdXM7U82U7lA/j//HyZppyDj\n"
+        "UDniWabXQJge8ksGXGTiFeAJ/687uV+JJcjGPxAGFQxzyjitf/FrL9S0WGKZbyqe\n"
+        "GDzyeBZ1NLIuaiOORyLGSW4duHLDN78EmsJnwqg2gJQmRSaD4BNZMjtbfiFcSL9U\n"
+        "w4XQFTsWugUDEY1AU4c5g11nhzHzBi9qMOt5DzrZQpD4j0gA2LOHpHhoOdg1ZuHr\n"
+        "GQIDAQAB\n"
+        "-----END PUBLIC KEY-----\n";
+
+
 static const char torture_rsa_testkey_cert[] =
         "ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNz"
         "aC5jb20AAAAgL77S/SgY969FbEtNBsbLvvtGFgnEHaPb+V7ajwuf+R0AAAADAQABA"
@@ -419,6 +431,12 @@ static const char torture_ecdsa256_public_testkey[] =
         "YAAABBBMfvbnfPEORlrS3fsjLWGmqQvOYPtmS6e1bRRwNBGzR6gVEMaIfiJPPTJa+w"
         "FMXBT3fpAqPjROsqv5jUHC+xOok= aris@kalix86\n";
 
+static const char torture_ecdsa256_public_testkey_pem[] =
+        "-----BEGIN PUBLIC KEY-----\n"
+        "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEx+9ud88Q5GWtLd+yMtYaapC85g+2\n"
+        "ZLp7VtFHA0EbNHqBUQxoh+Ik89Mlr7AUxcFPd+kCo+NE6yq/mNQcL7E6iQ==\n"
+        "-----END PUBLIC KEY-----\n";
+
 static const char torture_ecdsa256_testkey_cert[] =
         "ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzd"
         "HAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgHvXWcdSrQeZL2/Z68V8ntbL7rDo"
@@ -493,6 +511,13 @@ static const char torture_ecdsa384_public_testkey[] =
         "0sB3/DunsMkt3O0nRtijJPhXcHdmpH1HIarqZgKOReVzlhtgeO54FunSh41eqxcc0B"
         "ZBmg== aris@kalix86";
 
+static const char torture_ecdsa384_public_testkey_pem[] =
+        "-----BEGIN PUBLIC KEY-----\n"
+        "MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEV3OATega1aNUDIt/ovwfOS7u0jLswYvt\n"
+        "T2ybYvMc/ks4KuuIGgRjivaPljnSwHf8O6ewyS3c7SdG2KMk+Fdwd2akfUchqupm\n"
+        "Ao5F5XOWG2B47ngW6dKHjV6rFxzQFkGa\n"
+        "-----END PUBLIC KEY-----\n";
+
 static const char torture_ecdsa384_testkey_cert[] =
         "ecdsa-sha2-nistp384-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzd"
         "HAzODQtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgvggfi3v98HjOiqVi1O5aPy7JvMd"
@@ -579,6 +604,14 @@ static const char torture_ecdsa521_public_testkey[] =
         "V262vIC+AE3fXUJ7sJ/CkFIdk/8/gQEY1jyoXB3Bsee16VwhJGsMzGGh1FJ0XXhRJj"
         "UbG18qbH9JiSgE1N4fIM0zJG68fAyUxRxCI1wUobOOB7EmFZd18g== aris@kalix86";
 
+static const char torture_ecdsa521_public_testkey_pem[] =
+        "-----BEGIN PUBLIC KEY-----\n"
+        "MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBzoPvbx1tpCQedI+3O1pHAnDrcIGX\n"
+        "XlzKQHhJde7BZ0060/MGKNRQsxNO8FdutryAvgBN311Ce7CfwpBSHZP/P4EBGNY8\n"
+        "qFwdwbHntelcISRrDMxhodRSdF14USY1GxtfKmx/SYkoBNTeHyDNMyRuvHwMlMUc\n"
+        "QiNcFKGzjgexJhWXdfI=\n"
+        "-----END PUBLIC KEY-----\n";
+
 static const char torture_ecdsa521_testkey_cert[] =
         "ecdsa-sha2-nistp521-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzd"
         "HA1MjEtY2VydC12MDFAb3BlbnNzaC5jb20AAAAggFIwlsx63C++kmCBDF4O14fvu5j"
@@ -675,7 +708,11 @@ static const char *torture_get_testkey_internal(enum ssh_keytypes_e type,
             return torture_dsa_private_testkey;
         case SSH_KEYTYPE_RSA:
             if (pubkey) {
-                return torture_rsa_public_testkey;
+                if (format == 1) {
+                    return torture_rsa_public_testkey_pem;
+                } else {
+                    return torture_rsa_public_testkey;
+                }
             } else if (with_passphrase) {
                 if (format == 1) {
                     return torture_rsa_private_openssh_testkey_passphrase;
@@ -692,7 +729,11 @@ static const char *torture_get_testkey_internal(enum ssh_keytypes_e type,
             return torture_rsa_private_testkey;
         case SSH_KEYTYPE_ECDSA_P521:
             if (pubkey) {
-                return torture_ecdsa521_public_testkey;
+                if (format == 1) {
+                    return torture_ecdsa521_public_testkey_pem;
+                } else {
+                    return torture_ecdsa521_public_testkey;
+                }
             } else if (with_passphrase) {
                 if (format == 1) {
                     return torture_ecdsa521_private_openssh_testkey_passphrase;
@@ -709,7 +750,11 @@ static const char *torture_get_testkey_internal(enum ssh_keytypes_e type,
             return torture_ecdsa521_private_testkey;
         case SSH_KEYTYPE_ECDSA_P384:
             if (pubkey) {
-                return torture_ecdsa384_public_testkey;
+                if (format == 1) {
+                    return torture_ecdsa384_public_testkey_pem;
+                } else {
+                    return torture_ecdsa384_public_testkey;
+                }
             } else if (with_passphrase){
                 if (format == 1) {
                     return torture_ecdsa384_private_openssh_testkey_passphrase;
@@ -726,7 +771,11 @@ static const char *torture_get_testkey_internal(enum ssh_keytypes_e type,
             return torture_ecdsa384_private_testkey;
         case SSH_KEYTYPE_ECDSA_P256:
             if (pubkey) {
-                return torture_ecdsa256_public_testkey;
+                if (format == 1) {
+                    return torture_ecdsa256_public_testkey_pem;
+                } else {
+                    return torture_ecdsa256_public_testkey;
+                }
             } else if (with_passphrase){
                 if (format == 1) {
                     return torture_ecdsa256_private_openssh_testkey_pasphrase;
@@ -803,6 +852,11 @@ const char *torture_get_testkey_pub(enum ssh_keytypes_e type)
     return torture_get_testkey_internal(type, 0, 1, 0);
 }
 
+const char *torture_get_testkey_pub_pem(enum ssh_keytypes_e type)
+{
+    return torture_get_testkey_internal(type, 0, 1, 1);
+}
+
 const char *torture_get_testkey_passphrase(void)
 {
     return TORTURE_TESTKEY_PASSWORD;
diff --git a/tests/torture_key.h b/tests/torture_key.h
index 961fdb96..5eacdab9 100644
--- a/tests/torture_key.h
+++ b/tests/torture_key.h
@@ -39,4 +39,6 @@ const char *torture_get_testkey_passphrase(void);
 
 const char *torture_get_testkey_pub(enum ssh_keytypes_e type);
 
+const char *torture_get_testkey_pub_pem(enum ssh_keytypes_e type);
+
 #endif /* _TORTURE_KEY_H */