private void GenerateKeys(int length)
{
_wzKey = GetWZKey(_version, length);
byte[] asciiKey = new byte[_wzKey.Length];
byte[] unicodeKey = new byte[_wzKey.Length];
byte[] asciiEncKey = new byte[_wzKey.Length];
byte[] unicodeEncKey = new byte[_wzKey.Length];
unchecked {
byte mask = 0xAA;
for (int i = 0; i < _wzKey.Length; ++i, ++mask) {
asciiKey[i] = mask;
asciiEncKey[i] = (byte) (_wzKey[i] ^ mask);
}
ushort umask = 0xAAAA;
for (int i = 0; i < _wzKey.Length/2; i += 2, ++umask) {
unicodeKey[i] = (byte) (umask & 0xFF);
unicodeKey[i + 1] = (byte) ((umask & 0xFF00) >> 8);
unicodeEncKey[i] = (byte) (_wzKey[i] ^ unicodeKey[i]);
unicodeEncKey[i + 1] = (byte) (_wzKey[i + 1] ^ unicodeKey[i + 1]);
}
}
_asciiKey = asciiKey;
_unicodeKey = unicodeKey;
_asciiEncKey = asciiEncKey;
_unicodeEncKey = unicodeEncKey;
}