From 121f270414283eb29aafaee3dd5510b9f1672461 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Sat, 24 Feb 2024 14:50:28 +0000 Subject: [PATCH] a few changes to last PR (aes methods) - all still untested --- OpenSim/Framework/Util.cs | 49 ++++++++++--------- .../Shared/Api/Implementation/OSSL_Api.cs | 36 ++++++-------- 2 files changed, 42 insertions(+), 43 deletions(-) diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index 5fa78bbd5f..b4fc40a80b 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -1388,12 +1388,14 @@ namespace OpenSim.Framework /// ID... /// A string composed by the Initialization Vector bytes and the /// encrypted text bytes converted to lower case HexString and separated by " : " - private static string AESEncryptString(string secret, string plainText, string ivString= null) + private static string AESEncryptString(string secret, string plainText, string ivString = null) { if(string.IsNullOrEmpty(secret) || string.IsNullOrEmpty(plainText)) - return string.Empty; + return string.Empty; - byte[] iv = string.IsNullOrEmpty(ivString) ? MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(UUID.Random().ToString())) : MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(ivString)); + byte[] iv = string.IsNullOrEmpty(ivString) ? + MD5.Create().ComputeHash(UUID.Random().GetBytes()) : + MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(ivString)); byte[] aesKey = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(secret)); byte[] encryptedText; @@ -1407,18 +1409,13 @@ namespace OpenSim.Framework ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using MemoryStream memoryStream = new(); using CryptoStream cryptoStream = new(memoryStream, encryptor, CryptoStreamMode.Write); - using (StreamWriter streamWriter = new(cryptoStream)) - { - streamWriter.Write(plainText); - streamWriter.Close(); - } + using StreamWriter streamWriter = new(cryptoStream); + streamWriter.Write(plainText); encryptedText = memoryStream.ToArray(); - memoryStream.Dispose(); - cryptoStream.Dispose(); } - - return string.Format("{0}:{1}", Convert.ToHexString(iv), Convert.ToHexString(encryptedText)).ToLower(); + + return $"{Convert.ToHexString(iv)}:{Convert.ToHexString(encryptedText).ToLower()}"; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -1443,17 +1440,26 @@ namespace OpenSim.Framework /// if used in the encription. eg; an avatarID, a SecureSessionID, an object or /// script ID... /// The decrypted string. - private static string AESDecryptString(string secret, string encryptedText, string ivString= null) + private static string AESDecryptString(string secret, string encryptedText, string ivString = null) { if(string.IsNullOrEmpty(secret) || string.IsNullOrEmpty(encryptedText)) - return string.Empty; + return string.Empty; + + string[] encodedParts = encryptedText.Split(":"); + if(encodedParts.Length < 2 || encodedParts[1].Length == 0) + return string.Empty; byte[] iv; byte[] buffer; - try{ - iv = string.IsNullOrEmpty(ivString) ? Convert.FromHexString(encryptedText.Split(":")[0].ToUpper()) : MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(ivString)); - buffer = Convert.FromHexString(encryptedText.Split(":")[1].ToUpper()); - }catch + try + { + iv = string.IsNullOrEmpty(ivString) ? + Convert.FromHexString(encodedParts[0]) : + MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(ivString)); + + buffer = Convert.FromHexString(encodedParts[1]); + } + catch { return string.Empty; } @@ -1471,11 +1477,8 @@ namespace OpenSim.Framework using CryptoStream cryptoStream = new(memoryStream, decryptor, CryptoStreamMode.Read); using StreamReader streamReader = new(cryptoStream); - string ret = streamReader.ReadToEnd(); - memoryStream.Dispose(); - cryptoStream.Dispose(); - streamReader.Close(); - return ret; + //string ret = streamReader.ReadToEnd(); + return streamReader.ReadToEnd(); } public static int fast_distance2d(int x, int y) diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 50934eec81..28cc41a61e 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -6380,14 +6380,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if(string.IsNullOrEmpty(secret) || string.IsNullOrEmpty(plainText)) return LSL_String.Empty; - LSL_String ret = Util.AESEncrypt(secret, plainText); - if(string.IsNullOrEmpty(ret)){ + string ret = Util.AESEncrypt(secret, plainText); + if(string.IsNullOrEmpty(ret)) + { OSSLShoutError("osAESEncrypt: Failed to encrypt!"); return LSL_String.Empty; - }else - { - return ret; } + return ret; } public LSL_String osAESDecrypt(string secret, string encryptedText) @@ -6395,14 +6394,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if(string.IsNullOrEmpty(secret) || string.IsNullOrEmpty(encryptedText)) return LSL_String.Empty; - LSL_String ret = Util.AESDecrypt(secret, encryptedText); - if(string.IsNullOrEmpty(ret)){ + string ret = Util.AESDecrypt(secret, encryptedText); + if(string.IsNullOrEmpty(ret)) + { OSSLShoutError("osAESDecrypt: Failed to Decrypt!"); return LSL_String.Empty; - }else - { - return ret; } + return ret; } public LSL_String osAESEncryptTo(string secret, string plainText, string ivString) @@ -6410,14 +6408,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if(string.IsNullOrEmpty(secret) || string.IsNullOrEmpty(plainText) || string.IsNullOrEmpty(ivString)) return LSL_String.Empty; - LSL_String ret = Util.AESEncryptTo(secret, plainText, ivString); - if(string.IsNullOrEmpty(ret)){ + string ret = Util.AESEncryptTo(secret, plainText, ivString); + if(string.IsNullOrEmpty(ret)) + { OSSLShoutError("osAESEncryptTo: Failed to encrypt!"); return LSL_String.Empty; - }else - { - return ret; } + return ret; } public LSL_String osAESDecryptFrom(string secret, string encryptedText, string ivString) @@ -6425,14 +6422,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if(string.IsNullOrEmpty(secret) || string.IsNullOrEmpty(encryptedText) || string.IsNullOrEmpty(ivString)) return LSL_String.Empty; - LSL_String ret = Util.AESDecryptFrom(secret, encryptedText, ivString); - if(string.IsNullOrEmpty(ret)){ + string ret = Util.AESDecryptFrom(secret, encryptedText, ivString); + if(string.IsNullOrEmpty(ret)) + { OSSLShoutError("osAESDecryptFrom: Failed to decrypt!"); return LSL_String.Empty; - }else - { - return ret; } + return ret; } } } \ No newline at end of file