Detect symmetric crypto errors in PKCS7_decrypt.
[openssl.git] / crypto / pkcs7 / pk7_smime.c
index 86742d0dcd501524e197f9460bba4ca60ada6723..0ed0feae5dbb89a95b09065ac6399256f7c97d40 100644 (file)
@@ -573,15 +573,30 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)
                        return 0;
                }
                ret = SMIME_text(bread, data);
+               if (ret > 0 && BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
+                       {
+                       if (!BIO_get_cipher_status(tmpmem))
+                               ret = 0;
+                       }
                BIO_free_all(bread);
                return ret;
        } else {
                for(;;) {
                        i = BIO_read(tmpmem, buf, sizeof(buf));
-                       if(i <= 0) break;
+                       if(i <= 0)
+                               {
+                               ret = 1;
+                               if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
+                                       {
+                                       if (!BIO_get_cipher_status(tmpmem))
+                                               ret = 0;
+                                       }
+                                       
+                               break;
+                               }
                        BIO_write(data, buf, i);
                }
                BIO_free_all(tmpmem);
-               return 1;
+               return ret;
        }
 }