summaryrefslogtreecommitdiff
path: root/indra/llmessage
diff options
context:
space:
mode:
authorEuclid Linden <euclid@lindenlab.com>2021-10-13 21:56:36 +0000
committerEuclid Linden <euclid@lindenlab.com>2021-10-13 21:56:36 +0000
commit0fa3d7705fb6a42410d1578b1fab5b7952a59e7c (patch)
tree72c71a57659a7068f291426cb5235cb68d3436c9 /indra/llmessage
parent492ea7c3a03d5ef0d3679b873a44c08baaced0f1 (diff)
parente989b79dae7b7128c6ce4580b6731dcd3347b94e (diff)
Merged in DV528-merge-6.4.24 (pull request #729)
DRTVWR-528 merge up to v 6.4.24
Diffstat (limited to 'indra/llmessage')
-rw-r--r--indra/llmessage/llblowfishcipher.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/indra/llmessage/llblowfishcipher.cpp b/indra/llmessage/llblowfishcipher.cpp
index 0b5025a422..949d4cc0c7 100644
--- a/indra/llmessage/llblowfishcipher.cpp
+++ b/indra/llmessage/llblowfishcipher.cpp
@@ -52,24 +52,28 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
if (src_len > dst_len) return 0;
// OpenSSL uses "cipher contexts" to hold encryption parameters.
- EVP_CIPHER_CTX context;
- EVP_CIPHER_CTX_init(&context);
+ EVP_CIPHER_CTX *context = EVP_CIPHER_CTX_new();
+ if (!context)
+ {
+ LL_WARNS() << "LLBlowfishCipher::encrypt EVP_CIPHER_CTX initiation failure" << LL_ENDL;
+ return 0;
+ }
// We want a blowfish cyclic block chain cipher, but need to set
// the key length before we pass in a key, so call EncryptInit
// first with NULLs.
- EVP_EncryptInit_ex(&context, EVP_bf_cbc(), NULL, NULL, NULL);
- EVP_CIPHER_CTX_set_key_length(&context, (int)mSecretSize);
+ EVP_EncryptInit_ex(context, EVP_bf_cbc(), NULL, NULL, NULL);
+ EVP_CIPHER_CTX_set_key_length(context, (int)mSecretSize);
// Complete initialization. Per EVP_EncryptInit man page, the
// cipher pointer must be NULL. Apparently initial_vector must
// be 8 bytes for blowfish, as this is the block size.
unsigned char initial_vector[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- EVP_EncryptInit_ex(&context, NULL, NULL, mSecret, initial_vector);
+ EVP_EncryptInit_ex(context, NULL, NULL, mSecret, initial_vector);
- int blocksize = EVP_CIPHER_CTX_block_size(&context);
- int keylen = EVP_CIPHER_CTX_key_length(&context);
- int iv_length = EVP_CIPHER_CTX_iv_length(&context);
+ int blocksize = EVP_CIPHER_CTX_block_size(context);
+ int keylen = EVP_CIPHER_CTX_key_length(context);
+ int iv_length = EVP_CIPHER_CTX_iv_length(context);
LL_DEBUGS() << "LLBlowfishCipher blocksize " << blocksize
<< " keylen " << keylen
<< " iv_len " << iv_length
@@ -77,7 +81,7 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
int output_len = 0;
int temp_len = 0;
- if (!EVP_EncryptUpdate(&context,
+ if (!EVP_EncryptUpdate(context,
dst,
&output_len,
src,
@@ -89,18 +93,18 @@ U32 LLBlowfishCipher::encrypt(const U8* src, U32 src_len, U8* dst, U32 dst_len)
// There may be some final data left to encrypt if the input is
// not an exact multiple of the block size.
- if (!EVP_EncryptFinal_ex(&context, (unsigned char*)(dst + output_len), &temp_len))
+ if (!EVP_EncryptFinal_ex(context, (unsigned char*)(dst + output_len), &temp_len))
{
LL_WARNS() << "LLBlowfishCipher::encrypt EVP_EncryptFinal failure" << LL_ENDL;
goto ERROR;
}
output_len += temp_len;
- EVP_CIPHER_CTX_cleanup(&context);
+ EVP_CIPHER_CTX_free(context);
return output_len;
ERROR:
- EVP_CIPHER_CTX_cleanup(&context);
+ EVP_CIPHER_CTX_free(context);
return 0;
}