yaca_key_import() support for PKCS8 57/72357/2
authorLukasz Pawelczyk <l.pawelczyk@samsung.com>
Tue, 31 May 2016 12:43:26 +0000 (14:43 +0200)
committerLukasz Pawelczyk <l.pawelczyk@samsung.com>
Wed, 1 Jun 2016 09:12:11 +0000 (11:12 +0200)
Change-Id: I96c07efd6a86f61522871179d29e38abf6fe60ef

src/key.c

index dd7453d..3813941 100755 (executable)
--- a/src/key.c
+++ b/src/key.c
@@ -239,7 +239,7 @@ out:
 
 bool check_import_wrong_pass()
 {
-       unsigned long err = ERR_peek_last_error();
+       unsigned long err = ERR_peek_error();
        unsigned long err_bad_password_1 = ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_DO_HEADER, PEM_R_BAD_DECRYPT);
        unsigned long err_bad_password_2 = ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_DECRYPTFINAL_EX, EVP_R_BAD_DECRYPT);
 
@@ -326,6 +326,15 @@ int import_evp(yaca_key_h *key,
        else {
                if (pkey == NULL && !wrong_pass) {
                        BIO_reset(src);
+                       pkey = d2i_PKCS8PrivateKey_bio(src, NULL, cb, (void*)password);
+                       if (check_import_wrong_pass())
+                               wrong_pass = true;
+                       private = true;
+                       ERROR_CLEAR();
+               }
+
+               if (pkey == NULL && !wrong_pass) {
+                       BIO_reset(src);
                        pkey = d2i_PrivateKey_bio(src, NULL);
                        private = true;
                        ERROR_CLEAR();