|
|
|
@ -13,6 +13,7 @@
@@ -13,6 +13,7 @@
|
|
|
|
|
#endif |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
#include "Crypto.h" |
|
|
|
|
#include "crypter.h" |
|
|
|
|
|
|
|
|
|
bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector<unsigned char>& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) |
|
|
|
@ -59,15 +60,16 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned
@@ -59,15 +60,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 (); |
|
|
|
|
|
|
|
|
|
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<unsigned char>& vchCiphertext, CKeyingM
@@ -86,15 +88,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 (); |
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
|
|
|
|
|