pki: Add key object handle of smartcard or TPM private key as an argument to pki...
authorAndreas Steffen <andreas.steffen@strongswan.org>
Mon, 6 Mar 2017 11:53:48 +0000 (12:53 +0100)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Mon, 6 Mar 2017 17:54:09 +0000 (18:54 +0100)
src/pki/commands/keyid.c
src/pki/man/pki---keyid.1.in

index f79120b..001b9ff 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2009 Martin Willi
- * Hochschule fuer Technik Rapperswil
+ * Copyright (C) 2017 Andreas Steffen
+ * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -30,7 +31,7 @@ static int keyid()
        certificate_t *cert;
        private_key_t *private;
        public_key_t *public;
-       char *file = NULL;
+       char *file = NULL, *keyid = NULL;
        void *cred;
        chunk_t id;
        char *arg;
@@ -88,6 +89,9 @@ static int keyid()
                        case 'i':
                                file = arg;
                                continue;
+                       case 'x':
+                               keyid = arg;
+                               continue;
                        case EOF:
                                break;
                        default:
@@ -100,6 +104,15 @@ static int keyid()
                cred = lib->creds->create(lib->creds, type, subtype,
                                                                  BUILD_FROM_FILE, file, BUILD_END);
        }
+       else if (keyid)
+       {
+               chunk_t chunk;
+
+               chunk = chunk_from_hex(chunk_create(keyid, strlen(keyid)), NULL);
+               cred = lib->creds->create(lib->creds, CRED_PRIVATE_KEY, KEY_ANY,
+                                                                 BUILD_PKCS11_KEYID, chunk, BUILD_END);
+               free(chunk.ptr);
+       }
        else
        {
                chunk_t chunk;
@@ -177,10 +190,11 @@ static void __attribute__ ((constructor))reg()
        command_register((command_t)
                { keyid, 'k', "keyid",
                "calculate key identifiers of a key/certificate",
-               {"[--in file] [--type priv|rsa|ecdsa|bliss|pub|pkcs10|x509]"},
+               {"[--in file|--keyid hex] [--type priv|rsa|ecdsa|bliss|pub|pkcs10|x509]"},
                {
                        {"help",        'h', 0, "show usage information"},
                        {"in",          'i', 1, "input file, default: stdin"},
+                       {"keyid",       'x', 1, "smartcard or TPM private key object handle"},
                        {"type",        't', 1, "type of key, default: priv"},
                }
        });
index c69f7cb..148b95e 100644 (file)
@@ -7,7 +7,9 @@ pki \-\-keyid \- Calculate key identifiers of a key or certificate
 .SH "SYNOPSIS"
 .
 .SY pki\ \-\-keyid
-.OP \-\-in file
+.RB [ \-\-in
+.IR file | \fB\-\-keyid\fR
+.IR hex ]
 .OP \-\-type type
 .OP \-\-debug level
 .YS
@@ -43,6 +45,10 @@ Read command line options from \fIfile\fR.
 .BI "\-i, \-\-in " file
 Input file. If not given the input is read from \fISTDIN\fR.
 .TP
+.BI "\-x, \-\-keyid " hex
+Smartcard or TPM private key object handle in hex format with an optional
+0x prefix.
+.TP
 .BI "\-t, \-\-type " type
 Type of input. One of \fIpriv\fR (private key), \fIrsa\fR (RSA private key),
 \fIecdsa\fR (ECDSA private key), \fIbliss\fR (BLISS private key),
@@ -70,4 +76,4 @@ Calculate key identifiers of an X.509 certificate:
 .
 .SH "SEE ALSO"
 .
-.BR pki (1)
\ No newline at end of file
+.BR pki (1)