[gcr/ecc: 13/16] WIP PEM pubkey support



commit eeb1c75a93230122fff23eea096abf9fc7d7daa1
Author: Stef Walter <stefw gnome org>
Date:   Fri Apr 18 13:33:28 2014 +0200

    WIP PEM pubkey support

 gcr/fixtures/cert-ecc521.pub |    7 +++++++
 gcr/gcr-parser.c             |   14 ++++++++++++++
 gcr/gcr-types.h              |    1 +
 3 files changed, 22 insertions(+), 0 deletions(-)
---
diff --git a/gcr/fixtures/cert-ecc521.pub b/gcr/fixtures/cert-ecc521.pub
new file mode 100644
index 0000000..3357575
--- /dev/null
+++ b/gcr/fixtures/cert-ecc521.pub
@@ -0,0 +1,7 @@
+-----BEGIN PUBLIC KEY-----
+MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAoapA9bLQHQiI8V2mIzs9sq80VR4F
+BB0TBOSxGqBOE3FSzHAejQkIKc/1pW0v0wKvapYMq/RrfhPJxPkjTPtztUsAkU//
+9E0/aoEWVC6Rqf+VX3wIhe7+RS8JXdBh9SM0+Z9MCRUiM8K9qPMtpNgB2ks7T5BG
+FHSMlNKmuLW1agWPy5A=
+-----END PUBLIC KEY-----
+
diff --git a/gcr/gcr-parser.c b/gcr/gcr-parser.c
index 4bba1d9..109f4ac 100644
--- a/gcr/gcr-parser.c
+++ b/gcr/gcr-parser.c
@@ -178,6 +178,7 @@ static GQuark PEM_PRIVATE_KEY;
 static GQuark PEM_PKCS7;
 static GQuark PEM_PKCS12;
 static GQuark PEM_CERTIFICATE_REQUEST;
+static GQuark PEM_PUBLIC_KEY;
 
 static GQuark ARMOR_PGP_PUBLIC_KEY_BLOCK;
 static GQuark ARMOR_PGP_PRIVATE_KEY_BLOCK;
@@ -202,6 +203,7 @@ init_quarks (void)
                QUARK (PEM_PKCS7, "PKCS7");
                QUARK (PEM_PKCS12, "PKCS12");
                QUARK (PEM_CERTIFICATE_REQUEST, "CERTIFICATE REQUEST");
+               QUARK (PEM_PUBLIC_KEY, "PUBLIC KEY");
 
                QUARK (ARMOR_PGP_PRIVATE_KEY_BLOCK, "PGP PRIVATE KEY BLOCK");
                QUARK (ARMOR_PGP_PUBLIC_KEY_BLOCK, "PGP PUBLIC KEY BLOCK");
@@ -1835,6 +1837,9 @@ formats_for_armor_type (GQuark armor_type,
        } else if (armor_type == PEM_PKCS12) {
                *inner_format = GCR_FORMAT_DER_PKCS12;
                *outer_format = GCR_FORMAT_PEM_PKCS12;
+       } else if (armor_type == PEM_PUBLIC_KEY) {
+               *inner_format = GCR_FORMAT_DER_SUBJECT_PUBLIC_KEY;
+               *outer_format = GCR_FORMAT_PEM_PUBLIC_KEY;
        } else if (armor_type == ARMOR_PGP_PRIVATE_KEY_BLOCK) {
                *inner_format = GCR_FORMAT_OPENPGP_PACKET;
                *outer_format = GCR_FORMAT_OPENPGP_ARMOR;
@@ -2032,6 +2037,13 @@ parse_pem_private_key_ec (GcrParser *self,
 }
 
 static gint
+parse_pem_public_key (GcrParser *self,
+                      GBytes *data)
+{
+       return handle_pem_format (self, GCR_FORMAT_DER_SUBJECT_PUBLIC_KEY, data);
+}
+
+static gint
 parse_pem_certificate (GcrParser *self,
                        GBytes *data)
 {
@@ -2149,6 +2161,7 @@ parse_openssh_public (GcrParser *self,
  * @GCR_FORMAT_PEM_PKCS8_ENCRYPTED: Encrypted OpenSSL style PEM file containing PKCS\#8
  * @GCR_FORMAT_PEM_PKCS10: An OpenSSL style PEM file containing PKCS\#10
  * @GCR_FORMAT_PEM_PKCS12: An OpenSSL style PEM file containing PKCS\#12
+ * @GCR_FORMAT_PEM_PUBLICKEY: An OpenSSL style PEM file containing a SubjectPublicKeyInfo
  * @GCR_FORMAT_DER_SPKAC: DER encoded SPKAC as generated by HTML5 keygen element
  * @GCR_FORMAT_BASE64_SPKAC: OpenSSL style SPKAC data
  *
@@ -2208,6 +2221,7 @@ static const ParserFormat parser_formats[] = {
        { GCR_FORMAT_PEM_PKCS12, parse_pem_pkcs12 },
        { GCR_FORMAT_PEM_PKCS10, parse_pem_pkcs10 },
        { GCR_FORMAT_PEM_PRIVATE_KEY_EC, parse_pem_private_key_ec },
+       { GCR_FORMAT_PEM_PUBLIC_KEY, parse_pem_public_key },
 };
 
 static int
diff --git a/gcr/gcr-types.h b/gcr/gcr-types.h
index 3711380..095615a 100644
--- a/gcr/gcr-types.h
+++ b/gcr/gcr-types.h
@@ -97,6 +97,7 @@ typedef enum {
        GCR_FORMAT_PEM_PRIVATE_KEY,
        GCR_FORMAT_PEM_PKCS10,
        GCR_FORMAT_PEM_PRIVATE_KEY_EC,
+       GCR_FORMAT_PEM_PUBLIC_KEY,
 } GcrDataFormat;
 
 /*


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]