]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
certtool's --to-p12 will now ask for a password to generate PKCS #12 files.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 10 Feb 2013 20:52:05 +0000 (21:52 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 10 Feb 2013 20:52:09 +0000 (21:52 +0100)
That is when provided an encrypted key file. Reported by Yan Fiz.

NEWS
src/certtool-extras.c

diff --git a/NEWS b/NEWS
index 19296ff7d8d7eaf632c92653dd2ce969d957b979..a5e8f69facd12e6c158181efdbe7fa09e6ff5336 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,15 @@ GnuTLS NEWS -- History of user-visible changes.                -*- outline -*-
 Copyright (C) 2000-2012 Free Software Foundation, Inc.
 See the end for copying conditions.
 
+* Version 3.1.9 (unreleased)
+
+** certtool: option --to-p12 will now ask for a password to generate
+a PKCS #12 file from an encrypted key file. Reported by Yan Fiz.
+
+** API and ABI modifications:
+No changes since last version.
+
+
 * Version 3.1.8 (released 2013-02-10)
 
 ** libgnutls: Fixed issue in gnutls_x509_privkey_import2() which didn't return
index 8ea890e9be8ce3d7d576579a6f882bb69776eb41..14221885ec6dff3b41f95136d67f2730f5131f3b 100644 (file)
@@ -55,6 +55,8 @@ load_privkey_list (int mand, size_t * privkey_size, common_info_st * info)
   int ret, i;
   gnutls_datum_t dat, file_data;
   int ptr_size;
+  unsigned int flags = 0;
+  const char* pass;
 
   *privkey_size = 0;
   fprintf (stderr, "Loading private key list...\n");
@@ -83,12 +85,23 @@ load_privkey_list (int mand, size_t * privkey_size, common_info_st * info)
       dat.data = (void*)ptr;
       dat.size = ptr_size;
 
-      ret = gnutls_x509_privkey_import (key[i], &dat, info->incert_format);
+      ret = gnutls_x509_privkey_import2 (key[i], &dat, info->incert_format, NULL, 0);
+      if (ret == GNUTLS_E_DECRYPTION_FAILED)
+        {
+          pass = get_password (info, &flags, 0);
+          ret = gnutls_x509_privkey_import2 (key[i], &dat, info->incert_format, pass, flags);
+        }
+
       if (ret < 0 && *privkey_size > 0)
         break;
       if (ret < 0)
         error (EXIT_FAILURE, 0, "privkey_import: %s", gnutls_strerror (ret));
 
+      (*privkey_size)++;
+
+      if (info->incert_format != GNUTLS_X509_FMT_PEM)
+       break;
+
       ptr = strstr (ptr, "---END");
       if (ptr == NULL)
         break;
@@ -101,7 +114,6 @@ load_privkey_list (int mand, size_t * privkey_size, common_info_st * info)
       if (ptr_size < 0)
         break;
 
-      (*privkey_size)++;
     }
   
   gnutls_free(file_data.data);