|
@@ -64,22 +64,16 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned
|
|
|
int nCLen = nLen + AES_BLOCK_SIZE, nFLen = 0;
|
|
|
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;
|
|
|
|
|
|
-/* 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_cleanup(ctx);
|
|
|
+ if (fOk) fOk = EVP_EncryptFinal_ex(ctx, &vchCiphertext[nCLen], &nFLen);
|
|
|
+
|
|
|
+ EVP_CIPHER_CTX_free(ctx); // Free the context regardless of the outcome
|
|
|
|
|
|
if (!fOk) return false;
|
|
|
|
|
@@ -97,24 +91,16 @@ bool CCrypter::Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingM
|
|
|
|
|
|
vchPlaintext = CKeyingMaterial(nPLen);
|
|
|
|
|
|
- //EVP_CIPHER_CTX ctx;
|
|
|
-
|
|
|
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
|
|
|
+ if (!ctx) return false;
|
|
|
|
|
|
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_cleanup(ctx);
|
|
|
+ if (fOk) fOk = EVP_DecryptFinal_ex(ctx, &vchPlaintext[nPLen], &nFLen);
|
|
|
+
|
|
|
+ EVP_CIPHER_CTX_free(ctx); // Free the context regardless of the outcome
|
|
|
|
|
|
if (!fOk) return false;
|
|
|
|
|
@@ -122,7 +108,6 @@ bool CCrypter::Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingM
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
bool EncryptSecret(CKeyingMaterial& vMasterKey, const CSecret &vchPlaintext, const uint256& nIV, std::vector<unsigned char> &vchCiphertext)
|
|
|
{
|
|
|
CCrypter cKeyCrypter;
|
|
@@ -142,3 +127,4 @@ bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector<unsigned
|
|
|
return false;
|
|
|
return cKeyCrypter.Decrypt(vchCiphertext, *((CKeyingMaterial*)&vchPlaintext));
|
|
|
}
|
|
|
+
|