From 5e643aeac9274e969f4070798cb744ac4e3f416a Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 6 Feb 2018 14:50:11 -0500 Subject: [PATCH] use EVP_CIPHER_CTX from openssl 1.1 --- src/Crypto.h | 7 +++++++ src/crypter.cpp | 27 +++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/Crypto.h b/src/Crypto.h index 5c78a07..4ecbfe1 100644 --- a/src/Crypto.h +++ b/src/Crypto.h @@ -3,6 +3,7 @@ #include #include +#include #include #if (OPENSSL_VERSION_NUMBER < 0x010100000) || defined(LIBRESSL_VERSION_NUMBER) // 1.1.0 or LibreSSL @@ -17,6 +18,12 @@ inline int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s) inline void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) { *pr = sig->r; *ps = sig->s; } +// EVP +inline int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *ctx) + { + return EVP_CIPHER_CTX_cleanup (ctx); + } + // ssl #define TLS_method TLSv1_method diff --git a/src/crypter.cpp b/src/crypter.cpp index 1bba1dc..a798942 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -13,6 +13,7 @@ #endif */ +#include "Crypto.h" #include "crypter.h" bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) @@ -59,15 +60,16 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector (nCLen); - EVP_CIPHER_CTX ctx; + EVP_CIPHER_CTX * ctx = EVP_CIPHER_CTX_new (); bool fOk = true; - EVP_CIPHER_CTX_init(&ctx); - if (fOk) fOk = EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); - if (fOk) fOk = EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); - if (fOk) fOk = EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen); - EVP_CIPHER_CTX_cleanup(&ctx); + EVP_CIPHER_CTX_init (ctx); + if (fOk) fOk = EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); + if (fOk) fOk = EVP_EncryptUpdate(ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); + if (fOk) fOk = EVP_EncryptFinal_ex(ctx, (&vchCiphertext[0])+nCLen, &nFLen); + EVP_CIPHER_CTX_reset(ctx); + EVP_CIPHER_CTX_free (ctx); if (!fOk) return false; @@ -86,15 +88,16 @@ bool CCrypter::Decrypt(const std::vector& vchCiphertext, CKeyingM vchPlaintext = CKeyingMaterial(nPLen); - EVP_CIPHER_CTX ctx; + EVP_CIPHER_CTX * ctx = EVP_CIPHER_CTX_new (); bool fOk = true; - EVP_CIPHER_CTX_init(&ctx); - if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); - if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); - if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen); - EVP_CIPHER_CTX_cleanup(&ctx); + EVP_CIPHER_CTX_init (ctx); + if (fOk) fOk = EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); + if (fOk) fOk = EVP_DecryptUpdate(ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); + if (fOk) fOk = EVP_DecryptFinal_ex(ctx, (&vchPlaintext[0])+nPLen, &nFLen); + EVP_CIPHER_CTX_reset(ctx); + EVP_CIPHER_CTX_free (ctx); if (!fOk) return false;