OpenSim.Region.ScriptEngine.Shared.Api.LSL_Api.llXorBase64StringsCorrect C# (CSharp) Method

llXorBase64StringsCorrect() public method

public llXorBase64StringsCorrect ( string str1, string str2 ) : OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString
str1 string
str2 string
return OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString
        public LSL_String llXorBase64StringsCorrect(string str1, string str2)
        {
            m_host.AddScriptLPS(1);

            if (str1 == String.Empty)
                return String.Empty;
            if (str2 == String.Empty)
                return str1;

            int len = str2.Length;
            if ((len % 4) != 0) // LL is EVIL!!!!
            {
                while (str2.EndsWith("="))
                    str2 = str2.Substring(0, str2.Length - 1);

                len = str2.Length;
                int mod = len % 4;

                if (mod == 1)
                    str2 = str2.Substring(0, str2.Length - 1);
                else if (mod == 2)
                    str2 += "==";
                else if (mod == 3)
                    str2 += "=";
            }

            byte[] data1;
            byte[] data2;
            try
            {
                data1 = Convert.FromBase64String(str1);
                data2 = Convert.FromBase64String(str2);
            }
            catch (Exception)
            {
                return new LSL_String(String.Empty);
            }

            byte[] d2 = new Byte[data1.Length];
            int pos = 0;
            
            if (data1.Length <= data2.Length)
            {
                Array.Copy(data2, 0, d2, 0, data1.Length);
            }
            else
            {
                while (pos < data1.Length)
                {
                    len = data1.Length - pos;
                    if (len > data2.Length)
                        len = data2.Length;

                    Array.Copy(data2, 0, d2, pos, len);
                    pos += len;
                }
            }

            for (pos = 0 ; pos < data1.Length ; pos++ )
                data1[pos] ^= d2[pos];

            return Convert.ToBase64String(data1);
        }
LSL_Api