diff options
author | Stef Walter <stefw@gnome.org> | 2014-04-18 13:33:28 +0200 |
---|---|---|
committer | Stef Walter <stefw@redhat.com> | 2014-04-19 22:29:49 +0200 |
commit | f6173cd11ba0b8f07687ffd575ac9b7488f47e46 (patch) | |
tree | a269be9cfd80e0d7c80e463511d37e7e62ed9372 | |
parent | 85363fa6107d7a7485e2c42b1fdce7e552bf4479 (diff) |
gcr: GcrParser support or PEM 'PUBLIC KEY' files
These contain SubjectPublicKeyInfo
-rw-r--r-- | gcr/fixtures/cert-ecc521.pub | 7 | ||||
-rw-r--r-- | gcr/gcr-parser.c | 14 | ||||
-rw-r--r-- | 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 5bb4b99..d0ad6db 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"); @@ -1843,6 +1845,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; @@ -2040,6 +2045,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) { @@ -2157,6 +2169,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_PUBLIC_KEY: 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 * @@ -2216,6 +2229,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; /* |