aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pki/commands/pub.c16
-rw-r--r--src/pki/man/pki---pub.1.in5
2 files changed, 18 insertions, 3 deletions
diff --git a/src/pki/commands/pub.c b/src/pki/commands/pub.c
index d85ee9ff3..537af5159 100644
--- a/src/pki/commands/pub.c
+++ b/src/pki/commands/pub.c
@@ -51,6 +51,11 @@ static int pub()
type = CRED_PRIVATE_KEY;
subtype = KEY_ECDSA;
}
+ else if (streq(arg, "pub"))
+ {
+ type = CRED_PUBLIC_KEY;
+ subtype = KEY_ANY;
+ }
else if (streq(arg, "pkcs10"))
{
type = CRED_CERTIFICATE;
@@ -116,6 +121,15 @@ static int pub()
public = private->get_public_key(private);
private->destroy(private);
}
+ else if (type == CRED_PUBLIC_KEY)
+ {
+ public = cred;
+ if (!public)
+ {
+ fprintf(stderr, "parsing public key failed\n");
+ return 1;
+ }
+ }
else
{
cert = cred;
@@ -157,7 +171,7 @@ static void __attribute__ ((constructor))reg()
command_register((command_t) {
pub, 'p', "pub",
"extract the public key from a private key/certificate",
- {"[--in file|--keyid hex] [--type rsa|ecdsa|pkcs10|x509]",
+ {"[--in file|--keyid hex] [--type rsa|ecdsa|pub|pkcs10|x509]",
"[--outform der|pem|dnskey|sshkey]"},
{
{"help", 'h', 0, "show usage information"},
diff --git a/src/pki/man/pki---pub.1.in b/src/pki/man/pki---pub.1.in
index a1b9b0ad4..c57e03a40 100644
--- a/src/pki/man/pki---pub.1.in
+++ b/src/pki/man/pki---pub.1.in
@@ -48,8 +48,9 @@ Input file. If not given the input is read from \fISTDIN\fR.
.TP
.BI "\-t, \-\-type " type
Type of input. One of \fIrsa\fR (RSA private key), \fIecdsa\fR (ECDSA
-private key), \fIpkcs10\fR (PKCS#10 certificate request), \fIx509\fR (X.509
-certificate), defaults to \fIrsa\fR.
+private key), \fIpub\fR (public key),
+\fIpkcs10\fR (PKCS#10 certificate request), or \fIx509\fR (X.509 certificate),
+defaults to \fIrsa\fR.
.TP
.BI "\-f, \-\-outform " encoding
Encoding of the extracted public key. One of \fIder\fR (ASN.1 DER), \fIpem\fR