|
|
@ -73,14 +73,16 @@ bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector<unsigned |
|
|
|
|
|
|
|
|
|
|
|
EVP_CIPHER_CTX ctx; |
|
|
|
EVP_CIPHER_CTX ctx; |
|
|
|
|
|
|
|
|
|
|
|
EVP_CIPHER_CTX_init(&ctx); |
|
|
|
bool fOk = true; |
|
|
|
EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); |
|
|
|
|
|
|
|
EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_cleanup(&ctx); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!fOk) return false; |
|
|
|
|
|
|
|
|
|
|
|
vchCiphertext.resize(nCLen + nFLen); |
|
|
|
vchCiphertext.resize(nCLen + nFLen); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
@ -98,14 +100,16 @@ bool CCrypter::Decrypt(const std::vector<unsigned char>& vchCiphertext, CKeyingM |
|
|
|
|
|
|
|
|
|
|
|
EVP_CIPHER_CTX ctx; |
|
|
|
EVP_CIPHER_CTX ctx; |
|
|
|
|
|
|
|
|
|
|
|
EVP_CIPHER_CTX_init(&ctx); |
|
|
|
bool fOk = true; |
|
|
|
EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); |
|
|
|
|
|
|
|
EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_cleanup(&ctx); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!fOk) return false; |
|
|
|
|
|
|
|
|
|
|
|
vchPlaintext.resize(nPLen + nFLen); |
|
|
|
vchPlaintext.resize(nPLen + nFLen); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|