fixed incompatibility with newer lbssl

This commit is contained in:
Brannon King 2018-10-16 12:30:07 -06:00
parent 1578807503
commit 24da3ac57a
3 changed files with 32 additions and 21 deletions

View file

@ -4,9 +4,11 @@ project(lbrycrd_clion) # Do not use for full compile. This is for CLion syntax c
set (CMAKE_CXX_STANDARD 98) # 03 is not supported by cmake, but this will soon be 11 (after upstream bitcoin merge) set (CMAKE_CXX_STANDARD 98) # 03 is not supported by cmake, but this will soon be 11 (after upstream bitcoin merge)
# I thought that setting the standard would disable the clang-tidy c++11 tips; nope. # I thought that setting the standard would disable the clang-tidy c++11 tips; nope.
set(BOOST_ROOT "build/boost" CACHE PATH "Boost library path") if(EXISTS "build/boost")
set(Boost_NO_SYSTEM_PATHS on CACHE BOOL "Do not search system for Boost") set(BOOST_ROOT "build/boost" CACHE PATH "Boost library path")
find_package(Boost REQUIRED COMPONENTS filesystem program_options thread chrono) # locale coming shortly set(Boost_NO_SYSTEM_PATHS on CACHE BOOL "Do not search system for Boost")
endif()
find_package(Boost REQUIRED COMPONENTS filesystem program_options thread chrono locale)
file(GLOB sources file(GLOB sources
src/*.h src/*.cpp src/*.h src/*.cpp

View file

@ -159,14 +159,19 @@ bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) c
std::string data_to_verify; // Everything but the signature std::string data_to_verify; // Everything but the signature
rcopy.SerializeToString(&data_to_verify); rcopy.SerializeToString(&data_to_verify);
EVP_MD_CTX ctx; EVP_MD_CTX* ctx = EVP_MD_CTX_new();
EVP_PKEY *pubkey = X509_get_pubkey(signing_cert); if (!ctx)
EVP_MD_CTX_init(&ctx); throw SSLVerifyError("Unable to allocate OpenSSL context.");
if (!EVP_VerifyInit_ex(&ctx, digestAlgorithm, NULL) ||
!EVP_VerifyUpdate(&ctx, data_to_verify.data(), data_to_verify.size()) || EVP_PKEY* pubkey = X509_get_pubkey(signing_cert);
!EVP_VerifyFinal(&ctx, (const unsigned char*)paymentRequest.signature().data(), (unsigned int)paymentRequest.signature().size(), pubkey)) { EVP_MD_CTX_init(ctx);
if (!EVP_VerifyInit_ex(ctx, digestAlgorithm, NULL) ||
!EVP_VerifyUpdate(ctx, data_to_verify.data(), data_to_verify.size()) ||
!EVP_VerifyFinal(ctx, (const unsigned char*)paymentRequest.signature().data(), (unsigned int)paymentRequest.signature().size(), pubkey)) {
EVP_MD_CTX_free(ctx);
throw SSLVerifyError("Bad signature, invalid payment request."); throw SSLVerifyError("Bad signature, invalid payment request.");
} }
EVP_MD_CTX_free(ctx);
// OpenSSL API for getting human printable strings from certs is baroque. // OpenSSL API for getting human printable strings from certs is baroque.
int textlen = X509_NAME_get_text_by_NID(certname, NID_commonName, NULL, 0); int textlen = X509_NAME_get_text_by_NID(certname, NID_commonName, NULL, 0);

View file

@ -58,15 +58,17 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned
int nCLen = nLen + AES_BLOCK_SIZE, nFLen = 0; int nCLen = nLen + AES_BLOCK_SIZE, nFLen = 0;
vchCiphertext = std::vector<unsigned char> (nCLen); vchCiphertext = std::vector<unsigned char> (nCLen);
EVP_CIPHER_CTX ctx; EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
if (!ctx) return false;
bool fOk = true; bool fOk = true;
EVP_CIPHER_CTX_init(&ctx); EVP_CIPHER_CTX_init(ctx);
if (fOk) fOk = EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV) != 0; if (fOk) fOk = EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, chKey, chIV) != 0;
if (fOk) fOk = EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen) != 0; if (fOk) fOk = EVP_EncryptUpdate(ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen) != 0;
if (fOk) fOk = EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0]) + nCLen, &nFLen) != 0; if (fOk) fOk = EVP_EncryptFinal_ex(ctx, (&vchCiphertext[0]) + nCLen, &nFLen) != 0;
EVP_CIPHER_CTX_cleanup(&ctx); EVP_CIPHER_CTX_cleanup(ctx);
EVP_CIPHER_CTX_free(ctx);
if (!fOk) return false; if (!fOk) return false;
@ -85,15 +87,17 @@ bool CCrypter::Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingM
vchPlaintext = CKeyingMaterial(nPLen); vchPlaintext = CKeyingMaterial(nPLen);
EVP_CIPHER_CTX ctx; EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
if (!ctx) return false;
bool fOk = true; bool fOk = true;
EVP_CIPHER_CTX_init(&ctx); EVP_CIPHER_CTX_init(ctx);
if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV) != 0; if (fOk) fOk = EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, chKey, chIV) != 0;
if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen) != 0; if (fOk) fOk = EVP_DecryptUpdate(ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen) != 0;
if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0]) + nPLen, &nFLen) != 0; if (fOk) fOk = EVP_DecryptFinal_ex(ctx, (&vchPlaintext[0]) + nPLen, &nFLen) != 0;
EVP_CIPHER_CTX_cleanup(&ctx); EVP_CIPHER_CTX_cleanup(ctx);
EVP_CIPHER_CTX_free(ctx);
if (!fOk) return false; if (!fOk) return false;