Created
June 1, 2017 17:05
-
-
Save FauxFaux/8675680985c40d187eff2cf06e8dce70 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commit 9d2bf90676206957a502e9ec1c3cfe4f4b40b0cc | |
Author: Chris West (Faux) <git@goeswhere.com> | |
Date: Thu Jun 1 17:01:16 2017 +0000 | |
dynamically allocate EVP_CTX | |
diff --git a/boxbackup-0.11.1~r2837/debian/control b/boxbackup-0.11.1~r2837/debian/control | |
index 5cbdba6..d422125 100644 | |
--- a/boxbackup-0.11.1~r2837/debian/control | |
+++ b/boxbackup-0.11.1~r2837/debian/control | |
@@ -12,7 +12,7 @@ Build-Depends: | |
docbook-xsl, | |
libdb-dev (>= 4.7), | |
libedit-dev, | |
- libssl1.0-dev, | |
+ libssl-dev, | |
libtest-lwp-useragent-perl, | |
xsltproc, | |
zlib1g-dev | |
diff --git a/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.cpp b/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.cpp | |
index e5cd9b0..f23317f 100644 | |
--- a/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.cpp | |
+++ b/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.cpp | |
@@ -49,7 +49,7 @@ CipherContext::~CipherContext() | |
if(mInitialised) | |
{ | |
// Clean up | |
- EVP_CIPHER_CTX_cleanup(&ctx); | |
+ EVP_CIPHER_CTX_free(ctx); | |
mInitialised = false; | |
} | |
#ifdef HAVE_OLD_SSL | |
@@ -84,9 +84,9 @@ void CipherContext::Init(CipherContext::CipherFunction Function, const CipherDes | |
// Initialise the cipher | |
#ifndef HAVE_OLD_SSL | |
- EVP_CIPHER_CTX_init(&ctx); // no error return code, even though the docs says it does | |
+ ctx = EVP_CIPHER_CTX_new(); | |
- if(EVP_CipherInit_ex(&ctx, rDescription.GetCipher(), NULL, NULL, NULL, Function) != 1) | |
+ if(EVP_CipherInit_ex(ctx, rDescription.GetCipher(), NULL, NULL, NULL, Function) != 1) | |
#else | |
// Store function for later | |
mFunction = Function; | |
@@ -102,19 +102,19 @@ void CipherContext::Init(CipherContext::CipherFunction Function, const CipherDes | |
{ | |
#ifndef HAVE_OLD_SSL | |
// Let the description set up everything else | |
- rDescription.SetupParameters(&ctx); | |
+ rDescription.SetupParameters(ctx); | |
#else | |
// With the old version, a copy needs to be taken first. | |
mpDescription = rDescription.Clone(); | |
// Mark it as not a leak, otherwise static cipher contexts | |
// cause spurious memory leaks to be reported | |
MEMLEAKFINDER_NOT_A_LEAK(mpDescription); | |
- mpDescription->SetupParameters(&ctx); | |
+ mpDescription->SetupParameters(ctx); | |
#endif | |
} | |
catch(...) | |
{ | |
- EVP_CIPHER_CTX_cleanup(&ctx); | |
+ EVP_CIPHER_CTX_free(ctx); | |
throw; | |
} | |
@@ -135,7 +135,7 @@ void CipherContext::Reset() | |
if(mInitialised) | |
{ | |
// Clean up | |
- EVP_CIPHER_CTX_cleanup(&ctx); | |
+ EVP_CIPHER_CTX_cleanup(ctx); | |
mInitialised = false; | |
} | |
#ifdef HAVE_OLD_SSL | |
@@ -172,7 +172,7 @@ void CipherContext::Begin() | |
} | |
// Initialise the cipher context again | |
- if(EVP_CipherInit(&ctx, NULL, NULL, NULL, -1) != 1) | |
+ if(EVP_CipherInit(ctx, NULL, NULL, NULL, -1) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPInitFailure) | |
} | |
@@ -218,14 +218,14 @@ int CipherContext::Transform(void *pOutBuffer, int OutLength, const void *pInBuf | |
} | |
// Check output buffer size | |
- if(OutLength < (InLength + EVP_CIPHER_CTX_block_size(&ctx))) | |
+ if(OutLength < (InLength + EVP_CIPHER_CTX_block_size(ctx))) | |
{ | |
THROW_EXCEPTION(CipherException, OutputBufferTooSmall); | |
} | |
// Do the transform | |
int outLength = OutLength; | |
- if(EVP_CipherUpdate(&ctx, (unsigned char*)pOutBuffer, &outLength, (unsigned char*)pInBuffer, InLength) != 1) | |
+ if(EVP_CipherUpdate(ctx, (unsigned char*)pOutBuffer, &outLength, (unsigned char*)pInBuffer, InLength) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPUpdateFailure) | |
} | |
@@ -265,7 +265,7 @@ int CipherContext::Final(void *pOutBuffer, int OutLength) | |
} | |
// Check output buffer size | |
- if(OutLength < (2 * EVP_CIPHER_CTX_block_size(&ctx))) | |
+ if(OutLength < (2 * EVP_CIPHER_CTX_block_size(ctx))) | |
{ | |
THROW_EXCEPTION(CipherException, OutputBufferTooSmall); | |
} | |
@@ -273,7 +273,7 @@ int CipherContext::Final(void *pOutBuffer, int OutLength) | |
// Do the transform | |
int outLength = OutLength; | |
#ifndef HAVE_OLD_SSL | |
- if(EVP_CipherFinal_ex(&ctx, (unsigned char*)pOutBuffer, &outLength) != 1) | |
+ if(EVP_CipherFinal_ex(ctx, (unsigned char*)pOutBuffer, &outLength) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPFinalFailure) | |
} | |
@@ -302,11 +302,11 @@ void CipherContext::OldOpenSSLFinal(unsigned char *Buffer, int &rOutLengthOut) | |
// Old version needs to use a different form, and then set up the cipher again for next time around | |
int outLength = rOutLengthOut; | |
// Have to emulate padding off... | |
- int blockSize = EVP_CIPHER_CTX_block_size(&ctx); | |
+ int blockSize = EVP_CIPHER_CTX_block_size(ctx); | |
if(mPaddingOn) | |
{ | |
// Just use normal final call | |
- if(EVP_CipherFinal(&ctx, Buffer, &outLength) != 1) | |
+ if(EVP_CipherFinal(ctx, Buffer, &outLength) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPFinalFailure) | |
} | |
@@ -319,13 +319,13 @@ void CipherContext::OldOpenSSLFinal(unsigned char *Buffer, int &rOutLengthOut) | |
{ | |
// NASTY -- fiddling around with internals like this is bad. | |
// But only way to get this working on old versions of OpenSSL. | |
- if(!EVP_EncryptUpdate(&ctx,Buffer,&outLength,ctx.buf,0) | |
+ if(!EVP_EncryptUpdate(ctx,Buffer,&outLength,ctx.buf,0) | |
|| outLength != blockSize) | |
{ | |
THROW_EXCEPTION(CipherException, EVPFinalFailure) | |
} | |
// Clean up | |
- EVP_CIPHER_CTX_cleanup(&ctx); | |
+ EVP_CIPHER_CTX_free(ctx); | |
} | |
else | |
{ | |
@@ -353,11 +353,11 @@ void CipherContext::OldOpenSSLFinal(unsigned char *Buffer, int &rOutLengthOut) | |
} | |
} | |
// Reinitialise the cipher for the next time around | |
- if(EVP_CipherInit(&ctx, mpDescription->GetCipher(), NULL, NULL, mFunction) != 1) | |
+ if(EVP_CipherInit(ctx, mpDescription->GetCipher(), NULL, NULL, mFunction) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPInitFailure) | |
} | |
- mpDescription->SetupParameters(&ctx); | |
+ mpDescription->SetupParameters(ctx); | |
// Update length for caller | |
rOutLengthOut = outLength; | |
@@ -382,7 +382,7 @@ int CipherContext::InSizeForOutBufferSize(int OutLength) | |
// Strictly speaking, the *2 is unnecessary. However... | |
// Final() is paranoid, and requires two input blocks of space to work. | |
- return OutLength - (EVP_CIPHER_CTX_block_size(&ctx) * 2); | |
+ return OutLength - (EVP_CIPHER_CTX_block_size(ctx) * 2); | |
} | |
// -------------------------------------------------------------------------- | |
@@ -403,7 +403,7 @@ int CipherContext::MaxOutSizeForInBufferSize(int InLength) | |
// Final() is paranoid, and requires two input blocks of space to work, and so we need to add | |
// three blocks on to be absolutely sure. | |
- return InLength + (EVP_CIPHER_CTX_block_size(&ctx) * 3); | |
+ return InLength + (EVP_CIPHER_CTX_block_size(ctx) * 3); | |
} | |
@@ -430,7 +430,7 @@ int CipherContext::TransformBlock(void *pOutBuffer, int OutLength, const void *p | |
} | |
// Check output buffer size | |
- if(OutLength < (InLength + EVP_CIPHER_CTX_block_size(&ctx))) | |
+ if(OutLength < (InLength + EVP_CIPHER_CTX_block_size(ctx))) | |
{ | |
// Check if padding is off, in which case the buffer can be smaller | |
if(!mPaddingOn && OutLength <= InLength) | |
@@ -444,7 +444,7 @@ int CipherContext::TransformBlock(void *pOutBuffer, int OutLength, const void *p | |
} | |
// Initialise the cipher context again | |
- if(EVP_CipherInit(&ctx, NULL, NULL, NULL, -1) != 1) | |
+ if(EVP_CipherInit(ctx, NULL, NULL, NULL, -1) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPInitFailure) | |
} | |
@@ -455,14 +455,14 @@ int CipherContext::TransformBlock(void *pOutBuffer, int OutLength, const void *p | |
{ | |
// Update | |
outLength = OutLength; | |
- if(EVP_CipherUpdate(&ctx, (unsigned char*)pOutBuffer, &outLength, (unsigned char*)pInBuffer, InLength) != 1) | |
+ if(EVP_CipherUpdate(ctx, (unsigned char*)pOutBuffer, &outLength, (unsigned char*)pInBuffer, InLength) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPUpdateFailure) | |
} | |
// Finalise | |
int outLength2 = OutLength - outLength; | |
#ifndef HAVE_OLD_SSL | |
- if(EVP_CipherFinal_ex(&ctx, ((unsigned char*)pOutBuffer) + outLength, &outLength2) != 1) | |
+ if(EVP_CipherFinal_ex(ctx, ((unsigned char*)pOutBuffer) + outLength, &outLength2) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPFinalFailure) | |
} | |
@@ -476,7 +476,7 @@ int CipherContext::TransformBlock(void *pOutBuffer, int OutLength, const void *p | |
// Finalise the context, so definately ready for the next caller | |
int outs = OutLength; | |
#ifndef HAVE_OLD_SSL | |
- EVP_CipherFinal_ex(&ctx, (unsigned char*)pOutBuffer, &outs); | |
+ EVP_CipherFinal_ex(ctx, (unsigned char*)pOutBuffer, &outs); | |
#else | |
OldOpenSSLFinal((unsigned char*)pOutBuffer, outs); | |
#endif | |
@@ -502,7 +502,7 @@ int CipherContext::GetIVLength() | |
THROW_EXCEPTION(CipherException, NotInitialised) | |
} | |
- return EVP_CIPHER_CTX_iv_length(&ctx); | |
+ return EVP_CIPHER_CTX_iv_length(ctx); | |
} | |
@@ -529,7 +529,7 @@ void CipherContext::SetIV(const void *pIV) | |
} | |
// Set IV | |
- if(EVP_CipherInit(&ctx, NULL, NULL, (unsigned char *)pIV, -1) != 1) | |
+ if(EVP_CipherInit(ctx, NULL, NULL, (unsigned char *)pIV, -1) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPInitFailure) | |
} | |
@@ -568,7 +568,7 @@ const void *CipherContext::SetRandomIV(int &rLengthOut) | |
} | |
// Get length of IV | |
- unsigned int ivLen = EVP_CIPHER_CTX_iv_length(&ctx); | |
+ unsigned int ivLen = EVP_CIPHER_CTX_iv_length(ctx); | |
if(ivLen > sizeof(mGeneratedIV)) | |
{ | |
THROW_EXCEPTION(CipherException, IVSizeImplementationLimitExceeded) | |
@@ -578,7 +578,7 @@ const void *CipherContext::SetRandomIV(int &rLengthOut) | |
Random::Generate(mGeneratedIV, ivLen); | |
// Set IV | |
- if(EVP_CipherInit(&ctx, NULL, NULL, mGeneratedIV, -1) != 1) | |
+ if(EVP_CipherInit(ctx, NULL, NULL, mGeneratedIV, -1) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPInitFailure) | |
} | |
@@ -608,7 +608,7 @@ const void *CipherContext::SetRandomIV(int &rLengthOut) | |
void CipherContext::UsePadding(bool Padding) | |
{ | |
#ifndef HAVE_OLD_SSL | |
- if(EVP_CIPHER_CTX_set_padding(&ctx, Padding) != 1) | |
+ if(EVP_CIPHER_CTX_set_padding(ctx, Padding) != 1) | |
{ | |
THROW_EXCEPTION(CipherException, EVPSetPaddingFailure) | |
} | |
diff --git a/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.h b/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.h | |
index 64ce52d..10043c2 100644 | |
--- a/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.h | |
+++ b/boxbackup-0.11.1~r2837/lib/crypto/CipherContext.h | |
@@ -67,7 +67,7 @@ public: | |
#endif | |
private: | |
- EVP_CIPHER_CTX ctx; | |
+ EVP_CIPHER_CTX *ctx; | |
bool mInitialised; | |
bool mWithinTransform; | |
bool mPaddingOn; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment