diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2021-10-22 11:54:18 -0400 | 
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2021-10-22 11:54:18 -0400 | 
| commit | 14dae8bc8ee55fdd027c7232e3dbcf7b7eedd3cc (patch) | |
| tree | 8d84f9c2a7fb2f859f6bb3b1c0dfacc6319cc01e /indra/llmessage | |
| parent | 11afa09ea3f56c0e20eb195ae1520a88602ceaca (diff) | |
| parent | cbaba2df56c66926e051d50b6cb02955c81c2a6c (diff) | |
SL-16220: Merge branch 'master' into sl-16220
Diffstat (limited to 'indra/llmessage')
| -rw-r--r-- | indra/llmessage/llblowfishcipher.cpp | 28 | 
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;  } | 
