]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Decode PEM ECC private keys.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 22 May 2011 18:18:12 +0000 (20:18 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 22 May 2011 18:18:12 +0000 (20:18 +0200)
lib/x509/privkey.c

index 060068f76e80fc873cfa818bb1d0e30149a0af01..d4cccdd34ce715a9815f8778fcab1d32f7e78a27 100644 (file)
@@ -472,16 +472,25 @@ gnutls_x509_privkey_import (gnutls_x509_privkey_t key,
           result =
             _gnutls_fbase64_decode (PEM_KEY_DSA, data->data, data->size,
                                     &out);
-          if (result <= 0)
-            {
-              if (result == 0)
-                result = GNUTLS_E_INTERNAL_ERROR;
-              gnutls_assert ();
 
-              goto failover;
-            }
+          if (result >= 0)
+            key->pk_algorithm = GNUTLS_PK_DSA;
 
-          key->pk_algorithm = GNUTLS_PK_DSA;
+          if (result == GNUTLS_E_BASE64_UNEXPECTED_HEADER_ERROR)
+            {
+              /* try for the second header */
+              result =
+                _gnutls_fbase64_decode (PEM_KEY_ECC, data->data, data->size,
+                                    &out);
+              if (result >= 0)
+                key->pk_algorithm = GNUTLS_PK_ECC;
+             }
+        }
+
+      if (result < 0)
+        {
+          gnutls_assert ();
+          goto failover;
         }
 
       _data.data = out;