]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
p11tool: added --set-id and --set-label options
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 11 Mar 2015 15:02:21 +0000 (16:02 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Wed, 11 Mar 2015 15:12:30 +0000 (16:12 +0100)
src/p11tool-args.def
src/p11tool.c
src/p11tool.h
src/pkcs11.c

index c90c7f1681e998bcef6e9afa4bd088a30e166fad..88ae8b4cd737104155698b6db4dc429196a5e4e5 100644 (file)
@@ -135,6 +135,20 @@ flag = {
     doc = "Exports the public key for the specified private key";
 };
 
+flag = {
+    name      = set-id;
+    descrip   = "Set the CKA_ID in the specified by the URL object";
+    doc = "Sets the CKA_ID in the specified by the URL object. The ID should be specified in hexadecimal format.";
+    arg-type  = string;
+};
+
+flag = {
+    name      = set-label;
+    descrip   = "Set the CKA_LABEL in the specified by the URL object";
+    doc = "Sets the CKA_LABEL in the specified by the URL object";
+    arg-type  = string;
+};
+
 flag = {
     name      = label;
     arg-type  = string;
index 8fbdbd545bf9624f037293a81e67ff43a5ed6d4b..fff8542ee644c5ea73f1f038e235a2f14fc84a14 100644 (file)
@@ -306,6 +306,10 @@ static void cmd_parser(int argc, char **argv)
                                flags, &cinfo);
        } else if (HAVE_OPT(EXPORT_PUBKEY)) {
                pkcs11_export_pubkey(outfile, url, detailed_url, flags, &cinfo);
+       } else if (HAVE_OPT(SET_ID)) {
+               pkcs11_set_id(outfile, url, detailed_url, flags, &cinfo, OPT_ARG(SET_ID));
+       } else if (HAVE_OPT(SET_LABEL)) {
+               pkcs11_set_label(outfile, url, detailed_url, flags, &cinfo, OPT_ARG(SET_LABEL));
        } else {
                USAGE(1);
        }
index 422d680840f75bffc643a157bb8155c6dacae2d4..13baaeab75968f51b6f3e3c4d986fbafad85dc26 100644 (file)
@@ -54,6 +54,14 @@ void pkcs11_generate(FILE * outfile, const char *url,
 void pkcs11_export_pubkey(FILE * outfile, const char *url, int detailed,
                     unsigned int flags, common_info_st * info);
 
+void pkcs11_set_id(FILE * outfile, const char *url, int detailed,
+                  unsigned int flags, common_info_st * info,
+                  const char *id);
+
+void pkcs11_set_label(FILE * outfile, const char *url, int detailed,
+                  unsigned int flags, common_info_st * info,
+                  const char *label);
+
 #define PKCS11_TYPE_CRT_ALL 1
 #define PKCS11_TYPE_TRUSTED 2
 #define PKCS11_TYPE_PK 3
index e6cb6777782e74535ddfcd678d1204b9e771dadd..8b527b3e96b669270094b0104a5963d4427b89ba 100644 (file)
@@ -1018,3 +1018,56 @@ pkcs11_get_random(FILE * outfile, const char *url, unsigned bytes,
 
        return;
 }
+
+static
+void pkcs11_set_val(FILE * outfile, const char *url, int detailed,
+                  unsigned int flags, common_info_st * info,
+                  gnutls_pkcs11_obj_info_t val_type, const char *val)
+{
+       int ret;
+       gnutls_pkcs11_obj_t obj;
+
+       pkcs11_common(info);
+
+       FIX(url, outfile, detailed, info);
+       CHECK_LOGIN_FLAG(flags);
+
+       ret = gnutls_pkcs11_obj_init(&obj);
+       if (ret < 0) {
+               fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
+                       gnutls_strerror(ret));
+               exit(1);
+       }
+
+       ret = gnutls_pkcs11_obj_import_url(obj, url, flags);
+       if (ret < 0) {
+               fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
+                       gnutls_strerror(ret));
+               exit(1);
+       }
+
+       ret =
+           gnutls_pkcs11_obj_set_info(obj, val_type, val, strlen(val), flags);
+       if (ret < 0) {
+               fprintf(stderr, "Error in %s:%d: %s\n", __func__, __LINE__,
+                       gnutls_strerror(ret));
+               exit(1);
+       }
+       gnutls_pkcs11_obj_deinit(obj);
+
+       return;
+}
+
+void pkcs11_set_id(FILE * outfile, const char *url, int detailed,
+                  unsigned int flags, common_info_st * info,
+                  const char *id)
+{
+       return pkcs11_set_val(outfile, url, detailed, flags, info, GNUTLS_PKCS11_OBJ_ID_HEX, id);
+}
+
+void pkcs11_set_label(FILE * outfile, const char *url, int detailed,
+                  unsigned int flags, common_info_st * info,
+                  const char *label)
+{
+       return pkcs11_set_val(outfile, url, detailed, flags, info, GNUTLS_PKCS11_OBJ_LABEL, label);
+}