using System;
using System.Text;
namespace Server
{
/// <summary>
/// Summary description for ConvertingLock.
/// </summary>
public class ConvertingLock
{
private byte[] m_lock;
private int[] m_key;
private string m_sKey;
public ConvertingLock()
{
//
// TODO: Add constructor logic here
//
}
public void Key(byte[] lock0)
{
m_lock = lock0;
m_key
= new int[m_lock.
Length];
for (int i = 1; i < lock0.Length; i++)
{
m_key[i] = (lock0[i] ^ lock0[i-1]);
}
m_key[0] = (lock0[0] ^ lock0[lock0.Length-1] ^ lock0[lock0.Length-2] ^ 5);
for (int i = 0; i < m_key.Length; i++)
{
m_key[i] = ((m_key[i]<<4) & 240) | ((m_key[i]>>4) & 15);
}
m_sKey = "";
for ( int i = 0; i<m_key.Length ; i++)
{
if(m_key[i] == 0)
{
m_sKey+=("/%DCN000%/");
}
else if(m_key[i] == 5)
{
m_sKey+=("/%DCN005%/");
}
else if(m_key[i] == 36)
{
m_sKey+=("/%DCN036%/");
}
else if(m_key[i] == 96)
{
m_sKey+=("/%DCN096%/");
}
else if(m_key[i] == 124)
{
m_sKey+=("/%DCN124%/");
}
else if(m_key[i] == 126)
{
m_sKey+=("/%DCN126%/");
}
else
{
m_sKey+=((char)m_key[i]);
}
}
}
public byte[] getKey()
{
return (Encoding.Default.GetBytes(m_sKey.ToString()));
}
public static byte[] getKey(byte[] lock0)
{
int[] key
= new int[lock0.
Length];
for (int i = 1; i < lock0.Length; i++)
{
key[i] = (lock0[i] ^ lock0[i-1]);
}
key[0] = (lock0[0] ^ lock0[lock0.Length-1] ^ lock0[lock0.Length-2] ^ 5);
for (int i = 0; i < key.Length; i++)
{
key[i] = (((key[i]<<4) & 240) | ((key[i]>>4) & 15));
}
byte[] sKey
= new byte[516
];
int len = 0;
for ( int i = 0; i<key.Length ; i++)
{
if(key[i] == 0)
{
// "/%DCN000%/"
for(int ii = 0; ii < "/%DCN000%/".Length; ii++)
{
sKey[len] = (Encoding.Default.GetBytes("/%DCN000%/"))[ii];
len++;
}
}
else if(key[i] == 5)
{
for(int ii = 0; ii < "/%DCN005%/".Length; ii++)
{
sKey[len] = (Encoding.Default.GetBytes("/%DCN005%/"))[ii];
len++;
}
}
else if(key[i] == 36)
{
for(int ii = 0; ii < "/%DCN036%/".Length; ii++)
{
sKey[len] = (Encoding.Default.GetBytes("/%DCN036%/"))[ii];
len++;
}
}
else if(key[i] == 96)
{
for(int ii = 0; ii < "/%DCN096%/".Length; ii++)
{
sKey[len] = (Encoding.Default.GetBytes("/%DCN096%/"))[ii];
len++;
}
}
else if(key[i] == 124)
{
for(int ii = 0; ii < "/%DCN124%/".Length; ii++)
{
sKey[len] = (Encoding.Default.GetBytes("/%DCN124%/"))[ii];
len++;
}
}
else if(key[i] == 126)
{
for(int ii = 0; ii < "/%DCN126%/".Length; ii++)
{
sKey[len] = (Encoding.Default.GetBytes("/%DCN126%/"))[ii];
len++;
}
}
else
{
sKey[len] = (byte)key[i];
len++;
}
}
byte[] aux
= new byte[len
];
for(int i = 0; i < len; i++)
{
aux[i] = sKey[i];
}
return aux;
}
}
}