diff options
Diffstat (limited to 'dep/CascLib/src/overwatch/cmf-key.cpp')
-rw-r--r-- | dep/CascLib/src/overwatch/cmf-key.cpp | 13907 |
1 files changed, 13907 insertions, 0 deletions
diff --git a/dep/CascLib/src/overwatch/cmf-key.cpp b/dep/CascLib/src/overwatch/cmf-key.cpp new file mode 100644 index 00000000000..d88723cc31b --- /dev/null +++ b/dep/CascLib/src/overwatch/cmf-key.cpp @@ -0,0 +1,13907 @@ +// +// This file was converted from the sources of TACTLib. DO NOT EDIT. +// Source: https://github.com/overtools/TACTLib +// + +// Supress warnings that may be raised by the converted C# code +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable: 4100) // warning C4100: 'header': unreferenced formal parameter +#pragma warning(disable: 4389) // warning C4389: '!=': signed/unsigned mismatch +#endif // _MSC_VER + +// +// Key+IV provider for build 35328. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_35328.cs +// + +namespace KeyCMF_035328 +{ + static const BYTE Keytable[] = + { + 0xAB, 0xD1, 0x7A, 0xF5, 0xD8, 0x95, 0x03, 0x95, 0x07, 0xBF, 0xD0, 0x51, 0xA3, 0x8D, 0x54, 0xD2, + 0xB7, 0xB9, 0xB3, 0xC7, 0xF3, 0x95, 0x77, 0xB5, 0x86, 0xAB, 0xE0, 0x83, 0xF9, 0x69, 0xD5, 0x05, + 0xEF, 0xB6, 0x39, 0xED, 0x3A, 0xEB, 0x35, 0x99, 0x28, 0x59, 0xFE, 0xA9, 0xB4, 0xC2, 0x3A, 0x32, + 0x35, 0xB4, 0xC3, 0xC2, 0xAE, 0x19, 0xFC, 0xB7, 0xDE, 0x94, 0x41, 0xEC, 0xD8, 0xDC, 0x21, 0xC8, + 0x5F, 0x13, 0x26, 0xDE, 0x5D, 0xCF, 0x10, 0xF6, 0x69, 0x0C, 0x6B, 0xD6, 0x7A, 0xB9, 0x38, 0x0C, + 0x33, 0x03, 0x6A, 0x29, 0xFC, 0xCB, 0x44, 0xBE, 0x23, 0xD6, 0xBB, 0xB7, 0x54, 0x70, 0x3D, 0xE5, + 0x9F, 0xF2, 0xC7, 0xC3, 0x21, 0x8B, 0x68, 0x21, 0x9B, 0x0F, 0xC2, 0x80, 0xDD, 0x19, 0x5B, 0xEB, + 0x2A, 0x55, 0x75, 0x81, 0x0D, 0xA0, 0x28, 0xBB, 0x52, 0x0B, 0xA7, 0x34, 0x84, 0x46, 0x99, 0xEB, + 0x7A, 0xA1, 0xD1, 0xBD, 0x27, 0xC3, 0x20, 0xC6, 0x5D, 0x8C, 0xA3, 0xD4, 0x87, 0x9F, 0x90, 0x61, + 0xDC, 0x9D, 0x2D, 0x3E, 0xF3, 0x37, 0xB0, 0xA9, 0x13, 0x97, 0xDD, 0xF6, 0x79, 0x27, 0xFA, 0xC7, + 0xF3, 0x6F, 0xC5, 0xF0, 0xFA, 0x52, 0xF1, 0x82, 0xE0, 0xEF, 0x99, 0x84, 0x18, 0xBB, 0xAD, 0x26, + 0x9F, 0xA4, 0xE4, 0xA8, 0xE0, 0x73, 0xA0, 0x13, 0x3B, 0x14, 0xA5, 0xBA, 0x64, 0xC3, 0xC5, 0x68, + 0xF5, 0xBF, 0x4F, 0x94, 0xA0, 0xAC, 0xC8, 0x29, 0xB8, 0xC3, 0x42, 0x18, 0x09, 0xCF, 0x48, 0x57, + 0x69, 0xED, 0x78, 0x84, 0xB9, 0x4A, 0x5B, 0x1F, 0xE8, 0x08, 0x55, 0x55, 0x95, 0x40, 0xBC, 0x71, + 0x4F, 0x22, 0x90, 0xD4, 0x19, 0x61, 0x1F, 0x67, 0x36, 0x7F, 0xBD, 0xF1, 0x76, 0x75, 0xE1, 0x99, + 0xB0, 0x9F, 0x54, 0x71, 0x65, 0x8E, 0xCB, 0x61, 0xC0, 0xF7, 0xE3, 0xA9, 0xAB, 0xE8, 0xD2, 0x3E, + 0x48, 0xD4, 0x2D, 0xF8, 0x56, 0x32, 0xCF, 0xFC, 0x77, 0x77, 0x20, 0x3E, 0x92, 0x78, 0xF0, 0x4F, + 0xB7, 0x90, 0x74, 0xF0, 0x41, 0xF9, 0x38, 0x26, 0xD3, 0x37, 0xD6, 0x10, 0x75, 0x1A, 0x75, 0x12, + 0xD9, 0x39, 0x64, 0x1C, 0x37, 0x6D, 0x4B, 0x1C, 0xA8, 0xFF, 0x29, 0x5C, 0x9F, 0x6E, 0x68, 0x26, + 0xCA, 0x3E, 0x06, 0xA6, 0xCB, 0xE6, 0x27, 0x13, 0xD2, 0x12, 0xB2, 0xFF, 0xF7, 0x4A, 0x4A, 0x19, + 0x68, 0x02, 0x85, 0xBE, 0xE2, 0x10, 0xFA, 0x97, 0xFE, 0x1B, 0x4A, 0x1F, 0xA8, 0xDD, 0x7F, 0x69, + 0x22, 0x53, 0xC0, 0x3B, 0xFA, 0x80, 0x77, 0xC2, 0x10, 0x49, 0x59, 0x08, 0x62, 0x3B, 0x62, 0x5F, + 0xE5, 0x4F, 0xEF, 0xDC, 0xC3, 0x56, 0x4A, 0xCB, 0x62, 0x9C, 0x27, 0x91, 0xEA, 0xD9, 0x47, 0x83, + 0x55, 0xBD, 0x80, 0x2A, 0x67, 0x0A, 0x4F, 0x13, 0x1F, 0xE5, 0x6A, 0x06, 0x70, 0x60, 0x3C, 0xC2, + 0x4A, 0x03, 0x2A, 0x3B, 0xC2, 0x80, 0xCB, 0xC9, 0x2E, 0x9F, 0x7F, 0x87, 0x1B, 0xD1, 0x8B, 0xA7, + 0xEE, 0xD8, 0x6A, 0x61, 0x85, 0x81, 0x75, 0x40, 0x02, 0x89, 0x23, 0xD6, 0xBC, 0xC3, 0xB3, 0x38, + 0x61, 0x9A, 0x50, 0x41, 0xF4, 0xD5, 0xB0, 0x84, 0xD4, 0xCF, 0x13, 0x87, 0xF7, 0x8F, 0x1C, 0x1F, + 0xAB, 0xA1, 0xCC, 0x17, 0x83, 0x30, 0x8A, 0x6E, 0xDE, 0x86, 0x5F, 0xC4, 0xCC, 0x55, 0x85, 0xF6, + 0x8A, 0x60, 0xA3, 0x4B, 0xF9, 0xC1, 0xA6, 0x8E, 0x31, 0x75, 0xC2, 0xAD, 0xCF, 0x52, 0xCE, 0x29, + 0x1D, 0xBE, 0x07, 0x50, 0xD1, 0x20, 0xA5, 0xB2, 0x4E, 0x79, 0x1C, 0xBC, 0xEA, 0xB4, 0x01, 0xBB, + 0x3F, 0x55, 0x75, 0x47, 0xAA, 0xE7, 0x73, 0xF7, 0x78, 0x3B, 0xC1, 0x63, 0x3D, 0xD5, 0x09, 0xB4, + 0x6A, 0x45, 0x01, 0xD7, 0x5C, 0xDA, 0x8E, 0x93, 0xF8, 0x45, 0xDC, 0x5B, 0x91, 0xDF, 0x8B, 0x41 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + const uint increment = 3; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 35455. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_35455.cs +// + +namespace KeyCMF_035455 +{ + static const BYTE Keytable[] = + { + 0x80, 0x8A, 0x26, 0xFC, 0x2E, 0xCC, 0x67, 0xEC, 0x9D, 0xEC, 0x33, 0xEC, 0xCA, 0xA8, 0x86, 0x38, + 0x54, 0x3F, 0x9E, 0xD3, 0x5A, 0xC4, 0xDC, 0x67, 0xA5, 0xE0, 0xB5, 0x06, 0x8D, 0xD7, 0xED, 0x5F, + 0x4C, 0xE9, 0xF3, 0x28, 0x05, 0x19, 0x2E, 0xAF, 0x55, 0x15, 0x85, 0x34, 0x82, 0x82, 0xEA, 0xC3, + 0xD6, 0x34, 0xC0, 0x74, 0xD2, 0xDE, 0x40, 0x8A, 0x56, 0x04, 0x7A, 0x50, 0x7F, 0x65, 0x68, 0xF2, + 0x00, 0x0C, 0x6F, 0xEB, 0x11, 0x20, 0xE8, 0xDE, 0x03, 0x9E, 0xF4, 0x54, 0x09, 0xF5, 0xC1, 0x1A, + 0x4A, 0x8C, 0x90, 0xD6, 0x2B, 0x39, 0xD6, 0x4A, 0x8B, 0x0A, 0x77, 0x7C, 0x40, 0x6C, 0xED, 0xD1, + 0x19, 0xE0, 0x40, 0x48, 0x40, 0x6B, 0xF9, 0x25, 0x48, 0xD5, 0xCC, 0x99, 0x21, 0x95, 0x90, 0x9B, + 0x81, 0xD6, 0xD9, 0x4D, 0xB4, 0xF2, 0xAD, 0x65, 0xE9, 0x21, 0x81, 0x33, 0x7D, 0x99, 0x3F, 0x96, + 0xEE, 0x66, 0x15, 0xBB, 0x6E, 0x2D, 0xE8, 0xE7, 0x68, 0x7A, 0xA2, 0x47, 0x8B, 0x65, 0xC4, 0x38, + 0xC1, 0xDE, 0x17, 0x75, 0x3F, 0x9A, 0x4F, 0x4F, 0x4C, 0x26, 0xDD, 0x45, 0x26, 0x7D, 0x46, 0x9D, + 0x92, 0x54, 0xDE, 0x22, 0x39, 0xDA, 0x7A, 0x50, 0x46, 0x78, 0x80, 0x4A, 0x12, 0x2E, 0x2C, 0x4D, + 0x5F, 0x50, 0x8A, 0xB3, 0x2D, 0x7D, 0x74, 0x55, 0x8C, 0xF7, 0x69, 0xC0, 0x6C, 0x3E, 0x97, 0x38, + 0xED, 0x20, 0x42, 0x2C, 0xA3, 0x00, 0xFF, 0xB7, 0x33, 0x0F, 0xF7, 0xB2, 0x84, 0x74, 0x7C, 0x31, + 0xC3, 0x0B, 0x61, 0xCF, 0x68, 0x85, 0x8A, 0x59, 0x27, 0x1A, 0x6D, 0x5A, 0x21, 0xB5, 0x1D, 0x4B, + 0x74, 0xD9, 0x5D, 0x86, 0x24, 0x03, 0x03, 0x61, 0x3E, 0x26, 0x06, 0x4C, 0xEA, 0xC8, 0xB1, 0x95, + 0x03, 0xEE, 0xA7, 0x63, 0x87, 0x76, 0x6C, 0x87, 0xAF, 0xDC, 0xFB, 0x8C, 0x1A, 0xFC, 0x9A, 0xF0, + 0xFF, 0x20, 0x47, 0x0B, 0xEC, 0xE1, 0x53, 0x81, 0x4B, 0xCD, 0xCE, 0x3C, 0x80, 0xC3, 0x1F, 0x57, + 0xFC, 0xDB, 0x63, 0x9D, 0x5E, 0x53, 0x3F, 0xAC, 0x45, 0xA7, 0xB0, 0x13, 0xE2, 0x4D, 0x8B, 0x0F, + 0xB1, 0xC3, 0x67, 0x3F, 0x80, 0xD0, 0xFF, 0xE6, 0x7A, 0x13, 0xEE, 0x87, 0x74, 0xC3, 0x31, 0xCF, + 0x85, 0xF1, 0x46, 0x52, 0x3D, 0x5B, 0x1E, 0xB6, 0x7C, 0xBB, 0x57, 0x58, 0x23, 0x01, 0x9D, 0xC1, + 0x39, 0xD0, 0xC5, 0xD7, 0x02, 0x2E, 0x53, 0xBD, 0xAB, 0x22, 0x75, 0x78, 0x80, 0xAE, 0xAD, 0x42, + 0xED, 0xBB, 0x74, 0xF4, 0x09, 0x3F, 0x60, 0x3E, 0x54, 0xF8, 0xA1, 0x12, 0xA4, 0xE2, 0xE1, 0x14, + 0xD7, 0x2E, 0x78, 0x9F, 0xB2, 0x33, 0x80, 0x08, 0xFA, 0x76, 0xAB, 0x1C, 0xEE, 0x8E, 0x1F, 0x04, + 0xD2, 0x01, 0xAF, 0x9A, 0x0E, 0xF1, 0xC5, 0x1F, 0x26, 0x0F, 0x11, 0xF4, 0x23, 0xD6, 0x1F, 0xB5, + 0x79, 0xF7, 0x5D, 0x54, 0xC6, 0x85, 0xE0, 0xDE, 0x08, 0x5A, 0x62, 0x4B, 0x7B, 0x04, 0xB6, 0x1A, + 0x3A, 0x65, 0xEB, 0xC2, 0xD2, 0x1E, 0xAE, 0x98, 0x30, 0x0E, 0xB7, 0x8A, 0x7A, 0xE2, 0x5A, 0x89, + 0x9C, 0x9D, 0x57, 0x4D, 0xB0, 0x68, 0x97, 0xB5, 0x73, 0x42, 0x63, 0xA1, 0x38, 0xF7, 0xBE, 0x50, + 0xF3, 0xFF, 0x29, 0xE9, 0x5A, 0x0B, 0x88, 0x94, 0x19, 0x39, 0xD2, 0xEE, 0xEF, 0x82, 0xE0, 0x83, + 0xCA, 0xFB, 0x39, 0xD9, 0xFF, 0x2B, 0x1F, 0xC9, 0x24, 0x3F, 0xAB, 0xAE, 0xA7, 0x59, 0x92, 0x58, + 0x78, 0xB3, 0xB1, 0x52, 0x28, 0xF1, 0x50, 0x4A, 0x49, 0x53, 0x95, 0xDF, 0x0F, 0x2A, 0xF4, 0xAF, + 0x00, 0x89, 0x6D, 0xA7, 0xEA, 0xA8, 0x97, 0x98, 0x05, 0x35, 0x01, 0xAF, 0xB4, 0x33, 0xF6, 0xCF, + 0xC7, 0x7F, 0x18, 0xC3, 0x27, 0x3F, 0xC0, 0x36, 0x15, 0xE2, 0x29, 0x31, 0x99, 0x12, 0x44, 0x06 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 193; + const uint increment = 319; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + kidx += (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 35780. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_35780.cs +// + +namespace KeyCMF_035780 +{ + static const BYTE Keytable[] = + { + 0x80, 0x8A, 0x26, 0xFC, 0x2E, 0xCC, 0x67, 0xEC, 0x9D, 0xEC, 0x33, 0xEC, 0xCA, 0xA8, 0x86, 0x38, + 0x54, 0x3F, 0x9E, 0xD3, 0x5A, 0xC4, 0xDC, 0x67, 0xA5, 0xE0, 0xB5, 0x06, 0x8D, 0xD7, 0xED, 0x5F, + 0x4C, 0xE9, 0xF3, 0x28, 0x05, 0x19, 0x2E, 0xAF, 0x55, 0x15, 0x85, 0x34, 0x82, 0x82, 0xEA, 0xC3, + 0xD6, 0x34, 0xC0, 0x74, 0xD2, 0xDE, 0x40, 0x8A, 0x56, 0x04, 0x7A, 0x50, 0x7F, 0x65, 0x68, 0xF2, + 0x00, 0x0C, 0x6F, 0xEB, 0x11, 0x20, 0xE8, 0xDE, 0x03, 0x9E, 0xF4, 0x54, 0x09, 0xF5, 0xC1, 0x1A, + 0x4A, 0x8C, 0x90, 0xD6, 0x2B, 0x39, 0xD6, 0x4A, 0x8B, 0x0A, 0x77, 0x7C, 0x40, 0x6C, 0xED, 0xD1, + 0x19, 0xE0, 0x40, 0x48, 0x40, 0x6B, 0xF9, 0x25, 0x48, 0xD5, 0xCC, 0x99, 0x21, 0x95, 0x90, 0x9B, + 0x81, 0xD6, 0xD9, 0x4D, 0xB4, 0xF2, 0xAD, 0x65, 0xE9, 0x21, 0x81, 0x33, 0x7D, 0x99, 0x3F, 0x96, + 0xEE, 0x66, 0x15, 0xBB, 0x6E, 0x2D, 0xE8, 0xE7, 0x68, 0x7A, 0xA2, 0x47, 0x8B, 0x65, 0xC4, 0x38, + 0xC1, 0xDE, 0x17, 0x75, 0x3F, 0x9A, 0x4F, 0x4F, 0x4C, 0x26, 0xDD, 0x45, 0x26, 0x7D, 0x46, 0x9D, + 0x92, 0x54, 0xDE, 0x22, 0x39, 0xDA, 0x7A, 0x50, 0x46, 0x78, 0x80, 0x4A, 0x12, 0x2E, 0x2C, 0x4D, + 0x5F, 0x50, 0x8A, 0xB3, 0x2D, 0x7D, 0x74, 0x55, 0x8C, 0xF7, 0x69, 0xC0, 0x6C, 0x3E, 0x97, 0x38, + 0xED, 0x20, 0x42, 0x2C, 0xA3, 0x00, 0xFF, 0xB7, 0x33, 0x0F, 0xF7, 0xB2, 0x84, 0x74, 0x7C, 0x31, + 0xC3, 0x0B, 0x61, 0xCF, 0x68, 0x85, 0x8A, 0x59, 0x27, 0x1A, 0x6D, 0x5A, 0x21, 0xB5, 0x1D, 0x4B, + 0x74, 0xD9, 0x5D, 0x86, 0x24, 0x03, 0x03, 0x61, 0x3E, 0x26, 0x06, 0x4C, 0xEA, 0xC8, 0xB1, 0x95, + 0x03, 0xEE, 0xA7, 0x63, 0x87, 0x76, 0x6C, 0x87, 0xAF, 0xDC, 0xFB, 0x8C, 0x1A, 0xFC, 0x9A, 0xF0, + 0xFF, 0x20, 0x47, 0x0B, 0xEC, 0xE1, 0x53, 0x81, 0x4B, 0xCD, 0xCE, 0x3C, 0x80, 0xC3, 0x1F, 0x57, + 0xFC, 0xDB, 0x63, 0x9D, 0x5E, 0x53, 0x3F, 0xAC, 0x45, 0xA7, 0xB0, 0x13, 0xE2, 0x4D, 0x8B, 0x0F, + 0xB1, 0xC3, 0x67, 0x3F, 0x80, 0xD0, 0xFF, 0xE6, 0x7A, 0x13, 0xEE, 0x87, 0x74, 0xC3, 0x31, 0xCF, + 0x85, 0xF1, 0x46, 0x52, 0x3D, 0x5B, 0x1E, 0xB6, 0x7C, 0xBB, 0x57, 0x58, 0x23, 0x01, 0x9D, 0xC1, + 0x39, 0xD0, 0xC5, 0xD7, 0x02, 0x2E, 0x53, 0xBD, 0xAB, 0x22, 0x75, 0x78, 0x80, 0xAE, 0xAD, 0x42, + 0xED, 0xBB, 0x74, 0xF4, 0x09, 0x3F, 0x60, 0x3E, 0x54, 0xF8, 0xA1, 0x12, 0xA4, 0xE2, 0xE1, 0x14, + 0xD7, 0x2E, 0x78, 0x9F, 0xB2, 0x33, 0x80, 0x08, 0xFA, 0x76, 0xAB, 0x1C, 0xEE, 0x8E, 0x1F, 0x04, + 0xD2, 0x01, 0xAF, 0x9A, 0x0E, 0xF1, 0xC5, 0x1F, 0x26, 0x0F, 0x11, 0xF4, 0x23, 0xD6, 0x1F, 0xB5, + 0x79, 0xF7, 0x5D, 0x54, 0xC6, 0x85, 0xE0, 0xDE, 0x08, 0x5A, 0x62, 0x4B, 0x7B, 0x04, 0xB6, 0x1A, + 0x3A, 0x65, 0xEB, 0xC2, 0xD2, 0x1E, 0xAE, 0x98, 0x30, 0x0E, 0xB7, 0x8A, 0x7A, 0xE2, 0x5A, 0x89, + 0x9C, 0x9D, 0x57, 0x4D, 0xB0, 0x68, 0x97, 0xB5, 0x73, 0x42, 0x63, 0xA1, 0x38, 0xF7, 0xBE, 0x50, + 0xF3, 0xFF, 0x29, 0xE9, 0x5A, 0x0B, 0x88, 0x94, 0x19, 0x39, 0xD2, 0xEE, 0xEF, 0x82, 0xE0, 0x83, + 0xCA, 0xFB, 0x39, 0xD9, 0xFF, 0x2B, 0x1F, 0xC9, 0x24, 0x3F, 0xAB, 0xAE, 0xA7, 0x59, 0x92, 0x58, + 0x78, 0xB3, 0xB1, 0x52, 0x28, 0xF1, 0x50, 0x4A, 0x49, 0x53, 0x95, 0xDF, 0x0F, 0x2A, 0xF4, 0xAF, + 0x00, 0x89, 0x6D, 0xA7, 0xEA, 0xA8, 0x97, 0x98, 0x05, 0x35, 0x01, 0xAF, 0xB4, 0x33, 0xF6, 0xCF, + 0xC7, 0x7F, 0x18, 0xC3, 0x27, 0x3F, 0xC0, 0x36, 0x15, 0xE2, 0x29, 0x31, 0x99, 0x12, 0x44, 0x06 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 193; + const uint increment = 319; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + kidx += (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 36473. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_36473.cs +// + +namespace KeyCMF_036473 +{ + static const BYTE Keytable[] = + { + 0x9E, 0x8C, 0x4E, 0xAE, 0xE9, 0xC9, 0x80, 0x1C, 0x79, 0x27, 0xCD, 0x28, 0x69, 0xFB, 0x97, 0x73, + 0xA2, 0x96, 0x71, 0x74, 0x65, 0x3D, 0xD6, 0x80, 0x24, 0x26, 0xB9, 0x3D, 0xE6, 0x59, 0xFD, 0xE3, + 0x98, 0x15, 0x8A, 0x83, 0x06, 0x92, 0x82, 0x01, 0x87, 0x19, 0x19, 0xF9, 0x59, 0xDE, 0xFC, 0x91, + 0xDC, 0x89, 0x72, 0x29, 0xF0, 0x01, 0x75, 0x04, 0xDE, 0x57, 0xC5, 0xDE, 0x24, 0x94, 0x9C, 0xE1, + 0x85, 0xDB, 0x66, 0x36, 0xD5, 0xFA, 0x52, 0x80, 0x7F, 0xF8, 0xDA, 0x70, 0xA4, 0x1C, 0x40, 0x8C, + 0x2E, 0xDA, 0xD4, 0xE3, 0x47, 0x89, 0xE9, 0x54, 0x42, 0x06, 0x4C, 0x4E, 0xA8, 0xA4, 0x00, 0xCF, + 0xB3, 0xE3, 0x66, 0x69, 0xB7, 0x26, 0xE7, 0x66, 0xAB, 0x72, 0xFA, 0x59, 0xC2, 0xE2, 0xBE, 0xFF, + 0xC5, 0x8A, 0xCF, 0x86, 0x95, 0xDD, 0x45, 0x1E, 0x9E, 0x65, 0x38, 0xC4, 0xF2, 0xD5, 0x30, 0x3D, + 0x56, 0x3B, 0x4C, 0x1F, 0xAA, 0x8C, 0xF2, 0x79, 0x56, 0x28, 0xD2, 0x39, 0xD9, 0xA1, 0xAE, 0x2C, + 0x37, 0x89, 0x19, 0xAB, 0xC6, 0x30, 0xAA, 0x0B, 0x56, 0xED, 0xDF, 0x2E, 0x3D, 0x13, 0x01, 0x58, + 0xB5, 0x8A, 0x92, 0x37, 0x31, 0xCB, 0x6C, 0x3B, 0x99, 0x5B, 0x8D, 0x9D, 0x55, 0xFF, 0xC2, 0xA5, + 0x3A, 0x33, 0xD3, 0xF1, 0x10, 0xD3, 0xBA, 0xDE, 0x91, 0x16, 0x6A, 0xFC, 0x7B, 0x70, 0xA6, 0x32, + 0x61, 0x39, 0x8E, 0x59, 0x24, 0x01, 0xF6, 0x3A, 0x37, 0x9D, 0xEE, 0x34, 0x06, 0x7C, 0x2C, 0x08, + 0xFA, 0xA2, 0x30, 0x6A, 0x1A, 0xFF, 0x14, 0x04, 0xAA, 0xCD, 0x2E, 0x89, 0x97, 0xB9, 0x8E, 0xDA, + 0x27, 0xCF, 0xC0, 0x76, 0xA8, 0xC2, 0x8C, 0xF6, 0xF2, 0x6F, 0xB6, 0xA4, 0x1D, 0xB0, 0x8A, 0xFE, + 0xCA, 0xC5, 0xB7, 0xCA, 0x79, 0x4A, 0x57, 0x5B, 0x3D, 0x2C, 0xD8, 0x7D, 0x7B, 0xED, 0x89, 0x64, + 0xBC, 0x27, 0xEE, 0x8E, 0x1C, 0x72, 0xE0, 0x80, 0xF0, 0x38, 0xC0, 0x88, 0xB0, 0x59, 0xA5, 0xE0, + 0x0D, 0x7F, 0x0D, 0x60, 0x5C, 0x61, 0xA8, 0x05, 0x77, 0x38, 0xE0, 0xC5, 0x96, 0xB7, 0xF8, 0x7C, + 0x17, 0x2C, 0x9D, 0xFD, 0x8F, 0x7F, 0xC2, 0x29, 0x7A, 0xE7, 0x90, 0x35, 0xBA, 0xFD, 0x33, 0x6F, + 0xC3, 0xD8, 0xE6, 0x41, 0x40, 0x67, 0x4B, 0xAE, 0x88, 0x92, 0xAE, 0x6E, 0xBD, 0x75, 0x37, 0x85, + 0xA8, 0xE0, 0xD5, 0x9D, 0x10, 0xB2, 0x78, 0xBA, 0xEB, 0xBC, 0x7D, 0xBC, 0x81, 0xE7, 0xED, 0x68, + 0x39, 0x81, 0x3B, 0x4C, 0xA5, 0x51, 0x93, 0x2E, 0xAE, 0x77, 0x1D, 0x70, 0xD6, 0x37, 0x0F, 0xCC, + 0xDC, 0xAF, 0x13, 0x6B, 0xDD, 0x50, 0x32, 0xAF, 0x0C, 0x64, 0x6E, 0x18, 0xC1, 0x56, 0x95, 0x29, + 0x8A, 0x7E, 0x3D, 0xC9, 0x02, 0xD6, 0x1F, 0xF8, 0x3C, 0x51, 0xB0, 0x36, 0x81, 0xD2, 0x84, 0x55, + 0xEA, 0x02, 0xB3, 0x83, 0xF1, 0x80, 0x00, 0x43, 0x53, 0xF7, 0x08, 0x15, 0x14, 0xCF, 0xE3, 0xEA, + 0x8C, 0x94, 0x08, 0x06, 0x36, 0xA0, 0xD0, 0x72, 0x1E, 0x8D, 0xEC, 0x67, 0xB3, 0xD4, 0x2C, 0x5F, + 0x1A, 0xC1, 0x5D, 0x45, 0x25, 0x55, 0x84, 0x99, 0x26, 0x33, 0xD5, 0x48, 0xC5, 0x9D, 0x27, 0xEE, + 0x29, 0xCD, 0x80, 0xC3, 0x32, 0x67, 0xAE, 0x5F, 0x60, 0x97, 0x18, 0x74, 0x06, 0x45, 0x3A, 0x6B, + 0x82, 0xF9, 0x40, 0xBC, 0x31, 0xA7, 0x3E, 0x8B, 0xA5, 0xAC, 0xAB, 0x2B, 0x97, 0x7A, 0x57, 0x62, + 0x0D, 0xAE, 0xE0, 0x02, 0xE8, 0xFE, 0x61, 0xD0, 0xDB, 0xC5, 0x6C, 0x5E, 0x43, 0xDA, 0x6D, 0xC5, + 0x68, 0x38, 0xE0, 0x41, 0xA5, 0xF9, 0xAA, 0xD9, 0x54, 0x5D, 0xA2, 0xD8, 0xB1, 0xCF, 0x02, 0xE3, + 0xF1, 0x43, 0x6B, 0xB0, 0x6E, 0x98, 0x35, 0xAE, 0x33, 0xA4, 0x6E, 0x3E, 0x2E, 0x02, 0x5B, 0xED + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx = increment - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) ((digest[(kidx + header.m_entryCount) % SHA1_DIGESTSIZE] + 1) % 0xFF); + } + return buffer; + } +} + +// +// Key+IV provider for build 36859. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_36859.cs +// + +namespace KeyCMF_036859 +{ + static const BYTE Keytable[] = + { + 0xAB, 0x6B, 0xD4, 0xC1, 0x8E, 0xB5, 0xDE, 0xE3, 0xE7, 0xE0, 0x0C, 0x0B, 0x0E, 0xD2, 0x9D, 0x88, + 0x6F, 0xD9, 0x6E, 0x7A, 0x0A, 0x17, 0x09, 0x75, 0x35, 0x1C, 0x95, 0x65, 0xDD, 0x02, 0xE2, 0x06, + 0x49, 0xBF, 0xE6, 0xAD, 0x68, 0xB2, 0x6E, 0x53, 0x2D, 0x64, 0x68, 0x59, 0x18, 0x98, 0x6E, 0x63, + 0x28, 0x65, 0x9E, 0xAF, 0x50, 0x71, 0x97, 0x0E, 0x35, 0xEA, 0x34, 0x8D, 0x24, 0x93, 0x26, 0xE6, + 0xD5, 0x4B, 0xD9, 0xA4, 0x50, 0x44, 0x2B, 0x1E, 0x3E, 0x5F, 0x0C, 0xFE, 0xA3, 0x48, 0xE9, 0x30, + 0x5F, 0x51, 0x5E, 0x43, 0x9B, 0x12, 0x13, 0x7D, 0x8F, 0x75, 0x83, 0xFB, 0xB4, 0xE1, 0x03, 0x38, + 0xCC, 0x6B, 0xCB, 0xFC, 0x86, 0x65, 0x2B, 0x2D, 0x73, 0xEC, 0x16, 0x9B, 0xA5, 0x32, 0x6E, 0x35, + 0x6C, 0xA9, 0xE4, 0xF5, 0x96, 0x25, 0x39, 0x31, 0xEC, 0x33, 0x5F, 0x4E, 0x81, 0xFE, 0x4A, 0x25, + 0xCF, 0xA7, 0x05, 0xB7, 0x3F, 0xCC, 0x36, 0x68, 0xBD, 0x58, 0x7E, 0xA4, 0x2B, 0x1C, 0x2B, 0xDC, + 0x47, 0x34, 0xDD, 0xFE, 0xE5, 0x17, 0x3A, 0x84, 0xDE, 0xAE, 0x20, 0x43, 0xFD, 0x42, 0x7B, 0x74, + 0xE9, 0xFB, 0x7D, 0x85, 0x03, 0x28, 0x1F, 0xE6, 0xD9, 0x26, 0x07, 0xD1, 0x2F, 0x3A, 0xAF, 0x9D, + 0xEC, 0xB9, 0x42, 0x70, 0x1E, 0x35, 0x7A, 0x08, 0xE1, 0x93, 0x25, 0xB5, 0x27, 0x34, 0xED, 0x04, + 0x89, 0xA4, 0x87, 0xC6, 0xCD, 0x2A, 0x51, 0xB5, 0xCB, 0x5A, 0x70, 0x8C, 0x20, 0xF4, 0xD9, 0x90, + 0xCA, 0xC1, 0x20, 0xC5, 0xDD, 0x68, 0x18, 0x03, 0x61, 0xF1, 0xE2, 0xE0, 0x53, 0xE0, 0x82, 0xDF, + 0x31, 0x5C, 0x8A, 0x6D, 0x73, 0x67, 0xBD, 0xF0, 0xCE, 0x0D, 0x4F, 0xC2, 0xBF, 0x2A, 0x2F, 0x02, + 0xF8, 0x16, 0xEC, 0xF3, 0x68, 0x34, 0xD1, 0xD9, 0x0B, 0xA6, 0xD0, 0x42, 0xAD, 0x11, 0x0A, 0x1A, + 0x96, 0x03, 0x95, 0x46, 0xB8, 0x63, 0xCE, 0xA1, 0xBE, 0x61, 0x05, 0x13, 0x06, 0xBD, 0x97, 0x3A, + 0x3B, 0xC3, 0x6F, 0x76, 0xF2, 0xE8, 0xFC, 0x12, 0x37, 0x72, 0xCE, 0x72, 0xCC, 0xB9, 0xB3, 0x2D, + 0x87, 0x2F, 0x21, 0x1B, 0x13, 0xE9, 0xC4, 0x34, 0x80, 0xE4, 0x18, 0x1B, 0x32, 0x7F, 0x05, 0x95, + 0x50, 0x85, 0x41, 0x3F, 0x2A, 0xD3, 0xDC, 0x60, 0x72, 0x01, 0x24, 0x62, 0xE0, 0xD4, 0x3A, 0x75, + 0x35, 0xD3, 0xCE, 0xF8, 0x1E, 0x2E, 0x16, 0x99, 0x49, 0x19, 0x4B, 0xFA, 0x53, 0x75, 0x04, 0xFE, + 0x4E, 0xDD, 0x3C, 0x79, 0x79, 0xEB, 0xEF, 0x76, 0x58, 0x10, 0x17, 0x55, 0x76, 0xA9, 0x23, 0x6B, + 0x93, 0xB3, 0x67, 0xCF, 0x45, 0xDF, 0xF8, 0xBF, 0x98, 0xF6, 0xD3, 0x3E, 0x84, 0xD0, 0xF4, 0x94, + 0xC5, 0xD5, 0x22, 0x38, 0xBB, 0x61, 0xF3, 0xC4, 0x4E, 0x5F, 0x60, 0x2C, 0xC9, 0x8C, 0xD3, 0xBC, + 0x9D, 0xE8, 0xD9, 0x98, 0x8E, 0xE2, 0xE2, 0x7D, 0x90, 0x1F, 0x15, 0x60, 0x0F, 0x47, 0xB3, 0x79, + 0xF9, 0x2C, 0x75, 0xDA, 0x34, 0x7D, 0xE6, 0xE1, 0xBB, 0xD9, 0xBB, 0xB0, 0x89, 0x2E, 0x74, 0xD7, + 0xA4, 0x52, 0xEC, 0x8D, 0xFC, 0xBD, 0xA7, 0xC0, 0xB4, 0x7C, 0xA9, 0x3E, 0x68, 0x34, 0x95, 0xE2, + 0x65, 0x37, 0x0E, 0x0F, 0x32, 0x48, 0x9C, 0x4E, 0xF4, 0xD7, 0xC2, 0x04, 0xCF, 0x7B, 0x4E, 0xA9, + 0x20, 0x6C, 0xA4, 0xF0, 0xDE, 0xC4, 0x8C, 0x1F, 0xD2, 0xBA, 0x63, 0x77, 0xDD, 0x2C, 0xE2, 0xBD, + 0xC9, 0x19, 0x9F, 0x00, 0x41, 0xC5, 0xCF, 0x39, 0x93, 0x13, 0x74, 0x93, 0xE4, 0xAA, 0xEF, 0xC2, + 0xDE, 0x74, 0xE3, 0xA5, 0x5E, 0xAB, 0x44, 0x73, 0x9B, 0x46, 0xD5, 0x49, 0xE6, 0xBD, 0xB4, 0x95, + 0xF9, 0xF3, 0x64, 0x75, 0x81, 0x0F, 0x22, 0xC5, 0x8A, 0x86, 0xFE, 0xC3, 0x78, 0x4B, 0x74, 0x4B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 31; + const uint increment = 393; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37104. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37104.cs +// + +namespace KeyCMF_037104 +{ + static const BYTE Keytable[] = + { + 0x0D, 0x95, 0x08, 0x0B, 0xF3, 0x80, 0xE1, 0x2E, 0x04, 0x0B, 0xF9, 0x1A, 0x5B, 0x5E, 0xF5, 0x60, + 0xB3, 0xC6, 0x2F, 0x91, 0x8F, 0x3B, 0xED, 0x2B, 0x3D, 0xE5, 0xB2, 0x06, 0x76, 0x38, 0x7E, 0xAB, + 0xDF, 0x70, 0x95, 0x3A, 0x6D, 0xE5, 0x13, 0x18, 0x3D, 0x54, 0x2B, 0x13, 0x2C, 0x4F, 0x62, 0x1B, + 0x92, 0x5F, 0xDB, 0xC3, 0xF1, 0xA5, 0x21, 0xAC, 0x75, 0x6C, 0xE2, 0x92, 0x38, 0x3A, 0x5A, 0x8C, + 0xFE, 0x40, 0xD1, 0xAB, 0x82, 0x4D, 0xF2, 0x00, 0x5D, 0x0C, 0xD1, 0xB8, 0x76, 0x53, 0x0E, 0xAF, + 0x90, 0xD5, 0x05, 0x66, 0x93, 0xF1, 0x0D, 0x5F, 0xFA, 0x93, 0x45, 0x27, 0x5F, 0xEF, 0x47, 0x66, + 0x5F, 0x8D, 0xCA, 0x51, 0x38, 0x15, 0xC7, 0x79, 0x51, 0x80, 0x63, 0x2D, 0xDF, 0x68, 0x23, 0x1C, + 0xEC, 0x3E, 0x37, 0xDE, 0x76, 0xB2, 0x5A, 0x8C, 0x12, 0x59, 0xFD, 0x13, 0x11, 0x20, 0x9D, 0xB9, + 0x24, 0x67, 0xEF, 0x50, 0x12, 0x10, 0xCE, 0xE3, 0x17, 0x8A, 0xCB, 0x0D, 0xCF, 0xFA, 0x39, 0x79, + 0xAC, 0x70, 0xE5, 0x04, 0xCA, 0xF9, 0x28, 0x30, 0x24, 0x78, 0x2F, 0x3F, 0x29, 0x96, 0x72, 0x8C, + 0xDE, 0x1E, 0xDD, 0x10, 0x6E, 0x95, 0x9C, 0x39, 0x29, 0xF9, 0x44, 0x48, 0xFF, 0xF3, 0x0D, 0xD3, + 0x8D, 0x20, 0x7D, 0x42, 0x2D, 0x6E, 0x31, 0x9F, 0xCA, 0xA6, 0xC2, 0x33, 0xEC, 0x31, 0xB6, 0x37, + 0x4D, 0x1F, 0xA4, 0x3C, 0x1A, 0x90, 0xEE, 0xE5, 0x9C, 0xE9, 0x5B, 0xEF, 0x55, 0x2D, 0xE4, 0x9C, + 0x9E, 0x38, 0x77, 0x57, 0x0D, 0x16, 0x20, 0x46, 0x57, 0xA6, 0x04, 0x4E, 0xE5, 0xB3, 0x09, 0x07, + 0x91, 0xD9, 0xAB, 0xB0, 0x8F, 0x81, 0x18, 0xAA, 0x9E, 0xBE, 0xE4, 0xBC, 0x68, 0xDD, 0xFD, 0x85, + 0x6A, 0x1A, 0x31, 0x6C, 0x60, 0xEF, 0xE7, 0xBB, 0xE5, 0xEB, 0x57, 0x29, 0xF2, 0x38, 0x65, 0xF4, + 0x0E, 0x9C, 0xBD, 0x55, 0x10, 0xD3, 0x86, 0x04, 0xDF, 0xE0, 0x22, 0x27, 0x09, 0x41, 0xBB, 0x3B, + 0xF7, 0x46, 0xD9, 0x7A, 0xBE, 0x0D, 0xC3, 0x75, 0x77, 0xCA, 0x23, 0x90, 0xAA, 0xF2, 0x16, 0xC3, + 0x2D, 0x75, 0xC9, 0x39, 0xC0, 0x06, 0x78, 0xDD, 0x91, 0xD7, 0x1A, 0xF0, 0x97, 0xE3, 0x9E, 0x12, + 0xA5, 0xB8, 0xDE, 0xF6, 0x8E, 0x5A, 0x16, 0x01, 0xB0, 0xA9, 0x39, 0x05, 0xFB, 0x6C, 0xD5, 0x93, + 0xBC, 0x86, 0x81, 0x3E, 0x15, 0x53, 0xD4, 0x88, 0xB6, 0x5A, 0xF2, 0x68, 0xD6, 0x80, 0x11, 0xC8, + 0x71, 0xC5, 0xE5, 0xCA, 0x56, 0x83, 0xE1, 0x92, 0x86, 0x36, 0xFF, 0x40, 0x34, 0x58, 0xAD, 0xC7, + 0xBE, 0x6C, 0x20, 0x0A, 0x72, 0x64, 0xE5, 0xD7, 0xF6, 0xB7, 0x7F, 0x8F, 0xA8, 0xB4, 0xBC, 0x27, + 0xC2, 0x6B, 0x25, 0xD4, 0xF6, 0x20, 0xBC, 0xA9, 0xB3, 0x44, 0x07, 0xFB, 0xFF, 0xA3, 0xDA, 0x75, + 0x65, 0x05, 0x8E, 0x71, 0x10, 0xAD, 0xAD, 0x27, 0x87, 0xCE, 0xFE, 0xDC, 0xD8, 0xBD, 0x74, 0xBF, + 0x43, 0x99, 0x15, 0x26, 0x8E, 0xAD, 0x50, 0x43, 0x9B, 0xB8, 0x2F, 0x66, 0x4B, 0x38, 0xC4, 0x44, + 0x71, 0xBD, 0x84, 0x8A, 0xC3, 0x22, 0x0D, 0x2E, 0xEC, 0x35, 0x5F, 0x61, 0xEF, 0x63, 0x7C, 0xBD, + 0xED, 0xEF, 0x37, 0xA8, 0x31, 0xAC, 0xBC, 0xB0, 0x0C, 0xAC, 0x52, 0xA4, 0x6D, 0xE3, 0x84, 0x43, + 0x3C, 0xF6, 0x8E, 0xC0, 0x57, 0x4E, 0xC9, 0x88, 0xAC, 0x71, 0x36, 0x7C, 0x8B, 0x81, 0x46, 0xE0, + 0xC0, 0x49, 0xE5, 0x00, 0x6A, 0x86, 0xD3, 0x44, 0x10, 0x68, 0x69, 0x92, 0x48, 0xFB, 0x2A, 0x46, + 0x96, 0x41, 0x89, 0xF0, 0xCE, 0x5D, 0x0A, 0x80, 0xA5, 0x34, 0x80, 0xDB, 0x82, 0xC1, 0x92, 0x8C, + 0x0C, 0x59, 0x15, 0x6C, 0x17, 0xF0, 0x58, 0x56, 0x08, 0x53, 0xE5, 0xCE, 0x2A, 0xB8, 0x3C, 0x28 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(13 * digest[7]) & 511]; + + for (int i = 0; i != length; ++i) + { + kidx += (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37130. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37130.cs +// + +namespace KeyCMF_037130 +{ + static const BYTE Keytable[] = + { + 0x00, 0x80, 0x1F, 0xAB, 0xAC, 0xFC, 0xFA, 0x6F, 0xE6, 0x91, 0xE7, 0x1A, 0xA8, 0xAA, 0x23, 0xE3, + 0x7C, 0x67, 0x59, 0x20, 0xDF, 0x2B, 0xB0, 0x1D, 0xF2, 0x9A, 0x6E, 0x8B, 0x53, 0x31, 0x0F, 0x44, + 0x9D, 0xA7, 0xB0, 0x1B, 0xBC, 0xA5, 0xEE, 0x32, 0x2B, 0x13, 0x27, 0x87, 0x4B, 0x09, 0xEA, 0x03, + 0x46, 0x64, 0xE3, 0x96, 0x36, 0xD0, 0x02, 0x88, 0xAA, 0xB2, 0x98, 0x02, 0x42, 0xFA, 0x07, 0xEE, + 0x2C, 0xEA, 0xBE, 0x8C, 0x1F, 0x6B, 0x41, 0x11, 0xC6, 0x93, 0x69, 0xEF, 0x98, 0xD2, 0xDD, 0x1F, + 0x5C, 0x60, 0xDF, 0x09, 0x8B, 0x69, 0x57, 0x23, 0x43, 0xA0, 0xDD, 0x50, 0x56, 0x5A, 0xB9, 0x96, + 0x0F, 0x6E, 0x63, 0x11, 0x4F, 0x39, 0x4B, 0x93, 0xB6, 0x66, 0xCA, 0xCA, 0xC2, 0xD5, 0x6F, 0x82, + 0x0E, 0x71, 0xD9, 0x29, 0x61, 0x04, 0x4D, 0xDC, 0x4E, 0x28, 0x9F, 0x3F, 0xDB, 0x4A, 0xC2, 0x15, + 0x6A, 0x0F, 0xEB, 0xB9, 0xC8, 0x28, 0x86, 0x7B, 0xFD, 0xBA, 0xF6, 0x4D, 0x35, 0xDC, 0x5A, 0xC8, + 0xDC, 0x9F, 0x13, 0x20, 0x01, 0x59, 0xFE, 0x30, 0x2B, 0xDD, 0x77, 0x3D, 0xE4, 0xC9, 0x91, 0xD6, + 0xDB, 0x04, 0x94, 0x1F, 0x02, 0x0D, 0x14, 0x62, 0x8A, 0xC0, 0x18, 0xC4, 0xF7, 0x78, 0xC9, 0x32, + 0x5F, 0xB9, 0x7A, 0x8D, 0xB7, 0x65, 0x93, 0xC7, 0x70, 0xA0, 0x53, 0xCF, 0x51, 0x83, 0xC9, 0x79, + 0xB1, 0x49, 0xC3, 0x47, 0xDF, 0xBA, 0xE5, 0xB6, 0xAF, 0x33, 0x89, 0xA5, 0xD6, 0x78, 0x48, 0xA6, + 0x59, 0xD7, 0x0C, 0x40, 0xF8, 0x35, 0x58, 0x0E, 0x6C, 0xD1, 0xFB, 0x4C, 0xB4, 0xBB, 0x98, 0xB8, + 0x07, 0x5E, 0x6F, 0x69, 0xB0, 0x74, 0xA4, 0xDB, 0xC2, 0x19, 0x69, 0x54, 0x1E, 0x1C, 0xFC, 0x60, + 0xC7, 0xC0, 0x92, 0xA5, 0xA6, 0x81, 0x23, 0x37, 0xC1, 0xBC, 0x86, 0xF6, 0x32, 0x91, 0x53, 0x94, + 0xCC, 0x3F, 0x62, 0xA7, 0xB9, 0x4D, 0x58, 0x9F, 0xFD, 0x82, 0x82, 0x0B, 0x6C, 0xC7, 0x69, 0x2C, + 0x5C, 0xCB, 0x27, 0x90, 0x2F, 0xD4, 0x50, 0x07, 0x4A, 0x5D, 0xB2, 0x80, 0x68, 0x8E, 0x9D, 0x34, + 0xF6, 0xEA, 0xF6, 0x75, 0x8B, 0xF7, 0xEF, 0x24, 0xEF, 0xE7, 0x8E, 0x09, 0x9D, 0x7E, 0x93, 0x11, + 0x33, 0x97, 0xA3, 0x2D, 0xFE, 0xEB, 0xCF, 0x0B, 0xEC, 0xF3, 0x3F, 0xFB, 0x5C, 0xD9, 0xA7, 0xB1, + 0xA6, 0xC8, 0x12, 0xAA, 0xD9, 0x9E, 0x04, 0xDE, 0xF3, 0x51, 0x12, 0xDD, 0x52, 0x25, 0xEB, 0x92, + 0x28, 0x3C, 0xE6, 0x57, 0x20, 0x3A, 0x4D, 0xF9, 0xB2, 0x2A, 0x92, 0xB4, 0xB3, 0x55, 0xDD, 0xCA, + 0x8A, 0xCD, 0x6A, 0xC7, 0xC8, 0x12, 0x0A, 0x8C, 0x15, 0xB4, 0x23, 0x19, 0xA5, 0x04, 0x92, 0x99, + 0xFC, 0xB7, 0xE4, 0xDE, 0x06, 0xC2, 0x93, 0x21, 0x91, 0x07, 0x42, 0xF9, 0x55, 0x9A, 0xCA, 0x7B, + 0x78, 0x86, 0x55, 0xE6, 0xB7, 0xA4, 0x52, 0xFB, 0x2D, 0x97, 0xFE, 0xE3, 0x62, 0x04, 0xF5, 0x9F, + 0x41, 0xD4, 0x79, 0xF4, 0x58, 0x01, 0x94, 0xF8, 0x04, 0x85, 0x8A, 0xA6, 0x9A, 0x4D, 0xD5, 0xAB, + 0x30, 0xED, 0x95, 0x20, 0xD6, 0x91, 0x80, 0xFC, 0xAD, 0xC9, 0x61, 0xC0, 0x91, 0xD8, 0x70, 0xF9, + 0xCF, 0x0B, 0xDA, 0x76, 0x96, 0xA3, 0x08, 0xCD, 0xBB, 0x6D, 0xBB, 0xD9, 0x58, 0x5B, 0x4A, 0x92, + 0xCB, 0x72, 0xE2, 0x8C, 0xC1, 0x7E, 0x03, 0xC3, 0xCF, 0xA3, 0x11, 0x24, 0xF5, 0xF3, 0x4A, 0x91, + 0xD1, 0xE1, 0x5C, 0x79, 0x6E, 0x99, 0xE5, 0x55, 0x88, 0x01, 0x61, 0x93, 0xDA, 0xCF, 0xC6, 0x78, + 0x5D, 0x6D, 0x8C, 0x31, 0xEC, 0xFB, 0x5F, 0xBA, 0xAB, 0x0B, 0x3D, 0xB3, 0xCA, 0xFE, 0xD9, 0x6A, + 0x6C, 0xD4, 0x8B, 0xDE, 0x0B, 0xB3, 0xD9, 0x61, 0x1F, 0x3D, 0x0F, 0x94, 0x5C, 0x93, 0xD9, 0x9C + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 130; + const uint increment = 266; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37218. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37218.cs +// + +namespace KeyCMF_037218 +{ + static const BYTE Keytable[] = + { + 0x9D, 0xCD, 0x12, 0x1D, 0x66, 0x98, 0xEE, 0x2F, 0x98, 0xE9, 0x44, 0x9A, 0x3C, 0x6B, 0x87, 0x4C, + 0xFD, 0x95, 0x23, 0x1A, 0x3D, 0xA5, 0xA0, 0xFF, 0x95, 0x65, 0x17, 0x0C, 0x13, 0xAB, 0x4C, 0xA0, + 0x63, 0x80, 0x20, 0x7D, 0xD4, 0x6B, 0xC4, 0x4D, 0xA6, 0x30, 0x31, 0x86, 0xEF, 0x58, 0x48, 0x9F, + 0x83, 0x81, 0x24, 0x83, 0x01, 0x9E, 0x54, 0x30, 0x52, 0x9C, 0x3A, 0x1C, 0x21, 0x89, 0x46, 0x98, + 0xFF, 0x78, 0x17, 0x55, 0xF9, 0xC2, 0x7B, 0x58, 0x72, 0xB1, 0x7B, 0x0C, 0x8E, 0xFB, 0x7B, 0x7E, + 0xF7, 0x1F, 0x98, 0x4C, 0x19, 0xBD, 0xAF, 0xB0, 0xEF, 0x40, 0xC6, 0x60, 0x95, 0x2D, 0x9B, 0x1A, + 0x03, 0x5B, 0x35, 0xC8, 0xC4, 0xA0, 0xEC, 0x1E, 0xAE, 0xBD, 0x6C, 0x32, 0x9B, 0x83, 0x38, 0xBB, + 0x6C, 0x60, 0x73, 0x0C, 0xAC, 0x4C, 0x8F, 0x75, 0x18, 0x50, 0xCA, 0x29, 0x04, 0x75, 0x8C, 0x58, + 0x2A, 0xB8, 0x8A, 0x30, 0x52, 0x6A, 0xD5, 0xBD, 0x2E, 0xA7, 0xCD, 0x7C, 0x43, 0x05, 0x73, 0xC2, + 0x1C, 0x8B, 0xC5, 0xBA, 0xD4, 0xCF, 0xF1, 0x53, 0xB0, 0xE4, 0xC6, 0x3B, 0x2A, 0x4B, 0x1F, 0x49, + 0x28, 0x33, 0xF3, 0xC0, 0x22, 0xE9, 0xF9, 0x4A, 0x9F, 0xC4, 0x7A, 0x95, 0xB9, 0x1F, 0x07, 0xFA, + 0x54, 0x63, 0x83, 0x1F, 0x48, 0xF3, 0x15, 0xE9, 0xD1, 0xD4, 0x91, 0x46, 0x32, 0xE7, 0x27, 0x44, + 0x72, 0xCA, 0x4C, 0x71, 0x03, 0x7F, 0x36, 0xDA, 0x1C, 0xCB, 0xBD, 0x5D, 0xF2, 0x4A, 0x24, 0x3B, + 0xB6, 0x73, 0x1C, 0x0F, 0x2A, 0x63, 0x88, 0xC9, 0xDF, 0x30, 0x9A, 0x16, 0x94, 0x49, 0x87, 0x1E, + 0xA4, 0x46, 0xD3, 0xB2, 0xF3, 0xB3, 0xE3, 0x96, 0x01, 0x81, 0x22, 0xD6, 0x54, 0xFD, 0xBB, 0x4D, + 0x35, 0x05, 0xCE, 0x2F, 0x50, 0x3A, 0x77, 0xA6, 0x06, 0xA9, 0x32, 0xBA, 0x7B, 0xAE, 0x1C, 0xD1, + 0xF9, 0xF7, 0xC9, 0xF2, 0xE9, 0x83, 0xDE, 0xC3, 0x3C, 0xFF, 0xDE, 0xDB, 0x01, 0xC4, 0x43, 0x0C, + 0x54, 0x85, 0xD5, 0xC5, 0xD4, 0x0F, 0x8B, 0x96, 0x46, 0xE7, 0x1C, 0x0C, 0x2D, 0xDF, 0xAD, 0xC6, + 0xEE, 0xA5, 0x3B, 0x06, 0xD7, 0x09, 0xBC, 0x9F, 0x81, 0xA6, 0xA6, 0x75, 0x09, 0xEF, 0xD0, 0xFD, + 0xC6, 0xFB, 0xD1, 0xCE, 0xCF, 0xD9, 0x07, 0xD5, 0x0F, 0x77, 0x7B, 0x8D, 0xF5, 0x91, 0xF0, 0x73, + 0x4E, 0x59, 0x3F, 0x65, 0xE8, 0xAC, 0x3B, 0x68, 0xE5, 0xD1, 0x06, 0x4F, 0xD2, 0x60, 0x91, 0x5F, + 0x95, 0x89, 0xD8, 0x1B, 0x1C, 0x28, 0x7D, 0x58, 0xE3, 0x4A, 0xD7, 0x39, 0x98, 0xB0, 0x27, 0x79, + 0xF1, 0xF0, 0x98, 0x33, 0x47, 0x49, 0x1D, 0xD7, 0xC9, 0xC5, 0x4A, 0x03, 0xC4, 0x2C, 0x25, 0x81, + 0x65, 0x31, 0x74, 0x75, 0x9D, 0x5C, 0x3F, 0xDF, 0x70, 0xD4, 0x88, 0xDD, 0xEB, 0x7F, 0x46, 0x3B, + 0xDB, 0x10, 0xDF, 0x9A, 0x6B, 0xD7, 0x3E, 0x76, 0x86, 0x45, 0xF4, 0x06, 0x29, 0x3E, 0x30, 0x16, + 0x8A, 0x38, 0x61, 0x36, 0x63, 0x2A, 0x4B, 0x98, 0x90, 0x93, 0x1C, 0x34, 0x25, 0x20, 0xF7, 0x5D, + 0x2F, 0xE3, 0xB9, 0x97, 0x15, 0x21, 0x8A, 0x14, 0x51, 0x68, 0xC4, 0xAA, 0x66, 0xBF, 0xD3, 0x7B, + 0xD8, 0x5F, 0x5A, 0x15, 0xA2, 0xFA, 0x43, 0xDA, 0x9B, 0x6C, 0xF0, 0x56, 0xE3, 0x42, 0xC6, 0x27, + 0x4A, 0x15, 0x22, 0xEF, 0xEE, 0x90, 0xA1, 0xEE, 0x4E, 0x9D, 0x60, 0xB9, 0xAF, 0x12, 0x44, 0x8E, + 0x4F, 0x77, 0x14, 0xA2, 0xAF, 0x9C, 0x11, 0x88, 0x94, 0xF2, 0xA1, 0x18, 0x03, 0x49, 0x8E, 0xC6, + 0x25, 0xBF, 0x25, 0x77, 0xCA, 0x12, 0x43, 0x36, 0x8D, 0x3A, 0x47, 0xAD, 0xD3, 0x77, 0x94, 0xAC, + 0xEE, 0x5A, 0x1D, 0x9D, 0x50, 0x8A, 0xF2, 0x92, 0x69, 0xBD, 0x96, 0x19, 0x6C, 0x28, 0xFC, 0x04 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (digest[7] + (ushort) (header.m_dataCount & 511)); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37254. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37254.cs +// + +namespace KeyCMF_037254 +{ + static const BYTE Keytable[] = + { + 0x09, 0xFA, 0x85, 0x3C, 0xBF, 0x30, 0xC4, 0xCF, 0x49, 0x6F, 0x6B, 0x6B, 0xC0, 0x3D, 0xD8, 0x4D, + 0x79, 0x41, 0x0C, 0xFB, 0xDA, 0x03, 0x9F, 0x85, 0x99, 0xAB, 0x6B, 0xC8, 0x3C, 0xC1, 0x8F, 0x48, + 0x75, 0x82, 0x33, 0x46, 0x2E, 0x1D, 0xC0, 0xE8, 0x8C, 0xEC, 0x5A, 0x9E, 0x9D, 0xE3, 0xBD, 0x5D, + 0x85, 0x59, 0x17, 0x30, 0x3E, 0x8E, 0xD4, 0x64, 0x3E, 0xE2, 0x4E, 0xE3, 0x0D, 0x66, 0xCE, 0xAA, + 0x4E, 0xF6, 0xBB, 0xED, 0xD8, 0x25, 0x3F, 0x30, 0xA7, 0xF8, 0x53, 0x1B, 0x22, 0x9B, 0x65, 0xFB, + 0x29, 0x33, 0x0F, 0x1A, 0x00, 0x74, 0x39, 0xBE, 0xD7, 0x7A, 0x3D, 0xC8, 0x25, 0x21, 0x25, 0x2F, + 0xA9, 0xCE, 0x20, 0xCB, 0x4C, 0x57, 0x82, 0xEB, 0x7D, 0x72, 0xB5, 0x7F, 0x28, 0x49, 0xFC, 0x82, + 0xAD, 0xC3, 0x75, 0xAF, 0xBB, 0x68, 0x9E, 0x57, 0x90, 0x77, 0x68, 0x43, 0xBF, 0x9E, 0x7C, 0xE6, + 0x73, 0x38, 0xE9, 0xF5, 0x92, 0x55, 0x9D, 0x8F, 0x32, 0xF2, 0xAA, 0xE3, 0x83, 0xDD, 0x6B, 0xCA, + 0x6A, 0xDC, 0xA1, 0x5D, 0x1C, 0x14, 0x73, 0xCE, 0x7B, 0xB5, 0x1C, 0x4C, 0xB9, 0xEE, 0x12, 0xC4, + 0x0F, 0x54, 0x11, 0x1A, 0x2F, 0x48, 0x06, 0xA6, 0x82, 0x50, 0xF7, 0xA3, 0xA3, 0x41, 0x99, 0xBE, + 0x9E, 0x83, 0x50, 0xC1, 0x20, 0xCC, 0x98, 0xA2, 0xF2, 0x68, 0x9A, 0x48, 0x78, 0x02, 0xF4, 0x2C, + 0x69, 0x16, 0x38, 0x82, 0x89, 0x67, 0x19, 0x70, 0x7F, 0x8B, 0x05, 0x30, 0x09, 0x32, 0x52, 0xB9, + 0xF9, 0x47, 0x54, 0xDB, 0xA4, 0x11, 0x12, 0xA8, 0x15, 0x87, 0xD8, 0xFA, 0x61, 0x1E, 0x8C, 0x21, + 0x77, 0x2A, 0x33, 0x6E, 0x7A, 0x88, 0x33, 0x6F, 0xAD, 0x39, 0x7A, 0x00, 0xDD, 0xA6, 0xC3, 0x8A, + 0x35, 0xED, 0x9F, 0xF5, 0x48, 0x4C, 0xED, 0xB1, 0xA8, 0xCF, 0xFF, 0x65, 0x93, 0x1D, 0x31, 0xB0, + 0xCF, 0xCD, 0x6E, 0xDE, 0x83, 0x90, 0x78, 0x5A, 0x2F, 0x6D, 0xA0, 0x19, 0x95, 0x1F, 0x10, 0x3B, + 0xDF, 0x43, 0x7C, 0x95, 0x5A, 0x23, 0x14, 0x6E, 0x8B, 0x5F, 0xCA, 0xBA, 0xAC, 0xFD, 0x54, 0x8A, + 0xAC, 0x4E, 0x6D, 0x32, 0xB3, 0x76, 0x9E, 0xDA, 0xAC, 0xB5, 0x65, 0xB3, 0x68, 0x35, 0xD9, 0x13, + 0x69, 0x66, 0x4A, 0x40, 0x9C, 0xC0, 0x11, 0x46, 0xDE, 0x5D, 0x9F, 0x10, 0x80, 0xB3, 0xCB, 0xE3, + 0xE9, 0x41, 0xBD, 0xE8, 0xF4, 0x41, 0xFA, 0x7D, 0x73, 0xAE, 0x40, 0xE1, 0x62, 0x3F, 0x9E, 0xDB, + 0xDC, 0x1F, 0x45, 0x37, 0x51, 0x15, 0x1B, 0xF6, 0x07, 0x64, 0x3A, 0x45, 0x6B, 0x46, 0x0E, 0xFA, + 0x76, 0xAC, 0x9E, 0x72, 0x7A, 0x79, 0xF0, 0xF7, 0xD1, 0x76, 0xB5, 0x94, 0x82, 0xFD, 0xBB, 0x13, + 0xF0, 0xDA, 0x22, 0xCA, 0xB7, 0xC1, 0x69, 0x22, 0xC4, 0xA5, 0x57, 0x63, 0xCE, 0xDF, 0x6E, 0xBB, + 0x56, 0x68, 0xC2, 0x21, 0x0C, 0x90, 0xCB, 0xC9, 0xF7, 0xF5, 0x22, 0x8F, 0xDF, 0x73, 0x9C, 0x85, + 0x56, 0xE8, 0x7A, 0x63, 0x75, 0xF1, 0xD0, 0x4E, 0xB8, 0x02, 0x42, 0x52, 0xC1, 0xED, 0xE8, 0xA3, + 0x02, 0xEA, 0x12, 0x2D, 0x26, 0xC1, 0x84, 0xC9, 0x51, 0xB0, 0x56, 0x59, 0xF8, 0x15, 0x44, 0x39, + 0x38, 0x5C, 0xB7, 0x18, 0x82, 0x98, 0xC7, 0x9B, 0xAB, 0xF6, 0x1F, 0x3F, 0x34, 0x53, 0xC6, 0x36, + 0x83, 0x1D, 0x23, 0x76, 0xC6, 0x31, 0x6B, 0x84, 0x76, 0x4E, 0xFA, 0x4C, 0x32, 0xEA, 0x8A, 0xB1, + 0xB4, 0x2D, 0x20, 0xDB, 0x38, 0x4D, 0xE5, 0xBD, 0x8D, 0x89, 0xE6, 0xC3, 0x94, 0xF7, 0x33, 0x0F, + 0x6A, 0x75, 0xF8, 0x3A, 0x06, 0xF7, 0x05, 0xD1, 0xA3, 0xEE, 0x53, 0x92, 0xAD, 0xD4, 0x7E, 0xC4, + 0x6C, 0x7E, 0x42, 0x87, 0x8B, 0x46, 0x35, 0x4C, 0x0B, 0x71, 0xD3, 0x2D, 0xE0, 0x48, 0x51, 0x59 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + const uint increment = 3; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) ((digest[(kidx + header.m_entryCount) % SHA1_DIGESTSIZE] + 1) % 0xFF); + } + return buffer; + } +} + +// +// Key+IV provider for build 37275. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37275.cs +// + +namespace KeyCMF_037275 +{ + static const BYTE Keytable[] = + { + 0x1D, 0x3F, 0xF3, 0xB0, 0x14, 0x02, 0x6B, 0x8A, 0xBB, 0xB9, 0x15, 0x4A, 0xE3, 0xCE, 0x38, 0x01, + 0xA8, 0xDB, 0xF0, 0x36, 0x22, 0xE2, 0xDA, 0xCB, 0x02, 0xAE, 0xDC, 0x89, 0x30, 0x51, 0xAF, 0xAE, + 0xBC, 0x2E, 0x12, 0x8B, 0x4D, 0xED, 0xC3, 0xAC, 0x97, 0xDC, 0xA9, 0x55, 0x63, 0x76, 0x29, 0x20, + 0x68, 0x8A, 0x67, 0x02, 0x75, 0x09, 0x3A, 0x55, 0xCA, 0x14, 0x94, 0xC7, 0xFE, 0x4C, 0x29, 0xD0, + 0x14, 0xAF, 0x60, 0x78, 0x5B, 0x48, 0xB0, 0xA1, 0xE0, 0xFA, 0xD3, 0xE7, 0x9A, 0xE1, 0x24, 0x12, + 0x03, 0xE5, 0x02, 0xDF, 0x0A, 0x33, 0x35, 0x4A, 0x46, 0xA3, 0x99, 0xEC, 0x53, 0x26, 0x5B, 0x55, + 0xD2, 0x94, 0x16, 0x3E, 0xEF, 0xFE, 0x8A, 0x46, 0x69, 0x38, 0x96, 0x4D, 0x59, 0x14, 0xAB, 0xFB, + 0xCB, 0x00, 0x2B, 0xCC, 0xFF, 0x57, 0x7A, 0x1F, 0xD1, 0x10, 0x77, 0xA4, 0xD5, 0xE6, 0x83, 0xC8, + 0x05, 0xD9, 0x0C, 0x24, 0x92, 0xB8, 0xC5, 0x19, 0x4D, 0x06, 0x91, 0x1E, 0x84, 0x62, 0xA1, 0x6F, + 0xEE, 0xCA, 0x0B, 0x56, 0x31, 0x88, 0x1F, 0x2B, 0x1E, 0xC3, 0x3A, 0xE8, 0xD4, 0x01, 0xA1, 0x9A, + 0xFF, 0xFE, 0x1E, 0xBC, 0x9B, 0xC9, 0x9B, 0xC5, 0x6E, 0xE3, 0xFE, 0x99, 0xF3, 0xAE, 0x1D, 0x78, + 0xA0, 0x18, 0x94, 0x25, 0xF3, 0x74, 0x5D, 0x08, 0xA7, 0x94, 0x9F, 0x62, 0xA7, 0xCF, 0xEF, 0x0D, + 0xD5, 0x06, 0x7E, 0xF1, 0xCE, 0x79, 0x64, 0x29, 0xEC, 0x23, 0x54, 0x3D, 0x74, 0xFF, 0x98, 0x2E, + 0xCF, 0x64, 0xC0, 0x44, 0x45, 0x82, 0x6A, 0x9F, 0x58, 0x9E, 0x04, 0xD3, 0xE5, 0x55, 0x86, 0xF1, + 0xCD, 0x2D, 0x1D, 0x4C, 0x2F, 0x0C, 0x38, 0xDB, 0x05, 0x49, 0x2C, 0x5D, 0xF8, 0x95, 0xE2, 0x37, + 0xBD, 0xC1, 0x11, 0x01, 0x53, 0x23, 0x8C, 0x82, 0xC3, 0x0D, 0x25, 0x78, 0x0E, 0x5D, 0xAB, 0x66, + 0x7D, 0xA2, 0x49, 0x17, 0xC3, 0xB2, 0x3A, 0xDD, 0xA4, 0xAC, 0x42, 0xBC, 0xB0, 0x54, 0xAA, 0xD5, + 0x32, 0x19, 0xDD, 0x59, 0xA3, 0x3F, 0x82, 0x7F, 0x74, 0x04, 0x82, 0x6D, 0xDA, 0xF3, 0x80, 0x41, + 0xC5, 0x14, 0x4F, 0x89, 0x2E, 0x1A, 0x6C, 0xC4, 0x49, 0x89, 0xAA, 0xDF, 0x28, 0x88, 0x03, 0x71, + 0x9B, 0xA3, 0x7E, 0x07, 0x03, 0x64, 0x1D, 0x98, 0x73, 0x39, 0x9D, 0x65, 0xEB, 0x01, 0x98, 0x63, + 0xBF, 0xD8, 0xDE, 0x0B, 0x37, 0x26, 0x00, 0x42, 0x5A, 0x45, 0x72, 0x77, 0x4F, 0x0D, 0x73, 0x8C, + 0xD0, 0x98, 0x04, 0x54, 0xE2, 0x5E, 0x9D, 0xF0, 0xB3, 0xCD, 0x69, 0x59, 0x5C, 0x45, 0x9C, 0x4A, + 0xE5, 0x57, 0x93, 0x8F, 0x0A, 0xA1, 0x4B, 0xD1, 0x19, 0x0D, 0x9B, 0x20, 0xBE, 0xCC, 0xAF, 0x98, + 0x57, 0x6D, 0xA0, 0x78, 0xBD, 0xD8, 0x37, 0x7F, 0x29, 0x06, 0x3D, 0x61, 0x32, 0x6B, 0xB6, 0x03, + 0x17, 0x10, 0x62, 0xAA, 0x9C, 0x56, 0x05, 0x9C, 0x2B, 0x63, 0xB2, 0xC0, 0xEE, 0x81, 0x72, 0x4B, + 0xB6, 0x37, 0x51, 0x06, 0xB7, 0x5F, 0x10, 0x7E, 0x79, 0xF8, 0xDC, 0x5D, 0x65, 0xDD, 0xF9, 0xB9, + 0xED, 0x35, 0xB0, 0x8A, 0xFE, 0x40, 0xEE, 0x6B, 0x0A, 0x9D, 0xF0, 0x1B, 0x4B, 0x68, 0xB4, 0x83, + 0xF5, 0xEC, 0xBE, 0x52, 0x3F, 0x93, 0xC0, 0x16, 0x0D, 0x0C, 0x9C, 0x56, 0xFC, 0x0E, 0x79, 0x72, + 0x32, 0xD7, 0xD6, 0x9B, 0x71, 0x26, 0x63, 0x7C, 0xE9, 0x71, 0x44, 0xA7, 0x36, 0xF6, 0xFF, 0x74, + 0xD6, 0x8C, 0xCF, 0xCB, 0xB9, 0xE7, 0x8A, 0x21, 0x03, 0x4D, 0x4F, 0xF9, 0x73, 0x1D, 0x1C, 0x9D, + 0xDC, 0xA8, 0x88, 0x1B, 0x9B, 0x18, 0x8D, 0xB3, 0x52, 0x8E, 0x7C, 0x6B, 0x65, 0xF3, 0xBC, 0xB2, + 0xBC, 0x16, 0x56, 0x12, 0x7B, 0x31, 0x5A, 0x99, 0x6B, 0xEA, 0x15, 0xD1, 0x4B, 0xAD, 0x9E, 0x0F + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + const uint increment = 3; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = kidx % 13; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx + 0x14666D63) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37415. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37415.cs +// + +namespace KeyCMF_037415 +{ + static const BYTE Keytable[] = + { + 0x23, 0x6E, 0x8F, 0x25, 0x0E, 0xE0, 0x5A, 0xC5, 0x0A, 0xEF, 0xAB, 0xCE, 0x4B, 0x56, 0x9F, 0x7A, + 0xA1, 0x5A, 0x96, 0xF5, 0x76, 0x4D, 0x15, 0x71, 0x59, 0x51, 0x15, 0x6D, 0x28, 0x22, 0x66, 0xC6, + 0x9A, 0xDA, 0xC1, 0xEA, 0x09, 0xFF, 0x81, 0x9F, 0xFB, 0x55, 0xC5, 0x5C, 0x7B, 0xB6, 0xBF, 0x72, + 0xA4, 0x31, 0x5F, 0x1D, 0x5A, 0x33, 0xD6, 0xE7, 0x62, 0x4B, 0xC1, 0xF0, 0xD7, 0x25, 0x73, 0x60, + 0xED, 0xFE, 0x4A, 0xDE, 0x82, 0xD7, 0xF1, 0xB5, 0xED, 0x9E, 0x21, 0x7A, 0xBA, 0x48, 0x7B, 0x62, + 0x4C, 0x0E, 0x85, 0x7B, 0x34, 0x6E, 0x45, 0x6A, 0x80, 0xE0, 0xB3, 0xD4, 0x16, 0x8D, 0x00, 0x01, + 0xEA, 0xED, 0xD1, 0x5F, 0x42, 0xDF, 0x37, 0xA9, 0x7B, 0xDC, 0xC8, 0x10, 0x1E, 0xC3, 0x4D, 0x35, + 0xED, 0x9B, 0x6D, 0x58, 0xCB, 0x99, 0x81, 0xCA, 0x1C, 0x9E, 0xCE, 0x01, 0x40, 0x11, 0x5B, 0x38, + 0x41, 0xED, 0x78, 0x63, 0xE4, 0xD7, 0x8E, 0x2D, 0x70, 0xEF, 0xD3, 0x4B, 0xF9, 0x51, 0x93, 0x7C, + 0x91, 0x8D, 0x4F, 0x93, 0xB3, 0x6A, 0xFE, 0x86, 0x09, 0xE9, 0x97, 0x53, 0xF5, 0xE8, 0xFB, 0xB1, + 0x64, 0x50, 0x66, 0x2D, 0x96, 0xF9, 0x3B, 0xFB, 0x11, 0xFC, 0xF3, 0x66, 0xCE, 0x40, 0xA0, 0x4C, + 0x59, 0x34, 0xC3, 0x5C, 0x06, 0x90, 0xD7, 0x74, 0x48, 0xF2, 0x97, 0x35, 0xB4, 0xC1, 0xAE, 0xEA, + 0xF8, 0x8D, 0xCC, 0x1F, 0x25, 0xD0, 0x7D, 0x0B, 0x8D, 0x6E, 0x18, 0x73, 0x81, 0x2F, 0x9A, 0xA3, + 0x31, 0x3E, 0x6B, 0x2F, 0x5D, 0xEF, 0x06, 0x40, 0x28, 0x49, 0x85, 0xAD, 0x5F, 0x71, 0xB6, 0xF2, + 0x02, 0x45, 0x28, 0x8F, 0x56, 0x88, 0xBA, 0x5E, 0x6B, 0x07, 0xE8, 0xDE, 0x8A, 0x3A, 0x5D, 0x0A, + 0x50, 0xD3, 0x89, 0xE4, 0xB7, 0xD8, 0x65, 0x91, 0x2D, 0x47, 0x65, 0x1D, 0xD8, 0x04, 0xB2, 0x53, + 0xB3, 0x57, 0x1F, 0x96, 0xE6, 0xA3, 0xEC, 0x8A, 0xC1, 0x43, 0x3D, 0xA8, 0x5A, 0x7F, 0xE5, 0x28, + 0x75, 0x5D, 0x87, 0x4D, 0x0D, 0x6F, 0xA2, 0x53, 0xE2, 0x99, 0x0D, 0x9C, 0x26, 0x2F, 0x9D, 0x06, + 0x0B, 0x62, 0x62, 0xF5, 0xA8, 0x9C, 0x6F, 0xE5, 0x20, 0x8D, 0x28, 0x8D, 0x53, 0x86, 0xE7, 0x53, + 0xDC, 0xDC, 0x63, 0xF1, 0x44, 0x93, 0x9C, 0x67, 0x65, 0x1E, 0x2A, 0x35, 0xE6, 0xC7, 0x9E, 0x0D, + 0xEF, 0x29, 0x30, 0x3F, 0x07, 0x69, 0xC8, 0xE4, 0x3D, 0xA7, 0x65, 0xA4, 0x25, 0x94, 0xCD, 0x82, + 0x14, 0xCB, 0x69, 0x4C, 0xCD, 0x8B, 0xE3, 0xA5, 0x84, 0x47, 0xF1, 0xB2, 0x42, 0x24, 0x6E, 0xAC, + 0xAF, 0xE5, 0xF9, 0xDC, 0x43, 0x5F, 0x89, 0xAB, 0xA4, 0x65, 0x93, 0x2A, 0xF5, 0xC6, 0xBA, 0xCE, + 0x3E, 0xF3, 0xEA, 0xF2, 0x17, 0xAA, 0x7D, 0x5C, 0x3B, 0x1B, 0xFC, 0x85, 0xD0, 0xE3, 0xBF, 0x55, + 0x2C, 0xC2, 0xE7, 0x54, 0xD6, 0x13, 0x7D, 0xDD, 0xB5, 0xE5, 0x61, 0x65, 0xA1, 0x1F, 0x50, 0x98, + 0xFB, 0x11, 0xDC, 0x94, 0x26, 0x83, 0x9B, 0x02, 0xE2, 0x73, 0xF7, 0xC1, 0x34, 0x9C, 0x41, 0x77, + 0x28, 0x81, 0xB4, 0x8B, 0x98, 0xFA, 0x45, 0x0E, 0x2F, 0x19, 0x6E, 0xEA, 0xDA, 0x20, 0xE0, 0x5C, + 0x89, 0x13, 0x18, 0xE5, 0xCF, 0xC8, 0x94, 0xB2, 0x48, 0xCC, 0x16, 0xB7, 0xB6, 0x00, 0x43, 0x6F, + 0x61, 0x52, 0xD9, 0x92, 0x22, 0xC7, 0xC5, 0xA1, 0x0A, 0x2F, 0x33, 0x01, 0xCC, 0xA3, 0xDE, 0x0B, + 0x29, 0x6A, 0xD4, 0x4C, 0x7B, 0x06, 0xDB, 0x4F, 0x2D, 0x26, 0x53, 0xD7, 0xA9, 0xED, 0x58, 0xE9, + 0x54, 0xF4, 0x01, 0x32, 0x44, 0xC1, 0xB8, 0x76, 0xF4, 0x6A, 0xC0, 0x46, 0x44, 0x3E, 0xEA, 0x2E, + 0xA4, 0x85, 0x5F, 0xEF, 0x57, 0xD5, 0x77, 0xB6, 0x4D, 0x99, 0xA2, 0x6D, 0x83, 0xB5, 0xA0, 0x2A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = 3; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - 73) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37456. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37456.cs +// + +namespace KeyCMF_037456 +{ + static const BYTE Keytable[] = + { + 0xB9, 0xF4, 0x31, 0xD5, 0xFC, 0xDF, 0xA6, 0x15, 0xCF, 0x19, 0xE8, 0x8C, 0x5A, 0xCA, 0x08, 0x0B, + 0xA2, 0x2C, 0x79, 0x19, 0x17, 0xD4, 0x80, 0xEA, 0x8D, 0x1C, 0x5A, 0x60, 0x22, 0x04, 0x6A, 0xFD, + 0x70, 0xAC, 0x56, 0x7F, 0xA7, 0x7F, 0x83, 0x23, 0xDF, 0xCF, 0x12, 0xA3, 0x3D, 0x5A, 0x18, 0xB1, + 0x2D, 0xDA, 0x84, 0xD2, 0x95, 0xA1, 0xCA, 0xED, 0x17, 0x4F, 0x12, 0x08, 0x77, 0xB8, 0x4C, 0x71, + 0xA3, 0x5A, 0x74, 0x84, 0x2A, 0x57, 0xC7, 0x82, 0x89, 0x95, 0x16, 0x45, 0x7D, 0x14, 0x52, 0x32, + 0x5F, 0xF3, 0x4C, 0xB2, 0x95, 0x8B, 0xCB, 0x60, 0x13, 0xE5, 0x02, 0xF4, 0x03, 0xB5, 0xC9, 0x72, + 0xF9, 0xF1, 0xC1, 0x6B, 0xD0, 0x10, 0xE6, 0x81, 0x4E, 0xAC, 0x8F, 0x88, 0x55, 0x46, 0xCF, 0xDC, + 0x1D, 0x04, 0x2E, 0x81, 0x3C, 0x07, 0x9A, 0x1A, 0x79, 0xEF, 0x46, 0x4C, 0x73, 0x76, 0x5F, 0x0B, + 0xB2, 0xA5, 0xC0, 0x3D, 0xBD, 0x1F, 0x41, 0xE2, 0xFA, 0x97, 0x53, 0x21, 0x63, 0x95, 0x74, 0xF4, + 0xDC, 0x2F, 0x7F, 0x59, 0x51, 0x0F, 0x4A, 0x94, 0x61, 0xD5, 0x7E, 0x0E, 0x47, 0x7D, 0x33, 0x23, + 0xB2, 0x12, 0x6E, 0x1F, 0x07, 0x08, 0x2C, 0x52, 0x77, 0x41, 0x6F, 0xB5, 0x79, 0xC6, 0xAF, 0x7B, + 0x81, 0x9F, 0xFF, 0x6B, 0x8A, 0x0B, 0xF8, 0x2B, 0x48, 0x67, 0xB6, 0xF3, 0x16, 0x7F, 0x1B, 0x7C, + 0x76, 0x63, 0x3F, 0x1D, 0x4E, 0x3C, 0x69, 0x81, 0x26, 0xBA, 0xC7, 0x46, 0x7A, 0xFC, 0x53, 0x4B, + 0x4F, 0x0C, 0xD8, 0xDD, 0xCC, 0x0F, 0x93, 0x0B, 0x6D, 0xD7, 0x6C, 0x69, 0xDB, 0x61, 0x5C, 0xB0, + 0x78, 0x47, 0x47, 0x38, 0xDC, 0x1F, 0xE4, 0x3F, 0x41, 0x77, 0x1D, 0x91, 0xEA, 0x85, 0x9E, 0x8A, + 0x0A, 0x86, 0x7C, 0xB8, 0x7B, 0xA1, 0xC2, 0xD8, 0x3F, 0x39, 0x58, 0xEE, 0x88, 0xF7, 0x48, 0x68, + 0xF0, 0xB9, 0xB6, 0xEF, 0x39, 0xEE, 0xDB, 0xF2, 0x78, 0x2D, 0x4C, 0xEA, 0xAD, 0xC3, 0xCC, 0x8D, + 0xA0, 0xD3, 0x44, 0xD5, 0xC4, 0xA7, 0x6F, 0xA1, 0x89, 0xD9, 0xDC, 0xFC, 0xB4, 0xD5, 0xB0, 0xDB, + 0x4C, 0xFD, 0x98, 0xF9, 0x1F, 0xC8, 0xA0, 0xC1, 0x16, 0xA7, 0x1F, 0xFB, 0x07, 0xC4, 0xDF, 0x00, + 0x1D, 0x95, 0xAC, 0xE2, 0x25, 0x83, 0xAE, 0x8F, 0x4E, 0xAF, 0xC8, 0x1C, 0xDB, 0x97, 0x32, 0xF9, + 0x25, 0xE0, 0x42, 0x4C, 0xD1, 0x69, 0x57, 0x6E, 0x67, 0xE2, 0x33, 0x57, 0xFF, 0xB2, 0x8C, 0x35, + 0x97, 0x46, 0x0A, 0xED, 0x94, 0x8F, 0x4E, 0xE0, 0x39, 0x22, 0x83, 0xDD, 0x80, 0x49, 0xAD, 0x1F, + 0xE4, 0xC1, 0x37, 0x6C, 0x78, 0x6A, 0x8F, 0x6B, 0x28, 0x7A, 0x9A, 0x9A, 0x6F, 0x56, 0xB6, 0x77, + 0x5F, 0xC6, 0x5D, 0x7B, 0x3D, 0xFF, 0xDC, 0x7C, 0xE2, 0x80, 0xF1, 0x8B, 0x9D, 0x02, 0xF3, 0x29, + 0x54, 0x53, 0x1C, 0x19, 0x19, 0xB1, 0x34, 0xE3, 0x05, 0xF2, 0xB3, 0xE4, 0x68, 0x22, 0x79, 0xF8, + 0xE9, 0x06, 0xC1, 0xC5, 0x14, 0x57, 0xB2, 0xF9, 0xA2, 0xF4, 0x65, 0xAC, 0xEA, 0xE4, 0x13, 0xF4, + 0x51, 0x50, 0x39, 0xFB, 0x9F, 0xCE, 0xD8, 0xBE, 0x59, 0x6F, 0xB6, 0x95, 0xB0, 0x9E, 0x79, 0xCE, + 0x79, 0xAE, 0x48, 0x86, 0x77, 0x25, 0x4C, 0x83, 0x6B, 0xE2, 0xF0, 0xB3, 0x02, 0x32, 0x3A, 0x7F, + 0x4B, 0x6E, 0x81, 0xDE, 0x9C, 0xA6, 0xBA, 0x85, 0xF6, 0xD9, 0x43, 0xDA, 0x20, 0x34, 0x78, 0xAD, + 0xD1, 0xDB, 0xBD, 0x6F, 0xFD, 0x91, 0xA1, 0x8A, 0x32, 0x5A, 0xBE, 0x57, 0x4D, 0x92, 0xE3, 0xFC, + 0x3D, 0x2D, 0x69, 0x62, 0xAA, 0x86, 0xD6, 0xA0, 0xBF, 0x37, 0xD9, 0x6A, 0x4A, 0x44, 0xD8, 0xA2, + 0x8F, 0xA7, 0xC9, 0x7E, 0x6D, 0x78, 0x92, 0x78, 0x0A, 0x4F, 0xBD, 0x5E, 0xC3, 0x52, 0x5A, 0x2A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 61; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (digest[7] + (ushort) (header.m_dataCount & 511)); + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37636. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37636.cs +// + +namespace KeyCMF_037636 +{ + static const BYTE Keytable[] = + { + 0x83, 0x91, 0xE7, 0xEC, 0xF8, 0x5B, 0x2E, 0x62, 0x75, 0xB4, 0x0F, 0x31, 0x36, 0x92, 0x86, 0xD9, + 0x1B, 0x3D, 0x54, 0x4A, 0xAA, 0x58, 0xF0, 0xDC, 0xCE, 0x5A, 0x48, 0x97, 0x2D, 0xDF, 0xB9, 0xD7, + 0xAA, 0xBE, 0x5E, 0xC6, 0x98, 0x58, 0xBA, 0x75, 0x1B, 0xFF, 0x9D, 0xED, 0x5E, 0x00, 0xBA, 0xFA, + 0x89, 0x7C, 0x9D, 0xCA, 0xE8, 0xC1, 0x76, 0x29, 0x0D, 0xC0, 0x22, 0xBA, 0x97, 0x28, 0x13, 0x83, + 0x31, 0xC4, 0x6F, 0xF5, 0xE8, 0x7A, 0xCC, 0xB1, 0x87, 0xAB, 0xB8, 0xC6, 0x74, 0x6A, 0x4E, 0xC6, + 0x95, 0xF5, 0x49, 0x7F, 0x1F, 0xA4, 0x98, 0x93, 0x15, 0x5D, 0x65, 0xAE, 0xCC, 0x19, 0xCE, 0xF3, + 0x08, 0xFE, 0x4B, 0x05, 0xCE, 0xEF, 0xF4, 0x5B, 0x88, 0x65, 0x5F, 0x28, 0xC5, 0x5A, 0xA2, 0x94, + 0xA2, 0x15, 0x80, 0xE5, 0x92, 0xBA, 0xE9, 0x12, 0x43, 0x06, 0xB5, 0x35, 0x08, 0x0E, 0x9C, 0x43, + 0x60, 0x36, 0x3D, 0xA0, 0xD1, 0x33, 0xA2, 0xCC, 0xB9, 0x7B, 0x98, 0xB2, 0x0A, 0xDE, 0xA8, 0xF3, + 0x12, 0xCB, 0x45, 0xEA, 0xAB, 0xE3, 0xB6, 0x62, 0x35, 0xEA, 0x5D, 0x7F, 0x1A, 0xFE, 0xCC, 0x0E, + 0x18, 0x91, 0x98, 0x67, 0xDB, 0x20, 0x45, 0xFD, 0x24, 0x10, 0xB8, 0x41, 0x60, 0x57, 0xA9, 0xF0, + 0x6E, 0x12, 0xE3, 0x95, 0x8C, 0xA7, 0xC5, 0xD7, 0x43, 0x23, 0x4A, 0x8C, 0x9D, 0xB6, 0x4C, 0x91, + 0xDE, 0xE1, 0x50, 0x58, 0x47, 0x29, 0x27, 0xAD, 0x05, 0x98, 0xE4, 0x7B, 0x39, 0x1F, 0xEC, 0xCC, + 0x77, 0x0F, 0x36, 0x91, 0x36, 0xBC, 0xB9, 0xBF, 0xA5, 0xBF, 0xCC, 0x0C, 0x4B, 0xA3, 0x19, 0x72, + 0x35, 0xDB, 0xB4, 0xF2, 0x2B, 0xBF, 0x14, 0x9B, 0x34, 0xD2, 0xC3, 0xDE, 0xA8, 0x0E, 0x73, 0x81, + 0xFD, 0xCD, 0xE5, 0xC2, 0x0B, 0x8A, 0xDE, 0x54, 0x4F, 0x3D, 0x3D, 0xEC, 0x02, 0xA2, 0x8E, 0x87, + 0x61, 0xED, 0xCF, 0x99, 0x19, 0xE6, 0x93, 0xDA, 0xBD, 0xE0, 0xAC, 0xA0, 0x21, 0xA1, 0x28, 0x32, + 0x0A, 0x61, 0x94, 0x15, 0x7E, 0xDE, 0xEB, 0x43, 0x4E, 0x7F, 0x9A, 0x57, 0xCC, 0xFF, 0xDB, 0xB9, + 0x10, 0x90, 0x12, 0x5B, 0xC0, 0xA7, 0xF3, 0x6D, 0x69, 0x47, 0xA8, 0x5E, 0x50, 0x36, 0x18, 0xD0, + 0xB0, 0x25, 0x7B, 0xF0, 0x66, 0x25, 0x3C, 0xD0, 0x28, 0xD1, 0x1C, 0xFA, 0x7E, 0x71, 0xB3, 0xF2, + 0x0B, 0xD0, 0x73, 0x80, 0x19, 0x5F, 0xA1, 0xBE, 0xFA, 0xBE, 0x0F, 0x94, 0x05, 0x81, 0xFC, 0x5C, + 0x77, 0x24, 0x4D, 0xCB, 0x3B, 0xFA, 0x54, 0x8E, 0x16, 0x4C, 0xCD, 0xA7, 0x27, 0x2C, 0x40, 0xEB, + 0xDA, 0xA9, 0x8A, 0xA0, 0x66, 0x73, 0x5A, 0x25, 0xC6, 0x25, 0xB8, 0xA9, 0x62, 0xA4, 0x7E, 0xE1, + 0x21, 0x14, 0x44, 0x2D, 0x9E, 0xF9, 0x0A, 0x71, 0x72, 0xBA, 0x89, 0x57, 0x91, 0x34, 0xC7, 0xC1, + 0x87, 0xC3, 0xA7, 0xB0, 0x57, 0xF9, 0x20, 0xCD, 0xE3, 0x55, 0xEF, 0x32, 0x96, 0x6D, 0x25, 0x35, + 0x10, 0x06, 0xD3, 0x97, 0xEA, 0x09, 0xBA, 0x47, 0xBF, 0x1F, 0x31, 0xD1, 0x39, 0xF5, 0xAD, 0x0B, + 0xA6, 0x89, 0xDE, 0x09, 0x6E, 0x37, 0x3F, 0x01, 0x0F, 0xC1, 0xB1, 0x98, 0x80, 0x44, 0xAC, 0x6F, + 0x45, 0xD6, 0xCD, 0x93, 0x70, 0xB7, 0xE7, 0xB7, 0x1E, 0xDF, 0x58, 0x1A, 0x34, 0x2D, 0xB0, 0xE3, + 0x62, 0x8C, 0x3E, 0x18, 0x7B, 0x95, 0x14, 0xF6, 0xE4, 0x71, 0xF5, 0x61, 0x3E, 0x18, 0x95, 0x2B, + 0x3B, 0xB1, 0x75, 0x23, 0x6C, 0x27, 0x6E, 0x7D, 0xF4, 0xAC, 0xE1, 0x3C, 0xC0, 0x44, 0x82, 0xF2, + 0x23, 0xA1, 0xF2, 0x7C, 0xD3, 0xB3, 0x3D, 0xDD, 0x27, 0x22, 0x73, 0xC0, 0x55, 0x7D, 0xE1, 0xFD, + 0xE4, 0x8A, 0x9C, 0x1B, 0x30, 0x2B, 0xE3, 0x87, 0xFC, 0x73, 0xB2, 0x68, 0xE5, 0xFD, 0x3A, 0x7D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(Keytable[0] * digest[7]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37646. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37646.cs +// + +namespace KeyCMF_037646 +{ + static const BYTE Keytable[] = + { + 0x4D, 0x3C, 0x16, 0x0E, 0x58, 0x69, 0xA0, 0xAF, 0xD4, 0x13, 0x38, 0x3D, 0xCC, 0xAA, 0xD1, 0x94, + 0x6D, 0x7D, 0xF9, 0x3D, 0x61, 0x13, 0xB7, 0x6A, 0x05, 0x05, 0xFC, 0xFD, 0xED, 0x9E, 0xE3, 0x2A, + 0xEC, 0x3E, 0x54, 0x73, 0x22, 0xA8, 0x7C, 0xAC, 0x8B, 0xAB, 0x2E, 0x28, 0xAC, 0x26, 0x64, 0x24, + 0x0B, 0x70, 0x40, 0xEE, 0xC5, 0x4A, 0x11, 0x52, 0xD8, 0x48, 0xB5, 0xBC, 0x99, 0x4B, 0x68, 0x18, + 0xA6, 0x7D, 0x4B, 0xF3, 0x73, 0x7C, 0x51, 0x67, 0x2F, 0xE7, 0x91, 0xFD, 0x55, 0x95, 0x3E, 0xEF, + 0x8E, 0x25, 0x94, 0x6C, 0x31, 0xD7, 0x92, 0x26, 0x7A, 0xE8, 0xF1, 0x0D, 0x45, 0xCE, 0x41, 0xEA, + 0x65, 0x85, 0xC3, 0x56, 0x1A, 0x57, 0xFC, 0x2F, 0x1B, 0xF2, 0xEA, 0x93, 0x91, 0xCB, 0x8A, 0xB3, + 0x7D, 0xF1, 0x1A, 0x97, 0x5F, 0xC1, 0x5C, 0xD6, 0x81, 0xED, 0x02, 0x3D, 0x31, 0xD2, 0x64, 0x8E, + 0x9F, 0xE3, 0x9F, 0x9A, 0x34, 0xC5, 0x88, 0xF9, 0xDE, 0x50, 0x15, 0xBF, 0xC6, 0x28, 0x14, 0xEA, + 0x9E, 0xB3, 0xD6, 0xC1, 0x56, 0x5B, 0xFC, 0x1A, 0x6A, 0x4E, 0xDA, 0x9B, 0x90, 0x13, 0xC7, 0xC8, + 0x89, 0x53, 0xBF, 0x91, 0x8D, 0x15, 0x36, 0xE3, 0xB2, 0x5B, 0xEF, 0x35, 0x59, 0x46, 0x9D, 0x66, + 0x41, 0x5D, 0x32, 0x9D, 0x35, 0x7D, 0xD0, 0x78, 0x4F, 0x7D, 0x49, 0xBF, 0x02, 0x2E, 0xE8, 0xDB, + 0x63, 0xF8, 0xA5, 0x85, 0xB0, 0x16, 0x56, 0x85, 0x37, 0xBA, 0x64, 0xE7, 0xEC, 0x92, 0x07, 0x83, + 0x34, 0x3B, 0x84, 0x04, 0x30, 0x8C, 0x8B, 0x75, 0x02, 0x0C, 0x02, 0x40, 0x8E, 0x3B, 0xDC, 0x34, + 0x0F, 0x7B, 0x04, 0x42, 0x93, 0x99, 0xD1, 0xD4, 0xC1, 0x1F, 0x2D, 0x49, 0x4D, 0x32, 0xBD, 0x14, + 0x49, 0xFA, 0xF1, 0xDE, 0xF9, 0xD3, 0xAD, 0xAF, 0x0F, 0x22, 0x20, 0xC1, 0x30, 0x9B, 0xAE, 0x97, + 0x43, 0x1A, 0x32, 0x6F, 0x45, 0xFD, 0xA7, 0x3E, 0x9B, 0xA2, 0x90, 0x96, 0x2E, 0xDE, 0x98, 0xA7, + 0xB7, 0x53, 0x32, 0x2A, 0x07, 0x5A, 0x0B, 0x9C, 0x91, 0x1E, 0x9A, 0xCB, 0xC8, 0xDE, 0x78, 0xC8, + 0xBD, 0x1C, 0xCA, 0xEC, 0x49, 0x74, 0x45, 0x94, 0xD8, 0x9E, 0x24, 0x9F, 0xC3, 0x5C, 0x84, 0xB1, + 0x0C, 0x12, 0xC3, 0x4E, 0xBD, 0x72, 0xB1, 0x1C, 0x81, 0x26, 0x16, 0x3C, 0x1A, 0xDF, 0x04, 0x87, + 0x49, 0x1B, 0x3B, 0x74, 0x66, 0x29, 0x3C, 0x51, 0xD6, 0xF4, 0x97, 0x2B, 0x9C, 0x4A, 0xDF, 0x9C, + 0xAF, 0x4E, 0x60, 0x1A, 0x49, 0x8F, 0x37, 0x4B, 0x38, 0x04, 0x1D, 0x00, 0x6E, 0x96, 0x7F, 0xC9, + 0x77, 0xA5, 0xF8, 0x89, 0x67, 0x79, 0x91, 0x17, 0xC0, 0xC7, 0xEA, 0x89, 0x8E, 0x6B, 0xAA, 0x0A, + 0x8B, 0xEF, 0x01, 0x54, 0xA9, 0x0F, 0xC8, 0x05, 0xC3, 0x76, 0xF2, 0x8B, 0x78, 0xA3, 0x7D, 0xA4, + 0xAB, 0x64, 0x4B, 0xD1, 0x2D, 0x06, 0xC8, 0x54, 0x0B, 0xA9, 0x36, 0x3C, 0x02, 0xF1, 0xA0, 0xF5, + 0xDF, 0x54, 0xA9, 0x7E, 0x1A, 0xE8, 0x84, 0x76, 0x44, 0x46, 0x80, 0xD9, 0xFF, 0xC2, 0xA4, 0x5B, + 0x03, 0xF4, 0x0B, 0x80, 0x59, 0x3F, 0xF7, 0xDF, 0xAF, 0xC8, 0xE6, 0x32, 0x81, 0x83, 0x8D, 0xB1, + 0xE8, 0xBE, 0xAD, 0x03, 0x2E, 0x23, 0x57, 0xD9, 0x90, 0x0B, 0xDB, 0xF6, 0xB8, 0xDE, 0x97, 0xA3, + 0xF0, 0xC0, 0x85, 0x31, 0xCE, 0x63, 0xAB, 0x2E, 0xFE, 0xB3, 0x23, 0x55, 0xDB, 0x71, 0x12, 0x6A, + 0xD5, 0xF1, 0x2D, 0x0B, 0x3C, 0x03, 0xD6, 0x1D, 0x68, 0x60, 0x03, 0x9F, 0x73, 0xA2, 0x9B, 0x35, + 0x00, 0xD8, 0x6D, 0x30, 0xD6, 0x77, 0x4C, 0x5F, 0xA5, 0x39, 0xB9, 0x06, 0x42, 0xA2, 0xA4, 0x24, + 0xD9, 0xE2, 0xE9, 0x6E, 0x16, 0x0B, 0xF5, 0x25, 0xCB, 0xE3, 0x83, 0x96, 0xA1, 0x6E, 0xAC, 0x4D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + const uint increment = 3; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - 73) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37664. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37664.cs +// + +namespace KeyCMF_037664 +{ + static const BYTE Keytable[] = + { + 0x92, 0x5B, 0xDD, 0x63, 0xAB, 0xD9, 0x1D, 0x84, 0x70, 0xAD, 0xF6, 0x07, 0xBF, 0xD8, 0x1A, 0x8C, + 0xAD, 0x14, 0x00, 0xD4, 0x9D, 0xE3, 0x03, 0xC6, 0x0A, 0xA6, 0xCE, 0xB4, 0xF6, 0xE6, 0x48, 0xCD, + 0x7E, 0x5C, 0x3B, 0x72, 0x9C, 0x4D, 0x76, 0xD6, 0x4E, 0x82, 0x3F, 0x52, 0xA2, 0x44, 0xC4, 0x82, + 0xAF, 0xDC, 0xFF, 0xCF, 0xC6, 0x06, 0x07, 0x51, 0xAD, 0x4B, 0x47, 0x9A, 0x8E, 0x9B, 0x6E, 0x28, + 0xCF, 0x43, 0x18, 0x00, 0xA7, 0xD9, 0xA7, 0xFB, 0x48, 0x10, 0x55, 0xF7, 0x7A, 0x9C, 0xA1, 0x8B, + 0x38, 0xCA, 0x26, 0xFD, 0x1C, 0x55, 0x79, 0x44, 0x21, 0x1B, 0xA4, 0x6A, 0x07, 0x03, 0x42, 0x9C, + 0x68, 0x31, 0x09, 0x4A, 0x79, 0xB6, 0x74, 0x19, 0xFE, 0x05, 0x9F, 0xAB, 0x0B, 0xFD, 0xB7, 0x11, + 0xA6, 0x74, 0x35, 0xD9, 0x5A, 0xE7, 0x0D, 0xE1, 0x0E, 0x4C, 0x67, 0x59, 0xA4, 0x52, 0xCC, 0x07, + 0x66, 0xED, 0x53, 0x6F, 0xD4, 0x21, 0x17, 0xBD, 0x31, 0x82, 0xDE, 0xC2, 0x48, 0x98, 0x2C, 0xF7, + 0xC2, 0x44, 0x41, 0xB0, 0x82, 0x08, 0xE2, 0xC6, 0xA9, 0x29, 0x7C, 0x7F, 0xFE, 0xF5, 0xC3, 0x20, + 0x46, 0x23, 0x84, 0x98, 0x0E, 0xB7, 0x44, 0x59, 0x05, 0x51, 0x11, 0x95, 0xA1, 0xBE, 0xB2, 0x15, + 0x49, 0x4F, 0x0C, 0xD8, 0x83, 0x92, 0x55, 0x7B, 0x76, 0x5B, 0x54, 0x14, 0xAB, 0x3F, 0xFF, 0xE2, + 0xEF, 0x9C, 0xB1, 0xD1, 0x8D, 0xDD, 0x8F, 0x69, 0x29, 0xE7, 0x25, 0x66, 0xD6, 0xBC, 0x43, 0x06, + 0xA8, 0x3E, 0x2C, 0xA6, 0x4E, 0x71, 0xE9, 0xDA, 0x90, 0xC8, 0xAD, 0x9A, 0x15, 0x18, 0x20, 0x65, + 0xF3, 0x79, 0xD0, 0x88, 0xFB, 0xA4, 0xE1, 0xC2, 0xB0, 0x34, 0x3E, 0x5F, 0xF6, 0xD0, 0xAD, 0x9C, + 0x52, 0x58, 0x00, 0xC8, 0x47, 0x08, 0xE9, 0x7A, 0xB6, 0x9F, 0xF5, 0x6C, 0xEF, 0x3B, 0x0D, 0x10, + 0x9B, 0x88, 0xFC, 0x6C, 0x51, 0x6C, 0xA0, 0xA2, 0x02, 0x6C, 0x5B, 0xCE, 0x23, 0xA1, 0x73, 0x90, + 0xDE, 0x9D, 0xD6, 0xF0, 0x1E, 0x40, 0xB0, 0x9F, 0x49, 0xBC, 0x24, 0x7F, 0x4F, 0x8D, 0x37, 0x68, + 0x77, 0x11, 0x97, 0x4C, 0x78, 0xE4, 0x3A, 0x9A, 0x01, 0x4A, 0xCC, 0xFE, 0xF6, 0x00, 0x11, 0xF4, + 0xBF, 0xAE, 0xC9, 0x16, 0x26, 0xCF, 0x91, 0xAD, 0xD3, 0x19, 0xB1, 0xA8, 0x5B, 0xE8, 0x6F, 0xB9, + 0x11, 0x34, 0x8A, 0x0B, 0xD2, 0x61, 0x39, 0xC0, 0xC6, 0x9B, 0x50, 0x8B, 0x99, 0xB3, 0xAB, 0x64, + 0x9F, 0x5C, 0x72, 0xF2, 0x4C, 0x25, 0xA4, 0x4D, 0x6F, 0xAF, 0xCF, 0x84, 0x4F, 0x63, 0x0B, 0xCB, + 0x97, 0xF8, 0x5F, 0x11, 0xE2, 0xE1, 0x92, 0x16, 0x6A, 0x1C, 0x4A, 0x4B, 0x1B, 0xC3, 0x67, 0x4E, + 0xE4, 0x62, 0xD1, 0x65, 0x50, 0xBD, 0x09, 0xA1, 0x77, 0x1B, 0xF9, 0x82, 0x03, 0x94, 0x14, 0x36, + 0x48, 0xE8, 0x01, 0x8E, 0xF9, 0x24, 0x2A, 0x77, 0x5F, 0x6F, 0x27, 0x88, 0x6F, 0x37, 0x34, 0x21, + 0x75, 0xBF, 0x60, 0xFC, 0x7C, 0xDF, 0x4A, 0xBE, 0x07, 0x1D, 0x13, 0xF4, 0xC3, 0xF7, 0x5A, 0xAB, + 0xDE, 0x41, 0x43, 0x2E, 0x53, 0xFE, 0xFA, 0x51, 0x6E, 0x28, 0x1E, 0xF7, 0x1F, 0x96, 0x90, 0xFC, + 0xAC, 0x07, 0x4F, 0xD9, 0xAE, 0xC0, 0x51, 0x9F, 0xAB, 0x79, 0x2B, 0x02, 0x52, 0x9F, 0xEE, 0x8A, + 0xEF, 0x38, 0xF7, 0xFD, 0x02, 0xBC, 0xCD, 0xA0, 0x90, 0x56, 0x06, 0x53, 0x34, 0x03, 0x4E, 0xCE, + 0x35, 0x1A, 0x68, 0xBA, 0xEF, 0x01, 0x45, 0x5B, 0x3E, 0x0D, 0xB1, 0x82, 0xE5, 0x71, 0x2C, 0xEB, + 0xD1, 0xF1, 0x60, 0x54, 0xA6, 0xC2, 0x2E, 0xE8, 0xCE, 0x45, 0x05, 0x04, 0xB2, 0x13, 0x88, 0xEA, + 0x6F, 0x0B, 0xEF, 0xCD, 0xE4, 0x70, 0x43, 0xFB, 0x6E, 0x22, 0x71, 0x60, 0xC7, 0x89, 0x0F, 0xCA + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(Keytable[0] * digest[7]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37703. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37703.cs +// + +namespace KeyCMF_037703 +{ + static const BYTE Keytable[] = + { + 0x62, 0x3A, 0x4A, 0xDE, 0xF1, 0x3A, 0x80, 0xF1, 0xFE, 0x4B, 0xBB, 0xBD, 0x4C, 0x27, 0x90, 0x9C, + 0xB4, 0x29, 0xD2, 0xC7, 0x8B, 0x11, 0xEA, 0x53, 0x85, 0xA8, 0x32, 0x38, 0x38, 0xBB, 0x56, 0xB7, + 0x52, 0xD3, 0xD6, 0xBF, 0xC0, 0x75, 0x1B, 0xA2, 0xD9, 0xEF, 0x29, 0x3C, 0x3D, 0x8A, 0xC4, 0xCC, + 0x2F, 0x6D, 0x8C, 0x34, 0xA5, 0x32, 0xDC, 0x1E, 0x12, 0xC8, 0x89, 0x8D, 0xB4, 0x03, 0xDA, 0x11, + 0x17, 0x9F, 0xDC, 0x49, 0x30, 0xEB, 0x95, 0x0E, 0x0E, 0xC0, 0x95, 0xAD, 0xF7, 0x72, 0x22, 0x02, + 0xA3, 0x31, 0x15, 0x41, 0x5D, 0x5B, 0x9A, 0x45, 0xEB, 0x4B, 0x7E, 0x78, 0x86, 0xA1, 0xD3, 0xF2, + 0x1D, 0x39, 0xC8, 0x76, 0x7C, 0x17, 0xEC, 0xC3, 0x5B, 0x38, 0x9E, 0xF7, 0xCE, 0x05, 0x63, 0x8B, + 0x6A, 0x53, 0xDE, 0xCC, 0x25, 0x63, 0xC9, 0x4C, 0x49, 0xDB, 0x60, 0x7D, 0xB6, 0x44, 0xCF, 0xE3, + 0xB2, 0x53, 0xB1, 0xBF, 0x03, 0xE6, 0x65, 0x26, 0x1E, 0x23, 0xB3, 0x23, 0x4F, 0xFE, 0x3E, 0xD9, + 0xBB, 0xE4, 0x13, 0x73, 0x56, 0x2E, 0x83, 0xB8, 0x02, 0x6B, 0x1C, 0x4E, 0x8D, 0x9C, 0x86, 0x22, + 0x1B, 0x52, 0x43, 0x0E, 0x1D, 0xC0, 0xC2, 0x7B, 0x15, 0xE5, 0x4E, 0xE8, 0x68, 0xA9, 0x92, 0xC5, + 0x86, 0x2E, 0x1F, 0x3E, 0xD2, 0xB6, 0x52, 0xCC, 0xA6, 0xB4, 0x42, 0x42, 0x21, 0xD6, 0x96, 0x74, + 0x60, 0xB8, 0xF4, 0x21, 0xD0, 0xD3, 0x07, 0xB7, 0x95, 0xD9, 0xE8, 0xF8, 0x8D, 0xBE, 0x26, 0x66, + 0x6B, 0x7E, 0xE6, 0xC0, 0x93, 0x33, 0xF7, 0x18, 0xC1, 0xF9, 0xB4, 0x5F, 0xC6, 0x77, 0xB4, 0x21, + 0x77, 0x49, 0x8C, 0x1C, 0x10, 0x3F, 0x6A, 0xC6, 0xF9, 0xAC, 0x16, 0x46, 0x1B, 0x2E, 0x39, 0x8B, + 0xB7, 0xEA, 0xCF, 0x20, 0x6C, 0x4E, 0xB0, 0x95, 0x5B, 0xF9, 0x12, 0x57, 0x3C, 0x40, 0x08, 0x55, + 0x2A, 0x35, 0xC2, 0x17, 0x2F, 0x83, 0x92, 0xCD, 0x10, 0x9F, 0x7C, 0x98, 0x23, 0x46, 0xA6, 0xF3, + 0x91, 0x44, 0x33, 0xCF, 0x9A, 0xE0, 0x04, 0x4A, 0x17, 0xC4, 0x6A, 0xA3, 0xF1, 0x45, 0x22, 0x66, + 0x0D, 0xF7, 0x4A, 0xD9, 0x0C, 0xD2, 0xE2, 0x44, 0xD0, 0xF4, 0xD2, 0x8E, 0x02, 0x59, 0xF8, 0xB6, + 0x22, 0xD7, 0x12, 0x07, 0xA2, 0x44, 0x45, 0x63, 0x44, 0x5D, 0x54, 0x0B, 0x0A, 0xD0, 0x94, 0x71, + 0x25, 0xBF, 0xA4, 0x67, 0x4F, 0xC8, 0xB5, 0xAF, 0x5F, 0xF3, 0x42, 0x97, 0x04, 0xE2, 0x74, 0xEF, + 0xEA, 0x35, 0x7F, 0x75, 0x05, 0xF9, 0x06, 0x54, 0x23, 0xEF, 0x8D, 0x1C, 0x84, 0xF0, 0x0F, 0x67, + 0x1E, 0x2F, 0x05, 0xA4, 0xDA, 0x44, 0x95, 0xBF, 0xAA, 0x1B, 0x38, 0xEF, 0xE0, 0x18, 0x60, 0xA8, + 0x82, 0xC0, 0xE4, 0x8E, 0x89, 0x0D, 0x11, 0x48, 0xB5, 0x71, 0x4E, 0x33, 0x4C, 0xF9, 0xE6, 0xD7, + 0x1C, 0xEF, 0x73, 0x31, 0x64, 0x5F, 0x3D, 0x6A, 0x97, 0xB1, 0x01, 0xB2, 0x10, 0x7B, 0x24, 0xB7, + 0x18, 0x86, 0x76, 0xCD, 0x6B, 0x4B, 0x6C, 0x7B, 0x43, 0x04, 0x6F, 0x94, 0xFC, 0x3D, 0x36, 0xEE, + 0x3A, 0x32, 0xF9, 0xDE, 0x00, 0x70, 0x29, 0xB4, 0xA7, 0xDA, 0xD3, 0xC7, 0x2D, 0x79, 0xC3, 0xBB, + 0x5B, 0x13, 0xFE, 0xA4, 0x36, 0xF4, 0x21, 0x9B, 0x62, 0x85, 0x6A, 0x0F, 0x65, 0xB4, 0x00, 0x6C, + 0x48, 0x68, 0xA1, 0x49, 0x07, 0x84, 0x5A, 0xD4, 0x94, 0x2B, 0x79, 0xB9, 0x46, 0x5C, 0xD3, 0x2D, + 0x3E, 0x34, 0xA8, 0x15, 0x61, 0x24, 0x42, 0x62, 0x47, 0xF9, 0x38, 0x9D, 0x60, 0x26, 0xCC, 0x23, + 0x2C, 0xDD, 0x4D, 0x23, 0x69, 0x5B, 0x1B, 0x7D, 0x86, 0x55, 0xDE, 0x04, 0xD4, 0xD6, 0x44, 0xF8, + 0x74, 0xA7, 0x9C, 0x92, 0xE9, 0xE7, 0x23, 0x33, 0xB3, 0xB1, 0x71, 0x2D, 0x6D, 0x73, 0x0B, 0xB9 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + + for (int i = 0; i != length; ++i) + buffer[i] = 0; + return buffer; + } +} + +// +// Key+IV provider for build 37734. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37734.cs +// + +namespace KeyCMF_037734 +{ + static const BYTE Keytable[] = + { + 0x34, 0x94, 0x1F, 0x12, 0xBF, 0xD7, 0xD9, 0x94, 0xCA, 0x8C, 0x05, 0x21, 0xD4, 0xA1, 0x5C, 0x40, + 0x94, 0xBF, 0x99, 0x74, 0xCB, 0x5B, 0xEE, 0x08, 0xDC, 0x71, 0xB3, 0xAE, 0x5D, 0x8A, 0x3D, 0x28, + 0x14, 0xDC, 0xD2, 0xF3, 0xE5, 0xFA, 0x25, 0x5C, 0x1C, 0x4F, 0xF7, 0x3D, 0x2A, 0x2A, 0xE5, 0x9B, + 0xD1, 0x3C, 0xEF, 0xB9, 0x1B, 0xE9, 0xB0, 0x89, 0x88, 0xAA, 0xFC, 0x76, 0x68, 0x9B, 0xD9, 0xE4, + 0xCB, 0x9B, 0xD8, 0x3E, 0xA7, 0x48, 0xEF, 0x3F, 0x48, 0xCE, 0xBE, 0xC3, 0xD4, 0x37, 0x76, 0xA7, + 0xD6, 0x5F, 0x3E, 0xFE, 0xB2, 0xD1, 0x1F, 0x8D, 0x63, 0x0D, 0xA5, 0x57, 0x47, 0x44, 0xA3, 0xF2, + 0x13, 0xC9, 0x95, 0xF3, 0xA7, 0x98, 0x5F, 0x8D, 0x7F, 0x5B, 0xB4, 0x77, 0xE8, 0x95, 0x8C, 0x65, + 0x0F, 0x89, 0x7C, 0xC6, 0x14, 0xA4, 0xEB, 0x9C, 0x50, 0xF2, 0x97, 0x06, 0x40, 0x73, 0xB6, 0x24, + 0x4A, 0x19, 0x78, 0x41, 0xDC, 0x65, 0xEA, 0x93, 0x4D, 0x5A, 0x39, 0x4E, 0xE7, 0x33, 0x16, 0xBD, + 0x51, 0xC7, 0x7F, 0x17, 0x8F, 0x5F, 0x9C, 0x7F, 0x4C, 0x9E, 0x49, 0x42, 0x0D, 0x6A, 0x7E, 0x4C, + 0xD3, 0xD5, 0xAB, 0x47, 0x48, 0x3A, 0x0F, 0x61, 0x50, 0x99, 0xC6, 0x09, 0x1B, 0x01, 0xA4, 0x84, + 0x83, 0xBD, 0x36, 0x6C, 0xF2, 0x34, 0xFB, 0xCD, 0x81, 0xCA, 0x8D, 0x78, 0x2A, 0xEA, 0x33, 0x4E, + 0xFA, 0x8A, 0x64, 0x19, 0xC5, 0x81, 0x3F, 0xAA, 0xB2, 0x25, 0x64, 0x4D, 0x5F, 0xFF, 0xA3, 0x06, + 0x4C, 0x33, 0xF4, 0xFC, 0xAF, 0x39, 0x58, 0x89, 0xAA, 0x2C, 0x60, 0xA2, 0x5E, 0x51, 0xE3, 0x23, + 0x8F, 0x99, 0xCC, 0x34, 0xC7, 0x69, 0xF4, 0xFD, 0xD3, 0xAA, 0x79, 0x5F, 0x46, 0x46, 0x6B, 0x38, + 0x1C, 0x0D, 0x9E, 0xFD, 0x50, 0xA4, 0x1B, 0x70, 0x22, 0x8F, 0xFD, 0xB6, 0x2B, 0xFC, 0x6E, 0x9B, + 0x7E, 0xD7, 0x6E, 0xD2, 0xB1, 0x8F, 0xA0, 0xB3, 0x9D, 0x27, 0xB5, 0xBC, 0xE4, 0xDA, 0x23, 0x55, + 0xD1, 0x8D, 0x5B, 0x80, 0xF2, 0xB0, 0xCC, 0x00, 0xF0, 0x1C, 0xF0, 0xAE, 0xA0, 0xA8, 0x12, 0x02, + 0x16, 0xBE, 0x1C, 0xC7, 0x38, 0x93, 0x20, 0xBE, 0xBF, 0xBC, 0xC0, 0x2C, 0xDC, 0xAE, 0x5A, 0x60, + 0xE0, 0xD2, 0xDC, 0x09, 0x2D, 0x0E, 0xCB, 0x6F, 0x74, 0x59, 0x21, 0x58, 0x4A, 0x23, 0xD7, 0x79, + 0x78, 0x82, 0xFC, 0xA0, 0x90, 0x08, 0x41, 0x57, 0xCA, 0x15, 0xAB, 0x98, 0xF0, 0xD3, 0xF9, 0x2D, + 0x64, 0xF1, 0xA8, 0x90, 0xC3, 0x3D, 0x07, 0x2E, 0xB8, 0x73, 0xC9, 0x6D, 0x5F, 0x4E, 0x21, 0x01, + 0x09, 0x2F, 0xA0, 0x16, 0x7C, 0x34, 0xC1, 0x58, 0xAD, 0x66, 0x23, 0x7F, 0x61, 0xC6, 0xE0, 0xCB, + 0xDE, 0xDB, 0xE0, 0xED, 0x10, 0x17, 0xEC, 0x1C, 0xC3, 0x3E, 0xDB, 0xCA, 0x65, 0x86, 0x21, 0x91, + 0x51, 0x7A, 0xCF, 0x3A, 0x76, 0x28, 0x60, 0x06, 0x3D, 0x26, 0x43, 0x74, 0xF6, 0xE7, 0x44, 0xFE, + 0x5A, 0x9F, 0x87, 0x2C, 0xC2, 0x6A, 0xD8, 0x50, 0xA9, 0xC3, 0xC9, 0x5D, 0x03, 0xA5, 0x3E, 0xDC, + 0x61, 0xB4, 0xA8, 0xBC, 0x3F, 0xBD, 0x44, 0x32, 0x2E, 0x8D, 0x6F, 0xDA, 0xCB, 0xC8, 0xAE, 0xF1, + 0xD4, 0xE1, 0x03, 0x3E, 0x74, 0x46, 0x7B, 0x04, 0x09, 0x07, 0xB9, 0xF7, 0x91, 0xD3, 0x22, 0x9E, + 0xC4, 0x60, 0xC1, 0x92, 0xA5, 0x41, 0x1C, 0x0B, 0xB4, 0xA5, 0xEC, 0xD2, 0xBD, 0x3F, 0x59, 0x11, + 0x31, 0x8E, 0x95, 0x7F, 0xDF, 0x82, 0x0E, 0x8F, 0x52, 0x28, 0x09, 0x26, 0xE4, 0x88, 0xE1, 0xAD, + 0x9F, 0x1D, 0x8E, 0xB3, 0xC1, 0x4D, 0x11, 0x31, 0x7F, 0x55, 0xAD, 0x80, 0xB9, 0xE7, 0x59, 0x7B, + 0x10, 0x16, 0x16, 0x07, 0x18, 0x09, 0x37, 0x69, 0x15, 0x60, 0x09, 0x4F, 0x58, 0xC1, 0x31, 0x33 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(2 * digest[5]); + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - 73) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37755. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37755.cs +// + +namespace KeyCMF_037755 +{ + static const BYTE Keytable[] = + { + 0xB1, 0x57, 0x67, 0x57, 0xE4, 0x29, 0x3D, 0x85, 0x7C, 0x8B, 0x71, 0x02, 0x05, 0x82, 0x5B, 0xD9, + 0xE5, 0xB5, 0x12, 0x73, 0x58, 0x2A, 0xD6, 0xAB, 0x7B, 0x81, 0x22, 0x4C, 0x97, 0x0B, 0x1C, 0x31, + 0xFA, 0xC4, 0xB6, 0xE7, 0x25, 0x3C, 0x3D, 0x7A, 0x59, 0xBC, 0x48, 0xF5, 0x5C, 0xA2, 0xD8, 0x9A, + 0xDB, 0x09, 0xE4, 0x8D, 0xFA, 0xA8, 0xC7, 0x9F, 0x96, 0x40, 0x9E, 0x93, 0x87, 0x5A, 0xA1, 0x23, + 0xE2, 0xC0, 0x06, 0x13, 0x94, 0xE8, 0x5C, 0x92, 0x54, 0x99, 0x68, 0xD8, 0x32, 0xBD, 0x07, 0xA2, + 0xD9, 0x4E, 0xCB, 0x0B, 0xE5, 0xF0, 0xBF, 0x79, 0x19, 0x33, 0x9B, 0x2E, 0xEA, 0x31, 0x5C, 0xA0, + 0xA0, 0x9E, 0x67, 0x28, 0xB0, 0x6E, 0x8F, 0x42, 0x95, 0x08, 0xCB, 0xD4, 0x57, 0x69, 0x0D, 0x88, + 0x2F, 0x24, 0x27, 0xA9, 0x61, 0x02, 0x00, 0x43, 0x82, 0x7F, 0x15, 0x67, 0x08, 0x06, 0x74, 0x68, + 0x75, 0x86, 0x45, 0xD9, 0x90, 0x08, 0x54, 0x81, 0x9E, 0x8F, 0x28, 0x5D, 0x90, 0x43, 0xD9, 0xD9, + 0x45, 0x5E, 0xC1, 0xCF, 0xA7, 0x17, 0x3B, 0x37, 0x8E, 0x7F, 0x9E, 0x8B, 0xB7, 0x6F, 0x83, 0x11, + 0x00, 0x45, 0xBF, 0x4E, 0xD5, 0xE7, 0x73, 0xF2, 0x00, 0xDA, 0xBE, 0x56, 0x52, 0x5E, 0x1C, 0x28, + 0x4F, 0x7D, 0x7C, 0x0F, 0xC5, 0x30, 0xAB, 0x80, 0x38, 0x54, 0x10, 0x00, 0xE2, 0x8C, 0x88, 0x91, + 0x12, 0x8B, 0x36, 0x05, 0x6E, 0xAC, 0x66, 0x0B, 0x9F, 0x36, 0x61, 0x49, 0xEC, 0x11, 0x8B, 0xE0, + 0x98, 0xA6, 0x0E, 0xB0, 0x11, 0xF0, 0x9A, 0x20, 0xB7, 0xA2, 0xFA, 0xED, 0xA4, 0xB1, 0xD3, 0x54, + 0xCF, 0xF4, 0x87, 0x75, 0x5A, 0x65, 0x14, 0xA8, 0x45, 0xC8, 0xA3, 0xC4, 0x8B, 0x72, 0xEE, 0xBB, + 0xA6, 0xF7, 0xBD, 0x9B, 0x8A, 0x65, 0x5A, 0x9A, 0xD9, 0x14, 0xAF, 0x0D, 0x88, 0xB0, 0xFE, 0x58, + 0x3D, 0x46, 0xA7, 0xD3, 0x2D, 0xF6, 0xD8, 0xE3, 0xAB, 0xC0, 0x8B, 0x04, 0x33, 0x70, 0x7D, 0x47, + 0x5A, 0x00, 0x43, 0xD4, 0xE1, 0x23, 0xDB, 0x8A, 0x42, 0xAB, 0x7D, 0x9D, 0x93, 0x9C, 0xC3, 0xAE, + 0xF1, 0x43, 0x94, 0x68, 0x9A, 0xA1, 0xC1, 0x31, 0x48, 0xA5, 0xD1, 0x37, 0x13, 0xEB, 0x9D, 0xBD, + 0xD1, 0x3C, 0xAD, 0x9F, 0xCA, 0x9E, 0x84, 0x21, 0xD9, 0x44, 0x08, 0x16, 0x91, 0xB5, 0x22, 0x79, + 0x82, 0x17, 0xA8, 0xC2, 0xC3, 0x2C, 0xEA, 0x08, 0x38, 0x17, 0x04, 0xE2, 0x0C, 0x4E, 0x94, 0xD2, + 0x10, 0x6F, 0x31, 0xFF, 0xB1, 0xFA, 0xC7, 0xEB, 0x76, 0xBB, 0x08, 0xCC, 0x0F, 0xFC, 0x7F, 0xFE, + 0x36, 0x37, 0x79, 0x04, 0x66, 0x73, 0xD0, 0x25, 0x64, 0x8A, 0xB3, 0x72, 0xA4, 0x19, 0x59, 0xDF, + 0x60, 0x4D, 0x22, 0x88, 0x02, 0x94, 0x03, 0x9E, 0xEC, 0xAE, 0x7E, 0x59, 0x9E, 0xA7, 0x7F, 0xFC, + 0xB4, 0xB2, 0xDA, 0xAC, 0x03, 0xE6, 0x5B, 0x67, 0x9B, 0x8B, 0x88, 0x5B, 0xAE, 0xF8, 0xBB, 0xC9, + 0x98, 0xF9, 0xF2, 0xE0, 0xF5, 0x76, 0x1A, 0x08, 0xD3, 0xBD, 0x91, 0x4B, 0xC6, 0x3E, 0x01, 0x6A, + 0xCF, 0x67, 0x1B, 0x8E, 0x91, 0xA9, 0xFD, 0x41, 0xA6, 0xFA, 0x4E, 0xC8, 0xE8, 0xE6, 0xC4, 0xE3, + 0xAA, 0x74, 0xCE, 0x23, 0xBA, 0x1F, 0xB4, 0xB5, 0x20, 0x35, 0x04, 0x8D, 0xA8, 0x1F, 0xD0, 0x86, + 0x70, 0xFF, 0xC5, 0x4A, 0xC1, 0x1E, 0x8E, 0x34, 0xE6, 0x3F, 0xEE, 0xF2, 0x60, 0x37, 0xB4, 0x2D, + 0xF2, 0x4F, 0x81, 0x82, 0xFD, 0x46, 0x9A, 0x6B, 0x65, 0xAE, 0xB0, 0xAB, 0x6C, 0x05, 0x47, 0x1D, + 0x2D, 0x51, 0x3A, 0x2A, 0x5D, 0xB6, 0x61, 0xFF, 0xDD, 0xFD, 0x8D, 0x3B, 0x82, 0xD5, 0x45, 0xB5, + 0x8D, 0x0C, 0xCE, 0xC2, 0xE3, 0x12, 0x20, 0xFF, 0x34, 0x28, 0x2D, 0x43, 0x44, 0x5D, 0x06, 0xB7 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(Keytable[0] * digest[7]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[(kidx + i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37793. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37793.cs +// + +namespace KeyCMF_037793 +{ + static const BYTE Keytable[] = + { + 0x09, 0x51, 0x37, 0x0C, 0xA1, 0xCB, 0x53, 0x3C, 0x24, 0xA6, 0x2B, 0x8C, 0xD6, 0x24, 0xAC, 0x2C, + 0x44, 0xAD, 0xD3, 0x08, 0xC7, 0x02, 0x79, 0x90, 0x9C, 0xAF, 0x66, 0xC9, 0xFE, 0xD2, 0xDF, 0xFB, + 0x40, 0x45, 0x4B, 0x6A, 0x18, 0xDF, 0x82, 0xC2, 0x20, 0x9A, 0x77, 0x2B, 0x48, 0x94, 0xAB, 0xC8, + 0x83, 0x94, 0xA1, 0xC4, 0x26, 0x9E, 0xBF, 0x2F, 0x36, 0x2E, 0xDD, 0x37, 0xEB, 0x87, 0xF0, 0x84, + 0xFB, 0xE8, 0xD5, 0x48, 0xC1, 0xE9, 0x2F, 0x83, 0x01, 0x36, 0x86, 0x33, 0xB9, 0x3A, 0xDB, 0x34, + 0x91, 0xA0, 0xCA, 0x64, 0xA4, 0x69, 0x6C, 0xC7, 0xD7, 0x3C, 0x6F, 0xA7, 0x52, 0xB9, 0x0D, 0xDC, + 0xC3, 0x24, 0x65, 0xF9, 0x57, 0x3B, 0x68, 0xE2, 0x27, 0x3C, 0x43, 0x0E, 0xFC, 0x33, 0x18, 0xCB, + 0x32, 0x60, 0xE7, 0xCA, 0xD8, 0x27, 0x12, 0xD0, 0x97, 0xF0, 0x7C, 0x23, 0x92, 0x4D, 0x52, 0x89, + 0x26, 0x68, 0x7D, 0x65, 0x75, 0x35, 0x3B, 0x68, 0x15, 0x96, 0x5C, 0xA8, 0xA5, 0x8E, 0x26, 0x10, + 0x77, 0x9B, 0x3E, 0xC7, 0xE7, 0x1C, 0x46, 0xEF, 0x44, 0xDE, 0x65, 0x17, 0x29, 0x39, 0x0B, 0x1D, + 0x0C, 0xE7, 0x09, 0x89, 0x4D, 0x0E, 0x65, 0x78, 0x15, 0xAE, 0xAB, 0x8C, 0x5E, 0xA4, 0xF8, 0xDE, + 0x36, 0xE9, 0x2A, 0x32, 0x91, 0xED, 0xBD, 0x15, 0x17, 0xD7, 0x3D, 0x65, 0x3E, 0xB3, 0x32, 0xCF, + 0xED, 0xAD, 0xE5, 0x92, 0xE7, 0xE4, 0x85, 0xA5, 0xE6, 0x0C, 0x78, 0x51, 0xED, 0x47, 0xED, 0xA2, + 0x81, 0x83, 0xB0, 0x5E, 0x0B, 0x71, 0x9E, 0xF9, 0x65, 0x5F, 0x0B, 0xA2, 0x42, 0xCF, 0x8E, 0x17, + 0x5D, 0xA1, 0x8F, 0x54, 0xCA, 0x3D, 0xB6, 0x36, 0x3E, 0x59, 0x4F, 0x80, 0x41, 0xCD, 0x67, 0x6E, + 0xFC, 0xB1, 0x2E, 0xC5, 0x22, 0x82, 0x20, 0xA9, 0x2F, 0x0A, 0x4D, 0xD5, 0x31, 0x39, 0x28, 0xEF, + 0x65, 0xF7, 0xC3, 0x50, 0x1D, 0x4E, 0xAF, 0xED, 0xCB, 0x78, 0x9C, 0xDF, 0x45, 0xE5, 0x26, 0xE9, + 0x4C, 0x80, 0x6E, 0x26, 0x84, 0x8E, 0xE9, 0x85, 0x35, 0x6E, 0x78, 0x96, 0x9A, 0x6B, 0x35, 0xEB, + 0x84, 0x5D, 0x1B, 0xCF, 0x68, 0x7F, 0xEC, 0x35, 0x61, 0xFA, 0xE2, 0x92, 0x8A, 0x59, 0xA9, 0x6D, + 0xEA, 0x42, 0xD0, 0xA3, 0x7B, 0x60, 0x70, 0x19, 0x71, 0x59, 0xDD, 0x95, 0x63, 0xDB, 0x8F, 0xB8, + 0x0C, 0x7C, 0x4C, 0x31, 0xC3, 0x46, 0xD0, 0xA3, 0x66, 0x28, 0xD1, 0xAB, 0xD9, 0x87, 0xE4, 0x34, + 0x8D, 0xDF, 0x8C, 0x9F, 0x29, 0x20, 0x5A, 0x36, 0x5B, 0x47, 0x43, 0xBD, 0x37, 0x15, 0xC6, 0x77, + 0xFB, 0xCA, 0x7A, 0xF8, 0x3F, 0xE9, 0x8D, 0x0E, 0xD3, 0x76, 0xAA, 0x1F, 0xCB, 0x41, 0xC9, 0x41, + 0xC6, 0x9E, 0x63, 0x58, 0xE7, 0x08, 0x84, 0x5A, 0x38, 0xCA, 0xAE, 0xE4, 0x0F, 0xDD, 0x63, 0x21, + 0xFD, 0x14, 0xBE, 0x4F, 0x4B, 0x27, 0x54, 0x0B, 0x36, 0x4D, 0xA5, 0xA4, 0x69, 0xFA, 0x10, 0xC4, + 0xFD, 0x88, 0xBC, 0x65, 0xD6, 0x23, 0xDE, 0x81, 0xC5, 0x29, 0xE3, 0x2A, 0x4D, 0xBC, 0x5B, 0x9C, + 0x59, 0x7D, 0xE6, 0x77, 0x5E, 0x14, 0x05, 0x87, 0x71, 0x1F, 0xBD, 0xA3, 0x48, 0xBC, 0x6D, 0x97, + 0xB2, 0x1E, 0xF5, 0xE6, 0x3B, 0xDF, 0x60, 0xA1, 0xAA, 0x8C, 0xF2, 0x7B, 0x40, 0xBF, 0x4B, 0x31, + 0xC1, 0xCF, 0x75, 0x1F, 0xC9, 0x4A, 0x29, 0x2A, 0x95, 0x4C, 0xE6, 0x1C, 0x51, 0x45, 0xF2, 0xCB, + 0x09, 0x70, 0xED, 0xF0, 0xC1, 0xBD, 0x87, 0x17, 0x7D, 0xB4, 0x41, 0x79, 0xAD, 0x0D, 0x55, 0xDF, + 0xCD, 0x5B, 0xE5, 0x52, 0x8D, 0xFE, 0xD2, 0x50, 0x17, 0x63, 0xA8, 0xD2, 0x6C, 0xE8, 0xC2, 0xF8, + 0x36, 0x43, 0x43, 0xE1, 0x05, 0x6B, 0xEA, 0x36, 0x33, 0xCA, 0xC7, 0x6C, 0x02, 0x54, 0x08, 0x33 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) ((digest[(kidx + header.m_entryCount) % SHA1_DIGESTSIZE] + 1) % 0xFF); + } + return buffer; + } +} + +// +// Key+IV provider for build 37865. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37865.cs +// + +namespace KeyCMF_037865 +{ + static const BYTE Keytable[] = + { + 0x29, 0x02, 0x18, 0x1D, 0xA1, 0xA3, 0x43, 0x4F, 0xDC, 0xF7, 0x5A, 0x9E, 0x86, 0x8D, 0xA9, 0xF8, + 0x7F, 0xFE, 0x83, 0x5C, 0x1F, 0x08, 0xC9, 0x35, 0x16, 0x26, 0xE4, 0x64, 0xB7, 0x14, 0x34, 0x93, + 0x64, 0x76, 0xF1, 0xDE, 0x8F, 0x38, 0xDB, 0xC7, 0xBA, 0x2B, 0xC2, 0x7F, 0xD3, 0x3C, 0xFA, 0x19, + 0xA4, 0x01, 0x7E, 0x19, 0x08, 0x9B, 0xD6, 0xA3, 0x02, 0xE1, 0xC9, 0xF0, 0x88, 0xE2, 0x98, 0xED, + 0xA3, 0x9B, 0xFC, 0x28, 0x22, 0xB3, 0x37, 0xFA, 0xAA, 0x99, 0x79, 0x75, 0xA0, 0x82, 0x94, 0x53, + 0x7C, 0x66, 0xDF, 0xC8, 0x83, 0xC3, 0xD1, 0x15, 0xAF, 0xDF, 0x6A, 0xA7, 0x9A, 0xE2, 0x1D, 0x61, + 0xF8, 0xF7, 0x34, 0xBA, 0x70, 0xA5, 0x9C, 0x88, 0xC2, 0x64, 0x3A, 0x1D, 0x1D, 0x88, 0x7A, 0x78, + 0x0F, 0x4F, 0x54, 0xF0, 0x63, 0x4B, 0x55, 0x4F, 0x22, 0x56, 0xDD, 0xBD, 0xC9, 0x89, 0x0D, 0xA7, + 0xD2, 0xE7, 0xE9, 0xC3, 0x2B, 0x16, 0xD2, 0xA8, 0x38, 0x07, 0x7C, 0x56, 0xA3, 0x24, 0x4F, 0x53, + 0x92, 0x1F, 0xEF, 0xD5, 0xC3, 0xE5, 0x53, 0xF1, 0x21, 0x57, 0x75, 0x62, 0x34, 0x37, 0x50, 0xF2, + 0xC3, 0xDE, 0x1A, 0x67, 0x41, 0x0E, 0x13, 0xAC, 0x31, 0xE8, 0x06, 0x89, 0x74, 0xAF, 0x33, 0xF6, + 0xC2, 0x78, 0x68, 0x75, 0x1F, 0xD2, 0xA0, 0xE1, 0xEF, 0xCD, 0x7D, 0x18, 0x5D, 0xA4, 0x9B, 0x3A, + 0x79, 0x51, 0xAB, 0x7F, 0x65, 0xC9, 0xCA, 0x78, 0x40, 0x12, 0x27, 0xE0, 0xEA, 0x24, 0xA1, 0x41, + 0x60, 0x21, 0x49, 0x07, 0x81, 0x18, 0x08, 0xB6, 0x82, 0xDF, 0x0D, 0x33, 0x55, 0xB6, 0xC4, 0x26, + 0x9A, 0xB1, 0xA0, 0xEF, 0xA9, 0xA1, 0x66, 0xEF, 0xAB, 0x8E, 0x5B, 0x30, 0x69, 0x4F, 0x0E, 0xFB, + 0xAC, 0x3A, 0xC7, 0x12, 0xE0, 0x83, 0x97, 0xD9, 0x46, 0xE5, 0x6F, 0x20, 0xEF, 0x26, 0x79, 0xEC, + 0x4B, 0x76, 0xB7, 0xC5, 0xE5, 0x32, 0x82, 0xE3, 0xB3, 0x82, 0xAC, 0xA4, 0xDB, 0x2A, 0x30, 0x35, + 0x58, 0x1A, 0xDC, 0x41, 0xD8, 0x87, 0x88, 0x0B, 0x86, 0x0A, 0xEA, 0x80, 0x1F, 0x46, 0x47, 0xC5, + 0xC1, 0xE5, 0x02, 0x88, 0xCA, 0xA8, 0x09, 0xFE, 0xEE, 0x0C, 0xA2, 0x9D, 0x61, 0xDE, 0x53, 0x87, + 0xCC, 0xC3, 0x86, 0x6D, 0x91, 0xED, 0x46, 0x61, 0xCA, 0x74, 0xF2, 0x53, 0x0D, 0x6F, 0xF2, 0x3D, + 0xB6, 0x0F, 0xCC, 0x26, 0x90, 0x66, 0xFD, 0xAF, 0xEE, 0x96, 0xF4, 0x11, 0x32, 0xAE, 0x02, 0x7B, + 0x26, 0x08, 0x4D, 0x3C, 0x52, 0x5F, 0x4E, 0x7B, 0xEA, 0xAE, 0x7C, 0xA7, 0x63, 0xED, 0x05, 0x88, + 0xED, 0x84, 0x0E, 0x70, 0x50, 0x0B, 0xD7, 0xF4, 0x83, 0x2A, 0xFC, 0xC9, 0x01, 0xD8, 0xC5, 0x1C, + 0x4F, 0x0B, 0x50, 0x94, 0x1F, 0x5C, 0xD0, 0x1C, 0x8B, 0x50, 0x27, 0xF6, 0x9A, 0xE9, 0x4E, 0x2C, + 0xF7, 0x32, 0x72, 0x7B, 0x46, 0xE3, 0x78, 0x02, 0xED, 0x31, 0x70, 0xA2, 0x02, 0x75, 0x71, 0xC5, + 0x65, 0x45, 0x83, 0x7D, 0x1E, 0xB5, 0x9D, 0x5A, 0x2A, 0x9D, 0x4C, 0xD4, 0xF8, 0x2D, 0xDA, 0xAF, + 0xCD, 0x24, 0x70, 0xB5, 0x78, 0xAD, 0xD6, 0x19, 0x43, 0xF5, 0x49, 0x5D, 0xFD, 0x79, 0xA8, 0x1A, + 0xD1, 0x5D, 0x96, 0xD6, 0x93, 0x39, 0x1B, 0xB6, 0x61, 0x10, 0x4D, 0xE6, 0x99, 0x05, 0xBA, 0xEA, + 0xEA, 0xAD, 0x3D, 0x61, 0x5B, 0xE3, 0x7D, 0x1B, 0x8C, 0x47, 0xD9, 0x7D, 0x82, 0xFB, 0x5C, 0x49, + 0xE3, 0x5E, 0xFD, 0xF1, 0x5B, 0x2E, 0x97, 0x73, 0xDA, 0x4C, 0xA4, 0xBF, 0x0A, 0x95, 0xA5, 0xAA, + 0xDB, 0x70, 0x52, 0x6E, 0xBC, 0xE5, 0xEF, 0x14, 0x4E, 0x4B, 0x1D, 0xE9, 0xCE, 0x26, 0x1F, 0xDB, + 0x02, 0x1D, 0x81, 0x38, 0xF3, 0xCD, 0xFF, 0xB4, 0x6A, 0x5E, 0x19, 0xD4, 0x6B, 0xA6, 0xB9, 0xA1 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= 489; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[(i + kidx) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 37962. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_37962.cs +// + +namespace KeyCMF_037962 +{ + static const BYTE Keytable[] = + { + 0xB8, 0x5D, 0x23, 0x14, 0xA5, 0xF0, 0x52, 0xF8, 0x83, 0x3E, 0x91, 0xBC, 0x20, 0x4C, 0x3E, 0x68, + 0x12, 0x0D, 0x74, 0x14, 0xC4, 0x9C, 0xD8, 0x8A, 0x05, 0x51, 0x4B, 0x9E, 0xC5, 0x01, 0x78, 0x0D, + 0x3B, 0xA2, 0x17, 0x43, 0xF2, 0x48, 0xE1, 0xCA, 0x00, 0x16, 0xF9, 0xA0, 0xDF, 0xC3, 0xFB, 0x9B, + 0x5F, 0x7A, 0xD2, 0x44, 0x81, 0x58, 0xAA, 0x7F, 0xE5, 0xCB, 0xD1, 0x52, 0x20, 0x5D, 0xF4, 0xF9, + 0xC3, 0x67, 0xB7, 0x69, 0x01, 0xA5, 0x35, 0xC9, 0x1D, 0xEC, 0x0A, 0xDA, 0x81, 0x69, 0xF0, 0x09, + 0x79, 0x23, 0xA4, 0xA9, 0xDF, 0xEC, 0xAA, 0xDD, 0x31, 0xD4, 0xAD, 0xEF, 0xF8, 0x1F, 0x9D, 0x12, + 0x8C, 0x2B, 0x9A, 0xAA, 0x78, 0x79, 0x77, 0x04, 0xCA, 0xAB, 0xEC, 0x35, 0xFD, 0xB6, 0x07, 0xE0, + 0x08, 0x23, 0xCE, 0xE1, 0x32, 0x5A, 0xF9, 0x55, 0x64, 0x3F, 0x16, 0x98, 0x9D, 0xF1, 0x51, 0xEB, + 0x01, 0x2F, 0xE6, 0xF9, 0xED, 0x9D, 0x6E, 0xA2, 0x1C, 0xED, 0xCC, 0x65, 0x32, 0x62, 0x70, 0xA3, + 0x3F, 0x29, 0x77, 0x50, 0xCE, 0x74, 0xD2, 0xAE, 0xCD, 0xAD, 0x70, 0xBD, 0x8C, 0xB5, 0x4D, 0x12, + 0xF3, 0xF8, 0x1F, 0x25, 0x59, 0x91, 0x43, 0xDB, 0x73, 0x1F, 0x4C, 0x23, 0xB2, 0x0C, 0x9A, 0x2B, + 0x77, 0xC4, 0xE1, 0x69, 0x39, 0x3E, 0x70, 0x3E, 0xEF, 0x78, 0xD5, 0x7D, 0x28, 0x51, 0x18, 0x86, + 0xBA, 0x5D, 0xF7, 0x5E, 0xF8, 0xFD, 0x3C, 0x05, 0xD8, 0x3D, 0x9A, 0xCC, 0xDC, 0xA2, 0x9F, 0x77, + 0x2B, 0x3F, 0xF0, 0x45, 0x3D, 0xA2, 0x2E, 0xF1, 0x2C, 0x19, 0xDC, 0xB1, 0xB5, 0x66, 0xFD, 0x36, + 0x17, 0xF5, 0xB5, 0x8E, 0xCA, 0x2A, 0xAE, 0x9A, 0xA0, 0xA9, 0x74, 0x81, 0x1F, 0x6C, 0x6A, 0x47, + 0x58, 0xD8, 0xBF, 0x2A, 0xA9, 0xE4, 0x07, 0xB0, 0x9A, 0xE1, 0xEE, 0x4C, 0x94, 0xE7, 0xE0, 0xC5, + 0xE8, 0x69, 0x4E, 0x86, 0xEB, 0x54, 0x97, 0x62, 0x9A, 0x77, 0x2F, 0xBE, 0x4B, 0x9D, 0xD0, 0x07, + 0x7C, 0x14, 0x46, 0xDA, 0xD1, 0xD6, 0x32, 0x1B, 0x77, 0xA9, 0x48, 0x8B, 0x89, 0x08, 0xA8, 0xF0, + 0xB7, 0xB8, 0x4F, 0x1D, 0xEE, 0x10, 0x8D, 0x18, 0xEA, 0xF6, 0xB6, 0x38, 0x11, 0x60, 0xC0, 0xBF, + 0xC7, 0x56, 0x93, 0x79, 0x4F, 0x1E, 0x5B, 0xF1, 0xAD, 0x96, 0x28, 0x6F, 0xC3, 0x0A, 0x72, 0xC4, + 0xD6, 0xA4, 0xBE, 0x1D, 0x89, 0x41, 0x73, 0xCF, 0xB6, 0xED, 0xB3, 0x7A, 0xE6, 0xED, 0x18, 0x0A, + 0x2B, 0x58, 0x97, 0x82, 0xAB, 0x74, 0x18, 0x21, 0x71, 0xE9, 0x5A, 0x03, 0xCC, 0x0E, 0xC2, 0x23, + 0x0B, 0x2F, 0xB9, 0x4D, 0x2A, 0xA0, 0xE5, 0x95, 0xB4, 0xDC, 0xC3, 0x5B, 0x02, 0x1F, 0xC1, 0x7B, + 0x4D, 0x05, 0xA8, 0x8E, 0x94, 0x14, 0x83, 0x64, 0x69, 0xE9, 0x0C, 0x58, 0x84, 0x69, 0x2D, 0x36, + 0x38, 0x9A, 0xC6, 0x60, 0x67, 0xB0, 0x62, 0xE6, 0xA6, 0x6F, 0xD2, 0xC6, 0x01, 0x04, 0x42, 0xF7, + 0x1D, 0x84, 0x6A, 0xC3, 0x4F, 0x35, 0xC9, 0x9A, 0x0E, 0x3E, 0xD0, 0x6D, 0xA0, 0x9E, 0x78, 0x97, + 0xD8, 0x3E, 0x2A, 0x19, 0xD2, 0xE0, 0x62, 0x8E, 0xC0, 0xAB, 0x4F, 0x3D, 0xF5, 0xAC, 0xB9, 0x82, + 0x25, 0x6C, 0x27, 0x21, 0x30, 0x14, 0xDB, 0xB1, 0x85, 0x53, 0xFD, 0xC3, 0xC1, 0x41, 0xC0, 0x2F, + 0x7A, 0x03, 0x8F, 0x47, 0xEC, 0x76, 0x45, 0xA3, 0xED, 0x87, 0x80, 0xFD, 0x68, 0x64, 0x1A, 0xF8, + 0x6B, 0x9C, 0x15, 0x27, 0xEA, 0xE8, 0xC3, 0x1D, 0x80, 0x95, 0x3B, 0x95, 0xF0, 0x58, 0xB8, 0x1A, + 0xDF, 0xFD, 0x3E, 0x4E, 0x7D, 0xF3, 0x2F, 0xD7, 0x4B, 0x52, 0xDB, 0x7A, 0x4F, 0x22, 0x60, 0x50, + 0xA5, 0x1B, 0xFA, 0x34, 0x99, 0x83, 0xB6, 0xC5, 0x56, 0x6F, 0xAD, 0x99, 0x26, 0x10, 0xDA, 0x3E + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length * Keytable[0] % 512]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(2 * digest[13] - length) % 512]; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 38044. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38044.cs +// + +namespace KeyCMF_038044 +{ + static const BYTE Keytable[] = + { + 0xFB, 0x92, 0x4F, 0xA4, 0x7C, 0x92, 0x12, 0x7D, 0xF4, 0x6B, 0x95, 0x17, 0x35, 0x1E, 0x2C, 0x6E, + 0xF5, 0xF8, 0x81, 0x1D, 0xFA, 0x67, 0x94, 0x79, 0xC5, 0xAD, 0xBE, 0x5B, 0xE2, 0xD8, 0x93, 0x4A, + 0x80, 0x5A, 0x1B, 0xCC, 0xB4, 0x98, 0x0A, 0xBB, 0x63, 0x85, 0x08, 0xEE, 0xC0, 0xC7, 0x44, 0x8A, + 0x78, 0x5C, 0xFF, 0x16, 0x29, 0x43, 0x51, 0xE2, 0x48, 0x87, 0x65, 0x28, 0xC3, 0x6D, 0x1D, 0x94, + 0xE5, 0xB6, 0xB6, 0xBD, 0x0F, 0x15, 0x5D, 0x58, 0x87, 0xCA, 0x22, 0x36, 0x0A, 0xE9, 0x15, 0x1C, + 0x28, 0xDF, 0x5A, 0x5B, 0xA8, 0x83, 0x20, 0xA8, 0x18, 0xB2, 0x73, 0x85, 0x54, 0x61, 0xAF, 0x11, + 0x06, 0x26, 0x93, 0x03, 0x07, 0xA3, 0xAD, 0xAB, 0xEB, 0xA8, 0x1F, 0xEA, 0x9A, 0x18, 0x4E, 0x35, + 0xCA, 0xCF, 0x02, 0xBC, 0xF2, 0x97, 0xBA, 0xC5, 0x66, 0xD2, 0x0E, 0xAC, 0x79, 0x07, 0x14, 0x3E, + 0xFB, 0x24, 0x9E, 0xDD, 0xBE, 0xF3, 0x62, 0x61, 0xD0, 0x87, 0xB4, 0xA7, 0xE3, 0x2A, 0xC7, 0xA8, + 0xAD, 0x64, 0x37, 0x76, 0xA7, 0x62, 0x8D, 0x4A, 0x2C, 0x27, 0x4A, 0x8C, 0x3B, 0xE0, 0x17, 0x35, + 0xCB, 0x79, 0x21, 0x03, 0x07, 0x89, 0xD3, 0x64, 0x38, 0xDA, 0xC3, 0x58, 0x4F, 0xCF, 0xFC, 0xFC, + 0x3B, 0xC1, 0x06, 0x6D, 0x15, 0x07, 0xA7, 0x6F, 0x96, 0x0C, 0x41, 0xA1, 0xC9, 0x97, 0xFF, 0xA3, + 0x2E, 0x92, 0xF9, 0x1B, 0x86, 0x69, 0x0A, 0x60, 0x0A, 0x96, 0xDC, 0x5F, 0xB6, 0x0B, 0x06, 0xE1, + 0x27, 0xB6, 0xF9, 0xD5, 0xDE, 0xC6, 0x9E, 0x1D, 0xFC, 0xBB, 0x69, 0x5D, 0x4A, 0x61, 0x0D, 0x98, + 0x79, 0x6E, 0x90, 0x17, 0x5D, 0x2E, 0x30, 0x75, 0xAF, 0xE7, 0xE2, 0xC2, 0xE6, 0x26, 0x80, 0x83, + 0xAB, 0x8E, 0x95, 0x92, 0x0D, 0x93, 0xF2, 0x8F, 0x83, 0x77, 0x8C, 0xCC, 0xF1, 0x6D, 0xF0, 0xC6, + 0xFD, 0x78, 0xCF, 0xFB, 0xBC, 0xE9, 0x5D, 0x08, 0x5D, 0x22, 0xE7, 0x59, 0xB4, 0x39, 0x91, 0x90, + 0x5D, 0x0E, 0x55, 0xEB, 0x2C, 0xC7, 0xBC, 0x84, 0x66, 0x4A, 0x41, 0xD1, 0x52, 0xA0, 0x1D, 0x44, + 0x86, 0xCE, 0x04, 0x15, 0x8C, 0x4D, 0x22, 0x3B, 0x35, 0x4A, 0xA8, 0xC8, 0x8E, 0x86, 0xC3, 0x49, + 0xB0, 0x07, 0x68, 0xA7, 0xA4, 0x7C, 0x3C, 0x72, 0xFD, 0x5C, 0x26, 0xC0, 0x33, 0x5B, 0x2F, 0x96, + 0xD7, 0xDE, 0x4E, 0x81, 0xF0, 0x1F, 0xEB, 0x43, 0x3F, 0xC2, 0x5D, 0x33, 0x9C, 0x81, 0xCE, 0x45, + 0xC9, 0x3C, 0x9B, 0x2C, 0xC9, 0xDC, 0xE8, 0xC7, 0x81, 0x49, 0x56, 0xEB, 0x22, 0xEA, 0x91, 0x26, + 0xB5, 0x56, 0x37, 0x1D, 0xB5, 0x5F, 0x99, 0x5A, 0xB5, 0x85, 0xBD, 0xD2, 0x01, 0x87, 0xFE, 0xCF, + 0x70, 0x90, 0x59, 0xBA, 0xC3, 0x8B, 0x61, 0x25, 0x87, 0x66, 0xCE, 0x4C, 0x94, 0x7D, 0x95, 0x24, + 0xF6, 0x14, 0xCE, 0x92, 0x70, 0xB9, 0xAB, 0xB6, 0x66, 0x1E, 0x62, 0x20, 0x91, 0x21, 0x28, 0x4B, + 0x85, 0x38, 0xDC, 0x0F, 0x5C, 0x6C, 0xC2, 0x4D, 0x2D, 0x60, 0x09, 0x8A, 0x66, 0xD5, 0x7C, 0x01, + 0xE6, 0xEF, 0xDF, 0x62, 0x20, 0x77, 0xAD, 0xF7, 0xF1, 0xAB, 0xB8, 0x05, 0xDB, 0xA1, 0x59, 0xDA, + 0xDC, 0x35, 0x95, 0xD1, 0x79, 0x12, 0x43, 0xB6, 0x9A, 0x04, 0xE0, 0x29, 0x95, 0x4D, 0x27, 0x51, + 0xDB, 0x9E, 0x38, 0xA4, 0x53, 0xC3, 0xBB, 0xCF, 0xBC, 0xB5, 0xB5, 0x4E, 0xC6, 0x22, 0x19, 0xD3, + 0x5B, 0xA4, 0x3D, 0x67, 0xAA, 0xB8, 0x08, 0xE9, 0x34, 0xC0, 0x7A, 0x4F, 0xBB, 0x99, 0xA4, 0x2A, + 0x36, 0xE0, 0x32, 0x38, 0xB3, 0x49, 0xC4, 0x9E, 0x0D, 0xDE, 0x5E, 0x49, 0x13, 0x18, 0x17, 0xD1, + 0x31, 0x14, 0xC3, 0x88, 0x2F, 0xF4, 0x60, 0x5A, 0x5B, 0xDE, 0x83, 0x49, 0xA4, 0xF2, 0x03, 0xF6 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) ((digest[(kidx + header.m_entryCount) % SHA1_DIGESTSIZE] + 1) % 0xFF); + } + return buffer; + } +} + +// +// Key+IV provider for build 38058. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38058.cs +// + +namespace KeyCMF_038058 +{ + static const BYTE Keytable[] = + { + 0xD6, 0x85, 0xF6, 0x42, 0x61, 0x04, 0x73, 0x1B, 0x4C, 0x69, 0x34, 0x9D, 0xDF, 0xFB, 0x07, 0xF4, + 0xE6, 0xD0, 0x94, 0xCD, 0x7E, 0xBB, 0x78, 0xCA, 0x23, 0x1C, 0xFA, 0xAA, 0x99, 0x9F, 0xAA, 0x1F, + 0xD8, 0x86, 0xDE, 0x0A, 0xC0, 0xA3, 0x0A, 0x93, 0x52, 0x0A, 0x18, 0x46, 0x41, 0x82, 0xDB, 0x62, + 0x31, 0xAB, 0x74, 0xCE, 0x72, 0x41, 0xBA, 0xD2, 0x50, 0x50, 0xA0, 0x7E, 0xCE, 0x7C, 0x0C, 0xB9, + 0x45, 0x9B, 0x5F, 0x96, 0x0B, 0xFA, 0x6F, 0x3F, 0x9E, 0xD5, 0x94, 0x15, 0xBE, 0x36, 0x14, 0x80, + 0xAB, 0xC7, 0x76, 0x63, 0x6D, 0x69, 0xD2, 0x34, 0x6F, 0xB0, 0x37, 0x47, 0xE2, 0xA2, 0xA8, 0x2F, + 0x74, 0x00, 0x67, 0x7F, 0x20, 0xC7, 0x2F, 0xAD, 0xDC, 0x94, 0xC6, 0xA3, 0x9F, 0x37, 0x38, 0x96, + 0xEF, 0xD6, 0x94, 0x30, 0xB1, 0x20, 0x52, 0x5A, 0xB9, 0x5F, 0xF0, 0x5F, 0x99, 0x90, 0x8A, 0x8F, + 0xA4, 0xCF, 0x69, 0x53, 0xBB, 0x84, 0x31, 0xF0, 0x6F, 0x81, 0x50, 0xDB, 0x34, 0xBB, 0x61, 0x26, + 0x06, 0xC4, 0xDA, 0xAF, 0xA8, 0xB1, 0x08, 0x16, 0x13, 0x60, 0xA3, 0x83, 0x34, 0x88, 0xAA, 0x1C, + 0xD4, 0xC5, 0xD3, 0x12, 0xBE, 0x1B, 0x9D, 0xE8, 0xD1, 0x1C, 0xDB, 0x33, 0xC3, 0xA1, 0x16, 0x1B, + 0x90, 0xB0, 0xA5, 0x3A, 0xA4, 0xD2, 0x56, 0x37, 0xFF, 0xCF, 0x10, 0xDB, 0xC3, 0xAC, 0xBA, 0xCB, + 0x7F, 0xA8, 0x28, 0x32, 0x95, 0x73, 0xAC, 0xD1, 0xAB, 0x50, 0xF0, 0x98, 0x77, 0xDC, 0xDE, 0x87, + 0xF1, 0x16, 0xEA, 0xCB, 0x03, 0x15, 0xA5, 0xD4, 0xC9, 0xDF, 0x43, 0xF6, 0x18, 0x9B, 0x96, 0xC8, + 0xA2, 0x9B, 0x19, 0x48, 0xCA, 0x71, 0x1B, 0xE9, 0xE0, 0xDB, 0xE0, 0xC0, 0x27, 0x0E, 0x86, 0xA6, + 0x8D, 0xFB, 0x2D, 0x8F, 0x00, 0x17, 0xF7, 0x47, 0xD4, 0xA5, 0xA5, 0x7B, 0x76, 0xC5, 0x97, 0x4A, + 0x4B, 0x5A, 0x77, 0xE9, 0x8D, 0x05, 0xC4, 0x4B, 0x6F, 0x8C, 0x02, 0x86, 0x34, 0x35, 0x36, 0x66, + 0xCE, 0x11, 0xD8, 0x6A, 0x42, 0xA8, 0x51, 0x48, 0xC3, 0x66, 0x5B, 0xF7, 0xD7, 0x58, 0xB0, 0x96, + 0x27, 0x7C, 0xC3, 0x2E, 0xEA, 0xE1, 0x0D, 0x22, 0xBB, 0x5C, 0xBA, 0x63, 0x04, 0xFE, 0x64, 0xCB, + 0x52, 0x38, 0x4A, 0x6F, 0x9E, 0xD8, 0xB7, 0x9C, 0xAD, 0x84, 0xE0, 0x23, 0x7C, 0x4E, 0x3B, 0x2A, + 0x64, 0x68, 0xB1, 0x3C, 0xA2, 0x64, 0xC2, 0x28, 0x76, 0xD4, 0x07, 0xE8, 0xD1, 0x8E, 0xFB, 0xEA, + 0x4B, 0xE2, 0x9D, 0x6E, 0x5C, 0x32, 0xA4, 0xD1, 0xD3, 0x0E, 0x65, 0xDE, 0xB3, 0xA5, 0xAE, 0xC6, + 0x65, 0x22, 0xAB, 0x8E, 0xB6, 0xD7, 0xD7, 0x14, 0x82, 0xA5, 0x68, 0x9A, 0xC3, 0xD6, 0xCE, 0xF8, + 0x29, 0xA4, 0x73, 0x62, 0xA7, 0x37, 0x1F, 0x10, 0x4B, 0xC2, 0xE1, 0xF9, 0x9F, 0x00, 0x86, 0x5B, + 0xF0, 0x40, 0x87, 0xE3, 0xEB, 0x6F, 0x6B, 0x3B, 0x17, 0x47, 0x00, 0xC4, 0x68, 0xBC, 0x02, 0xC0, + 0x5D, 0x7C, 0xD6, 0x23, 0x9C, 0x28, 0x21, 0x6B, 0xE8, 0x40, 0xB5, 0xFD, 0x21, 0xE4, 0x5F, 0x59, + 0x05, 0xA5, 0xBF, 0x0B, 0x71, 0xF3, 0x59, 0xA3, 0xA4, 0xB4, 0xF5, 0x7B, 0xFD, 0xCF, 0x65, 0xA8, + 0x4D, 0xF1, 0xE7, 0x30, 0xD9, 0xEC, 0xAD, 0x93, 0x9D, 0x6C, 0x54, 0xE0, 0x4F, 0x35, 0x99, 0xED, + 0x33, 0xF2, 0x48, 0x3C, 0xFE, 0x16, 0xC5, 0x09, 0xA0, 0x7B, 0xA0, 0x8E, 0xC3, 0x1A, 0x99, 0x04, + 0xDD, 0x41, 0xFA, 0xC7, 0x40, 0x16, 0x1E, 0x42, 0x17, 0xC6, 0x5A, 0xB2, 0x0E, 0xD5, 0x80, 0x93, + 0xA3, 0x43, 0x5F, 0x37, 0xA5, 0xBB, 0x5B, 0xB8, 0xFD, 0x7E, 0x8B, 0x81, 0x6D, 0x42, 0x5C, 0x2E, + 0x5C, 0xA9, 0xA5, 0x3B, 0x5D, 0xEE, 0x2A, 0xF8, 0x22, 0x77, 0x31, 0x63, 0xBD, 0xD1, 0xF0, 0x25 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(header.m_buildVersion * length); + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (digest[7] + (ushort) (header.m_dataCount & 511)); + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + uint digestIdx = header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[digestIdx % SHA1_DIGESTSIZE]; + ++digestIdx; + } + return buffer; + } +} + +// +// Key+IV provider for build 38125. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38125.cs +// + +namespace KeyCMF_038125 +{ + static const BYTE Keytable[] = + { + 0x38, 0xBD, 0xA8, 0x9E, 0x49, 0xC2, 0xBD, 0x0F, 0x21, 0x9E, 0x44, 0x7A, 0x8E, 0xD2, 0x22, 0x4E, + 0x36, 0x75, 0xEC, 0x49, 0x91, 0xEB, 0x73, 0x17, 0x3C, 0x02, 0x1D, 0x14, 0x9B, 0x18, 0xDF, 0x23, + 0xD5, 0x70, 0x41, 0x12, 0x0C, 0x98, 0x9B, 0x3E, 0x63, 0x5B, 0x67, 0x26, 0x5F, 0x4C, 0x95, 0x25, + 0x46, 0x24, 0x07, 0x48, 0x4E, 0xEF, 0x82, 0x6D, 0xBA, 0xDA, 0xCD, 0x0A, 0xEA, 0xF0, 0x43, 0x60, + 0x24, 0xEA, 0xDD, 0x39, 0x86, 0x0E, 0x2C, 0xB2, 0xE1, 0xB3, 0x59, 0xA2, 0xB6, 0x4B, 0xC6, 0x9F, + 0xB6, 0x18, 0xF2, 0xFC, 0xEE, 0xA2, 0x42, 0x72, 0x4C, 0x82, 0xCA, 0xC2, 0x6D, 0x55, 0xEF, 0x05, + 0x2D, 0x0C, 0x6B, 0x66, 0x51, 0xFC, 0xB3, 0xC9, 0x92, 0xB3, 0x19, 0xDE, 0xAA, 0x4E, 0x3D, 0x26, + 0xE3, 0x1A, 0x2C, 0xA1, 0xA0, 0x7B, 0x5F, 0xF4, 0xF5, 0xF8, 0x43, 0x61, 0x10, 0x31, 0xDE, 0x45, + 0xEE, 0xA4, 0xA9, 0x92, 0x9E, 0x89, 0x66, 0x1C, 0x4F, 0x52, 0x03, 0x21, 0xA5, 0x81, 0x7C, 0x66, + 0x4A, 0x28, 0xF4, 0x22, 0x2C, 0xC6, 0xBC, 0x0C, 0xFF, 0x26, 0x15, 0x19, 0xBC, 0x88, 0xC9, 0x60, + 0x52, 0x71, 0x89, 0x1B, 0xFD, 0xB0, 0x59, 0x37, 0x7B, 0xE7, 0xD5, 0xCD, 0x78, 0x4B, 0x76, 0xF7, + 0x56, 0x81, 0x64, 0x22, 0x64, 0xA7, 0xFA, 0x18, 0x13, 0x50, 0x54, 0x03, 0x71, 0xD2, 0x58, 0xE4, + 0x7E, 0xA6, 0x86, 0x44, 0x5E, 0x94, 0x6D, 0x86, 0xD2, 0xCC, 0x10, 0xC8, 0xE3, 0xF4, 0x23, 0xA5, + 0x53, 0x26, 0x35, 0x68, 0xD4, 0x67, 0x05, 0xC1, 0x69, 0x4D, 0x68, 0x8F, 0x6B, 0x8D, 0x7F, 0x23, + 0xB8, 0x3A, 0x85, 0x8A, 0x19, 0x36, 0x17, 0xCE, 0xC8, 0xBA, 0x1D, 0x84, 0x2F, 0xBD, 0x4E, 0xCF, + 0x10, 0x3B, 0x16, 0x35, 0x13, 0xD2, 0x31, 0x15, 0x0E, 0x68, 0x0C, 0x27, 0xE5, 0x68, 0x43, 0x1A, + 0x6A, 0x45, 0x43, 0x08, 0x63, 0xF8, 0x6F, 0xB7, 0x7D, 0x56, 0xD0, 0x48, 0x87, 0xAF, 0xE8, 0xDE, + 0xAE, 0x57, 0x86, 0x87, 0x66, 0x2C, 0xC2, 0xD2, 0xBA, 0xFB, 0x47, 0x99, 0x64, 0xD6, 0x8A, 0x9D, + 0xFD, 0x59, 0x5C, 0x5D, 0x9A, 0xC7, 0xB8, 0xB4, 0xB2, 0x5D, 0x16, 0x39, 0x02, 0x6B, 0x58, 0x1E, + 0x7C, 0x35, 0xC9, 0x2A, 0xBB, 0xF0, 0xCE, 0x1D, 0x03, 0x15, 0x16, 0xE4, 0x76, 0x8E, 0x1F, 0xE9, + 0xC3, 0x87, 0x5D, 0xC0, 0x3A, 0x4F, 0x71, 0x24, 0xF6, 0xA3, 0xBA, 0xA6, 0x11, 0xDC, 0x2E, 0x84, + 0x52, 0xFF, 0x1A, 0x5F, 0x22, 0x22, 0x79, 0x0A, 0x71, 0xD1, 0x75, 0xD5, 0x3D, 0xA1, 0x5C, 0x53, + 0x76, 0x6D, 0x5F, 0x32, 0xCC, 0xB6, 0x01, 0x1F, 0xD2, 0x54, 0x9F, 0xB3, 0xB6, 0x9D, 0x1F, 0x1D, + 0x28, 0xBD, 0x10, 0xE1, 0x4C, 0x56, 0x4F, 0x12, 0xFB, 0x1A, 0xA5, 0x5C, 0xAA, 0x04, 0x84, 0x3C, + 0xB1, 0x56, 0x5C, 0xD7, 0xB4, 0xDF, 0x9C, 0xEC, 0xD1, 0x22, 0x58, 0x34, 0x88, 0x03, 0x44, 0x61, + 0x21, 0x6A, 0xD2, 0xB5, 0xDE, 0xBD, 0x73, 0x3C, 0xBB, 0xC6, 0x60, 0x33, 0x94, 0x71, 0x86, 0x37, + 0xC2, 0xF5, 0x50, 0x33, 0xE0, 0x5C, 0xBD, 0x4D, 0xE5, 0xA1, 0xF0, 0x09, 0xF0, 0xEC, 0x34, 0x1A, + 0xAB, 0xA2, 0x2A, 0x08, 0xF4, 0xA8, 0x66, 0xAD, 0x07, 0xB4, 0x59, 0x00, 0xA4, 0x2A, 0x4A, 0x02, + 0x15, 0x47, 0x96, 0x9C, 0xFE, 0x21, 0xA1, 0xB2, 0xD8, 0xE1, 0x93, 0x39, 0xD1, 0x7C, 0x65, 0x7A, + 0xB1, 0x46, 0x20, 0x25, 0xCB, 0xD8, 0xEC, 0xF1, 0x2D, 0x3C, 0x02, 0x43, 0x0D, 0xC8, 0xF0, 0xA0, + 0xEF, 0xDA, 0x81, 0x50, 0xAD, 0x56, 0x7B, 0x5C, 0x00, 0x13, 0x2A, 0xE5, 0x72, 0xBC, 0x6A, 0xDE, + 0x31, 0xB9, 0x06, 0xE5, 0x44, 0x87, 0xE9, 0x14, 0xD6, 0xD2, 0xA1, 0x7A, 0x80, 0x32, 0xC7, 0x19 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= header.m_buildVersion; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= 43; + buffer[i] ^= (byte) (digest[(kidx + header.m_dataCount) % SHA1_DIGESTSIZE] % 0xFF); + } + return buffer; + } +} + +// +// Key+IV provider for build 38170. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38170.cs +// + +namespace KeyCMF_038170 +{ + static const BYTE Keytable[] = + { + 0x78, 0x3F, 0xEC, 0x15, 0xEB, 0xDA, 0xF2, 0xB0, 0x62, 0xD7, 0x0D, 0xCD, 0x15, 0x06, 0x62, 0x94, + 0xA3, 0x25, 0x6E, 0x17, 0x0C, 0x6F, 0x80, 0xCB, 0xEA, 0x6D, 0x88, 0x1E, 0x28, 0xA5, 0x9D, 0xD5, + 0x33, 0x0C, 0x0C, 0xC3, 0x3D, 0x1F, 0x26, 0x0F, 0x65, 0x7C, 0x43, 0xEA, 0x1F, 0xAE, 0x1F, 0x14, + 0xE8, 0x6B, 0xEE, 0x04, 0xEE, 0x62, 0xB7, 0xDA, 0xDF, 0x8C, 0x9C, 0x34, 0x2F, 0x93, 0x77, 0xD6, + 0xAE, 0x8C, 0x13, 0x3A, 0x74, 0x4E, 0xB4, 0x26, 0xBA, 0x89, 0xA2, 0x53, 0xA9, 0x33, 0xCF, 0x50, + 0x51, 0x9E, 0xC4, 0x01, 0xB6, 0x7C, 0x77, 0x7B, 0x9B, 0x31, 0x90, 0xA5, 0x1B, 0xF0, 0x1D, 0x29, + 0xEE, 0x35, 0x38, 0xE7, 0x9F, 0x13, 0xD5, 0x10, 0x2C, 0xF3, 0x95, 0xE4, 0xB0, 0xAA, 0xD0, 0x76, + 0x64, 0x3A, 0xDB, 0x5A, 0x37, 0xF4, 0xEB, 0x8E, 0x81, 0x7B, 0x24, 0x35, 0x81, 0x30, 0xD7, 0x43, + 0x5B, 0x0C, 0xAD, 0xCB, 0x78, 0x50, 0xFD, 0xAF, 0xE0, 0x51, 0xB2, 0xB4, 0x4A, 0x72, 0xC0, 0x3B, + 0xF8, 0xA3, 0x5A, 0x38, 0x49, 0x5E, 0x04, 0x25, 0xC8, 0xB8, 0xA5, 0xA4, 0x30, 0x0F, 0x7E, 0x47, + 0xFF, 0xA2, 0x19, 0x9A, 0xD0, 0x69, 0xC5, 0x98, 0xD8, 0xAC, 0xE3, 0xB7, 0x22, 0x96, 0x92, 0xF1, + 0x0E, 0x00, 0x9F, 0x23, 0xCD, 0x4B, 0x5A, 0xA8, 0xC5, 0x36, 0x2B, 0x77, 0x21, 0x57, 0xEC, 0x9A, + 0x48, 0xC4, 0xED, 0x13, 0x13, 0x06, 0x09, 0xE2, 0x08, 0x56, 0x38, 0x98, 0xA5, 0x50, 0x9B, 0x68, + 0x3D, 0xA4, 0x9A, 0x18, 0xCE, 0x99, 0x83, 0x69, 0xE9, 0x3D, 0xC9, 0xE8, 0x42, 0x60, 0xF8, 0x10, + 0xA8, 0xBB, 0x49, 0xE2, 0x6A, 0x85, 0x5B, 0x42, 0x36, 0x5D, 0x07, 0xFA, 0xED, 0xFE, 0x59, 0xDB, + 0x80, 0x11, 0x7F, 0xE0, 0x7B, 0xF3, 0x4A, 0x28, 0xDA, 0xF9, 0x8C, 0x7B, 0x4A, 0x33, 0x42, 0xB3, + 0xFC, 0xC8, 0xB0, 0x4F, 0x74, 0xB8, 0x3D, 0xFE, 0xED, 0x65, 0x1B, 0x9D, 0x89, 0xB2, 0x68, 0x94, + 0x48, 0x86, 0x3D, 0x16, 0x9F, 0xE6, 0x4C, 0x80, 0xB9, 0x6A, 0xA6, 0xDA, 0xA1, 0x8A, 0x7D, 0x8D, + 0xB6, 0x3B, 0x7D, 0x81, 0x38, 0xEE, 0xEB, 0x95, 0xBF, 0x57, 0x4A, 0xCB, 0xE6, 0x8A, 0x34, 0x2A, + 0xAB, 0x05, 0xE5, 0xB8, 0x23, 0xF2, 0x62, 0x55, 0x0D, 0xDE, 0xF0, 0x81, 0x1C, 0xF3, 0xAF, 0xE3, + 0x04, 0x65, 0xBD, 0xA4, 0xA1, 0xA2, 0x52, 0x00, 0x38, 0x54, 0xE4, 0x8D, 0xFB, 0x61, 0x4C, 0x52, + 0xCB, 0x1E, 0xAE, 0x22, 0xB6, 0xB7, 0x77, 0x40, 0xA4, 0xA4, 0xAA, 0xC8, 0x93, 0xA9, 0xDB, 0xF7, + 0xF3, 0xF3, 0x61, 0xB7, 0xAA, 0x58, 0x0A, 0x42, 0xC2, 0x29, 0x12, 0x1B, 0xC6, 0xE1, 0xD6, 0x27, + 0xF8, 0xB7, 0x83, 0x4C, 0x6D, 0xBD, 0xB2, 0xC2, 0xA1, 0xCE, 0x29, 0xFC, 0xE5, 0xE2, 0xC5, 0xE0, + 0x6D, 0x39, 0x26, 0x8C, 0x16, 0xB4, 0x69, 0xA8, 0xEA, 0xE1, 0xC7, 0x45, 0x0E, 0x0D, 0xF4, 0xDB, + 0x9C, 0xAC, 0x3E, 0xB9, 0x0D, 0x08, 0x75, 0x8E, 0x5F, 0x8A, 0xC5, 0x18, 0xA8, 0xD5, 0x34, 0xB2, + 0x00, 0xC3, 0x27, 0x56, 0x49, 0xA2, 0x9E, 0x46, 0x48, 0x25, 0xFE, 0x27, 0x13, 0x8A, 0x7C, 0x64, + 0x94, 0x25, 0xCD, 0xA9, 0xEC, 0xDB, 0xE6, 0x4B, 0x39, 0x8D, 0xAE, 0x1F, 0x31, 0x2C, 0x5F, 0x37, + 0xE6, 0x08, 0x24, 0xC6, 0x43, 0xDD, 0xF8, 0x48, 0x5D, 0x87, 0x1A, 0x20, 0xBD, 0x12, 0xFE, 0x57, + 0x7E, 0x12, 0x1D, 0x91, 0x90, 0x7C, 0x90, 0xFB, 0x80, 0x3D, 0xCA, 0x37, 0xF9, 0xDA, 0x7A, 0x75, + 0xC6, 0x30, 0x2B, 0x62, 0x61, 0xCA, 0xE1, 0xA9, 0xB8, 0x03, 0xB1, 0xF5, 0xBD, 0xA1, 0x76, 0xA0, + 0x77, 0xDE, 0xEA, 0xDC, 0xEC, 0x80, 0x69, 0x27, 0x52, 0xC2, 0x34, 0x33, 0x17, 0xDC, 0x1E, 0x97 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (digest[7] + (ushort) header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 38248. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38248.cs +// + +namespace KeyCMF_038248 +{ + static const BYTE Keytable[] = + { + 0xDE, 0xC2, 0xB8, 0x91, 0x1E, 0xFA, 0x66, 0xCB, 0xE9, 0x45, 0x0A, 0xF6, 0x0E, 0x6F, 0x9A, 0xF3, + 0x41, 0xEC, 0xA6, 0xC7, 0x84, 0x05, 0x5B, 0xD3, 0x6B, 0x7B, 0x4C, 0xA4, 0x55, 0x18, 0x26, 0xF3, + 0xBA, 0xA8, 0x41, 0x9A, 0x7E, 0xAA, 0x99, 0xE3, 0xA4, 0x11, 0x31, 0xED, 0x3A, 0xDF, 0x44, 0xCC, + 0x28, 0x3C, 0xB7, 0xFE, 0x95, 0x4F, 0xCD, 0xA9, 0x66, 0x7E, 0x58, 0x11, 0x99, 0xC8, 0x25, 0x93, + 0x3E, 0xD0, 0xCF, 0x9B, 0xEA, 0xF2, 0xB1, 0x1E, 0x69, 0x4A, 0x72, 0x73, 0xDD, 0x4D, 0x39, 0x56, + 0xD4, 0x25, 0x88, 0x66, 0x2F, 0x41, 0x1C, 0x93, 0x50, 0x3C, 0x06, 0x80, 0xB0, 0x16, 0xB1, 0x10, + 0xE8, 0xFD, 0xE2, 0x6A, 0xC7, 0xFE, 0x51, 0x38, 0x54, 0xBD, 0xF3, 0x5A, 0x61, 0xBB, 0xF1, 0x7E, + 0x5B, 0x73, 0x9E, 0xB7, 0x79, 0xFB, 0xAC, 0x44, 0x01, 0xD0, 0x59, 0x90, 0xB5, 0xE0, 0xAD, 0xC0, + 0x71, 0x52, 0x5C, 0x3C, 0xCF, 0x6E, 0xD6, 0x46, 0x0B, 0xE9, 0x15, 0x8C, 0xD6, 0x44, 0xB6, 0x40, + 0x8A, 0xFB, 0x37, 0x9D, 0x7E, 0x81, 0x00, 0x03, 0xB3, 0x66, 0x08, 0x60, 0xB2, 0xDC, 0x93, 0x8F, + 0x39, 0x13, 0x62, 0xAE, 0xBB, 0x33, 0x59, 0xA3, 0xD3, 0xAE, 0x1C, 0x23, 0xDB, 0x17, 0x04, 0xC2, + 0x84, 0x64, 0xF0, 0x1A, 0xF7, 0x7C, 0x0F, 0xA1, 0x73, 0xEE, 0x9B, 0x72, 0x42, 0x50, 0x13, 0x1C, + 0xC0, 0xEC, 0x01, 0x99, 0x5B, 0xE4, 0x50, 0x6A, 0x80, 0x1F, 0x8D, 0xAB, 0x1F, 0x15, 0xB1, 0x86, + 0x45, 0x12, 0x0B, 0x3D, 0xD0, 0x73, 0xD8, 0xF4, 0xC0, 0x83, 0x66, 0x4E, 0xD6, 0xD8, 0xEE, 0xA1, + 0xAB, 0xB2, 0x28, 0xAA, 0x77, 0xC1, 0xDC, 0x8D, 0x12, 0x98, 0x1A, 0x5D, 0x54, 0x69, 0x60, 0x6F, + 0x95, 0x99, 0x21, 0x39, 0xD5, 0xDC, 0xDD, 0xF4, 0x2C, 0x38, 0xE0, 0xD6, 0x30, 0x71, 0x1C, 0xEF, + 0x07, 0x9E, 0xF8, 0x51, 0xBB, 0x0F, 0x0E, 0x46, 0xC9, 0x95, 0x61, 0xDA, 0xA0, 0xBF, 0x6D, 0xE6, + 0x6E, 0x23, 0x47, 0x4E, 0x19, 0xE3, 0x38, 0x74, 0x27, 0xC1, 0xEA, 0xCE, 0x17, 0x68, 0x39, 0xA0, + 0xBF, 0x3C, 0xF9, 0x6F, 0xCA, 0xE3, 0x74, 0xBB, 0xC8, 0x6F, 0x43, 0x79, 0x8A, 0x60, 0xDE, 0xFB, + 0xE4, 0xA1, 0x03, 0xD6, 0xB7, 0x74, 0x0C, 0xCF, 0xF4, 0x40, 0xC6, 0xA3, 0x73, 0x5F, 0xD3, 0x2A, + 0x1E, 0xBC, 0xF6, 0xF6, 0xCC, 0x62, 0x4F, 0x38, 0xA0, 0x60, 0x65, 0x78, 0x34, 0x96, 0x60, 0x14, + 0xA4, 0x75, 0x13, 0x87, 0x0F, 0x70, 0x87, 0x96, 0x74, 0xA9, 0xF3, 0xE9, 0x50, 0xF2, 0x25, 0xBE, + 0x18, 0xBD, 0x59, 0xF3, 0x80, 0x6A, 0x15, 0xFB, 0xC2, 0xD1, 0x35, 0xBB, 0x39, 0xA9, 0x20, 0xC5, + 0x3D, 0xC9, 0x12, 0xBB, 0x30, 0x55, 0xE6, 0x47, 0x2F, 0x38, 0x0B, 0xDA, 0x36, 0xED, 0x05, 0xB1, + 0x9F, 0x27, 0xB7, 0xFA, 0x84, 0x42, 0x20, 0xDC, 0x45, 0x23, 0x38, 0x68, 0x6B, 0x1F, 0xF7, 0xAD, + 0x31, 0xC5, 0x2E, 0x05, 0x00, 0x36, 0x4C, 0x74, 0x29, 0x5C, 0x58, 0x60, 0xCE, 0x0E, 0xAE, 0x2E, + 0x51, 0xBD, 0xBA, 0x2A, 0x08, 0x71, 0xDA, 0x4E, 0x76, 0x29, 0xD1, 0x1C, 0x93, 0xC4, 0xB9, 0x05, + 0xEF, 0x4E, 0x2B, 0x0A, 0xC9, 0x1F, 0x9D, 0x16, 0xDD, 0xF3, 0xF9, 0x4A, 0xAE, 0xE5, 0xD6, 0x90, + 0xFC, 0xAA, 0xF3, 0xBF, 0xA0, 0xEB, 0xFD, 0x50, 0xB0, 0x22, 0xA2, 0x4D, 0x38, 0x82, 0x74, 0x94, + 0x4C, 0x2E, 0x3E, 0xC2, 0x1C, 0x8C, 0x05, 0x64, 0x6C, 0x73, 0x15, 0x3A, 0x8D, 0xF1, 0x77, 0x59, + 0xAE, 0xFC, 0xFB, 0x41, 0x01, 0xC0, 0xB8, 0x27, 0x9B, 0x38, 0xB3, 0x8F, 0x55, 0x77, 0x68, 0x15, + 0x91, 0x34, 0xEE, 0xDA, 0x4C, 0x82, 0x8B, 0xC6, 0xF4, 0x54, 0x9A, 0x73, 0xE6, 0xBF, 0xF1, 0x95 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 38459. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38459.cs +// + +namespace KeyCMF_038459 +{ + static const BYTE Keytable[] = + { + 0xA9, 0xD9, 0x35, 0x16, 0x46, 0xF4, 0x84, 0x2A, 0x2E, 0xD6, 0x9D, 0x01, 0x2F, 0xBD, 0x2E, 0xAD, + 0xE0, 0x1C, 0xD7, 0x63, 0xD8, 0x69, 0x9A, 0x8E, 0xC0, 0x0D, 0x65, 0x7F, 0x72, 0x44, 0xEB, 0x8E, + 0x66, 0x12, 0xBC, 0xC0, 0x5E, 0x9F, 0x29, 0x3C, 0xD5, 0xFF, 0x8A, 0x1B, 0x40, 0x50, 0x52, 0xDE, + 0xC1, 0xA5, 0x29, 0xE4, 0xD2, 0x77, 0x8E, 0x8B, 0xB3, 0xBF, 0x7B, 0x09, 0x39, 0xBB, 0x26, 0xAC, + 0x44, 0x62, 0x2A, 0x00, 0x00, 0x97, 0x71, 0x1D, 0x56, 0xE6, 0xF0, 0xEF, 0x18, 0x24, 0xC1, 0xB1, + 0x7B, 0x37, 0xF9, 0xBB, 0xE3, 0x21, 0xE7, 0xC7, 0xBB, 0x8F, 0x98, 0xBF, 0xB9, 0xD1, 0xAF, 0xA9, + 0xD8, 0x04, 0xB4, 0xEC, 0x30, 0x8D, 0x13, 0xCA, 0xC0, 0xF3, 0xEF, 0x09, 0x6C, 0x2C, 0x2C, 0xD8, + 0x9C, 0x20, 0x36, 0xC0, 0x92, 0xAE, 0xEB, 0x78, 0xC6, 0xF5, 0x79, 0xD9, 0x93, 0x35, 0x2D, 0x19, + 0xC5, 0xE1, 0x29, 0xC1, 0x76, 0xA2, 0x85, 0x08, 0x51, 0x2F, 0x52, 0x23, 0x7B, 0x27, 0x0A, 0x6E, + 0xF2, 0x45, 0xB7, 0x60, 0xB9, 0xE0, 0xBA, 0x57, 0xCC, 0x59, 0x59, 0x38, 0x30, 0x1B, 0xA3, 0x39, + 0x8A, 0xD6, 0x38, 0x2D, 0x4A, 0xE8, 0x9C, 0x6C, 0xEF, 0xC8, 0x7D, 0x0B, 0xD5, 0xF6, 0xFF, 0x5D, + 0x20, 0xCE, 0xA7, 0xA9, 0x4A, 0x33, 0x60, 0xDB, 0xBC, 0xC4, 0x1F, 0x8E, 0x2C, 0x27, 0xBA, 0x7A, + 0xBB, 0x5C, 0x66, 0x2C, 0x81, 0x13, 0x30, 0xD0, 0xC4, 0x8A, 0xCC, 0x18, 0x55, 0xA6, 0x32, 0xBB, + 0x10, 0x0D, 0xA0, 0x30, 0xEE, 0x9D, 0x77, 0x1A, 0xC7, 0xCC, 0x9C, 0x7E, 0xE4, 0x9B, 0xFD, 0x94, + 0x9E, 0xFD, 0x8B, 0x09, 0x1B, 0x27, 0x0C, 0x85, 0x38, 0x28, 0x6A, 0x58, 0x8C, 0xB6, 0x24, 0x5A, + 0xD0, 0x07, 0xE8, 0x9A, 0xE7, 0x20, 0x5D, 0xCE, 0xD4, 0x64, 0x01, 0xF9, 0xCF, 0xD3, 0x72, 0xA0, + 0x4C, 0x6A, 0x33, 0x80, 0x89, 0xBC, 0x52, 0x55, 0x26, 0xE8, 0x71, 0xA4, 0x83, 0x12, 0x54, 0x19, + 0x53, 0xB9, 0xF5, 0x25, 0x6C, 0x8D, 0x38, 0x63, 0x5A, 0xD7, 0xF3, 0xE9, 0x14, 0x68, 0x33, 0xD4, + 0x9C, 0xE1, 0xF4, 0x5B, 0x2E, 0x22, 0x9A, 0x08, 0x73, 0xEF, 0xE6, 0x86, 0xC5, 0xA0, 0x76, 0x6E, + 0x0D, 0x4A, 0x13, 0xF4, 0xB2, 0x6D, 0xB2, 0xE8, 0xBB, 0xC3, 0x10, 0xAA, 0xBF, 0x03, 0x03, 0x7A, + 0x62, 0x49, 0x31, 0x9A, 0x3D, 0xA7, 0xEC, 0x7D, 0xCC, 0x4A, 0xC2, 0x8A, 0xB9, 0x65, 0x68, 0xBC, + 0x09, 0x96, 0x0D, 0x6A, 0xAC, 0x0C, 0x49, 0x34, 0x9D, 0xD8, 0xF6, 0xC1, 0x18, 0xEB, 0xD3, 0x80, + 0x38, 0xC2, 0xC8, 0x91, 0x27, 0x67, 0xC7, 0x47, 0xCD, 0x74, 0xF4, 0x09, 0x38, 0xA4, 0x1B, 0x35, + 0xDD, 0x97, 0xBF, 0x7A, 0x40, 0xEC, 0x8B, 0xC0, 0xA3, 0xF8, 0xFE, 0x1A, 0x7A, 0x54, 0x45, 0x51, + 0x15, 0xD7, 0x9B, 0xCE, 0x23, 0xB4, 0x33, 0x90, 0x5B, 0x63, 0xD2, 0xF9, 0xCE, 0xF0, 0x9A, 0xC1, + 0x79, 0xFD, 0xCF, 0x53, 0x50, 0x1C, 0x43, 0x70, 0x6D, 0xF2, 0xBF, 0x45, 0xD0, 0xFA, 0xE8, 0xCA, + 0xA8, 0x49, 0xC6, 0x2A, 0xBD, 0xBA, 0x78, 0x37, 0x5B, 0x82, 0xCC, 0x9D, 0x55, 0x57, 0x44, 0x9A, + 0xDE, 0xAA, 0xF7, 0xB9, 0x15, 0x2C, 0xA4, 0x32, 0x4C, 0xFD, 0xE2, 0xC2, 0xE3, 0xBE, 0x72, 0x30, + 0x97, 0x1B, 0xDD, 0xDF, 0xA8, 0x8D, 0x8F, 0x35, 0x8F, 0x23, 0xE8, 0xA8, 0x9E, 0x84, 0xE1, 0x78, + 0x87, 0xD6, 0x7D, 0x57, 0xF9, 0x00, 0x32, 0xE7, 0x85, 0xAA, 0x84, 0x17, 0xBE, 0xCD, 0x55, 0x77, + 0x57, 0x98, 0x6B, 0xB5, 0xF0, 0x20, 0x99, 0x7D, 0x05, 0xB5, 0x21, 0x74, 0x45, 0x03, 0x05, 0x7A, + 0x87, 0x1B, 0x81, 0xFA, 0x90, 0x98, 0xFB, 0xA8, 0x2A, 0xD9, 0xBD, 0x4C, 0x21, 0xC5, 0xA5, 0xDE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(2 * digest[13] - length) % 512]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + buffer[i] = digest[(i + kidx) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 38765. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38765.cs +// + +namespace KeyCMF_038765 +{ + static const BYTE Keytable[] = + { + 0xD7, 0x08, 0x0F, 0xC0, 0x14, 0x86, 0x8A, 0x64, 0xC3, 0x8E, 0x51, 0x13, 0xA4, 0x0C, 0x7D, 0xA7, + 0xC8, 0xA9, 0x60, 0x06, 0xD9, 0x7A, 0x94, 0x6B, 0x3F, 0x39, 0xD3, 0xB4, 0xAD, 0x89, 0x3A, 0x6B, + 0xBF, 0x04, 0x89, 0x63, 0xEC, 0xF2, 0x79, 0x32, 0x3B, 0xF6, 0x55, 0x58, 0xF2, 0xE8, 0xBC, 0x4D, + 0xE3, 0xCB, 0x09, 0x17, 0x04, 0xA4, 0xE1, 0x25, 0xDC, 0x54, 0x87, 0xEA, 0x97, 0x94, 0x0C, 0x0B, + 0x98, 0x04, 0x59, 0x35, 0xF0, 0xC0, 0x54, 0xC2, 0xFD, 0x9D, 0x9D, 0xB6, 0xCA, 0x3F, 0xE8, 0xEC, + 0x64, 0xC7, 0x98, 0xB7, 0x86, 0x20, 0x8E, 0xA6, 0xFA, 0xC3, 0x09, 0xC7, 0x8E, 0x31, 0xCD, 0x1A, + 0x3A, 0xF5, 0xEF, 0x0B, 0xDA, 0xB1, 0x7E, 0x84, 0x44, 0x6C, 0xBA, 0xD3, 0x8A, 0xFE, 0xA5, 0xAA, + 0x8E, 0x1E, 0x71, 0x49, 0x22, 0x55, 0x1D, 0x3F, 0x16, 0xB0, 0xCD, 0xF5, 0xA3, 0x65, 0x68, 0xC4, + 0x5E, 0x84, 0x82, 0xB2, 0xFE, 0xA8, 0xE9, 0x29, 0x15, 0x72, 0xBA, 0xEF, 0xAD, 0x50, 0x82, 0x72, + 0x79, 0x54, 0x26, 0x9D, 0x62, 0x5C, 0xE8, 0xF9, 0x18, 0x57, 0xC8, 0x9A, 0x00, 0x22, 0xDF, 0xCF, + 0xA0, 0x14, 0x95, 0xB4, 0xEC, 0xD6, 0xB2, 0x1B, 0x4B, 0xF6, 0xA1, 0xEF, 0x86, 0xC1, 0x73, 0x82, + 0xB7, 0xF0, 0x42, 0xD1, 0xC0, 0xCA, 0xE6, 0x3A, 0x97, 0xD5, 0xE0, 0x92, 0xC7, 0xF1, 0xCF, 0x39, + 0xA8, 0xF8, 0xD8, 0x32, 0xD5, 0xA6, 0x6E, 0x6A, 0xEC, 0xD7, 0x42, 0x29, 0x2E, 0xAA, 0x34, 0x0B, + 0x43, 0x2A, 0x81, 0x0F, 0x52, 0x37, 0xEC, 0x6D, 0x8D, 0x8B, 0xC4, 0x93, 0x64, 0x9C, 0x5F, 0xB7, + 0x5B, 0x47, 0xA5, 0xA0, 0xF0, 0x54, 0x35, 0xCC, 0x2B, 0xF3, 0x5F, 0x6D, 0x69, 0xD4, 0xA9, 0x88, + 0x29, 0xEC, 0x30, 0x3A, 0xFD, 0xED, 0x41, 0x66, 0xD0, 0x55, 0xA2, 0x39, 0x62, 0xBD, 0x21, 0xAA, + 0xEB, 0x03, 0x54, 0xD3, 0x15, 0x00, 0xA5, 0xEA, 0x4A, 0xF9, 0x19, 0x23, 0xEE, 0xE4, 0x47, 0x18, + 0x77, 0x53, 0xD5, 0x60, 0x3C, 0xD0, 0x8E, 0x0E, 0xAA, 0x64, 0xE7, 0x5A, 0xE1, 0x4E, 0xB4, 0x9B, + 0x9F, 0x1D, 0xFD, 0x48, 0x24, 0x87, 0x6A, 0xDF, 0xE7, 0xB5, 0x0C, 0x3C, 0x9E, 0x1E, 0x14, 0xEB, + 0x87, 0x9A, 0xC4, 0x38, 0x85, 0xD5, 0xF8, 0xBD, 0x90, 0x46, 0x80, 0xAA, 0x6A, 0x3F, 0x65, 0x9B, + 0xBD, 0xBD, 0x00, 0x02, 0xAE, 0xF7, 0xA5, 0x5B, 0xCB, 0x08, 0x82, 0xA7, 0x1D, 0x79, 0xBF, 0x33, + 0x52, 0x64, 0x19, 0x0F, 0x25, 0xD3, 0x29, 0x13, 0xBF, 0x69, 0xA4, 0xB5, 0xBA, 0x9E, 0x3C, 0xDC, + 0xCA, 0x35, 0xA1, 0xF7, 0x41, 0x4B, 0xEF, 0xA8, 0xB3, 0xB0, 0xAD, 0x10, 0x10, 0xA8, 0xF0, 0xED, + 0xEF, 0xE1, 0xCB, 0xEC, 0x2C, 0x19, 0xD9, 0x55, 0xD2, 0x6A, 0x0E, 0x1D, 0xD1, 0x4D, 0xE5, 0x92, + 0x73, 0x5E, 0x10, 0xD3, 0x6D, 0xA5, 0x37, 0x37, 0xB3, 0x26, 0xAA, 0x14, 0xB2, 0x39, 0x0B, 0xFB, + 0xB2, 0xCB, 0x48, 0xB3, 0xA2, 0x25, 0x47, 0xAB, 0x3A, 0x13, 0x37, 0x9F, 0x2E, 0xC5, 0xF4, 0x6F, + 0xCB, 0x00, 0xDE, 0xDC, 0xD6, 0xA1, 0xF8, 0xC9, 0x55, 0x82, 0x79, 0x11, 0x67, 0x06, 0xE4, 0xDE, + 0x16, 0x2B, 0x8C, 0x0E, 0xAE, 0x7A, 0x37, 0xAE, 0xF1, 0xBE, 0xAF, 0x54, 0x8E, 0x08, 0x17, 0xE2, + 0x7B, 0x1B, 0x5E, 0xFE, 0xB5, 0xE8, 0x84, 0x9F, 0x14, 0x31, 0x1B, 0x42, 0xC6, 0x3E, 0x09, 0xDE, + 0xE9, 0x51, 0xB4, 0x83, 0x0F, 0x38, 0xF3, 0x02, 0x16, 0x5E, 0x37, 0x1B, 0x25, 0xFE, 0x6F, 0xF2, + 0xF3, 0xDB, 0x5E, 0x4F, 0xD7, 0xD7, 0xFC, 0x51, 0x15, 0xA0, 0xBC, 0x0E, 0x16, 0x97, 0x47, 0x8C, + 0x0A, 0xF5, 0x2B, 0x76, 0x23, 0x2A, 0x04, 0x32, 0x72, 0xB1, 0x16, 0xD4, 0xAC, 0x96, 0x6B, 0x0B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(digest[7] + (ushort) header.m_dataCount) & 511; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 38882. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_38882.cs +// + +namespace KeyCMF_038882 +{ + static const BYTE Keytable[] = + { + 0x62, 0xBE, 0xC0, 0x8D, 0xF6, 0xE5, 0xCC, 0x26, 0x66, 0x57, 0xD5, 0x08, 0xC6, 0xC2, 0xFD, 0x3E, + 0xE7, 0x12, 0x9F, 0x1B, 0xC7, 0x78, 0x49, 0x8D, 0xF5, 0x7F, 0xBA, 0x4B, 0x77, 0xA3, 0xC7, 0xAB, + 0xA3, 0x6D, 0x2A, 0x85, 0x56, 0xEA, 0x07, 0x9A, 0xB2, 0x3B, 0x53, 0x1C, 0x65, 0x83, 0x87, 0x61, + 0x2D, 0xC3, 0x6E, 0x84, 0x50, 0x56, 0x6F, 0x4C, 0xCD, 0x2E, 0x68, 0xE7, 0x0B, 0xB4, 0x80, 0xE5, + 0xEA, 0x6C, 0xE8, 0xB9, 0x24, 0x82, 0xC6, 0xF6, 0x8A, 0xA5, 0xFF, 0x81, 0x16, 0x6E, 0x87, 0x6F, + 0x68, 0x29, 0x3C, 0x9F, 0x18, 0xB5, 0xAB, 0x9E, 0x1A, 0x5C, 0x9E, 0xCC, 0x89, 0xD1, 0x09, 0xE9, + 0x23, 0xBD, 0xFD, 0x02, 0xAB, 0xAA, 0x3A, 0xEA, 0xEF, 0x43, 0x6F, 0x2A, 0x3A, 0x76, 0x85, 0x1F, + 0x6B, 0x04, 0xA7, 0x9F, 0xB0, 0x61, 0x18, 0xFF, 0xB8, 0x4C, 0x45, 0xFA, 0xBC, 0xBA, 0x5B, 0x90, + 0x13, 0xEA, 0x2F, 0x39, 0x02, 0xB9, 0x62, 0x0C, 0x07, 0xAE, 0x64, 0x58, 0x0E, 0x21, 0x09, 0x2A, + 0xAA, 0x2A, 0x3F, 0x02, 0x49, 0xED, 0x5D, 0x53, 0xC4, 0x37, 0x44, 0x5F, 0x1F, 0xB6, 0x6D, 0x8B, + 0x2A, 0x4D, 0xF4, 0x98, 0x72, 0x81, 0x3A, 0x0E, 0xCA, 0x06, 0x8E, 0x11, 0x14, 0xEA, 0x48, 0x70, + 0xC9, 0x08, 0x44, 0xFC, 0xCC, 0xC8, 0x54, 0xED, 0x5D, 0x99, 0xC5, 0xA1, 0x01, 0x6F, 0x7F, 0x7E, + 0x55, 0x59, 0x6B, 0x20, 0x90, 0xA8, 0x33, 0xBD, 0x20, 0x17, 0xD5, 0x15, 0x0B, 0xB8, 0xDA, 0x49, + 0x1B, 0xCE, 0xD9, 0xD8, 0xC6, 0x96, 0x86, 0x06, 0xDA, 0x8E, 0xAF, 0x40, 0x21, 0x38, 0x4B, 0x4A, + 0x3B, 0xD6, 0x1B, 0xC0, 0x1E, 0x00, 0x92, 0xFB, 0xC1, 0x68, 0x4B, 0x7E, 0xF0, 0x7E, 0x35, 0xEA, + 0xDD, 0xEA, 0xEA, 0x52, 0x75, 0x3A, 0x42, 0xF2, 0xE2, 0xF5, 0x8F, 0xEE, 0x8F, 0xF4, 0x42, 0xC1, + 0x19, 0x80, 0xF8, 0xE9, 0xE7, 0xC3, 0x99, 0x9F, 0x03, 0x9B, 0xA7, 0x17, 0xDD, 0x8D, 0xAD, 0x9C, + 0x9B, 0x7F, 0xE1, 0x10, 0x5C, 0x4D, 0x08, 0x9E, 0x8F, 0xD3, 0x8C, 0x37, 0xE8, 0x1A, 0x9E, 0xAF, + 0xE7, 0x0C, 0x9B, 0xB1, 0x85, 0x27, 0x66, 0x97, 0xE4, 0xDB, 0x20, 0x14, 0xD2, 0xBF, 0x90, 0xD1, + 0x45, 0x72, 0xA2, 0xE9, 0x59, 0xEA, 0xEC, 0x31, 0x05, 0xB6, 0xE9, 0x80, 0x1F, 0xDE, 0xA8, 0x34, + 0xEF, 0x3D, 0xD9, 0xD7, 0xF7, 0x3B, 0xC2, 0x3C, 0xAD, 0x3D, 0x48, 0xB8, 0x9A, 0xD4, 0x01, 0x0B, + 0xF7, 0xB8, 0x54, 0x6F, 0xC8, 0x80, 0xC7, 0x72, 0x5C, 0xF2, 0xD9, 0xB9, 0x04, 0xC4, 0x9D, 0x37, + 0x76, 0x63, 0xB8, 0x47, 0xCD, 0x0E, 0x94, 0x87, 0x36, 0x7C, 0x9D, 0xBD, 0x9F, 0x50, 0x62, 0x17, + 0xBA, 0x08, 0xAD, 0x6B, 0xD2, 0x23, 0x45, 0x85, 0xDE, 0x0A, 0x28, 0xEB, 0x92, 0xEC, 0xC3, 0x5A, + 0xEB, 0x65, 0xFE, 0x7D, 0x23, 0x41, 0xC5, 0x34, 0x28, 0x49, 0x3C, 0x1F, 0xA2, 0x20, 0x9F, 0xEA, + 0x93, 0x22, 0x52, 0xEE, 0x9A, 0x92, 0x32, 0x98, 0xA9, 0xDF, 0x59, 0x1A, 0xD1, 0xBE, 0x68, 0x3F, + 0xE9, 0xE1, 0x45, 0xE5, 0x25, 0x39, 0x14, 0x5A, 0xBC, 0x38, 0x78, 0xDA, 0x39, 0x94, 0x0D, 0x69, + 0x13, 0x7A, 0x89, 0xC6, 0x2D, 0x90, 0x28, 0x23, 0x37, 0x67, 0xB7, 0x36, 0xC2, 0xCF, 0x40, 0x2F, + 0xDE, 0x10, 0xC8, 0xDA, 0x3E, 0x19, 0xA0, 0x9E, 0x22, 0xF8, 0x55, 0x4A, 0x4A, 0x20, 0xD8, 0xDD, + 0xE0, 0x21, 0x4A, 0x61, 0x18, 0xFC, 0xE4, 0x18, 0x91, 0x7C, 0x2B, 0x97, 0x5E, 0xC8, 0xEA, 0xF8, + 0x38, 0x87, 0x63, 0x3F, 0xDF, 0x5D, 0xD1, 0x91, 0x95, 0xE4, 0x63, 0x3C, 0xBE, 0x1B, 0xA2, 0x48, + 0x6A, 0xD9, 0x67, 0x3C, 0x2C, 0xD6, 0xF0, 0x3C, 0xEF, 0x84, 0xD4, 0x36, 0x7F, 0x38, 0x26, 0x8B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length * Keytable[0] % 512]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(digest[7] * Keytable[0]) & 511]; + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) ((digest[(kidx + header.m_entryCount) % SHA1_DIGESTSIZE] + 1) & 0xFF); + } + return buffer; + } +} + +// +// Key+IV provider for build 39023. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39023.cs +// + +namespace KeyCMF_039023 +{ + static const BYTE Keytable[] = + { + 0xB9, 0x61, 0xD0, 0x26, 0xCA, 0xC9, 0xE1, 0xA9, 0x6E, 0xA5, 0xEA, 0x15, 0x81, 0x57, 0x88, 0x21, + 0x49, 0x26, 0xB7, 0xC1, 0x91, 0x7D, 0x9C, 0xEE, 0x3F, 0xBC, 0x4C, 0x60, 0xE3, 0x56, 0x6B, 0x36, + 0x4D, 0x23, 0x34, 0x68, 0xD9, 0x37, 0x6C, 0x1D, 0x6E, 0x80, 0xB8, 0x46, 0xE3, 0xA7, 0xC3, 0x08, + 0x40, 0x74, 0x86, 0x40, 0x55, 0x57, 0xF8, 0x37, 0x54, 0x5C, 0x20, 0xE0, 0x9A, 0xD9, 0x03, 0xBC, + 0x81, 0x6F, 0x9B, 0x18, 0xD5, 0xF3, 0x01, 0x16, 0xCA, 0x37, 0xAB, 0x80, 0xA4, 0x48, 0x34, 0x44, + 0x77, 0xC0, 0xA5, 0x13, 0xC5, 0x48, 0xD5, 0xB8, 0x29, 0x84, 0x49, 0x32, 0xF2, 0x50, 0x12, 0xEB, + 0xB3, 0xFC, 0x08, 0xD4, 0xB7, 0x9C, 0x8A, 0xA5, 0x91, 0xC1, 0x2B, 0x50, 0x22, 0x42, 0xC4, 0xDF, + 0x43, 0xFB, 0x64, 0x66, 0x04, 0xE2, 0x91, 0x33, 0x5A, 0x76, 0x61, 0x1E, 0x7F, 0xB4, 0xBB, 0xFF, + 0x49, 0x6A, 0xE2, 0x7E, 0xB7, 0x49, 0xBD, 0x2F, 0x64, 0x1D, 0x19, 0x09, 0x74, 0x32, 0xF5, 0xD6, + 0x9F, 0xB9, 0x27, 0x9C, 0x96, 0x8C, 0xE7, 0x6D, 0x6E, 0x11, 0x97, 0x84, 0x97, 0x78, 0x6D, 0x94, + 0x4D, 0xBE, 0x49, 0xF7, 0x4A, 0x49, 0xA9, 0xAE, 0xD0, 0x9F, 0x82, 0xBC, 0xA7, 0xF7, 0x8C, 0x03, + 0xBD, 0x47, 0x7F, 0x0A, 0x53, 0x61, 0xE1, 0x53, 0x1F, 0xF7, 0xD4, 0x11, 0x7B, 0x69, 0xB4, 0x64, + 0x0E, 0xF7, 0x90, 0x79, 0x9C, 0x52, 0x91, 0xBB, 0x2B, 0xB2, 0xE3, 0xC2, 0x01, 0x5F, 0x32, 0x32, + 0x5D, 0xA8, 0xAA, 0xB1, 0x63, 0xCC, 0x48, 0xAE, 0xD1, 0x5A, 0xDD, 0x72, 0x36, 0x39, 0x23, 0x90, + 0x10, 0xAD, 0x8F, 0xF3, 0xE7, 0xCB, 0x90, 0x11, 0xBF, 0x12, 0x3D, 0x52, 0x1B, 0x7E, 0xE1, 0x18, + 0x2D, 0x82, 0xA2, 0x71, 0x94, 0x7D, 0xAA, 0x29, 0x94, 0xDE, 0xBF, 0xC6, 0x10, 0xBF, 0x98, 0x5A, + 0x6F, 0x27, 0xBD, 0xFA, 0xC7, 0xEE, 0xB6, 0x17, 0x66, 0x97, 0x04, 0xBE, 0xFD, 0x9A, 0x6C, 0x6C, + 0xE3, 0x57, 0xB8, 0x5E, 0x23, 0x91, 0x65, 0xFB, 0x44, 0x37, 0x68, 0xEC, 0xE9, 0x59, 0x76, 0x0D, + 0x49, 0x3C, 0x1D, 0x22, 0xEB, 0x72, 0x93, 0xB0, 0xAE, 0x82, 0x1D, 0xC5, 0x80, 0x21, 0x54, 0x87, + 0x7F, 0xE7, 0x9A, 0x35, 0x43, 0xE3, 0x01, 0x7D, 0xF0, 0x2E, 0xAD, 0xE5, 0x7C, 0xBF, 0x8C, 0x41, + 0x0C, 0xEC, 0x76, 0x72, 0xF5, 0x8E, 0x39, 0xA9, 0x23, 0x66, 0x14, 0x16, 0x69, 0x7D, 0x56, 0x66, + 0xB4, 0x39, 0x9A, 0xE4, 0x3D, 0x3D, 0x70, 0x88, 0xC4, 0xCA, 0xEA, 0xFF, 0x09, 0x67, 0xED, 0xF0, + 0x38, 0x9F, 0x9E, 0x50, 0xA0, 0x2A, 0x85, 0x0D, 0x71, 0x86, 0x53, 0xAF, 0xD2, 0xE5, 0xE0, 0x59, + 0x4F, 0xDC, 0x22, 0x46, 0xB3, 0x9D, 0xF7, 0x65, 0x59, 0x22, 0xB9, 0x44, 0x58, 0x91, 0x3E, 0xCD, + 0x3F, 0xA1, 0xD6, 0x50, 0x27, 0xD6, 0x1D, 0xE2, 0x09, 0xE6, 0xFA, 0x37, 0x40, 0x39, 0xA4, 0xAA, + 0xC9, 0x71, 0x9D, 0x21, 0x50, 0xF7, 0xA0, 0x06, 0xE3, 0x3C, 0x24, 0xAE, 0x44, 0x0A, 0x49, 0x9D, + 0xD3, 0xCD, 0x53, 0xFC, 0x06, 0x6D, 0x90, 0x76, 0x0B, 0xAE, 0xE1, 0x56, 0x42, 0xD3, 0x87, 0xEC, + 0x9C, 0x6D, 0xCC, 0xA6, 0xB9, 0x7C, 0xE0, 0xC7, 0x2B, 0x94, 0x47, 0xB1, 0x54, 0xB8, 0x4C, 0x6D, + 0x46, 0x53, 0xAE, 0x0F, 0x12, 0x55, 0x35, 0xDE, 0x6E, 0xDE, 0xAB, 0xD2, 0x79, 0xCA, 0x15, 0x05, + 0x04, 0x52, 0xDD, 0x12, 0x48, 0x34, 0x9E, 0x88, 0x20, 0x63, 0x2C, 0xC8, 0x9C, 0xD1, 0x12, 0xD1, + 0x84, 0x30, 0x04, 0x24, 0x25, 0x2F, 0x32, 0xC2, 0xA0, 0xFB, 0x20, 0xD4, 0x80, 0xCD, 0x9F, 0xBF, + 0x78, 0x3B, 0xFE, 0x1D, 0xEC, 0x49, 0x3D, 0x79, 0x6F, 0xF3, 0xBB, 0x95, 0xF5, 0x45, 0xDC, 0xF4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 2u * digest[5]; + uint increment = (digest[6] & 1) > 0 ? 37 : kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39028. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39028.cs +// + +namespace KeyCMF_039028 +{ + static const BYTE Keytable[] = + { + 0x21, 0xC3, 0x55, 0x59, 0x94, 0x08, 0xC7, 0x70, 0xFB, 0x09, 0x4D, 0xD7, 0xB0, 0x71, 0x1D, 0x48, + 0xB5, 0xC8, 0x1A, 0xB5, 0xE2, 0xC7, 0x2F, 0xA4, 0x0E, 0x59, 0x97, 0x9F, 0x94, 0xA6, 0x43, 0x26, + 0x6A, 0xB9, 0xA9, 0x18, 0xE4, 0xC8, 0x64, 0x29, 0x93, 0x8A, 0x4C, 0x8B, 0x4F, 0xA3, 0x50, 0xC7, + 0x36, 0x26, 0x34, 0xA8, 0xC4, 0x88, 0x16, 0xF2, 0x42, 0x43, 0x6D, 0x74, 0x05, 0x59, 0xC1, 0xF1, + 0x96, 0x22, 0xBA, 0xC0, 0x05, 0x07, 0x06, 0x22, 0x0F, 0xBB, 0xD3, 0xC9, 0xC0, 0xDE, 0xE7, 0x99, + 0xF7, 0xBE, 0x82, 0x32, 0x09, 0x5D, 0xEC, 0xD2, 0x7D, 0xC2, 0x73, 0x9C, 0x87, 0x1F, 0x7D, 0x75, + 0xFD, 0x4C, 0x79, 0x35, 0x98, 0xA6, 0x20, 0x37, 0x68, 0x27, 0xE1, 0x7B, 0x44, 0xBF, 0x50, 0x98, + 0xED, 0x1B, 0x15, 0x6C, 0xAD, 0x31, 0x14, 0x0E, 0x4B, 0x81, 0xF2, 0xEE, 0x8E, 0xF3, 0x3A, 0x07, + 0xF3, 0x03, 0x66, 0xC7, 0x0A, 0xCD, 0xCC, 0x7B, 0xD9, 0xB8, 0xC1, 0x4B, 0x17, 0x68, 0xD0, 0x8D, + 0xC7, 0x5F, 0x28, 0xCA, 0xC3, 0xC4, 0xAC, 0xA2, 0xFF, 0x75, 0xE8, 0xF5, 0x0F, 0xD8, 0xE6, 0x3A, + 0x40, 0xF3, 0x8C, 0x0A, 0xED, 0xBC, 0x97, 0xDE, 0x13, 0x6D, 0x04, 0x75, 0x3F, 0xFE, 0x71, 0x08, + 0xC0, 0x28, 0x87, 0x11, 0x9C, 0xC1, 0x75, 0x43, 0x8E, 0x24, 0xCB, 0xEE, 0x79, 0x45, 0x85, 0xD5, + 0x34, 0xF2, 0x6B, 0x75, 0xE7, 0x3D, 0xD8, 0x20, 0x6F, 0x86, 0x13, 0xF9, 0x4E, 0x6D, 0x66, 0xDA, + 0x40, 0x57, 0xCF, 0xA3, 0xA4, 0x4D, 0xAC, 0x9C, 0xA0, 0xA7, 0x25, 0xD6, 0xC7, 0x4F, 0xC7, 0xD6, + 0x7D, 0x23, 0x21, 0xA5, 0xA3, 0x34, 0x62, 0xD0, 0x63, 0x0B, 0xCF, 0x1A, 0xE3, 0x95, 0xED, 0x0C, + 0x12, 0xD0, 0xD4, 0x1A, 0x14, 0x8F, 0x15, 0x44, 0x49, 0xE1, 0x69, 0xF9, 0x2D, 0x0C, 0x47, 0x0E, + 0x83, 0x63, 0xA5, 0x95, 0x19, 0x07, 0x77, 0x10, 0x6A, 0x5A, 0x8C, 0x35, 0x34, 0xBC, 0x35, 0x76, + 0x0C, 0x2C, 0x0E, 0xFB, 0x42, 0x20, 0x8C, 0x93, 0xE8, 0x02, 0x25, 0x9A, 0x66, 0x90, 0x0A, 0x2F, + 0x9D, 0xB7, 0x5C, 0x40, 0x98, 0x82, 0x86, 0xF9, 0xEA, 0x45, 0xF9, 0xC1, 0x31, 0xC2, 0x39, 0x16, + 0xFD, 0xE7, 0x61, 0xE9, 0xB9, 0x88, 0xD3, 0x4D, 0x48, 0x5D, 0x33, 0x12, 0x83, 0x6C, 0xDF, 0x92, + 0x26, 0xE5, 0x17, 0x42, 0xD2, 0x4C, 0xC7, 0x83, 0xC9, 0x0E, 0x7D, 0x60, 0x9A, 0xCF, 0x77, 0x5A, + 0x12, 0xB5, 0x86, 0xB4, 0xCE, 0xA2, 0xC9, 0xBD, 0xED, 0x94, 0xA4, 0xA5, 0x84, 0x80, 0xBC, 0xCB, + 0x54, 0x9F, 0x55, 0xCA, 0xA0, 0x04, 0x18, 0x63, 0x56, 0x12, 0xC1, 0x9C, 0xF7, 0xF7, 0x57, 0x65, + 0xF9, 0x7A, 0xDE, 0x7E, 0xC9, 0xE5, 0xFD, 0x65, 0x1E, 0x03, 0x0F, 0x55, 0x8D, 0xBA, 0x16, 0xBE, + 0xF4, 0x25, 0x9F, 0xA0, 0x16, 0x10, 0xAB, 0x91, 0xFA, 0xFD, 0xB3, 0xC0, 0x70, 0x7A, 0x89, 0xD0, + 0x65, 0x52, 0x63, 0xD2, 0x33, 0xA1, 0xD2, 0xD8, 0xFD, 0x2F, 0x4E, 0xC9, 0x19, 0xDD, 0x86, 0xE9, + 0x7B, 0x9A, 0xCD, 0x82, 0x8B, 0x00, 0x33, 0xA5, 0x3F, 0x0D, 0x1C, 0xB7, 0x71, 0xAA, 0xFE, 0xF6, + 0x09, 0xE3, 0x1B, 0x71, 0x6B, 0x95, 0x35, 0xFB, 0x4D, 0x3F, 0x04, 0x00, 0x09, 0x17, 0x36, 0xD9, + 0x80, 0x46, 0x39, 0x4B, 0x32, 0x51, 0x0E, 0x52, 0xD7, 0x92, 0x46, 0x20, 0x23, 0x8A, 0x2E, 0xAC, + 0xF0, 0xED, 0xBB, 0xFE, 0x4E, 0x58, 0xD7, 0xE9, 0x50, 0xA3, 0x4C, 0x6D, 0xB4, 0xE5, 0x41, 0x58, + 0x33, 0xDD, 0xDF, 0xEE, 0xAE, 0x96, 0xFA, 0xCE, 0x7A, 0x23, 0xC3, 0x3F, 0x22, 0x85, 0x68, 0xBC, + 0x36, 0x0B, 0x9D, 0x4E, 0x04, 0x62, 0x9D, 0xCD, 0xC3, 0x5E, 0x9F, 0xDE, 0xB2, 0xDD, 0xCA, 0xF7 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx = Constrain(header.m_buildVersion - kidx); + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39083. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39083.cs +// + +namespace KeyCMF_039083 +{ + static const BYTE Keytable[] = + { + 0x16, 0x7A, 0x47, 0x4E, 0x71, 0x7B, 0x99, 0x57, 0x74, 0xB8, 0xD8, 0xBA, 0x67, 0x00, 0x3F, 0x7D, + 0xED, 0x88, 0xC1, 0x6A, 0x70, 0x8F, 0xA0, 0x2C, 0x67, 0x19, 0x1F, 0xE0, 0xAE, 0xDF, 0xB2, 0x5A, + 0xEE, 0x7C, 0x54, 0x40, 0x6C, 0xEE, 0x0D, 0x26, 0x13, 0xBB, 0x3F, 0x90, 0xC4, 0x5E, 0x66, 0x7F, + 0xC6, 0x04, 0x8B, 0x98, 0xC0, 0x71, 0x99, 0x60, 0xE9, 0x33, 0x28, 0xC0, 0x1E, 0xB3, 0x25, 0xD4, + 0xD2, 0x8B, 0x43, 0xE8, 0x28, 0x7A, 0x50, 0x08, 0x45, 0xD3, 0xC2, 0xC1, 0xDE, 0x3B, 0xD2, 0xFF, + 0x26, 0x7F, 0x2E, 0xF3, 0xB1, 0x39, 0xA5, 0x82, 0x97, 0x32, 0x20, 0xC4, 0x8E, 0xDE, 0xA0, 0xCC, + 0x67, 0x3D, 0x16, 0x2C, 0x85, 0x8E, 0xCA, 0xE4, 0x44, 0xC8, 0x07, 0x6D, 0xF5, 0xAF, 0x9B, 0x67, + 0xE9, 0xBA, 0x90, 0x16, 0xF8, 0xE0, 0xF9, 0x49, 0x18, 0xB6, 0x3B, 0xC8, 0x10, 0x7B, 0x0C, 0xF2, + 0x0F, 0x00, 0x3A, 0xC3, 0xD8, 0x19, 0xDD, 0xC0, 0x39, 0x29, 0xAD, 0x5F, 0xDB, 0x95, 0x31, 0xF7, + 0x44, 0xC3, 0x84, 0x8E, 0x51, 0xFA, 0x94, 0x87, 0x5A, 0xF2, 0x9C, 0xA9, 0x69, 0x53, 0x28, 0xD7, + 0xA0, 0xF8, 0xF4, 0x8D, 0x04, 0xB4, 0xC7, 0xC4, 0xE8, 0xF0, 0x91, 0x6E, 0x16, 0x0E, 0xAF, 0x6B, + 0x2E, 0xB7, 0x85, 0x88, 0x58, 0x95, 0xC0, 0x21, 0xE9, 0x13, 0x56, 0x5B, 0x88, 0xA1, 0x72, 0x71, + 0xCB, 0x54, 0x37, 0x28, 0xBB, 0xCF, 0x2D, 0xD8, 0x68, 0xB8, 0x15, 0xF3, 0x30, 0xB4, 0x45, 0xA5, + 0x95, 0x56, 0x69, 0x96, 0x74, 0x39, 0xE2, 0x9A, 0xA4, 0x55, 0xD1, 0x8D, 0x02, 0x5B, 0x91, 0x25, + 0xFC, 0x4A, 0xB3, 0xE0, 0x9E, 0x72, 0x73, 0x00, 0xCA, 0x03, 0x41, 0xBF, 0x5D, 0x19, 0x8F, 0x4E, + 0x59, 0xA4, 0x40, 0x23, 0x50, 0x12, 0xDE, 0xB1, 0x4B, 0xC3, 0x6C, 0x8A, 0x2C, 0xF8, 0xCF, 0x5E, + 0xED, 0x0C, 0x7D, 0xBE, 0x68, 0xE8, 0xCC, 0x46, 0xDC, 0xA1, 0xC7, 0x37, 0xCA, 0x36, 0x62, 0x7F, + 0x5B, 0xBD, 0x1A, 0xAE, 0xAC, 0x8C, 0x32, 0xFE, 0x7A, 0xD5, 0x72, 0xD4, 0x7C, 0x98, 0x9A, 0xB4, + 0xBB, 0x0C, 0xA2, 0x23, 0x45, 0x6B, 0x2A, 0xFC, 0xAE, 0xE6, 0xF2, 0x85, 0x06, 0x21, 0x98, 0x33, + 0x59, 0xD5, 0x06, 0x1B, 0x4B, 0xA9, 0x61, 0xCD, 0x66, 0x35, 0x56, 0xD8, 0x22, 0xEF, 0x7E, 0xAB, + 0x1C, 0x58, 0xE9, 0x98, 0xB5, 0xE0, 0x85, 0xEC, 0xCB, 0x3A, 0xA8, 0x6D, 0x87, 0x96, 0xA8, 0x84, + 0xA2, 0x6C, 0xDD, 0x4F, 0x06, 0x5C, 0xE4, 0x03, 0x47, 0xAF, 0x19, 0x00, 0x4B, 0x2B, 0xE4, 0x1A, + 0x60, 0x68, 0x2A, 0x70, 0xC5, 0x48, 0x68, 0xA7, 0x41, 0xE2, 0xE2, 0xC3, 0x51, 0xF4, 0xED, 0x58, + 0xCF, 0x63, 0x44, 0x6B, 0x3C, 0xC8, 0x18, 0x46, 0xCC, 0x89, 0x5D, 0x01, 0x3C, 0x42, 0x6F, 0x3B, + 0xDE, 0xAA, 0xCC, 0x51, 0x09, 0xCC, 0xF9, 0x74, 0x10, 0x86, 0xB8, 0x96, 0xD5, 0x69, 0xD3, 0x42, + 0xB1, 0x4B, 0xD9, 0x05, 0x8E, 0x15, 0x77, 0xC2, 0x09, 0x50, 0xA6, 0x6F, 0xD0, 0xC2, 0xB6, 0xA6, + 0xC6, 0xC6, 0x02, 0x70, 0xAD, 0xBA, 0x3B, 0x67, 0x89, 0xF5, 0xFC, 0x93, 0xE8, 0x52, 0xCC, 0x0C, + 0x62, 0x1C, 0x14, 0x10, 0x6F, 0x6D, 0x1D, 0x98, 0xB6, 0xDF, 0x82, 0x3F, 0x01, 0x33, 0x16, 0x67, + 0xF6, 0xFE, 0x8B, 0x8F, 0x57, 0x9B, 0x7D, 0x7B, 0x00, 0x2E, 0xE2, 0xEC, 0x85, 0x60, 0x93, 0xD9, + 0x21, 0x1D, 0x95, 0xFE, 0x41, 0x1E, 0x14, 0xB0, 0x3F, 0xD1, 0x55, 0x5E, 0x1E, 0xA9, 0xC0, 0x86, + 0x93, 0xAD, 0x36, 0x5D, 0x23, 0xBA, 0x83, 0x30, 0x78, 0x4C, 0x2F, 0x29, 0x14, 0xBE, 0x4A, 0xEF, + 0xDE, 0x54, 0xAE, 0xB9, 0x97, 0xAA, 0x9B, 0x8A, 0xE9, 0xE0, 0xAB, 0xCE, 0x22, 0x0D, 0x0C, 0xE2 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + uint decrement = header.m_buildVersion & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= decrement; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39103. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39103.cs +// + +namespace KeyCMF_039103 +{ + static const BYTE Keytable[] = + { + 0xE3, 0xBA, 0x8D, 0xCC, 0xA5, 0xC5, 0x26, 0xBB, 0x5A, 0xC5, 0x2D, 0xDE, 0x20, 0x73, 0x1D, 0xC3, + 0xA5, 0x88, 0x52, 0x05, 0xD6, 0x87, 0xED, 0xD3, 0x1D, 0x8D, 0x3A, 0x64, 0x9B, 0xDD, 0x3D, 0x04, + 0x7A, 0xBA, 0x6B, 0x3E, 0xB3, 0x54, 0x99, 0xD2, 0x92, 0x93, 0xE1, 0xF6, 0x80, 0xC0, 0xC4, 0xFF, + 0x10, 0x62, 0xAA, 0xF9, 0xFD, 0xBB, 0xC5, 0xE9, 0xA6, 0xD2, 0x52, 0x23, 0xB4, 0xA7, 0x3D, 0x73, + 0xC9, 0x0A, 0xFF, 0x16, 0x79, 0x40, 0x89, 0x47, 0x86, 0xFC, 0x9F, 0x79, 0xBA, 0xBC, 0x21, 0x94, + 0x52, 0x8F, 0x23, 0xE6, 0x65, 0x5F, 0x3E, 0xC4, 0x72, 0x58, 0x16, 0x9D, 0xFF, 0x3B, 0x18, 0xD2, + 0x9E, 0xD0, 0x47, 0xA2, 0xD9, 0x8D, 0x23, 0x5F, 0xFA, 0x98, 0x6A, 0x1B, 0x2A, 0x61, 0xE7, 0x98, + 0x61, 0xA3, 0x0A, 0x8A, 0x6E, 0x57, 0xFC, 0x38, 0x1A, 0x60, 0x62, 0xED, 0x19, 0xD4, 0x61, 0x34, + 0x94, 0x02, 0xF3, 0x05, 0x8C, 0x2F, 0x1F, 0x71, 0xCC, 0x27, 0xA2, 0x90, 0xF8, 0x5B, 0x48, 0xE1, + 0x62, 0xF4, 0xAA, 0xDC, 0xE9, 0x14, 0x3D, 0x50, 0x2B, 0xA8, 0x00, 0xB5, 0x3B, 0x67, 0x30, 0x09, + 0x6F, 0x1E, 0x0D, 0x53, 0xEF, 0xCF, 0x72, 0x45, 0xD7, 0xE4, 0x72, 0xC5, 0x73, 0x37, 0x21, 0xF4, + 0xB1, 0x12, 0xFA, 0xB5, 0xD0, 0x69, 0x9F, 0x23, 0xC7, 0x24, 0x39, 0x3D, 0x3A, 0xFE, 0x65, 0x7D, + 0xBA, 0xA8, 0xDE, 0x71, 0x3B, 0x4D, 0x61, 0x23, 0xDA, 0xB0, 0x62, 0x83, 0x2B, 0x8F, 0x47, 0x2C, + 0x45, 0xDE, 0xC8, 0x1B, 0x6B, 0xB8, 0x38, 0x41, 0xD4, 0xFD, 0xD9, 0x78, 0xB9, 0x07, 0x46, 0x68, + 0x44, 0x14, 0x12, 0xF7, 0xDD, 0xF0, 0x91, 0xF9, 0x65, 0x92, 0xC3, 0x24, 0x8A, 0x25, 0xD6, 0xE7, + 0x5A, 0xC9, 0x26, 0xC4, 0xD3, 0x7B, 0x76, 0x2D, 0x7E, 0x35, 0xE7, 0xE3, 0x07, 0x00, 0x61, 0xDA, + 0xF7, 0x15, 0x92, 0xDC, 0xF9, 0xAC, 0x2E, 0x8E, 0x8C, 0x01, 0x36, 0xF5, 0xC1, 0xE9, 0x58, 0x02, + 0x1D, 0x02, 0x45, 0x72, 0x3D, 0xC8, 0x8F, 0x02, 0xF4, 0x31, 0xCA, 0x0C, 0x11, 0xCE, 0xFD, 0x80, + 0x07, 0x26, 0x2F, 0x35, 0x35, 0xF2, 0xE0, 0xE8, 0x3D, 0xC5, 0x8F, 0x24, 0x69, 0x55, 0xF2, 0xC5, + 0x5F, 0xE8, 0xC8, 0xBC, 0xA2, 0x22, 0xB1, 0xA8, 0xEC, 0xB7, 0x5E, 0x45, 0xEA, 0x29, 0xD3, 0x44, + 0x55, 0xCB, 0x41, 0x7A, 0xC8, 0x25, 0x07, 0x90, 0x22, 0xC9, 0xB2, 0x04, 0x38, 0xE2, 0x45, 0xEB, + 0x25, 0x16, 0x42, 0xDD, 0x01, 0xBC, 0xD2, 0xFC, 0x6E, 0x6B, 0x8D, 0xB5, 0xA4, 0x50, 0xE6, 0x4B, + 0xCB, 0x5A, 0x3B, 0xD8, 0x34, 0x05, 0xDD, 0xD2, 0x29, 0xC6, 0xE2, 0x89, 0x30, 0xAC, 0x9C, 0x8D, + 0xF2, 0x24, 0xAD, 0x3B, 0x07, 0x95, 0x42, 0x34, 0x9B, 0xEE, 0xC3, 0xAA, 0xFB, 0x88, 0xC4, 0x46, + 0x15, 0x17, 0xD2, 0xAF, 0xA7, 0x72, 0x7D, 0xBE, 0x5F, 0x38, 0x50, 0x03, 0x84, 0x42, 0xB2, 0x4C, + 0xCE, 0xC5, 0x38, 0x31, 0xED, 0xBF, 0xE2, 0x11, 0xD5, 0x5F, 0xEB, 0x18, 0x54, 0x5F, 0x08, 0x50, + 0x62, 0x04, 0xEF, 0xB3, 0xAE, 0x25, 0x54, 0xB8, 0xE5, 0x66, 0x30, 0xFD, 0x72, 0x57, 0x4C, 0xE4, + 0x43, 0xA6, 0xFE, 0x3B, 0x68, 0x54, 0x57, 0xF6, 0x9C, 0x54, 0x63, 0x5E, 0xB4, 0x38, 0x4A, 0xAD, + 0xE8, 0xAF, 0x5D, 0x49, 0x3A, 0x9E, 0x64, 0x2A, 0x36, 0x49, 0xCF, 0x8E, 0x24, 0xD0, 0x67, 0xE3, + 0x8E, 0xD9, 0xE1, 0xD8, 0xDA, 0x13, 0x7D, 0xA3, 0x7E, 0xBB, 0x5B, 0x0C, 0x07, 0x3E, 0x01, 0x26, + 0x93, 0x0C, 0xD6, 0x47, 0xE4, 0xD1, 0xBD, 0xAA, 0x8D, 0x0F, 0xFD, 0xA4, 0xC7, 0x11, 0x93, 0x15, + 0x3E, 0xC7, 0x96, 0x49, 0xEB, 0x3F, 0x09, 0x34, 0xA1, 0x9D, 0xD1, 0x28, 0x3C, 0x3B, 0xDE, 0xBC + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Constrain(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[2 * digest[13] - length]; + uint ividx = header.m_buildVersion; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[ividx++ % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39241. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39241.cs +// + +namespace KeyCMF_039241 +{ + static const BYTE Keytable[] = + { + 0x0A, 0x04, 0x5A, 0x81, 0xEA, 0x38, 0x65, 0x16, 0xEE, 0x53, 0x52, 0x6E, 0xAB, 0xCF, 0x50, 0xCB, + 0x9E, 0xEC, 0x02, 0x26, 0x90, 0x1A, 0xB2, 0xE3, 0xAF, 0xA7, 0x79, 0x63, 0xE1, 0x0E, 0x5F, 0xDB, + 0x6E, 0xA8, 0x21, 0x8B, 0xF6, 0x86, 0x1A, 0x95, 0xC3, 0xF7, 0xC0, 0xDA, 0xB3, 0xA1, 0xEB, 0xBA, + 0xAD, 0x39, 0xD9, 0xA8, 0x09, 0x21, 0x1C, 0xB8, 0xC7, 0x5D, 0xF4, 0xD8, 0x03, 0xCF, 0x5D, 0x67, + 0xDD, 0xB2, 0x8D, 0xEE, 0x83, 0x91, 0x29, 0x05, 0x7C, 0x21, 0x1D, 0xB5, 0x0D, 0xE2, 0xE6, 0x70, + 0xD8, 0x3D, 0xC9, 0xAE, 0x52, 0x31, 0x31, 0x2F, 0xB0, 0xB2, 0x9B, 0x82, 0xB3, 0x38, 0xDC, 0xD0, + 0xD6, 0x64, 0x12, 0xCF, 0xB1, 0xBA, 0x8D, 0x96, 0x1A, 0xFF, 0x67, 0xA6, 0x78, 0x91, 0xD3, 0xDC, + 0xA4, 0x1D, 0x03, 0x39, 0xA8, 0x3D, 0x1F, 0x47, 0x2D, 0xFD, 0x9F, 0x10, 0x84, 0xCD, 0x4B, 0x78, + 0x9A, 0x88, 0x86, 0xAD, 0x97, 0xC9, 0x71, 0x54, 0xA7, 0xBF, 0x4F, 0xC0, 0x0F, 0xCF, 0xD2, 0x38, + 0x75, 0x4D, 0x7A, 0xBB, 0x6F, 0x78, 0x3B, 0x1C, 0xA5, 0x4E, 0x55, 0xA6, 0x7A, 0x32, 0x08, 0x69, + 0x8B, 0xD2, 0x90, 0x17, 0x53, 0xDD, 0x4C, 0x90, 0xC5, 0x51, 0xA8, 0x11, 0xC6, 0x26, 0x5E, 0xE0, + 0x61, 0x54, 0xCC, 0xB1, 0xD7, 0x74, 0x5A, 0x25, 0x31, 0xCC, 0x3B, 0x5F, 0x7C, 0x9F, 0x58, 0x67, + 0x34, 0x25, 0x93, 0xB6, 0x43, 0x7F, 0xE8, 0x9D, 0xBB, 0xD0, 0xA5, 0x25, 0xDB, 0x7C, 0xD8, 0x0C, + 0x5C, 0x96, 0xBE, 0xCB, 0xD5, 0xF9, 0x07, 0xFE, 0xBB, 0x1D, 0x9D, 0x54, 0x6A, 0xA1, 0x7B, 0xA2, + 0x6B, 0xFD, 0x7B, 0x5B, 0xE4, 0x9B, 0x7F, 0x38, 0x56, 0xBA, 0xEC, 0x1B, 0x69, 0xE0, 0x40, 0xCB, + 0xDA, 0xC5, 0x7C, 0x39, 0xB0, 0x23, 0xBD, 0x95, 0x12, 0x8B, 0x18, 0x19, 0x03, 0xD9, 0xDA, 0x3E, + 0x64, 0xF5, 0x9A, 0x03, 0xE5, 0x02, 0x84, 0x24, 0xF6, 0x5E, 0xFD, 0x13, 0x00, 0x12, 0x3B, 0x0C, + 0x9C, 0x24, 0x93, 0x8D, 0x75, 0xBB, 0x90, 0x78, 0xB6, 0x90, 0x6E, 0xA2, 0x55, 0x18, 0x41, 0x4A, + 0x6D, 0x06, 0x7F, 0x3C, 0x50, 0xC1, 0xF4, 0x40, 0x02, 0x87, 0xC1, 0xC8, 0x0F, 0x13, 0xC8, 0x90, + 0xAB, 0x8A, 0xE0, 0xF6, 0xE2, 0x03, 0xA5, 0x74, 0x58, 0x70, 0xAC, 0x92, 0x9C, 0xB0, 0xC1, 0x8E, + 0x70, 0xE1, 0x34, 0xCD, 0x60, 0x35, 0x7E, 0x9D, 0xB0, 0xB7, 0x61, 0xD6, 0xEC, 0x1B, 0x73, 0xF4, + 0xD1, 0x98, 0x12, 0x8A, 0xA2, 0x94, 0x75, 0x9A, 0xAC, 0xBD, 0x27, 0x13, 0xBA, 0x8C, 0xBC, 0x65, + 0x72, 0x42, 0xD2, 0x67, 0xB3, 0x2E, 0xA9, 0xF9, 0xDF, 0x6A, 0x0D, 0x0D, 0xAE, 0x25, 0x1E, 0x04, + 0x78, 0xAC, 0x73, 0xC7, 0xA3, 0xE4, 0xEB, 0xDA, 0x02, 0xF6, 0x52, 0x44, 0xF8, 0xF9, 0xBE, 0xB6, + 0x98, 0x5B, 0xD5, 0xDB, 0x09, 0x74, 0x58, 0x54, 0xDF, 0xFE, 0x5C, 0xD5, 0xEF, 0x87, 0x89, 0xF3, + 0xFF, 0x7A, 0xDE, 0x48, 0x0C, 0x56, 0x96, 0xFF, 0x34, 0x0C, 0x4A, 0xD1, 0xEB, 0x5E, 0xA0, 0x60, + 0x68, 0xE1, 0xE5, 0xF6, 0x41, 0xF7, 0x17, 0xC0, 0xBB, 0xB0, 0x08, 0xCE, 0x9A, 0xFC, 0xA1, 0xEB, + 0x0B, 0x5B, 0xD5, 0xC1, 0x34, 0x4E, 0x2E, 0x14, 0x69, 0xA7, 0x39, 0x90, 0x5A, 0x56, 0x91, 0xBE, + 0xDE, 0x61, 0xA9, 0x83, 0x2B, 0x8E, 0x9D, 0xD1, 0x9B, 0xE1, 0xAD, 0x57, 0x45, 0x61, 0x68, 0x1A, + 0x62, 0x88, 0xEE, 0xA8, 0x73, 0x8B, 0x01, 0x7D, 0x3B, 0xF9, 0x2F, 0x52, 0xA4, 0x0A, 0xF2, 0x8C, + 0x71, 0xE2, 0x4C, 0x35, 0x72, 0xF2, 0x30, 0x29, 0x14, 0x02, 0x94, 0x67, 0x0B, 0xCA, 0xD8, 0xFD, + 0x49, 0x68, 0x85, 0x46, 0xB2, 0x77, 0x59, 0x50, 0x91, 0xA7, 0xE9, 0xC9, 0x4D, 0x1C, 0x6B, 0x5C + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)header.m_dataCount + digest[7] & 511; + uint increment = header.m_buildVersion + (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - 73) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39362. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39362.cs +// + +namespace KeyCMF_039362 +{ + static const BYTE Keytable[] = + { + 0x4D, 0xB4, 0xC1, 0x28, 0xD3, 0x24, 0x90, 0x79, 0xB9, 0x20, 0x9D, 0x57, 0x47, 0x71, 0xC8, 0xDD, + 0x2D, 0x0A, 0x6B, 0x44, 0xE5, 0x55, 0x67, 0x47, 0xAF, 0xA7, 0x4E, 0xE5, 0x43, 0xD4, 0x8E, 0x40, + 0x1B, 0x78, 0xB1, 0x53, 0x93, 0x36, 0x23, 0xC6, 0xCF, 0x51, 0xA3, 0xD5, 0x2E, 0x3D, 0x94, 0x4B, + 0x0E, 0xC5, 0x39, 0xEC, 0xC7, 0x6E, 0x0B, 0x30, 0x34, 0x3C, 0x43, 0xB1, 0xDD, 0x7B, 0xFB, 0xDE, + 0xDE, 0x94, 0x52, 0x6B, 0x7D, 0x5A, 0xEF, 0x59, 0xE9, 0x90, 0x5E, 0xF6, 0xAF, 0x70, 0xEC, 0x0D, + 0x96, 0x45, 0x42, 0xFD, 0x21, 0x43, 0xB0, 0x7F, 0x6D, 0xF3, 0x90, 0x1E, 0x46, 0x49, 0x27, 0xA8, + 0x08, 0x5E, 0xEB, 0x9F, 0x6A, 0xBA, 0x71, 0x29, 0x61, 0x9D, 0x92, 0xC4, 0x38, 0xC1, 0x6B, 0xF0, + 0x0C, 0xD2, 0xC6, 0x12, 0x12, 0x69, 0x77, 0xDB, 0x67, 0x5B, 0x92, 0x7A, 0x05, 0xFE, 0xDA, 0xFC, + 0x06, 0xE7, 0x54, 0xC9, 0x26, 0x04, 0x27, 0xE0, 0x78, 0xEE, 0xCD, 0xE7, 0xBE, 0xE4, 0xF8, 0x79, + 0x86, 0xD6, 0x21, 0x48, 0x1B, 0x11, 0x9F, 0x79, 0xFD, 0xD4, 0x74, 0x84, 0xCC, 0x09, 0x4D, 0xEF, + 0x37, 0xC3, 0x9C, 0xE3, 0x54, 0xE3, 0xD9, 0xD8, 0xA9, 0x1E, 0x83, 0xDF, 0xD1, 0x36, 0x74, 0xB5, + 0x86, 0xCF, 0x7D, 0x1A, 0xC9, 0x6F, 0x99, 0xD0, 0x55, 0xC0, 0x37, 0x17, 0x90, 0xF3, 0x6B, 0x43, + 0xA7, 0x41, 0x10, 0x77, 0x46, 0x8F, 0xFF, 0x53, 0xE1, 0x81, 0x41, 0xB2, 0xEB, 0x8C, 0x41, 0x7E, + 0xCC, 0x53, 0x3A, 0xD7, 0xA6, 0xB1, 0xA3, 0x4C, 0x72, 0x79, 0x94, 0x35, 0xBD, 0x03, 0x0E, 0x56, + 0x38, 0xCD, 0x67, 0x18, 0xE7, 0x2F, 0xDD, 0x27, 0xBD, 0xF3, 0x43, 0xEE, 0xEF, 0xCB, 0xD3, 0x59, + 0x3F, 0x44, 0x12, 0x11, 0x76, 0xFD, 0xD5, 0x2B, 0xA5, 0xD3, 0x9B, 0x4C, 0x9F, 0xD8, 0x13, 0xED, + 0x8E, 0xD1, 0xBB, 0xE1, 0xD6, 0xDF, 0x05, 0x81, 0x1A, 0x60, 0x33, 0x32, 0x0E, 0xB7, 0xF8, 0xD6, + 0x0F, 0x2E, 0x88, 0x4E, 0x25, 0xAF, 0xDB, 0xB8, 0xA8, 0xDD, 0x37, 0x52, 0xAB, 0x3F, 0xB0, 0xB2, + 0x48, 0x1B, 0x0A, 0xCD, 0xC9, 0xC2, 0xDE, 0x65, 0xCA, 0x5A, 0xFB, 0x36, 0x80, 0xCA, 0x68, 0xBE, + 0x52, 0x3B, 0xBF, 0x2D, 0xC1, 0x26, 0x47, 0xEB, 0xFC, 0x17, 0xA2, 0xD3, 0x90, 0x6C, 0xDB, 0x5F, + 0xCF, 0x6D, 0x1C, 0x86, 0x78, 0x5F, 0x40, 0x3B, 0xFE, 0x9C, 0xE0, 0x85, 0x0B, 0x65, 0x7D, 0x36, + 0x01, 0x6B, 0x5A, 0x9D, 0x7B, 0x3D, 0x3F, 0xE2, 0x63, 0x6A, 0xEA, 0x73, 0xD1, 0x57, 0xA7, 0x07, + 0x4B, 0x18, 0x14, 0x37, 0xB1, 0x57, 0xDE, 0x5B, 0xF7, 0x5B, 0xB7, 0xF1, 0x6D, 0xCC, 0x2F, 0xFA, + 0xF3, 0x36, 0x06, 0xC1, 0x6E, 0x7A, 0x74, 0x7C, 0x02, 0xE6, 0xA0, 0x41, 0x37, 0x8B, 0xCF, 0xE5, + 0x16, 0x34, 0xBB, 0xC5, 0xAA, 0x40, 0x0B, 0xA2, 0x2C, 0x36, 0xB2, 0xB7, 0x77, 0x26, 0x94, 0x09, + 0x5C, 0xA2, 0x74, 0x39, 0x74, 0x08, 0x27, 0xE7, 0xF7, 0x1D, 0xFE, 0x5B, 0x1B, 0xC8, 0xD5, 0xDC, + 0x3B, 0xBE, 0x72, 0xDE, 0x6A, 0xBD, 0x0C, 0x2B, 0xAD, 0x86, 0x6A, 0x1C, 0xDA, 0xB2, 0xE4, 0x9F, + 0x9A, 0xF9, 0xE1, 0x01, 0xAC, 0x30, 0x9A, 0x18, 0x53, 0x5E, 0xB7, 0xBE, 0x75, 0x88, 0xF5, 0x64, + 0x38, 0xC2, 0x90, 0x77, 0x85, 0xCB, 0x70, 0x89, 0x15, 0x77, 0x8C, 0xE9, 0xFB, 0xA0, 0x04, 0x98, + 0xEE, 0x56, 0x29, 0xE8, 0xD2, 0xFF, 0x85, 0xCA, 0xDB, 0x7C, 0xA0, 0xE1, 0x2F, 0xF4, 0x54, 0xD2, + 0xDE, 0x71, 0xDA, 0xF3, 0x4B, 0x5A, 0xD9, 0xE8, 0x40, 0x2F, 0x1F, 0xA1, 0x64, 0x04, 0x1C, 0xA2, + 0x75, 0x5A, 0x2A, 0x6A, 0x5A, 0x34, 0x88, 0x87, 0x12, 0xBB, 0xF0, 0x7F, 0x71, 0xB8, 0x9E, 0xD3 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length * Keytable[0] % 512]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(2 * digest[13] - length) % 512]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - 73) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39425. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39425.cs +// + +namespace KeyCMF_039425 +{ + static const BYTE Keytable[] = + { + 0x0D, 0xE7, 0x60, 0x2E, 0x0E, 0x4C, 0x2E, 0x35, 0xA0, 0x59, 0xC7, 0xE3, 0xCC, 0xEB, 0xEB, 0x99, + 0x1C, 0x94, 0xB2, 0xC8, 0xD3, 0x42, 0x20, 0xB3, 0x1F, 0x91, 0x4A, 0x15, 0xD2, 0xD7, 0xF5, 0xC3, + 0x93, 0x01, 0x24, 0x11, 0xEA, 0x0C, 0x26, 0x5C, 0xB4, 0x79, 0x65, 0x06, 0xEA, 0x7C, 0x06, 0x34, + 0x11, 0x52, 0x08, 0x59, 0x2A, 0x45, 0xE3, 0x4B, 0xA0, 0xAF, 0x6E, 0x8D, 0xA9, 0xF5, 0xB9, 0x84, + 0x86, 0x54, 0xF6, 0xAD, 0x85, 0x2C, 0xF4, 0x1E, 0x39, 0xDD, 0xDA, 0x95, 0x4C, 0xC2, 0x57, 0xE6, + 0xE1, 0x9B, 0x27, 0xFF, 0xE7, 0xA4, 0xCD, 0xCF, 0x53, 0xE6, 0x83, 0x89, 0xE3, 0xE2, 0x43, 0x56, + 0xDD, 0xD4, 0xB2, 0x04, 0xE5, 0x43, 0x7E, 0xD0, 0x75, 0x30, 0x33, 0x75, 0x5D, 0x27, 0x72, 0x53, + 0x5B, 0xCC, 0x3C, 0x90, 0xB7, 0xFE, 0x8A, 0xB5, 0xD2, 0xCB, 0xE2, 0xD6, 0x06, 0x26, 0x12, 0xF4, + 0xEC, 0x13, 0xAF, 0xE9, 0xF6, 0x74, 0xF5, 0x25, 0x9A, 0x55, 0x04, 0xFB, 0xAE, 0x29, 0x44, 0x3F, + 0xA3, 0x3E, 0xE3, 0x9B, 0x72, 0xFD, 0xA4, 0x25, 0x87, 0x18, 0x2D, 0x33, 0xCB, 0x5D, 0x1E, 0x29, + 0x6A, 0xFB, 0x5C, 0x3F, 0xF8, 0x60, 0xCF, 0x09, 0x22, 0xF4, 0xA1, 0xD4, 0xB2, 0xE0, 0x55, 0x10, + 0xA1, 0xA8, 0x8A, 0x85, 0xBF, 0x13, 0x05, 0x28, 0xC2, 0xEE, 0x03, 0x39, 0x72, 0x2E, 0x13, 0x7A, + 0x9D, 0xC0, 0xC0, 0xD8, 0x3C, 0x1E, 0xCE, 0x69, 0xED, 0xAE, 0x1F, 0x4F, 0xA5, 0x57, 0xFA, 0xD3, + 0xDB, 0xC9, 0x89, 0x22, 0x14, 0x99, 0x04, 0x98, 0xBD, 0xB1, 0xC0, 0xE5, 0xFC, 0xAC, 0xC8, 0xF9, + 0x43, 0xEA, 0xCA, 0xC7, 0x94, 0x18, 0x2D, 0x54, 0xA2, 0xC6, 0xAE, 0xF4, 0xD3, 0x16, 0x81, 0xCE, + 0x77, 0x53, 0x11, 0xB0, 0x3A, 0x3A, 0xA3, 0x87, 0x02, 0x1A, 0x39, 0x7E, 0xAE, 0xCC, 0xAB, 0x0D, + 0xD6, 0x9E, 0x1C, 0xCA, 0x3B, 0xFA, 0xCC, 0x30, 0x9F, 0x10, 0x32, 0xEB, 0x13, 0x9B, 0xE3, 0x12, + 0xF4, 0x63, 0x09, 0x75, 0x3A, 0x9B, 0x10, 0x4D, 0x22, 0xDF, 0x87, 0x86, 0xA4, 0xDA, 0xA9, 0xC0, + 0x84, 0x52, 0xC7, 0x8D, 0x20, 0x26, 0x67, 0xD0, 0x45, 0x6E, 0x51, 0xCD, 0x7F, 0xBE, 0x39, 0xD9, + 0xD6, 0xAF, 0x1C, 0xBA, 0x12, 0x5D, 0x63, 0x07, 0x5F, 0xF5, 0xCB, 0xA6, 0x21, 0xE7, 0x44, 0xC7, + 0x05, 0xA8, 0x2C, 0xFB, 0x56, 0x3B, 0x0D, 0xB5, 0x9E, 0x89, 0xE4, 0x60, 0xC4, 0x9F, 0x85, 0xFA, + 0x9F, 0xC2, 0x63, 0x0C, 0xAB, 0xD0, 0x8B, 0x9F, 0x1A, 0x08, 0xA3, 0x89, 0x09, 0x31, 0x67, 0x6A, + 0x84, 0x9A, 0x61, 0x56, 0xB6, 0x71, 0x6E, 0x1D, 0xC6, 0xD0, 0xF0, 0xBD, 0x97, 0x39, 0x04, 0xB4, + 0xB8, 0x4B, 0x59, 0x1B, 0x07, 0x5D, 0xFA, 0x21, 0x85, 0xAB, 0x37, 0xE5, 0x99, 0x40, 0x17, 0x77, + 0x20, 0x37, 0xFC, 0x5A, 0xB5, 0x52, 0xEC, 0x5C, 0x7A, 0x20, 0x69, 0xEF, 0xAA, 0xDA, 0xE7, 0x0A, + 0x14, 0x1E, 0x37, 0x21, 0x31, 0xD2, 0x6D, 0xED, 0x6E, 0xC8, 0x68, 0xD5, 0x0A, 0xA4, 0xFD, 0x5E, + 0x7D, 0x27, 0xF6, 0x56, 0xF5, 0x03, 0xFA, 0x4C, 0x26, 0xBA, 0xE4, 0xF3, 0x4D, 0xE5, 0x1D, 0x39, + 0xCE, 0x47, 0x64, 0xD0, 0xE5, 0x58, 0x4D, 0x95, 0xC5, 0xBC, 0x2B, 0x3E, 0xC8, 0xD6, 0x3B, 0x92, + 0xB8, 0x12, 0x2C, 0xA3, 0x7C, 0x95, 0x10, 0x09, 0x94, 0x52, 0xE2, 0x22, 0xED, 0x94, 0xEF, 0x67, + 0x1B, 0x24, 0x3C, 0xE1, 0xA3, 0x26, 0x18, 0xC9, 0xBC, 0x3D, 0x06, 0x40, 0x44, 0x36, 0xDF, 0x2D, + 0xF6, 0xC6, 0xCD, 0x73, 0x62, 0xD6, 0x86, 0x08, 0x90, 0x44, 0x95, 0xF3, 0x97, 0xB1, 0xEF, 0x05, + 0x90, 0x88, 0xA2, 0xED, 0x85, 0x34, 0x38, 0xE7, 0x52, 0x1C, 0x03, 0xC9, 0x84, 0x39, 0x7B, 0xDF + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(2 * digest[13] - length) % 512]; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39484. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39484.cs +// + +namespace KeyCMF_039484 +{ + static const BYTE Keytable[] = + { + 0x98, 0xAC, 0x9E, 0xC0, 0x28, 0x30, 0x77, 0x26, 0x86, 0xE7, 0xEE, 0x78, 0x38, 0x94, 0x36, 0x35, + 0x26, 0x42, 0xB0, 0x18, 0xAB, 0x8F, 0x9C, 0xE1, 0x8B, 0x64, 0x7F, 0xA8, 0xED, 0xDD, 0xCB, 0x04, + 0x11, 0x18, 0x42, 0x4A, 0xB3, 0x0C, 0x5A, 0x9A, 0x96, 0x6B, 0x6A, 0x68, 0x2E, 0xB0, 0x73, 0x17, + 0x87, 0x60, 0x07, 0x16, 0xC6, 0xC3, 0x88, 0xAF, 0xEF, 0xCC, 0xD5, 0xF3, 0xB5, 0xDF, 0x18, 0x0C, + 0xC5, 0x60, 0x1D, 0xC4, 0x45, 0x0D, 0xB2, 0x48, 0x88, 0xB3, 0xE6, 0x78, 0x75, 0xD3, 0x72, 0xFA, + 0x66, 0x21, 0x47, 0x68, 0xF8, 0x4A, 0xD7, 0x6E, 0x4E, 0x0C, 0x68, 0xF7, 0x07, 0x29, 0xFA, 0x3D, + 0x60, 0xAC, 0xB1, 0x1E, 0x24, 0xA0, 0x1E, 0xF6, 0x7E, 0xAB, 0x80, 0x6B, 0xE6, 0x64, 0xC2, 0x25, + 0x5B, 0xB5, 0xFE, 0x0C, 0x36, 0xA7, 0xAF, 0xC9, 0xB5, 0xCB, 0xCD, 0x4D, 0xA6, 0x65, 0xC5, 0x24, + 0x5B, 0x8E, 0xA2, 0xB0, 0x03, 0x68, 0x91, 0x0D, 0x28, 0x0E, 0x8B, 0x46, 0x80, 0x7F, 0x5E, 0xF3, + 0x69, 0xF7, 0x45, 0x00, 0xBA, 0xFA, 0xE1, 0x5B, 0x2C, 0x76, 0x96, 0xFE, 0x94, 0x14, 0xB8, 0x47, + 0x46, 0xE6, 0xA4, 0x2A, 0xA8, 0x90, 0x9E, 0x59, 0xC5, 0x3A, 0xD0, 0xB0, 0x17, 0xCB, 0x10, 0x35, + 0x34, 0xC0, 0x20, 0x72, 0x5E, 0x56, 0xC3, 0x6B, 0x9A, 0x86, 0xF3, 0x7E, 0xD2, 0xFA, 0x12, 0xE0, + 0x89, 0x8E, 0xDB, 0x37, 0x41, 0x55, 0xB7, 0x76, 0xBB, 0x91, 0x9F, 0x1D, 0x9E, 0x34, 0x01, 0x90, + 0x9A, 0xE6, 0x5A, 0xD3, 0x5A, 0x08, 0x5A, 0x58, 0x49, 0x64, 0xEC, 0xB6, 0x31, 0xC2, 0xA2, 0x58, + 0x59, 0x65, 0xA9, 0x05, 0xCE, 0xAF, 0x40, 0xD7, 0x57, 0xE5, 0x2A, 0xE2, 0xD7, 0x69, 0xD8, 0x80, + 0x77, 0xB2, 0xF9, 0x63, 0x82, 0xFF, 0x7D, 0x5B, 0xC4, 0x3D, 0xF9, 0xF2, 0xFF, 0x76, 0x80, 0x67, + 0x67, 0x30, 0x93, 0x52, 0xC0, 0x25, 0xF9, 0xC3, 0xD5, 0x91, 0x1F, 0x36, 0xA8, 0xA9, 0xB4, 0xF1, + 0xAC, 0x45, 0x2D, 0x2A, 0xB9, 0xB8, 0xA2, 0x45, 0x6F, 0x05, 0xAD, 0x18, 0x14, 0x8D, 0xBE, 0xE9, + 0xC1, 0xC7, 0xCD, 0xE1, 0xE2, 0x5D, 0x61, 0x4F, 0x0B, 0x56, 0x24, 0xA0, 0x7D, 0x54, 0x7F, 0x01, + 0xF0, 0xBE, 0x95, 0xCC, 0xC7, 0x4F, 0xE4, 0x11, 0xD7, 0x35, 0x73, 0x44, 0xC7, 0x54, 0x1A, 0xDD, + 0xA5, 0x4F, 0x76, 0x6D, 0x5A, 0x8B, 0x8D, 0xFE, 0xB2, 0x4D, 0x55, 0x63, 0x76, 0xD5, 0x51, 0x8B, + 0x4B, 0x75, 0x3A, 0x87, 0x79, 0xAC, 0x33, 0xBC, 0x46, 0x12, 0x42, 0x52, 0x51, 0x87, 0x95, 0xD4, + 0xB0, 0x5B, 0x2D, 0x7B, 0xA2, 0x0C, 0x1D, 0xA8, 0xBE, 0xA4, 0x6A, 0x36, 0x78, 0x67, 0x05, 0x5E, + 0x97, 0xCD, 0xA3, 0x07, 0xA0, 0x38, 0xCA, 0xEA, 0xE2, 0xD8, 0x03, 0x0B, 0xD2, 0xD4, 0xF4, 0x87, + 0x95, 0xE1, 0xC7, 0xD7, 0xC0, 0xFA, 0xF1, 0xB3, 0xE7, 0x4B, 0xE0, 0x8F, 0x3F, 0xFA, 0x54, 0xF2, + 0x43, 0x56, 0x13, 0xE4, 0x44, 0xB8, 0xB0, 0xA0, 0x9D, 0x45, 0x4A, 0xA4, 0xB3, 0x16, 0xF8, 0x61, + 0xC7, 0xC5, 0xEF, 0xA9, 0x24, 0x61, 0xEC, 0x27, 0x0C, 0x06, 0x71, 0xB5, 0xD2, 0xE1, 0x65, 0x5A, + 0x39, 0xD9, 0xFA, 0x64, 0x2E, 0xED, 0x4F, 0xB5, 0x32, 0x96, 0x1F, 0xE8, 0x28, 0x5F, 0xFF, 0x9C, + 0x05, 0xD5, 0x85, 0x3F, 0x5E, 0xC6, 0x20, 0x63, 0x92, 0x1C, 0xF1, 0x11, 0x05, 0x7D, 0x5B, 0x06, + 0x0F, 0xC4, 0xAB, 0x47, 0x46, 0x2B, 0x55, 0x5C, 0x14, 0x05, 0x6F, 0x0C, 0x7C, 0x19, 0x2F, 0x9B, + 0xCB, 0xE0, 0x36, 0xC5, 0x77, 0x7C, 0x74, 0xF5, 0x59, 0x5D, 0x64, 0x43, 0x1A, 0x24, 0x60, 0x52, + 0x11, 0x25, 0x0D, 0x38, 0xE2, 0x8F, 0x12, 0x7C, 0x46, 0x8B, 0x86, 0xEF, 0x90, 0x89, 0xC6, 0x3D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39823. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39823.cs +// + +namespace KeyCMF_039823 +{ + static const BYTE Keytable[] = + { + 0x91, 0x27, 0x29, 0xDA, 0x64, 0x19, 0x01, 0x37, 0x28, 0x19, 0x83, 0xEA, 0xA8, 0x0A, 0xDE, 0x5B, + 0x77, 0xC2, 0xAD, 0xFA, 0xD6, 0x84, 0x04, 0xBC, 0x2D, 0xC1, 0x69, 0xC7, 0x9E, 0x32, 0xC3, 0x92, + 0xD4, 0xFD, 0xDE, 0x4C, 0x07, 0x75, 0x17, 0xE1, 0x79, 0x86, 0xEB, 0x74, 0xF7, 0xF7, 0x0A, 0xC3, + 0x11, 0xD9, 0xBF, 0xCC, 0x34, 0xF5, 0xB4, 0xA6, 0x56, 0xA5, 0x05, 0x45, 0x52, 0x10, 0xA0, 0xEA, + 0xDC, 0x25, 0x24, 0xA3, 0xAE, 0x13, 0x93, 0x6F, 0xAD, 0x44, 0x7D, 0x3D, 0xB4, 0x6B, 0x15, 0xAC, + 0x33, 0xD3, 0x11, 0x65, 0xA2, 0xCD, 0x29, 0xAB, 0x76, 0xDA, 0x04, 0xD9, 0x10, 0x44, 0x49, 0x82, + 0xA9, 0x1D, 0xF9, 0xD7, 0x3F, 0xD1, 0x60, 0x8C, 0x7B, 0x89, 0x26, 0x77, 0x76, 0x29, 0xAC, 0x1B, + 0xBB, 0xED, 0x99, 0xD6, 0x1C, 0xC8, 0xFC, 0x39, 0x05, 0x62, 0x9A, 0x5A, 0x14, 0xE8, 0x4D, 0x6C, + 0x06, 0xA5, 0x91, 0xD5, 0x9C, 0x53, 0x4A, 0x62, 0x5D, 0x65, 0x9A, 0x4E, 0x8A, 0xE8, 0x6F, 0x15, + 0x51, 0xE5, 0xCF, 0xDA, 0x7E, 0x78, 0xAF, 0xC2, 0x48, 0x23, 0xF2, 0x0C, 0x9F, 0x1B, 0x64, 0xA5, + 0x59, 0x44, 0x92, 0xDF, 0x5D, 0xFA, 0xDE, 0x23, 0x37, 0x19, 0x47, 0xA1, 0xE7, 0x5C, 0x8C, 0x0E, + 0xDF, 0xA7, 0x71, 0xAC, 0xF2, 0xF3, 0xD5, 0x53, 0xFC, 0xA3, 0x54, 0xE8, 0x1A, 0xBE, 0x91, 0x50, + 0x61, 0x2B, 0x0D, 0x96, 0xDB, 0x99, 0xA3, 0xE9, 0x34, 0x86, 0x24, 0x09, 0xBF, 0x20, 0x09, 0xA2, + 0x71, 0x2E, 0xAE, 0x44, 0xCA, 0x51, 0xCB, 0x6E, 0xE5, 0xD7, 0xAF, 0xD3, 0x5F, 0x45, 0x0F, 0xEC, + 0x8C, 0xD9, 0x83, 0x5F, 0x0E, 0x8D, 0xA6, 0x83, 0x1A, 0x9C, 0x10, 0x73, 0x2E, 0x3C, 0x1A, 0xA6, + 0x41, 0xCE, 0x40, 0x88, 0xC4, 0x2D, 0x73, 0x79, 0x9F, 0x84, 0x34, 0xA9, 0xF0, 0x1A, 0x41, 0x94, + 0xFB, 0xFE, 0xDD, 0xAC, 0x37, 0xBE, 0x70, 0x1D, 0x72, 0xD9, 0xE8, 0xE9, 0xF7, 0x1D, 0x4A, 0xDA, + 0xD8, 0x40, 0xA5, 0xA8, 0xBB, 0x80, 0x25, 0x7B, 0x76, 0x0C, 0xA6, 0x4F, 0xC8, 0x2B, 0xA7, 0x29, + 0x71, 0xCB, 0x37, 0x03, 0x64, 0x36, 0xC1, 0x05, 0x6B, 0xD3, 0x63, 0x86, 0xFD, 0x69, 0x57, 0x01, + 0x6A, 0xBE, 0x00, 0x25, 0x92, 0xDF, 0xA4, 0x88, 0xB5, 0x8C, 0x9D, 0xF1, 0xE4, 0x89, 0x43, 0x39, + 0xA6, 0x5D, 0xDF, 0x4E, 0x2C, 0xCA, 0xAC, 0x56, 0xAB, 0x84, 0x11, 0x89, 0xFA, 0xD0, 0xD4, 0x74, + 0xB2, 0x05, 0xCD, 0x69, 0x4E, 0x08, 0x11, 0xEB, 0xDB, 0xAF, 0x80, 0xD0, 0xF5, 0x85, 0xE9, 0x50, + 0x4B, 0xFB, 0x9F, 0x75, 0xCC, 0xDA, 0x27, 0xE7, 0xC1, 0x6A, 0x93, 0xBE, 0xDA, 0x21, 0x8B, 0xF8, + 0x58, 0x81, 0xE7, 0x55, 0xDE, 0x63, 0xB8, 0xA2, 0xAB, 0xD6, 0x69, 0x0B, 0x59, 0xA7, 0x4F, 0x2A, + 0x87, 0xA1, 0x2F, 0x93, 0xE1, 0x0C, 0xFD, 0x96, 0xD9, 0xEB, 0x2D, 0x1C, 0x9A, 0x8F, 0x3F, 0x0B, + 0x08, 0xA4, 0x98, 0x72, 0xA4, 0x10, 0x6F, 0x34, 0x05, 0x2E, 0x14, 0x4F, 0xA0, 0x9A, 0x50, 0x8D, + 0x64, 0xDB, 0x86, 0xF5, 0xB5, 0x12, 0xC0, 0x96, 0xF2, 0x54, 0xE7, 0x60, 0xC2, 0xD4, 0x61, 0x75, + 0xFB, 0xE5, 0x2D, 0x8C, 0x6A, 0x2B, 0xF1, 0xFC, 0xAB, 0x97, 0xA9, 0x6C, 0x8D, 0xEC, 0x04, 0xB7, + 0x80, 0x88, 0x3E, 0x8C, 0xA1, 0x0E, 0x15, 0x44, 0x3D, 0x29, 0xAD, 0x32, 0xB1, 0xF5, 0xB2, 0x6F, + 0xC7, 0x71, 0xCD, 0xC0, 0xD4, 0xC4, 0x3C, 0x5D, 0x9B, 0x80, 0xC3, 0x67, 0xE6, 0x21, 0xB5, 0x01, + 0x6B, 0x9C, 0x4F, 0xA1, 0x5B, 0x03, 0xB2, 0x17, 0x28, 0xE6, 0xA6, 0x69, 0x39, 0xEC, 0xA0, 0x8E, + 0xF0, 0xD7, 0x12, 0x3F, 0xF7, 0x5C, 0xB6, 0xA5, 0x4B, 0xAD, 0x71, 0xFC, 0x9C, 0x20, 0x2B, 0xB9 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint) length; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint) length; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[(i + kidx) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39935. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39935.cs +// + +namespace KeyCMF_039935 +{ + static const BYTE Keytable[] = + { + 0xC0, 0x06, 0x97, 0xFF, 0x53, 0xCA, 0x73, 0xCA, 0x7C, 0x83, 0xFB, 0x72, 0x4D, 0x5E, 0xEA, 0x0B, + 0x11, 0x0A, 0x3A, 0x25, 0x24, 0x24, 0x0C, 0xFF, 0x02, 0x8D, 0xAF, 0x24, 0x41, 0x0B, 0xAB, 0x30, + 0xC4, 0xD2, 0xCA, 0x86, 0x49, 0xEB, 0xD9, 0x80, 0x87, 0xCC, 0x5F, 0xAD, 0x80, 0x3A, 0x36, 0xED, + 0x73, 0x29, 0x5F, 0x96, 0x03, 0x0A, 0xCC, 0xD6, 0x30, 0x87, 0xEE, 0x91, 0x26, 0x10, 0x2B, 0xC2, + 0xE3, 0x64, 0x92, 0x30, 0x0F, 0xD1, 0xFD, 0x31, 0x57, 0x64, 0x43, 0xC4, 0xEF, 0x5A, 0x94, 0x1E, + 0xC3, 0x83, 0x87, 0x73, 0x8C, 0x40, 0x6E, 0xC7, 0x00, 0x67, 0x78, 0xC6, 0x35, 0x9F, 0xA4, 0xF7, + 0xA5, 0xD6, 0xB9, 0x4F, 0x86, 0x1D, 0x76, 0xCF, 0xB5, 0x59, 0xE7, 0xCF, 0x04, 0xC7, 0x4B, 0x96, + 0x25, 0x17, 0x2B, 0xD2, 0xE5, 0xEC, 0x94, 0x5E, 0x3E, 0x3A, 0xA9, 0x07, 0x70, 0x5A, 0x5C, 0x31, + 0xD2, 0xEF, 0x0B, 0xFC, 0x48, 0x6A, 0x96, 0x59, 0xB0, 0xB3, 0x91, 0xCB, 0x03, 0xD3, 0x67, 0x31, + 0x37, 0x77, 0x9A, 0x75, 0xD4, 0x1D, 0x91, 0x52, 0xBC, 0xF2, 0xA1, 0xD8, 0x9A, 0x7B, 0x88, 0xE7, + 0x64, 0xA1, 0x77, 0x37, 0x35, 0x3C, 0x94, 0x53, 0x1B, 0x99, 0xC8, 0xD4, 0x49, 0x1D, 0x00, 0xF9, + 0x78, 0xDB, 0xEA, 0x62, 0x0F, 0x96, 0x61, 0xD6, 0xE4, 0x94, 0xA7, 0x2B, 0x9B, 0x8F, 0x8C, 0x42, + 0xE2, 0xA7, 0xED, 0xA2, 0x26, 0x0D, 0x1A, 0x30, 0xB3, 0x68, 0x1A, 0x7E, 0xCF, 0x04, 0xB1, 0xC6, + 0x93, 0xD3, 0x8C, 0x00, 0x25, 0x47, 0x92, 0x38, 0xD1, 0x05, 0x7B, 0x56, 0xC9, 0x7D, 0xEA, 0x5D, + 0x13, 0xF5, 0x11, 0xA9, 0x8C, 0x00, 0x61, 0xFD, 0xBE, 0x66, 0x0E, 0x60, 0x06, 0xD5, 0x7F, 0x76, + 0xEF, 0xA6, 0x99, 0xB3, 0x8D, 0x69, 0x4D, 0xD9, 0x50, 0xBC, 0x81, 0x35, 0x38, 0x65, 0x3D, 0x51, + 0xA6, 0x71, 0xBB, 0x91, 0x0B, 0xD7, 0xC4, 0xF6, 0xC5, 0xA8, 0x83, 0xAC, 0xD0, 0x7B, 0xE4, 0x72, + 0xC1, 0xE2, 0xF4, 0x79, 0x13, 0x67, 0x0C, 0xFA, 0x6E, 0xE9, 0x7D, 0xC4, 0x43, 0xD3, 0xAB, 0x85, + 0xCA, 0xBB, 0xC6, 0xDA, 0x18, 0x62, 0xD0, 0x5F, 0x82, 0x18, 0x74, 0xD6, 0xD5, 0xF3, 0xD6, 0x0D, + 0x9F, 0x0D, 0xF2, 0x89, 0x5B, 0x12, 0x9A, 0xFB, 0xB4, 0x05, 0x4E, 0xBA, 0x1C, 0xBE, 0x02, 0x1C, + 0x60, 0x5B, 0x8F, 0xF2, 0xD1, 0x5E, 0x3F, 0x6E, 0xAA, 0xD1, 0x28, 0x7A, 0x9C, 0xFF, 0xE1, 0x40, + 0x6D, 0xCF, 0x29, 0x04, 0x7E, 0x2C, 0xD5, 0x4C, 0x60, 0xBD, 0xEE, 0x4E, 0xE7, 0x03, 0x7F, 0x4B, + 0x03, 0x29, 0xA9, 0x0F, 0xEE, 0xE1, 0x69, 0x9D, 0x24, 0x28, 0x01, 0xFB, 0x27, 0x6E, 0x4E, 0x1D, + 0x2E, 0xCB, 0x2C, 0xD6, 0xF7, 0xF6, 0xA3, 0xD0, 0x0D, 0xE3, 0xCF, 0xF4, 0xA4, 0x78, 0xAA, 0x98, + 0x92, 0x9C, 0xE9, 0xE7, 0x72, 0x45, 0xFF, 0xC8, 0x91, 0xA8, 0x65, 0xCD, 0xBB, 0xDA, 0x8A, 0xAC, + 0x39, 0x24, 0x07, 0x51, 0xA9, 0xAD, 0x56, 0xB0, 0xBE, 0x00, 0x6D, 0x06, 0xF8, 0x12, 0xCD, 0x66, + 0xBF, 0x47, 0xF0, 0x48, 0xAE, 0xD9, 0x1A, 0xA2, 0x28, 0x87, 0x64, 0xF5, 0xAE, 0x1D, 0x45, 0x71, + 0x08, 0x9F, 0x22, 0x02, 0xB9, 0xE4, 0xA5, 0xB3, 0x53, 0x5B, 0xF7, 0x24, 0xEE, 0x8F, 0xD6, 0xC9, + 0x4F, 0x72, 0x8D, 0x98, 0xAC, 0x62, 0x14, 0xD9, 0xFA, 0xDC, 0xB1, 0xA8, 0x67, 0xBA, 0x0C, 0xEC, + 0x24, 0xAA, 0x01, 0x12, 0xD8, 0xD1, 0x51, 0x3C, 0x12, 0xB5, 0xAD, 0x89, 0xB6, 0x0B, 0xEE, 0xC6, + 0x46, 0x3F, 0xE1, 0xF6, 0xF9, 0x0E, 0xE9, 0x84, 0xD2, 0xB6, 0xBB, 0x3F, 0x45, 0xB5, 0xCF, 0x3C, + 0x38, 0x08, 0xA6, 0xFD, 0x24, 0x55, 0x02, 0xF4, 0xA5, 0xE1, 0x3E, 0x2E, 0x50, 0x01, 0x95, 0xDA + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint) length; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 39974. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_39974.cs +// + +namespace KeyCMF_039974 +{ + static const BYTE Keytable[] = + { + 0x10, 0xEF, 0xEC, 0x8F, 0xF7, 0x6C, 0x5B, 0xC7, 0x1E, 0x35, 0x64, 0xE2, 0x8F, 0x02, 0xF3, 0x80, + 0x53, 0xD6, 0x44, 0xD3, 0x9A, 0xFA, 0x09, 0x7A, 0x85, 0xC0, 0x5A, 0xBF, 0x40, 0x3C, 0x93, 0xB4, + 0x5B, 0x84, 0x32, 0x66, 0x68, 0xDF, 0x08, 0x26, 0x7B, 0xD1, 0xC7, 0x37, 0xB8, 0x27, 0x71, 0xE4, + 0x50, 0xD9, 0x20, 0x40, 0xD8, 0x24, 0x05, 0xE3, 0xB9, 0x1F, 0x7E, 0xF7, 0x1B, 0x71, 0xB7, 0x50, + 0x78, 0x81, 0xEC, 0xE3, 0x91, 0x55, 0xAB, 0x1C, 0xF1, 0x1C, 0x4A, 0xFC, 0x69, 0x01, 0xE1, 0x09, + 0x8E, 0x23, 0x4D, 0xE2, 0xFC, 0x10, 0x92, 0xAC, 0x88, 0x8A, 0x65, 0x73, 0x46, 0x1C, 0xAF, 0x02, + 0x07, 0xDE, 0xD9, 0xD0, 0x76, 0x24, 0xB8, 0xAE, 0xE8, 0xA3, 0xBD, 0xA8, 0x5B, 0x29, 0xEB, 0xC0, + 0xE3, 0x4D, 0x6C, 0x2E, 0x64, 0x9E, 0x0D, 0xA0, 0x45, 0x5E, 0x66, 0x9A, 0xEE, 0x12, 0x48, 0x22, + 0xF6, 0x2F, 0x46, 0xDB, 0x64, 0x71, 0xC0, 0xD1, 0x51, 0xEF, 0x62, 0xAF, 0xCD, 0x9F, 0x9A, 0xFF, + 0x9D, 0x23, 0x08, 0xEB, 0x35, 0x99, 0x0D, 0x6A, 0xF8, 0xF7, 0x26, 0xA4, 0x40, 0xF3, 0xA5, 0x98, + 0xF6, 0x9E, 0x75, 0x46, 0x12, 0xB7, 0x6F, 0x3B, 0xD4, 0x2D, 0x86, 0x1F, 0x8A, 0x14, 0x28, 0x11, + 0x5A, 0x2D, 0xB4, 0x1C, 0xAC, 0xFE, 0x9F, 0xF6, 0x45, 0xCB, 0x69, 0x21, 0xC6, 0x24, 0xE8, 0xAF, + 0xD8, 0xBA, 0xDA, 0xEB, 0x81, 0x80, 0xCB, 0xCB, 0xE1, 0x9B, 0x6E, 0xB2, 0xD3, 0xE6, 0x6C, 0xB5, + 0xAB, 0xBE, 0x35, 0x1A, 0x8C, 0x46, 0x5B, 0xCB, 0xBC, 0x6E, 0x19, 0xF1, 0xD7, 0xCD, 0xF5, 0x47, + 0xA4, 0x98, 0xDF, 0x42, 0x20, 0xFA, 0xDF, 0x74, 0xE4, 0x18, 0x1B, 0x29, 0x17, 0x09, 0xFF, 0x5E, + 0xAD, 0x19, 0x01, 0x63, 0x49, 0xCE, 0xF5, 0x90, 0x74, 0x84, 0x54, 0x87, 0x76, 0x3D, 0x5A, 0xED, + 0xC1, 0xDE, 0xA0, 0x98, 0x6A, 0x51, 0x6E, 0x49, 0x00, 0xCA, 0x8C, 0x61, 0x39, 0x88, 0xA1, 0x65, + 0xCA, 0x5D, 0xCF, 0x7C, 0xBE, 0x7E, 0xB7, 0x37, 0x30, 0x79, 0x6B, 0xA1, 0xF2, 0x91, 0x4B, 0xDE, + 0x44, 0x7B, 0x56, 0x3B, 0x7C, 0xD1, 0x68, 0x00, 0x0D, 0xA3, 0xB8, 0x4D, 0xD9, 0xE2, 0xB2, 0x93, + 0x74, 0xD8, 0x46, 0x9D, 0xB0, 0x4A, 0x68, 0xE9, 0x26, 0xAF, 0xC8, 0x9F, 0xB6, 0x2A, 0x8E, 0x94, + 0xF4, 0xFE, 0xBF, 0x28, 0xC2, 0x80, 0xE3, 0xF5, 0x3D, 0x80, 0x78, 0xCA, 0xC6, 0xDE, 0x79, 0x05, + 0x30, 0x42, 0xB6, 0x3E, 0x07, 0x22, 0x91, 0x4D, 0x3A, 0xEA, 0xB3, 0x54, 0xBF, 0x19, 0x5D, 0x88, + 0x96, 0x21, 0xB1, 0x6E, 0x96, 0x32, 0xAB, 0x8E, 0x82, 0x11, 0x4B, 0x48, 0x5A, 0xAA, 0xAA, 0x1D, + 0x1D, 0x33, 0xB7, 0x3E, 0xBC, 0x6D, 0x59, 0x47, 0x9A, 0x1A, 0x12, 0x0C, 0xD5, 0xCB, 0x67, 0x8B, + 0xFD, 0x8E, 0x9C, 0x9E, 0xDD, 0xB7, 0x8F, 0x62, 0x7B, 0xF1, 0x05, 0x78, 0x88, 0x7F, 0xB9, 0x0D, + 0x8C, 0xF3, 0x49, 0x73, 0x85, 0x2F, 0xB1, 0x67, 0x50, 0x77, 0x58, 0x97, 0xFB, 0x31, 0xB3, 0xB0, + 0xC4, 0x4A, 0xAE, 0x00, 0x69, 0xA0, 0x88, 0x15, 0x2A, 0x17, 0x63, 0x13, 0x09, 0xDF, 0x56, 0xD2, + 0x2E, 0xA4, 0x69, 0xE9, 0x84, 0xE3, 0x6D, 0xC5, 0x5D, 0x23, 0xB7, 0x9B, 0x58, 0x8C, 0xAC, 0x7B, + 0x18, 0x67, 0x8F, 0xCE, 0x51, 0xA4, 0x4F, 0x24, 0x83, 0xA7, 0x11, 0x37, 0xF0, 0x06, 0xE6, 0x23, + 0x03, 0xEA, 0xB7, 0x7F, 0x95, 0x97, 0xB9, 0x9C, 0x88, 0x1A, 0xA4, 0x61, 0xF6, 0x3F, 0xEE, 0x86, + 0x0D, 0x33, 0x92, 0x1E, 0x34, 0x58, 0x43, 0x88, 0xD3, 0x6C, 0x1F, 0xC8, 0x47, 0x75, 0x5C, 0x40, + 0x16, 0x59, 0xDF, 0xBB, 0x35, 0xC2, 0xB4, 0x8B, 0xBE, 0xFF, 0x5E, 0xF3, 0x3A, 0x36, 0x45, 0xC2 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + buffer[i] ^= digest[(kidx - i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 40407. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_40407.cs +// + +namespace KeyCMF_040407 +{ + static const BYTE Keytable[] = + { + 0x71, 0xF8, 0x8E, 0xCB, 0x4F, 0x13, 0xAC, 0x85, 0x24, 0xA5, 0x5C, 0x24, 0xCA, 0x32, 0x1C, 0xC9, + 0x6F, 0x28, 0x47, 0x3B, 0x31, 0xA3, 0x95, 0xC8, 0x91, 0x05, 0x22, 0x8C, 0xBB, 0xF5, 0x08, 0xBD, + 0xDE, 0x1D, 0xA6, 0xF4, 0x56, 0x0E, 0xBC, 0x47, 0x81, 0x0D, 0xD8, 0xAB, 0xB9, 0x15, 0xF3, 0x40, + 0x86, 0xED, 0x11, 0xC7, 0x2D, 0xA1, 0xF4, 0x2F, 0x4C, 0x5A, 0x7A, 0xED, 0xC4, 0xEC, 0x5F, 0x76, + 0x3F, 0xCA, 0xB9, 0x1E, 0xFA, 0x04, 0x95, 0x00, 0xBE, 0x64, 0x46, 0x89, 0xAB, 0xBD, 0x0F, 0xC3, + 0xCC, 0x88, 0x78, 0x80, 0x2A, 0x2E, 0x1A, 0x8F, 0x2F, 0xEB, 0xE0, 0x42, 0x3E, 0x04, 0x24, 0x69, + 0xC4, 0x1C, 0x59, 0x94, 0xD0, 0x53, 0x25, 0x0F, 0xDB, 0x3B, 0xEF, 0x9D, 0x2D, 0xB0, 0xD2, 0xDC, + 0xB7, 0x86, 0x72, 0x1F, 0x22, 0x97, 0xF1, 0x26, 0x0C, 0xE3, 0x4B, 0xE0, 0x02, 0x86, 0xCE, 0x9E, + 0xF8, 0x7F, 0xDA, 0x47, 0xE7, 0x89, 0x45, 0x08, 0x6F, 0xA3, 0xB4, 0x0A, 0xA3, 0x0A, 0x89, 0xB6, + 0x9A, 0x1C, 0xDE, 0x17, 0xA6, 0xC3, 0xE4, 0x81, 0x7D, 0x4B, 0x65, 0xB3, 0x51, 0xEA, 0x9D, 0xC9, + 0x92, 0x24, 0xEF, 0x2D, 0x80, 0xEA, 0x83, 0xBB, 0x41, 0x41, 0x52, 0x02, 0xF7, 0x0B, 0x87, 0x52, + 0x80, 0x53, 0x6F, 0xB4, 0x35, 0xEE, 0xF8, 0xAF, 0xE2, 0xEA, 0xF6, 0x3A, 0x40, 0xB6, 0x8E, 0xDC, + 0xDA, 0x99, 0x22, 0x9F, 0x40, 0x9F, 0x17, 0x85, 0xD6, 0xB1, 0x32, 0xC2, 0xB0, 0x7A, 0x5D, 0xEC, + 0xB3, 0x05, 0xCE, 0x57, 0x96, 0x5E, 0x6A, 0x58, 0x32, 0x62, 0xC3, 0x12, 0x71, 0xFB, 0xD1, 0x5E, + 0xEF, 0x65, 0x19, 0x3F, 0x3F, 0x5C, 0xE8, 0x93, 0xAC, 0x08, 0xA1, 0xA2, 0x8E, 0x42, 0x06, 0x9F, + 0x46, 0x22, 0xBD, 0x5D, 0xC4, 0x0F, 0x28, 0x49, 0x33, 0x00, 0xBB, 0x8D, 0x20, 0x64, 0x0E, 0xD4, + 0x52, 0xBA, 0x63, 0xE5, 0x31, 0xBF, 0x71, 0x4B, 0x72, 0xEC, 0x63, 0x5E, 0xD1, 0x4F, 0x14, 0x2D, + 0x53, 0xC0, 0x77, 0x4B, 0x73, 0x9E, 0xB6, 0x13, 0x19, 0x97, 0xFD, 0x28, 0xF9, 0xFD, 0x3C, 0xCD, + 0xC1, 0x8A, 0x91, 0x87, 0x14, 0xAA, 0x26, 0x2D, 0x82, 0x6A, 0xB4, 0x0C, 0x6F, 0x40, 0x01, 0x54, + 0xC5, 0x2D, 0x15, 0xBA, 0xFC, 0x13, 0x60, 0x25, 0x31, 0x5B, 0x92, 0x17, 0xD7, 0xDD, 0x44, 0x4F, + 0xF4, 0xF8, 0xE4, 0x62, 0xA2, 0xFF, 0x41, 0x07, 0x7A, 0xE6, 0xB3, 0xC7, 0xB4, 0x8C, 0xF4, 0xB1, + 0xE8, 0xA5, 0x8B, 0x51, 0x98, 0xE7, 0x8D, 0x7F, 0x99, 0x83, 0x87, 0xA0, 0x71, 0x5E, 0xB5, 0xDD, + 0x43, 0x8B, 0xAD, 0x4A, 0xBC, 0x90, 0x9A, 0x1A, 0xA0, 0x30, 0x02, 0x0E, 0x1C, 0x00, 0x11, 0x10, + 0x3A, 0x79, 0x77, 0x8B, 0x4B, 0x88, 0x5F, 0xEC, 0xB4, 0x66, 0x34, 0x63, 0xA6, 0x67, 0xD9, 0x8F, + 0x85, 0x7F, 0xF3, 0x5B, 0x35, 0xED, 0x8C, 0x86, 0x30, 0x63, 0xB1, 0x18, 0xF9, 0xBD, 0x11, 0x69, + 0xB9, 0x05, 0x44, 0xC4, 0xDC, 0x00, 0xD4, 0x28, 0xDF, 0xD0, 0x5A, 0x35, 0x1C, 0xC5, 0x9D, 0x4C, + 0xCA, 0x98, 0x18, 0xAA, 0x8B, 0x3D, 0x2B, 0xE4, 0xB3, 0xBE, 0x2C, 0xFE, 0xF6, 0xBF, 0x8C, 0x18, + 0x58, 0xF6, 0xA8, 0x9A, 0x2E, 0xDD, 0xE5, 0xC2, 0x29, 0xFE, 0x91, 0x54, 0xB3, 0xD8, 0x2E, 0xEE, + 0x08, 0xA6, 0x5E, 0xA9, 0x27, 0xF5, 0xCA, 0x00, 0x65, 0x2C, 0x01, 0xB6, 0x4E, 0x37, 0x6B, 0x88, + 0xB0, 0x6A, 0x55, 0x6A, 0x93, 0xB9, 0x26, 0x7D, 0x9C, 0xB2, 0x06, 0x82, 0xD7, 0x71, 0x30, 0x8D, + 0x78, 0x7D, 0x6D, 0xF8, 0xF0, 0xE5, 0x63, 0x57, 0x2C, 0xB6, 0x84, 0xD4, 0xC3, 0xBC, 0xFA, 0xBA, + 0xB2, 0x00, 0x1E, 0x91, 0x84, 0xCF, 0xC6, 0x6E, 0x9D, 0x2C, 0x95, 0x51, 0x78, 0x80, 0xE4, 0x54 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[Keytable[0] * length % 512]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= digest[(kidx - 73) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 40570. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_40570.cs +// + +namespace KeyCMF_040570 +{ + static const BYTE Keytable[] = + { + 0x7A, 0xE1, 0x0E, 0x9F, 0xEA, 0x54, 0x61, 0x51, 0x87, 0x46, 0xE6, 0x72, 0x4F, 0xA7, 0xEF, 0x71, + 0x0D, 0xC4, 0x96, 0x5A, 0xAC, 0x60, 0xF3, 0xD5, 0x57, 0xE6, 0x53, 0xE1, 0xE1, 0x42, 0xD2, 0xCF, + 0x5A, 0xC2, 0x3C, 0x8F, 0xC7, 0x29, 0xEF, 0xC8, 0xE9, 0xBA, 0x98, 0x80, 0x3C, 0x37, 0x9E, 0xCF, + 0x5D, 0x0E, 0x52, 0x6D, 0xB4, 0xAE, 0xDC, 0xC4, 0xB9, 0x14, 0xFA, 0x68, 0x96, 0x2C, 0xD4, 0xC6, + 0xF4, 0x1B, 0x20, 0x26, 0x47, 0xBB, 0x0B, 0x64, 0x0E, 0xE5, 0x7A, 0x42, 0xDA, 0x1C, 0x80, 0xB1, + 0xEC, 0xB6, 0xFE, 0x5E, 0x4D, 0xAF, 0x0C, 0x99, 0x2A, 0xA4, 0xA4, 0xD4, 0xF7, 0x7B, 0x4E, 0xF9, + 0x82, 0x90, 0x01, 0x00, 0xB9, 0xDA, 0xC6, 0xB1, 0x80, 0x8C, 0x48, 0x74, 0xFD, 0x1F, 0xD6, 0x90, + 0xFB, 0x3D, 0xC6, 0xD0, 0x40, 0x09, 0x56, 0x72, 0x4B, 0x1B, 0x24, 0x37, 0x84, 0xFC, 0x46, 0x77, + 0x7F, 0xB4, 0xAD, 0xD0, 0x63, 0xAA, 0xC0, 0x94, 0x01, 0x4C, 0x2F, 0xAF, 0x49, 0x48, 0xFF, 0xBC, + 0xC8, 0xF3, 0xBC, 0x01, 0xA8, 0x7E, 0x33, 0xA0, 0x3C, 0x6B, 0x90, 0x47, 0xC8, 0x0F, 0xC4, 0x10, + 0x28, 0x3E, 0x35, 0x15, 0xEA, 0x86, 0xF3, 0x40, 0x77, 0x77, 0x9A, 0xDE, 0xA5, 0xFF, 0x19, 0x20, + 0xAA, 0xAF, 0x0C, 0x7C, 0xEF, 0x46, 0xF5, 0x11, 0xAB, 0x4A, 0xC1, 0x4E, 0x36, 0xF5, 0x08, 0x34, + 0xDD, 0x60, 0x1C, 0x45, 0x0D, 0x7C, 0x38, 0x58, 0xFA, 0xCB, 0x79, 0xC3, 0x84, 0x88, 0x9B, 0x09, + 0x09, 0xF0, 0x64, 0xE1, 0x80, 0x66, 0xBE, 0x18, 0xB7, 0x3B, 0x42, 0xDB, 0x24, 0x15, 0x7C, 0x37, + 0x43, 0xC5, 0x6C, 0x2F, 0x1D, 0x65, 0x5F, 0xC8, 0x6A, 0xA4, 0xB0, 0xC7, 0xEB, 0x30, 0xE0, 0x36, + 0x07, 0xD9, 0x90, 0x43, 0x70, 0xF0, 0xF3, 0x3F, 0x9D, 0xBC, 0x00, 0x01, 0x56, 0x2D, 0x32, 0x07, + 0xCB, 0x43, 0x28, 0x13, 0xF8, 0xD4, 0xFF, 0x35, 0x13, 0xFB, 0x99, 0x24, 0x13, 0x06, 0x44, 0x19, + 0xC6, 0xE3, 0xD1, 0x9B, 0x10, 0x66, 0x83, 0x1F, 0x67, 0xED, 0x1E, 0x26, 0x56, 0xC2, 0x67, 0x45, + 0xEC, 0xFA, 0xCB, 0xE2, 0x47, 0x35, 0xAA, 0x93, 0xE6, 0x74, 0xE1, 0x18, 0x49, 0x50, 0xFB, 0x32, + 0xE6, 0xFA, 0x31, 0x46, 0x69, 0x1A, 0x5E, 0x50, 0x40, 0x0A, 0x44, 0xF2, 0x69, 0x1B, 0xD8, 0x4B, + 0x77, 0x37, 0xEA, 0x90, 0x88, 0xA7, 0x44, 0xD3, 0x4D, 0x68, 0x61, 0xFC, 0x14, 0x28, 0xC2, 0x72, + 0x0E, 0xF2, 0x90, 0x57, 0x9E, 0x87, 0xCB, 0xB5, 0x6D, 0x28, 0xE0, 0xC7, 0x8A, 0x82, 0xE7, 0xAF, + 0x8F, 0x91, 0x3B, 0x92, 0xB0, 0xE3, 0xF2, 0x17, 0x21, 0x9C, 0xEA, 0x78, 0x33, 0x7E, 0xA4, 0x2B, + 0x37, 0x28, 0x86, 0xDD, 0x00, 0xF1, 0xD6, 0x9A, 0x46, 0xA6, 0x66, 0xD3, 0x3D, 0x01, 0xED, 0xA7, + 0x53, 0x39, 0x8D, 0xE8, 0xBF, 0xE7, 0x9E, 0xEF, 0xA3, 0x30, 0xCF, 0xAF, 0x29, 0xC1, 0x10, 0xFB, + 0xDF, 0x4D, 0x04, 0x2C, 0x75, 0x12, 0x48, 0xB6, 0x2A, 0x3C, 0xDB, 0x7F, 0x7B, 0x1D, 0x76, 0xB8, + 0x51, 0x5C, 0x2F, 0xB0, 0x13, 0xCB, 0x2D, 0xB3, 0x0E, 0x9F, 0x83, 0x2D, 0x59, 0xC4, 0xE9, 0xCE, + 0x3F, 0x9A, 0x15, 0xEC, 0x2A, 0xB1, 0x97, 0xAC, 0x01, 0xDE, 0x68, 0x5B, 0xE3, 0x17, 0x51, 0xB0, + 0x44, 0xF4, 0x82, 0xD5, 0xD8, 0xD0, 0x1D, 0x0C, 0x45, 0xAE, 0xE8, 0x30, 0x1B, 0x51, 0x8F, 0x85, + 0x41, 0xEF, 0x66, 0x97, 0x1B, 0x84, 0xED, 0x24, 0x80, 0xDF, 0x6B, 0x78, 0x2F, 0x8E, 0xAA, 0xA9, + 0xF8, 0x24, 0xF4, 0x06, 0xBE, 0xF4, 0x67, 0x91, 0x41, 0x8A, 0x21, 0xF0, 0x4F, 0x16, 0xC9, 0x8C, + 0xFF, 0x57, 0xF3, 0xA2, 0x5F, 0x6B, 0x82, 0x27, 0x71, 0xEB, 0xB0, 0x6A, 0x11, 0x92, 0xCB, 0x11 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= header.m_buildVersion & 511; + buffer[i] ^= digest[(kidx + header.m_buildVersion) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 40763. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_40763.cs +// + +namespace KeyCMF_040763 +{ + static const BYTE Keytable[] = + { + 0x50, 0x00, 0xE5, 0xCD, 0xEF, 0xD0, 0xA2, 0xBE, 0xD5, 0x1A, 0x19, 0x71, 0x4B, 0x43, 0x39, 0x63, + 0x87, 0xCB, 0x80, 0xF3, 0x86, 0x4B, 0xBE, 0xB8, 0xF4, 0x39, 0x55, 0x9E, 0xAB, 0x55, 0x8C, 0x77, + 0x36, 0x8C, 0x3E, 0x23, 0x09, 0x29, 0x2A, 0x67, 0x86, 0xDF, 0x07, 0x2C, 0xBC, 0x70, 0xF8, 0x17, + 0xFB, 0x7A, 0xDD, 0xFA, 0x80, 0xA8, 0xD7, 0xAF, 0xA5, 0xEF, 0x36, 0x45, 0xF8, 0xA0, 0x46, 0x94, + 0x12, 0x12, 0xD6, 0x76, 0xD2, 0x65, 0x9A, 0x7A, 0x42, 0x0A, 0x3F, 0x00, 0x57, 0xF0, 0x12, 0x2C, + 0x71, 0xE4, 0x20, 0xD1, 0x30, 0x41, 0x12, 0x2A, 0x49, 0xE1, 0xF0, 0xFE, 0x01, 0x2E, 0x3D, 0xA4, + 0x53, 0x82, 0x94, 0x9C, 0x43, 0x05, 0xE8, 0xA6, 0xCC, 0x93, 0x4B, 0x96, 0x6D, 0xD9, 0x9F, 0xCD, + 0xE1, 0x1B, 0x13, 0x54, 0xAA, 0x02, 0x05, 0x8A, 0x08, 0x78, 0x82, 0xFC, 0x00, 0x52, 0x03, 0x43, + 0xB8, 0xA8, 0x25, 0x4C, 0xA8, 0x35, 0x50, 0x42, 0x99, 0x53, 0x0B, 0x41, 0x1B, 0xE6, 0xB1, 0xE1, + 0x2C, 0x70, 0xED, 0x8A, 0xDF, 0x30, 0x26, 0x88, 0x94, 0x36, 0x6C, 0x92, 0x00, 0xD7, 0x32, 0xBF, + 0x35, 0x19, 0x76, 0xF0, 0x14, 0xEA, 0x4E, 0x40, 0x2F, 0xD7, 0xAC, 0x28, 0x26, 0xC9, 0xE5, 0x0C, + 0x8F, 0xF5, 0xF0, 0x51, 0x62, 0x70, 0x83, 0x7D, 0x78, 0x8F, 0xA9, 0x37, 0xA6, 0xB3, 0x07, 0x17, + 0xDC, 0x88, 0x22, 0xEE, 0x31, 0x2B, 0x50, 0xCD, 0x59, 0xBA, 0x74, 0x20, 0xF9, 0x40, 0xD8, 0x59, + 0x5A, 0x8E, 0xBA, 0xA0, 0x3A, 0x0D, 0xBB, 0xEE, 0x5A, 0x2C, 0x1E, 0x7D, 0x2B, 0x53, 0x86, 0x20, + 0x7A, 0x9C, 0x64, 0xBA, 0xE2, 0x77, 0xEE, 0xFA, 0x41, 0xAB, 0x54, 0x34, 0x66, 0x35, 0x8B, 0xFC, + 0xE5, 0x1E, 0x7D, 0x41, 0x7A, 0x39, 0x4F, 0xE4, 0x2A, 0x78, 0xDE, 0xDB, 0xA1, 0x3B, 0x01, 0x62, + 0x2C, 0x79, 0x84, 0xF9, 0xC7, 0xE1, 0xA9, 0x54, 0xD7, 0xBB, 0x76, 0x82, 0x35, 0x62, 0x99, 0x21, + 0x21, 0xD3, 0x78, 0xFB, 0xD5, 0xA1, 0x2C, 0x4E, 0xB3, 0xF9, 0xEA, 0x54, 0x44, 0xE2, 0x1D, 0xE4, + 0x64, 0x92, 0xC4, 0xE9, 0x1E, 0x1B, 0x83, 0x1E, 0x05, 0xAC, 0x3F, 0x52, 0x90, 0xE8, 0x79, 0xEF, + 0xED, 0x85, 0xFB, 0x17, 0xF6, 0x98, 0x3A, 0x27, 0xA9, 0x4F, 0x3C, 0x2E, 0x64, 0xD1, 0x9D, 0x8B, + 0xEF, 0x36, 0x6B, 0x21, 0x85, 0x79, 0x50, 0x7B, 0x1A, 0x83, 0xB5, 0x63, 0xEA, 0x56, 0x41, 0x15, + 0x2C, 0xC0, 0xB8, 0xE7, 0x58, 0xE2, 0x92, 0x49, 0xA3, 0x3C, 0xB5, 0xF1, 0xDB, 0x0A, 0xCF, 0xAF, + 0x0E, 0xE7, 0x1A, 0xE0, 0x54, 0x80, 0x43, 0x3B, 0xB0, 0xC3, 0x92, 0x13, 0xC4, 0x53, 0x15, 0x3C, + 0x44, 0x3B, 0x85, 0xEC, 0x67, 0x50, 0x36, 0x1B, 0x86, 0x25, 0xC6, 0x12, 0x35, 0xD8, 0x8B, 0x55, + 0xC6, 0x9D, 0x70, 0xF9, 0x56, 0x2A, 0xE1, 0x94, 0xDB, 0xF0, 0x86, 0x89, 0x60, 0x29, 0x1B, 0x27, + 0xE9, 0x7C, 0xD0, 0x1E, 0xDC, 0x3C, 0xE2, 0x89, 0xAE, 0x59, 0x60, 0x80, 0xB4, 0x2C, 0xC6, 0x49, + 0x52, 0x69, 0xF2, 0xC8, 0x34, 0xA3, 0xC7, 0x7F, 0x37, 0xB5, 0x72, 0xDE, 0x0D, 0x19, 0x28, 0xCF, + 0xE8, 0x23, 0x86, 0xE5, 0x95, 0x37, 0xEC, 0x73, 0x56, 0x8C, 0xDC, 0xDB, 0xE1, 0xF8, 0x85, 0xA9, + 0x4A, 0xFB, 0xBB, 0xD1, 0xA9, 0xB0, 0xEE, 0x32, 0xF0, 0x85, 0x4F, 0xE1, 0x12, 0xA3, 0xCC, 0x9B, + 0xCC, 0xCA, 0x9E, 0x94, 0xA3, 0x25, 0xDC, 0x02, 0x35, 0x8C, 0xA1, 0xC4, 0x49, 0xEF, 0xAC, 0x09, + 0x06, 0x68, 0x18, 0x29, 0x12, 0xC1, 0x20, 0x13, 0x65, 0x22, 0x2A, 0x05, 0x34, 0x1F, 0xBD, 0x39, + 0x3A, 0xB4, 0x10, 0x7E, 0x4A, 0x79, 0xCF, 0x68, 0xEF, 0xF0, 0x9B, 0x75, 0xF6, 0x76, 0x46, 0xA3 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) (digest[(kidx + header.m_entryCount) % SHA1_DIGESTSIZE] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 40990. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_40990.cs +// + +namespace KeyCMF_040990 +{ + static const BYTE Keytable[] = + { + 0x5F, 0xCC, 0x2B, 0x0B, 0xD1, 0x6E, 0xAA, 0xAF, 0x04, 0xBD, 0xDB, 0x33, 0x25, 0x96, 0x45, 0xBB, + 0xE7, 0x03, 0xBE, 0x3C, 0xC8, 0xE1, 0x20, 0x07, 0x60, 0x66, 0x9C, 0x98, 0x69, 0xB6, 0xE9, 0x69, + 0xA6, 0x77, 0x8B, 0x85, 0x45, 0x44, 0xE2, 0x14, 0xF2, 0x7A, 0xB2, 0xC0, 0xA1, 0x95, 0xF1, 0x91, + 0x8F, 0x33, 0xB8, 0x3C, 0xD1, 0x9A, 0xF7, 0x5F, 0x74, 0x68, 0x12, 0x58, 0x93, 0x50, 0x8C, 0x46, + 0x24, 0x3C, 0xC6, 0x24, 0x25, 0x0A, 0x61, 0xC7, 0xD3, 0xA6, 0xC0, 0x37, 0x5E, 0xA3, 0x93, 0x14, + 0x54, 0x26, 0x99, 0xD8, 0x2C, 0x68, 0xC0, 0xA5, 0x13, 0xA2, 0xA6, 0xEB, 0xFF, 0x0C, 0x3D, 0xBC, + 0x98, 0xAF, 0x7E, 0x5E, 0x53, 0xE3, 0xF7, 0x3A, 0x6E, 0x1C, 0x87, 0xF8, 0x0E, 0xA4, 0x6D, 0xC4, + 0x77, 0xF7, 0x52, 0x62, 0xEF, 0xCC, 0x13, 0x15, 0xC2, 0xB2, 0xE8, 0x37, 0x10, 0x7B, 0x5E, 0x88, + 0x97, 0x43, 0x02, 0xA3, 0xBF, 0x7B, 0x79, 0xBB, 0xF5, 0x37, 0x46, 0x95, 0x01, 0x5D, 0xA8, 0x4F, + 0x54, 0x96, 0x8B, 0xC8, 0x32, 0xCF, 0xDE, 0x7D, 0x2C, 0xDC, 0x5C, 0x09, 0xA4, 0x56, 0xC7, 0xFD, + 0xBF, 0x1C, 0xA5, 0xBD, 0x42, 0x52, 0x95, 0x75, 0x57, 0x2F, 0x82, 0x6D, 0x3F, 0xE9, 0x93, 0xDB, + 0xA1, 0x38, 0x9F, 0x49, 0xC0, 0x67, 0xBB, 0x60, 0x85, 0x46, 0xFF, 0x05, 0x1D, 0xBD, 0xF8, 0x97, + 0xC6, 0x99, 0x1A, 0xC7, 0xFA, 0xD0, 0x74, 0xEF, 0xD7, 0x5F, 0x30, 0x3E, 0x4E, 0x86, 0x33, 0xEB, + 0xE6, 0xB3, 0x6C, 0x74, 0xF5, 0x02, 0x20, 0x41, 0x48, 0x17, 0x10, 0xEC, 0x5D, 0xAF, 0xC8, 0x68, + 0x04, 0x74, 0x97, 0x3A, 0x42, 0x01, 0xFD, 0xC1, 0x4F, 0xC7, 0x8D, 0xE4, 0x3C, 0xEA, 0x25, 0x5B, + 0xB5, 0x00, 0x2A, 0xBC, 0xFD, 0xF0, 0x12, 0xB4, 0x88, 0xE9, 0x97, 0x60, 0xE5, 0xD5, 0x36, 0xB6, + 0xFC, 0xC9, 0xC6, 0x0F, 0x69, 0x35, 0x57, 0x26, 0xDD, 0xBA, 0x02, 0x1C, 0xA4, 0x83, 0x97, 0x12, + 0x0B, 0x48, 0x4D, 0x69, 0x0B, 0x6F, 0xE9, 0x97, 0xD7, 0xB7, 0xA3, 0xBE, 0x07, 0x67, 0xC7, 0xD4, + 0xE8, 0xFD, 0xA6, 0x8E, 0x44, 0x0B, 0xC9, 0xEE, 0xC1, 0x4A, 0x49, 0xD3, 0x3C, 0x6F, 0x0A, 0xCF, + 0x71, 0xFF, 0x8F, 0xB0, 0x33, 0xC1, 0x5F, 0xEA, 0x6E, 0x82, 0x26, 0xCC, 0x0E, 0xBA, 0xFE, 0x6B, + 0x25, 0x96, 0xC0, 0x6D, 0x52, 0xA9, 0xDE, 0xF2, 0xA2, 0x1A, 0x9A, 0x7B, 0x6C, 0xA8, 0x4D, 0x01, + 0x2E, 0xA3, 0x39, 0xFE, 0xA0, 0xFA, 0x33, 0x75, 0x93, 0xA5, 0x86, 0xB4, 0xEE, 0x64, 0xC5, 0xA4, + 0x26, 0x9F, 0xF8, 0xCE, 0x57, 0x5D, 0xCC, 0x58, 0x44, 0xF9, 0x96, 0x0F, 0x78, 0xC7, 0x2A, 0x09, + 0x56, 0x53, 0x32, 0x57, 0x6F, 0xBC, 0xF6, 0x5D, 0x43, 0x92, 0xA8, 0x7D, 0xDD, 0x80, 0x90, 0x08, + 0x37, 0x93, 0xAD, 0xCE, 0x56, 0xC9, 0x9F, 0xEF, 0x9F, 0xE6, 0xDA, 0xB0, 0x54, 0x12, 0x92, 0xA0, + 0xFB, 0xBF, 0xAF, 0x75, 0x58, 0xB1, 0x91, 0xA9, 0x97, 0x58, 0x09, 0xB1, 0xBE, 0xA6, 0xAA, 0x30, + 0x01, 0xCB, 0xFA, 0x6A, 0x24, 0x8E, 0xD1, 0xE9, 0x21, 0x1D, 0x32, 0x40, 0x55, 0x50, 0x74, 0x3A, + 0xDB, 0x1D, 0xD4, 0x9C, 0x58, 0xA3, 0xA0, 0x7B, 0xEA, 0x20, 0x84, 0x68, 0x87, 0xA2, 0x37, 0xCB, + 0x28, 0xF1, 0x67, 0x15, 0x42, 0x6B, 0xD9, 0x09, 0x59, 0xA4, 0x74, 0x0F, 0xD9, 0xA5, 0x65, 0x2F, + 0xFC, 0x35, 0xC7, 0x72, 0x11, 0x6B, 0x35, 0x18, 0x70, 0x6D, 0x2A, 0x0B, 0x05, 0x45, 0xCB, 0x9D, + 0x99, 0xB5, 0x05, 0x10, 0xF7, 0x68, 0x16, 0xA7, 0x08, 0xC1, 0x93, 0xDF, 0x7E, 0x47, 0x67, 0xE2, + 0x03, 0x54, 0xDE, 0xA3, 0x6D, 0xDD, 0x25, 0x2D, 0xCB, 0x2C, 0xCF, 0xBC, 0x27, 0x00, 0x0F, 0x24 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + switch (kidx % 3) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) 2 * digest[5]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + buffer[i] ^= (byte) (digest[(kidx - 73) % SHA1_DIGESTSIZE] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 41350. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_41350.cs +// + +namespace KeyCMF_041350 +{ + static const BYTE Keytable[] = + { + 0x31, 0x3C, 0xFB, 0x62, 0xB2, 0x7A, 0xD7, 0xBE, 0x62, 0xAE, 0x39, 0x9D, 0x04, 0xCB, 0x82, 0x22, + 0xFF, 0x03, 0xA9, 0x5A, 0x07, 0xE3, 0x35, 0x56, 0x38, 0xD0, 0x65, 0xBE, 0xCF, 0x09, 0x20, 0x13, + 0x9A, 0x66, 0xC0, 0x3B, 0x19, 0x5F, 0x9F, 0x17, 0xE4, 0x18, 0xFF, 0x05, 0x37, 0x57, 0x41, 0x8A, + 0x3A, 0xCF, 0xDA, 0x43, 0x24, 0x84, 0x6C, 0xB1, 0x40, 0x09, 0x6F, 0xDD, 0x9E, 0x97, 0xAD, 0xD6, + 0xDF, 0xA5, 0x97, 0xA2, 0x8A, 0x86, 0x97, 0x1C, 0x31, 0xB6, 0xA9, 0xD3, 0x64, 0x55, 0x6B, 0x50, + 0xD5, 0xDC, 0xBC, 0x5F, 0x07, 0xAC, 0x04, 0xE9, 0x56, 0x8F, 0xDE, 0x13, 0x44, 0x29, 0xA2, 0xA3, + 0xC4, 0xFE, 0xA7, 0x3D, 0xEA, 0x56, 0x9A, 0xC8, 0x9C, 0xB2, 0x8C, 0x21, 0xCE, 0x87, 0x87, 0x5B, + 0xD9, 0x32, 0x0E, 0x21, 0x3B, 0x78, 0x41, 0xFC, 0xCE, 0xA8, 0xD4, 0xE1, 0x0D, 0x33, 0x2D, 0x9F, + 0xA0, 0xE7, 0x17, 0x90, 0x22, 0xF0, 0xE6, 0x3B, 0x0F, 0x76, 0x17, 0xA6, 0xFB, 0x9D, 0x12, 0x75, + 0xAB, 0xA5, 0x0A, 0x66, 0xA3, 0x08, 0xAB, 0x59, 0xEF, 0x79, 0xF9, 0x62, 0x18, 0x7E, 0x57, 0xC4, + 0xAF, 0x39, 0x69, 0x97, 0x19, 0x97, 0xAB, 0xD7, 0xFB, 0x90, 0xF1, 0xB6, 0xEA, 0x24, 0xDA, 0x7A, + 0xCB, 0x11, 0x1B, 0xAC, 0x60, 0xCD, 0x9F, 0x48, 0xC3, 0x82, 0x20, 0x43, 0x5F, 0x21, 0x25, 0x4C, + 0xD6, 0xB9, 0x86, 0x77, 0xF2, 0x70, 0x1F, 0xA7, 0xE1, 0xFD, 0xD9, 0x08, 0xDB, 0xC4, 0x28, 0x29, + 0xBE, 0x60, 0xC7, 0x8D, 0x6C, 0xB8, 0x8F, 0x70, 0x6A, 0xFD, 0x1D, 0xB0, 0xEC, 0x1D, 0x39, 0x29, + 0x6C, 0xDB, 0xCB, 0x5B, 0xAF, 0xAF, 0x26, 0x11, 0xE1, 0xEB, 0x02, 0x8D, 0xD3, 0x70, 0x43, 0xF8, + 0xAD, 0x70, 0x48, 0x9F, 0xD7, 0x85, 0x79, 0x92, 0x54, 0xAC, 0x5E, 0xB5, 0xCC, 0x55, 0xC0, 0x55, + 0xA8, 0xB4, 0x10, 0xDD, 0x81, 0x70, 0x0C, 0x33, 0xA0, 0x26, 0xF9, 0xAA, 0x41, 0x68, 0x74, 0x9B, + 0x24, 0x1B, 0x15, 0x0A, 0x4D, 0x0C, 0xE6, 0xC6, 0xE3, 0xF9, 0xE4, 0x6D, 0xD3, 0x0D, 0xBD, 0xAC, + 0x9E, 0xC6, 0x5B, 0x6E, 0xA3, 0x82, 0x1F, 0xB2, 0x9A, 0x35, 0x17, 0x8A, 0x5C, 0xAA, 0x90, 0xE4, + 0xCB, 0xC3, 0x4D, 0xA5, 0xAB, 0x3C, 0xD1, 0xBD, 0x22, 0x8F, 0x34, 0x1F, 0x50, 0x0C, 0x69, 0x4E, + 0xB8, 0x0C, 0x51, 0xE3, 0xF3, 0x9C, 0x92, 0xD1, 0xE7, 0xCC, 0x05, 0xE3, 0xF5, 0xDF, 0xF7, 0xEE, + 0x8B, 0x52, 0xD0, 0x1F, 0x71, 0x8B, 0x16, 0x17, 0x7C, 0x24, 0xB1, 0x02, 0xE0, 0x95, 0x84, 0x65, + 0xB0, 0x5F, 0xAB, 0x9A, 0x14, 0xD2, 0x29, 0x6C, 0xE3, 0xDA, 0xEE, 0x32, 0x8F, 0x48, 0x4C, 0x0D, + 0xC7, 0x8E, 0xFA, 0x7E, 0x7A, 0x7E, 0xA8, 0x4C, 0x75, 0x70, 0xB8, 0xF3, 0xC9, 0x52, 0xF3, 0x4E, + 0x81, 0x67, 0x5B, 0x07, 0xA3, 0xD7, 0xE9, 0xAD, 0x31, 0x7F, 0x9D, 0x8E, 0x6E, 0xEF, 0xF3, 0x57, + 0xAC, 0x75, 0x4F, 0xDF, 0xC8, 0xC6, 0x05, 0xFD, 0xE8, 0x5B, 0x8E, 0x93, 0xFD, 0xAD, 0x05, 0x7C, + 0xE8, 0x90, 0x1A, 0x5A, 0xC3, 0x79, 0x88, 0xD1, 0x9E, 0xB5, 0xE9, 0x08, 0xAE, 0xC0, 0xDD, 0xB0, + 0x7E, 0x93, 0x48, 0x7C, 0x4D, 0x7D, 0x54, 0x38, 0x25, 0x49, 0x33, 0x3A, 0x1E, 0x6A, 0x03, 0x43, + 0x18, 0x43, 0x38, 0x93, 0x84, 0xA7, 0x3A, 0xD5, 0xCD, 0x9A, 0xF2, 0xF3, 0xB6, 0x53, 0x67, 0x4E, + 0x55, 0x1F, 0xE3, 0x93, 0xB0, 0x48, 0x9A, 0x60, 0xC9, 0xA2, 0x0E, 0xA6, 0x2C, 0x72, 0x9A, 0x17, + 0xE0, 0xDB, 0x51, 0x00, 0x28, 0x19, 0xC6, 0xBC, 0xC9, 0xAD, 0x1D, 0x66, 0x57, 0xFA, 0xF6, 0xF8, + 0xF6, 0x70, 0xC3, 0x7C, 0x29, 0xA6, 0x50, 0x68, 0xC8, 0x13, 0x14, 0x2E, 0xAC, 0x13, 0x7A, 0x31 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + int keytableIndex = Math.Max((2 * digest[13] - length) % 512, 0); + uint kidx = Keytable[keytableIndex]; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 41713. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_41713.cs +// + +namespace KeyCMF_041713 +{ + static const BYTE Keytable[] = + { + 0x32, 0x76, 0x49, 0x28, 0xFD, 0x60, 0x40, 0xC4, 0x1A, 0x70, 0x33, 0x87, 0xA6, 0x8A, 0x70, 0xB5, + 0x64, 0xE5, 0xC2, 0xC7, 0xA0, 0x15, 0xFE, 0x9D, 0x87, 0xCA, 0x61, 0x6D, 0xC2, 0x12, 0x29, 0x6D, + 0xCC, 0xB1, 0x5B, 0xCA, 0x43, 0x57, 0x55, 0xF5, 0x15, 0xBF, 0x5F, 0x99, 0x3A, 0xD3, 0x67, 0xF9, + 0xD1, 0xD1, 0x94, 0x63, 0xA3, 0xDB, 0xEA, 0xE8, 0x40, 0xCD, 0xE0, 0x1C, 0x4D, 0xBC, 0x55, 0xE1, + 0x60, 0xA5, 0x09, 0x73, 0x98, 0xAF, 0x85, 0xEE, 0xA7, 0x2D, 0x67, 0xF1, 0xDC, 0x25, 0x30, 0x1C, + 0x86, 0xEF, 0x16, 0x01, 0x38, 0x4E, 0xCA, 0x64, 0xE3, 0x2E, 0xF8, 0xF9, 0xA8, 0x48, 0xD4, 0x2F, + 0x9C, 0x95, 0xC3, 0x23, 0x0D, 0x84, 0x87, 0xE8, 0x05, 0xFB, 0xE5, 0xA7, 0xBF, 0xA9, 0x87, 0xE4, + 0xA9, 0x11, 0x56, 0x74, 0x30, 0x8A, 0xDF, 0x7F, 0xA1, 0x02, 0xD4, 0xCA, 0xF3, 0xCF, 0x48, 0x23, + 0x5A, 0x5E, 0xC2, 0x59, 0x3F, 0xA7, 0x2D, 0x5D, 0xF2, 0xBF, 0x7A, 0x96, 0xC8, 0x7F, 0x1D, 0x00, + 0xF7, 0x36, 0x8E, 0x15, 0x78, 0x17, 0x52, 0xBA, 0xB9, 0x7F, 0xA2, 0x24, 0xE5, 0x71, 0xBD, 0x85, + 0x65, 0x12, 0x9C, 0xB9, 0x97, 0xDA, 0x29, 0x26, 0x06, 0x0F, 0x5C, 0xB7, 0xAC, 0x5F, 0x11, 0x42, + 0xEF, 0xB2, 0xF0, 0xB2, 0x61, 0xFC, 0xAA, 0xFD, 0x2A, 0x69, 0x2D, 0x58, 0x3B, 0x25, 0x50, 0x84, + 0x97, 0xD8, 0xAC, 0x35, 0x52, 0x67, 0x68, 0x8A, 0xAC, 0xAF, 0x8D, 0x28, 0x69, 0x74, 0x5C, 0xD5, + 0x5A, 0xB5, 0x4B, 0xB8, 0xB9, 0x27, 0xE5, 0x81, 0xD9, 0xF2, 0xCE, 0x62, 0x00, 0x8A, 0xE8, 0x58, + 0x02, 0xCD, 0x83, 0x07, 0x07, 0xFF, 0x78, 0x5C, 0x8C, 0x49, 0xE6, 0x12, 0x93, 0xBD, 0xB8, 0xE3, + 0x1F, 0xF4, 0xF6, 0x2E, 0xCD, 0x5E, 0x7E, 0x69, 0xF2, 0x0B, 0xF9, 0xE5, 0x7D, 0x17, 0x0E, 0xFD, + 0x3A, 0x33, 0x69, 0x25, 0x00, 0x74, 0x91, 0xAA, 0x40, 0x71, 0x96, 0xB4, 0x82, 0x66, 0xD2, 0x77, + 0xE9, 0x3E, 0x34, 0x6A, 0xC2, 0x5A, 0x73, 0xE9, 0x6C, 0x5D, 0xC1, 0x2C, 0x06, 0xEB, 0xBF, 0x64, + 0x15, 0xC1, 0x64, 0xA6, 0x59, 0x4A, 0x5E, 0x8A, 0xDA, 0x46, 0xFB, 0x9F, 0x09, 0xF7, 0xF1, 0x1F, + 0x41, 0xE6, 0x98, 0x50, 0x62, 0xC9, 0xE5, 0x2A, 0x09, 0x44, 0x47, 0xDE, 0x82, 0x80, 0x90, 0x8A, + 0x51, 0x3A, 0xCE, 0xAE, 0x0A, 0x62, 0x47, 0x77, 0xE8, 0xB1, 0xE1, 0x34, 0x60, 0xDD, 0xDF, 0x7B, + 0x5E, 0x60, 0x25, 0xC0, 0x47, 0x97, 0x74, 0x12, 0x07, 0x66, 0xC4, 0x8F, 0x39, 0x00, 0x5E, 0x3E, + 0x8E, 0xB6, 0x66, 0x1B, 0x4A, 0x84, 0x33, 0xF1, 0x0A, 0xD0, 0xB6, 0x03, 0x65, 0x0F, 0xA7, 0xB8, + 0x98, 0xDB, 0xF3, 0xC1, 0x96, 0xF5, 0xA0, 0xD6, 0x59, 0x03, 0x4B, 0x57, 0xD9, 0x60, 0xB0, 0xB6, + 0xCE, 0xE5, 0x0A, 0xAF, 0xBF, 0x94, 0x19, 0x17, 0xF4, 0xAA, 0xB3, 0x56, 0xE2, 0xA5, 0x66, 0xD2, + 0xB4, 0x8A, 0x27, 0x82, 0x14, 0xD9, 0xDA, 0xCC, 0x6E, 0x26, 0xB8, 0x8B, 0x95, 0x73, 0x19, 0x0A, + 0x33, 0x1C, 0xD6, 0x86, 0x66, 0xF3, 0xE4, 0x27, 0x76, 0xC8, 0x27, 0xF7, 0x9D, 0x55, 0x52, 0x80, + 0x1D, 0x14, 0x23, 0x2F, 0x72, 0xF4, 0xF8, 0x56, 0x05, 0xAA, 0x17, 0x2B, 0xF4, 0x21, 0xC5, 0x96, + 0xEE, 0x7D, 0x74, 0x7E, 0x2F, 0xA8, 0xC0, 0x0D, 0x32, 0x57, 0x66, 0xA4, 0x0A, 0x4F, 0xB0, 0x4C, + 0x4A, 0x8F, 0x51, 0x79, 0x58, 0x9D, 0xE0, 0x68, 0x92, 0x80, 0x9E, 0x16, 0x06, 0x4A, 0xA3, 0xA2, + 0xBE, 0xD0, 0xEA, 0x32, 0x47, 0xBA, 0x93, 0x79, 0xDA, 0x29, 0xCE, 0x05, 0x81, 0xDC, 0xEE, 0x54, + 0x39, 0x34, 0x7A, 0x4C, 0x0E, 0x68, 0xD3, 0xC9, 0x23, 0xDF, 0x38, 0x52, 0xC8, 0xA4, 0x4F, 0xE4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 42076. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_42076.cs +// + +namespace KeyCMF_042076 +{ + static const BYTE Keytable[] = + { + 0x62, 0xF5, 0xCE, 0x3F, 0xB0, 0x7B, 0x6C, 0x0A, 0xC8, 0xA6, 0x84, 0xDD, 0x46, 0xB6, 0x0A, 0x4D, + 0x7F, 0xDF, 0xDF, 0xD8, 0x37, 0x82, 0xF5, 0xE2, 0x8C, 0x93, 0x04, 0x90, 0xA0, 0x70, 0xCD, 0xC6, + 0x7D, 0x68, 0x62, 0x7B, 0x1B, 0x5A, 0x9E, 0x1E, 0x57, 0xFE, 0x30, 0xAB, 0x00, 0x1E, 0x8F, 0x5C, + 0x7C, 0xDC, 0xF3, 0x53, 0x77, 0x59, 0x76, 0xF8, 0x0C, 0x41, 0x1A, 0x75, 0xAC, 0xE5, 0x6A, 0xCF, + 0x7F, 0x8F, 0x95, 0xF3, 0xFC, 0xF0, 0x15, 0x31, 0x5F, 0xBE, 0xFF, 0x9F, 0xF0, 0x9F, 0x79, 0xA2, + 0x4E, 0x20, 0x1D, 0x53, 0xF0, 0xFA, 0x63, 0x7F, 0xAD, 0xE9, 0x4C, 0x47, 0x57, 0x79, 0x8F, 0xCD, + 0x45, 0x86, 0x73, 0xD4, 0x41, 0xC9, 0x2E, 0x7F, 0xC9, 0x7C, 0xC6, 0x41, 0xC8, 0x3C, 0x08, 0x14, + 0xCF, 0x20, 0x7C, 0x63, 0x78, 0x45, 0x76, 0xA8, 0xEB, 0x12, 0x8B, 0x46, 0x1D, 0xEB, 0xDE, 0xCA, + 0xCB, 0x1A, 0x3C, 0x28, 0x78, 0x1A, 0xF0, 0x95, 0x6F, 0x76, 0x26, 0x30, 0x2F, 0x2A, 0x71, 0xD3, + 0x13, 0xB1, 0x01, 0x40, 0xDC, 0x3E, 0x3C, 0x1C, 0xEF, 0x54, 0xFB, 0xBE, 0xB0, 0x85, 0x96, 0xF3, + 0x30, 0x98, 0xE2, 0x7C, 0x5D, 0x24, 0x5F, 0x92, 0xB2, 0xD2, 0xF9, 0x1A, 0x42, 0x62, 0x41, 0x4E, + 0xDA, 0x50, 0x9F, 0x6F, 0xBB, 0xA8, 0x12, 0xE8, 0xA4, 0x03, 0xAF, 0xFA, 0x5D, 0x57, 0x71, 0xD2, + 0x9C, 0x0F, 0xBE, 0x16, 0x39, 0xE1, 0xA4, 0x7C, 0xC4, 0xEA, 0xFE, 0x4E, 0x65, 0x45, 0x33, 0xF3, + 0xAC, 0xC0, 0x39, 0xD8, 0xD9, 0x48, 0x3B, 0x00, 0xC2, 0x14, 0xE2, 0x41, 0x90, 0x1A, 0x6C, 0x57, + 0x48, 0x15, 0x24, 0x35, 0x6F, 0x17, 0x7E, 0x3F, 0xB7, 0xB0, 0x70, 0x99, 0x7E, 0xCD, 0xA2, 0xAB, + 0xC0, 0x51, 0x74, 0x17, 0xAA, 0xE2, 0x0A, 0xA1, 0x1E, 0xA8, 0x1B, 0x81, 0xA9, 0xF7, 0x81, 0x48, + 0x2E, 0x52, 0x9C, 0x05, 0x57, 0x32, 0xFB, 0xAA, 0x2F, 0x3C, 0xDE, 0x7B, 0x4E, 0x03, 0x51, 0x6E, + 0x8E, 0xFA, 0x8B, 0x3C, 0xF2, 0x89, 0xA9, 0x51, 0xDB, 0xB6, 0xF0, 0x98, 0xEA, 0x01, 0x4B, 0xDB, + 0x68, 0x18, 0x69, 0x8D, 0xB8, 0x42, 0x24, 0x5B, 0x01, 0x4B, 0xE8, 0x5C, 0xA5, 0xDC, 0xDA, 0xF9, + 0xFA, 0x97, 0x43, 0x54, 0x69, 0x3F, 0x34, 0x2B, 0x62, 0x07, 0xCC, 0x02, 0x9D, 0x23, 0x60, 0x4F, + 0xEF, 0x72, 0x9D, 0x5C, 0x86, 0x88, 0xB0, 0xB0, 0x1A, 0x53, 0x59, 0xCB, 0x84, 0x69, 0x0D, 0xCD, + 0xBA, 0xE5, 0x2F, 0xAB, 0x08, 0x1F, 0x14, 0xE6, 0xAE, 0x60, 0x52, 0xA3, 0x95, 0x6A, 0x0A, 0xD2, + 0x29, 0x3E, 0x92, 0xCD, 0xCA, 0x10, 0x85, 0x91, 0xF1, 0xF6, 0xAE, 0xF6, 0xB2, 0x8E, 0x8B, 0x1D, + 0xFD, 0xDF, 0x88, 0x99, 0x8A, 0x0A, 0x4C, 0x2F, 0xBF, 0x74, 0x3F, 0x58, 0x8F, 0x42, 0x6B, 0x03, + 0x68, 0x29, 0xD0, 0x60, 0x2C, 0x16, 0x7A, 0x11, 0xD6, 0x4B, 0x57, 0x65, 0x64, 0x35, 0x2C, 0x60, + 0xF9, 0x9F, 0x9D, 0x68, 0xE0, 0xE4, 0x99, 0x7D, 0x26, 0x18, 0xE6, 0x6C, 0x19, 0x35, 0x00, 0xE9, + 0xB4, 0x9B, 0x8D, 0x52, 0xD6, 0xED, 0x30, 0xBA, 0x70, 0x4A, 0xE7, 0xAF, 0x87, 0x66, 0x6B, 0xFC, + 0xFF, 0x24, 0x80, 0xBB, 0xFD, 0xC7, 0x3B, 0x82, 0x8C, 0x24, 0x80, 0x1E, 0x72, 0x57, 0x84, 0x6F, + 0x65, 0x18, 0x27, 0x58, 0x2D, 0x10, 0x2F, 0xDD, 0x07, 0x90, 0x2F, 0xA7, 0x74, 0x12, 0x90, 0x73, + 0x5E, 0x27, 0x46, 0x51, 0x9F, 0x38, 0x08, 0xED, 0x52, 0xC4, 0x5E, 0x59, 0x26, 0x1C, 0xB5, 0xAC, + 0x1C, 0x65, 0x29, 0x9C, 0xB2, 0xDE, 0x3C, 0x5F, 0x0B, 0x27, 0xB5, 0xC5, 0xD9, 0x28, 0x75, 0x9F, + 0x88, 0xF1, 0xC7, 0x31, 0x24, 0xBB, 0xCF, 0x3C, 0x44, 0x6E, 0xEA, 0x9D, 0x29, 0x55, 0x93, 0xD1 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[kidx % 512]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (digest[7] + (uint)header.m_dataCount) & 511; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] = digest[kidx % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 42210. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_42210.cs +// + +namespace KeyCMF_042210 +{ + static const BYTE Keytable[] = + { + 0x99, 0x9D, 0x00, 0x78, 0xBA, 0x76, 0xED, 0xF1, 0xBB, 0xCA, 0x05, 0x72, 0xA5, 0x29, 0x7D, 0x87, + 0x11, 0x80, 0xD4, 0x52, 0x4A, 0x4D, 0x7F, 0x83, 0x9C, 0x05, 0xBB, 0x84, 0xCF, 0xC4, 0xC9, 0x98, + 0x25, 0x12, 0x08, 0x5B, 0x72, 0x47, 0xC9, 0x37, 0xBC, 0x5D, 0x76, 0x94, 0xB4, 0x10, 0x89, 0x69, + 0xB9, 0xFB, 0x81, 0xCE, 0xC3, 0xFD, 0x7A, 0xAD, 0xDB, 0x19, 0x3C, 0x75, 0x8B, 0x76, 0xEA, 0x34, + 0x8F, 0x6A, 0x31, 0xB0, 0x2C, 0x10, 0xAD, 0x13, 0x7F, 0xFA, 0xCB, 0x79, 0x4C, 0xC9, 0x64, 0x3E, + 0x40, 0xD5, 0x26, 0xD3, 0x88, 0xCE, 0x7A, 0x35, 0xB5, 0x78, 0xE9, 0x38, 0xC2, 0x66, 0xF7, 0x0D, + 0x99, 0x39, 0xB7, 0x6E, 0xCC, 0x4D, 0xA3, 0xA8, 0xB6, 0x72, 0xC2, 0x6F, 0x51, 0xBD, 0x7F, 0xC6, + 0x70, 0x5C, 0xB0, 0xE8, 0xE4, 0xA3, 0x65, 0xF2, 0x7F, 0x51, 0x3D, 0x0D, 0x3A, 0x66, 0xFD, 0x5F, + 0xC8, 0x13, 0x5A, 0x1A, 0xE8, 0x53, 0xA2, 0x4B, 0x6C, 0x27, 0x2A, 0xE7, 0xAB, 0x31, 0x52, 0x14, + 0x6A, 0x04, 0xC5, 0xDA, 0x4D, 0xFB, 0x40, 0xD4, 0xD1, 0x9D, 0xF0, 0x70, 0x30, 0x54, 0x85, 0x59, + 0xC5, 0x79, 0xE1, 0x2C, 0x51, 0x35, 0x43, 0xBE, 0x41, 0x5F, 0x42, 0x21, 0x3F, 0xFB, 0x1C, 0x30, + 0x96, 0x1A, 0xB7, 0x01, 0x3A, 0x0B, 0x46, 0x05, 0x82, 0xD9, 0xF3, 0xC0, 0x6F, 0xDD, 0x77, 0x86, + 0x38, 0xCC, 0x34, 0xA9, 0x45, 0x17, 0x01, 0x17, 0x9E, 0xA0, 0x1A, 0x9E, 0x6E, 0x1A, 0x70, 0xEE, + 0x47, 0xBF, 0x56, 0x3A, 0xAA, 0x01, 0xEB, 0x67, 0x75, 0x75, 0x39, 0x7B, 0x22, 0x30, 0x40, 0x3A, + 0xBC, 0xAA, 0x4B, 0xA9, 0x1D, 0xAB, 0xD1, 0x41, 0xEA, 0x46, 0x0C, 0x52, 0xEF, 0xD9, 0x5F, 0xFF, + 0x8A, 0x53, 0x5C, 0xAE, 0x1D, 0xCE, 0x61, 0x76, 0x10, 0xBA, 0x87, 0x07, 0xCE, 0x6C, 0x19, 0x04, + 0x3D, 0x85, 0x77, 0xF0, 0xDE, 0x60, 0x7F, 0xF7, 0x06, 0x2E, 0x91, 0xEB, 0x05, 0x59, 0x1C, 0x13, + 0xD0, 0xFB, 0xD2, 0x5A, 0xA7, 0x60, 0x39, 0x12, 0xF0, 0x51, 0xD7, 0x4C, 0x6D, 0x4E, 0x01, 0xB7, + 0x5C, 0x3F, 0xFA, 0x10, 0x69, 0x93, 0xEF, 0x05, 0xCA, 0x76, 0x61, 0x8A, 0x4B, 0x31, 0x18, 0x8F, + 0x6C, 0xF8, 0x02, 0x3A, 0x56, 0x5C, 0x72, 0xC1, 0x9C, 0x02, 0x29, 0xB6, 0xE9, 0x57, 0x3F, 0xC1, + 0xAB, 0x3F, 0x7C, 0xEC, 0xF4, 0xCD, 0x99, 0x01, 0x13, 0xCE, 0xD9, 0xE9, 0xEB, 0xDC, 0x9C, 0xE4, + 0x3B, 0x44, 0x72, 0xC2, 0x81, 0xB2, 0x10, 0xF5, 0xC3, 0x81, 0x7A, 0xF5, 0xF3, 0x3D, 0x03, 0x4E, + 0xD4, 0xAE, 0xD8, 0x41, 0xB7, 0xF7, 0x2B, 0x54, 0x51, 0x80, 0xD3, 0xD1, 0x19, 0x24, 0x6D, 0x0B, + 0xB1, 0x77, 0xBB, 0x1F, 0xBA, 0x23, 0x50, 0xE7, 0x18, 0x05, 0x6E, 0xC8, 0xBE, 0x0B, 0x09, 0x32, + 0x1C, 0xD4, 0xC0, 0x75, 0xB2, 0x45, 0x85, 0x3B, 0x3B, 0x97, 0x7B, 0x4A, 0x73, 0x3E, 0xAD, 0x90, + 0x9B, 0x27, 0x2C, 0x3A, 0xC9, 0xFA, 0x91, 0x45, 0x27, 0x20, 0x69, 0x44, 0x13, 0x06, 0x70, 0x12, + 0x5E, 0x0A, 0x72, 0xBC, 0x5C, 0x88, 0xF0, 0x9F, 0xF3, 0xCB, 0x8E, 0x54, 0xF2, 0x82, 0x5A, 0x85, + 0xC6, 0xAB, 0xF6, 0xED, 0x14, 0xAA, 0xFE, 0xA6, 0xD1, 0x01, 0xEA, 0xA9, 0x4F, 0xE4, 0x55, 0xBB, + 0xDC, 0xDB, 0xC5, 0x5E, 0x81, 0xF2, 0xC7, 0xDE, 0x3E, 0x66, 0x0F, 0x70, 0xD2, 0xF2, 0x98, 0xCB, + 0x0D, 0x1E, 0x42, 0x85, 0xF3, 0x1C, 0x52, 0x8D, 0x59, 0x83, 0xC0, 0x48, 0xFC, 0x31, 0xE3, 0xBB, + 0x44, 0x63, 0x0E, 0x66, 0xB8, 0x86, 0x9C, 0x81, 0x74, 0x05, 0xEB, 0x70, 0x59, 0x81, 0x04, 0x4F, + 0xEF, 0x12, 0x0B, 0x1B, 0xD7, 0xE9, 0x63, 0xBC, 0x3C, 0x52, 0xB0, 0x7A, 0xED, 0xB3, 0xFE, 0xD6 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(i + kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 42539. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_42539.cs +// + +namespace KeyCMF_042539 +{ + static const BYTE Keytable[] = + { + 0x7F, 0x81, 0xB1, 0x26, 0x5F, 0xCC, 0x7B, 0x70, 0xD6, 0x8F, 0x1E, 0x4E, 0x37, 0xFF, 0x9C, 0x31, + 0xBD, 0xC7, 0x03, 0x04, 0x16, 0x14, 0x8E, 0xA0, 0x1A, 0x66, 0xE0, 0x23, 0xF8, 0xAB, 0x3C, 0xEC, + 0x99, 0x0D, 0x9C, 0x35, 0x52, 0xB2, 0x76, 0x6A, 0x7A, 0x66, 0x89, 0xA2, 0xFF, 0x1D, 0xC1, 0x90, + 0xD7, 0x22, 0x2C, 0x64, 0xD9, 0x58, 0x36, 0x96, 0x10, 0xD2, 0x26, 0x36, 0xFB, 0xB1, 0x74, 0x41, + 0x9C, 0x6C, 0x2E, 0x30, 0x58, 0x32, 0x99, 0xCC, 0x8C, 0x42, 0x7B, 0xFF, 0x93, 0x66, 0x45, 0x5C, + 0x86, 0xF4, 0x68, 0x6F, 0xAD, 0x47, 0xFF, 0xA4, 0xBA, 0x63, 0xF4, 0xED, 0xCF, 0x1E, 0x77, 0x2C, + 0x2B, 0x6B, 0x64, 0x2B, 0x30, 0xEC, 0x14, 0x32, 0x9D, 0xAF, 0xF7, 0xB6, 0x51, 0xAF, 0x0A, 0xA0, + 0xF3, 0x1E, 0x30, 0x23, 0xBD, 0x69, 0x09, 0x86, 0x17, 0xE4, 0xCC, 0xF0, 0x18, 0x06, 0xC3, 0x7D, + 0x2D, 0x6D, 0x46, 0xE8, 0xA4, 0xDE, 0x77, 0x51, 0xAE, 0xEC, 0x2F, 0x98, 0x4C, 0x7A, 0x79, 0x21, + 0x1D, 0x94, 0x11, 0x01, 0x68, 0xD9, 0x59, 0x21, 0xE3, 0x73, 0x4C, 0xD3, 0xA4, 0xC7, 0x23, 0x7C, + 0x11, 0x67, 0x2F, 0x3B, 0x50, 0xB1, 0x7C, 0x00, 0xD2, 0x65, 0xDB, 0xFA, 0x0B, 0x3F, 0x3D, 0xF7, + 0xB1, 0x46, 0x23, 0x7F, 0x35, 0x29, 0x06, 0xB4, 0x09, 0xA8, 0xA5, 0x44, 0x68, 0x1A, 0x5D, 0x20, + 0xD7, 0x0A, 0x9A, 0x87, 0xBC, 0x4B, 0x38, 0x23, 0x56, 0x1D, 0xF5, 0x04, 0x83, 0xC4, 0xDF, 0x0F, + 0x74, 0xF3, 0xF7, 0x1B, 0xCA, 0x17, 0xE3, 0x45, 0xFD, 0x6A, 0x41, 0xCF, 0x16, 0x71, 0x95, 0x08, + 0x2E, 0xBD, 0x00, 0x04, 0x73, 0xC0, 0xEC, 0xCD, 0x5F, 0x63, 0xC4, 0xA5, 0xAE, 0x42, 0xEA, 0x33, + 0x81, 0x3B, 0x17, 0xB0, 0x93, 0xAB, 0x6F, 0x25, 0xB7, 0xE8, 0x5F, 0xAA, 0xF3, 0x57, 0xB9, 0xF9, + 0x4D, 0xA0, 0xCC, 0x6E, 0x9F, 0x89, 0x9F, 0x53, 0xE1, 0xB5, 0xE3, 0xB4, 0xCC, 0x91, 0xAE, 0x88, + 0x66, 0x98, 0xF7, 0xD6, 0x2C, 0x24, 0x26, 0x41, 0x75, 0xD0, 0x6F, 0xAB, 0xAC, 0xA2, 0x85, 0xD6, + 0x25, 0xC6, 0x06, 0xEE, 0xE9, 0x49, 0xDC, 0xE2, 0x56, 0x97, 0x6B, 0xB3, 0x11, 0x8C, 0xCC, 0x3F, + 0x8B, 0x44, 0x91, 0x34, 0x07, 0x25, 0x14, 0x56, 0x78, 0x4F, 0x22, 0xC1, 0x00, 0x90, 0x47, 0xC1, + 0xC2, 0xBD, 0xF7, 0x74, 0xE8, 0x84, 0x59, 0x43, 0x2D, 0xCB, 0xDF, 0xDA, 0x56, 0x6D, 0xC0, 0xEA, + 0xE3, 0x93, 0xC6, 0x4B, 0x02, 0xBA, 0xB9, 0x1A, 0xBC, 0xD4, 0x18, 0x07, 0xDF, 0x42, 0x99, 0xAF, + 0xD3, 0xB9, 0x47, 0x6B, 0x15, 0x15, 0x0F, 0x74, 0x57, 0xF8, 0x9A, 0x8D, 0x89, 0x99, 0x4D, 0x07, + 0xDD, 0x1E, 0x52, 0xE8, 0xC0, 0x68, 0x4B, 0x22, 0x8E, 0xA0, 0x4A, 0x57, 0x1E, 0x2D, 0x18, 0xDA, + 0x93, 0xB7, 0xFE, 0x36, 0xF7, 0x28, 0x86, 0x2B, 0x7E, 0xBD, 0x7C, 0x0C, 0xE9, 0xDA, 0x2F, 0x2A, + 0xD7, 0x1C, 0x55, 0xC3, 0xD1, 0x4C, 0x96, 0xD2, 0x07, 0x5D, 0x8D, 0x1A, 0xB7, 0x3D, 0x7E, 0x8E, + 0xD2, 0x5D, 0xC6, 0x90, 0x00, 0xF3, 0x23, 0xDE, 0x36, 0xCE, 0xA6, 0x88, 0x1C, 0x77, 0xAD, 0x25, + 0xCD, 0x92, 0x46, 0x7D, 0x97, 0x7A, 0xB6, 0x97, 0x36, 0xF9, 0xBC, 0x0B, 0xD3, 0x6A, 0x01, 0x0D, + 0x7D, 0x0B, 0x49, 0x84, 0xA4, 0x29, 0x34, 0x68, 0x09, 0x31, 0x1C, 0x3C, 0xEB, 0xCA, 0x2A, 0x25, + 0x2E, 0xCB, 0xD0, 0xAE, 0x35, 0x9C, 0xBA, 0xEA, 0x8A, 0x87, 0x6C, 0x9B, 0x8B, 0xC8, 0x68, 0xAA, + 0x87, 0x4B, 0xFF, 0xEC, 0xAB, 0x0B, 0x6F, 0xD6, 0x94, 0x95, 0xC4, 0x61, 0x48, 0x65, 0x62, 0x56, + 0x1E, 0x4D, 0x25, 0x5F, 0xB4, 0x34, 0xFA, 0x86, 0xDC, 0x43, 0x2C, 0x1F, 0x77, 0xF6, 0x53, 0x6D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 42563. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_42563.cs +// + +namespace KeyCMF_042563 +{ + static const BYTE Keytable[] = + { + 0x03, 0x0D, 0x01, 0x2C, 0x59, 0xE2, 0x0A, 0x82, 0x2F, 0x16, 0xC3, 0x00, 0x69, 0xE8, 0xDC, 0x06, + 0x26, 0x6D, 0x7D, 0x4E, 0xC0, 0x8E, 0x27, 0x17, 0xDB, 0x7E, 0xCA, 0x13, 0x35, 0xDE, 0x5F, 0x15, + 0x14, 0x0C, 0xC5, 0x6A, 0xA7, 0xA2, 0x3C, 0xE3, 0xD5, 0x0F, 0x7D, 0xC8, 0x15, 0xA0, 0xC0, 0x1F, + 0x24, 0xB7, 0xFB, 0x54, 0x57, 0x95, 0x78, 0x98, 0x22, 0x8A, 0x91, 0xE5, 0x6E, 0xA7, 0xFD, 0xF3, + 0x73, 0x2E, 0x56, 0xB2, 0xFF, 0x9B, 0xCA, 0x62, 0x9C, 0x91, 0x9F, 0xDF, 0xEE, 0x3E, 0xF2, 0x08, + 0x8A, 0x4E, 0x33, 0x39, 0x5B, 0x37, 0xC4, 0x9E, 0x0F, 0xAA, 0x6E, 0x8D, 0x69, 0xDC, 0x94, 0x0E, + 0x9F, 0x41, 0xC6, 0x57, 0xA0, 0xE6, 0x4F, 0x52, 0x33, 0xBD, 0x15, 0xDE, 0xB7, 0x20, 0x30, 0x01, + 0x06, 0x32, 0x7C, 0x07, 0xCB, 0xB8, 0x1E, 0xD6, 0xCC, 0x15, 0x6E, 0x2A, 0x41, 0xE0, 0xC3, 0xFA, + 0xF4, 0xBF, 0xAB, 0x13, 0x0B, 0x88, 0x9D, 0xA1, 0x02, 0xFC, 0x3F, 0xCD, 0x8F, 0x4F, 0x6E, 0x94, + 0x69, 0xA9, 0xB6, 0x5A, 0x87, 0xC7, 0xA7, 0x4C, 0xE3, 0x16, 0x69, 0x55, 0x29, 0x9B, 0xF1, 0x0E, + 0x1C, 0x2E, 0xF8, 0x4C, 0xEB, 0xF9, 0x22, 0x33, 0x34, 0xE6, 0x3F, 0x93, 0x8D, 0xE4, 0xAA, 0x31, + 0x14, 0xC8, 0xD0, 0x5F, 0x87, 0xDC, 0xF0, 0xDA, 0x4D, 0xA7, 0x79, 0x93, 0x6D, 0x83, 0x11, 0x37, + 0x6D, 0xD8, 0x09, 0xE4, 0x1B, 0x60, 0xF0, 0x19, 0xA8, 0xB6, 0x10, 0xA9, 0xF9, 0xB6, 0x10, 0xD1, + 0x97, 0x97, 0xC6, 0x0D, 0x4D, 0x7B, 0x06, 0xEF, 0x0B, 0xB0, 0x31, 0x6B, 0xF5, 0x16, 0x98, 0x17, + 0xC0, 0x47, 0x01, 0x7A, 0xE0, 0xF9, 0x9F, 0xBA, 0x96, 0xB0, 0x6F, 0xC2, 0xD5, 0x67, 0x82, 0xDC, + 0xEC, 0xBF, 0xF8, 0x61, 0x81, 0x55, 0x6E, 0x58, 0xE1, 0x35, 0x33, 0xBC, 0xB6, 0xBB, 0xD6, 0xBD, + 0x73, 0xB7, 0xEF, 0x5D, 0xBC, 0xFE, 0x08, 0xF5, 0xDF, 0xA6, 0x92, 0xC5, 0xC4, 0x35, 0x81, 0xAA, + 0x78, 0xDF, 0xE3, 0x06, 0x46, 0xF2, 0x84, 0x5E, 0xA6, 0x7A, 0xD7, 0x4E, 0x1A, 0x36, 0x6F, 0x8A, + 0xC3, 0xD2, 0x77, 0xD2, 0xA9, 0xE1, 0x87, 0xFE, 0xE5, 0x94, 0x34, 0xDA, 0x68, 0xCB, 0x1C, 0xA6, + 0x55, 0xA5, 0x37, 0xFA, 0x58, 0xB8, 0xEB, 0x34, 0x6F, 0xB9, 0xC9, 0xA5, 0x28, 0x7C, 0x32, 0x80, + 0x55, 0x61, 0x83, 0xC9, 0x8F, 0xFB, 0xC7, 0xCC, 0x91, 0x2E, 0xA2, 0xD3, 0x39, 0xB5, 0xE0, 0xD4, + 0x30, 0xCF, 0x0E, 0xBE, 0x01, 0x77, 0x95, 0xEC, 0x9A, 0xF5, 0xB7, 0x0F, 0xEE, 0x89, 0x0E, 0xDB, + 0xC7, 0x1B, 0x36, 0x71, 0x00, 0x81, 0x22, 0x4C, 0x7E, 0x59, 0x13, 0x43, 0xDA, 0x75, 0xDC, 0x85, + 0x72, 0x85, 0x6A, 0x16, 0x60, 0xD4, 0x44, 0xC0, 0x6E, 0x34, 0x1C, 0xCC, 0xB1, 0x7A, 0x53, 0xCA, + 0x2C, 0x79, 0x43, 0x57, 0xFC, 0x7C, 0xAB, 0x39, 0x79, 0xD3, 0x15, 0x2A, 0x3D, 0x0B, 0x9A, 0x84, + 0xF1, 0xD8, 0x9E, 0xE0, 0x06, 0x2E, 0xCC, 0xE9, 0xBF, 0x6B, 0xD7, 0x5E, 0x57, 0x18, 0x22, 0x36, + 0xE7, 0x1C, 0x1B, 0xF0, 0xB4, 0x8D, 0xDE, 0x4F, 0xBC, 0x6D, 0xC6, 0xB5, 0xD6, 0x1B, 0x65, 0x96, + 0x94, 0xB7, 0x01, 0xE8, 0x40, 0x24, 0xFD, 0x4E, 0x9F, 0xE7, 0x7F, 0x39, 0x19, 0x59, 0xB9, 0x04, + 0xCA, 0xC1, 0xE8, 0x3E, 0x8A, 0x9C, 0x18, 0x01, 0x07, 0x60, 0xC2, 0xC1, 0x15, 0xA9, 0x45, 0xE1, + 0x23, 0xBE, 0x43, 0xF0, 0x75, 0xC5, 0x43, 0x79, 0x32, 0x9A, 0xAA, 0x26, 0xF8, 0xEE, 0x05, 0xDB, + 0x19, 0x78, 0xB3, 0x01, 0xE6, 0x35, 0xB2, 0xE1, 0xD8, 0xF9, 0x7E, 0xCC, 0x29, 0x30, 0xDC, 0x46, + 0xC4, 0xBE, 0x11, 0xCF, 0xC1, 0xD7, 0x40, 0x0C, 0x96, 0xB5, 0x56, 0xD3, 0x01, 0xBB, 0x48, 0xDC + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (header.m_buildVersion * length); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += header.m_buildVersion * (uint)header.m_dataCount % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 42665. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_42665.cs +// + +namespace KeyCMF_042665 +{ + static const BYTE Keytable[] = + { + 0x0C, 0x07, 0x07, 0x84, 0x02, 0x01, 0x35, 0x92, 0x11, 0xDC, 0x4B, 0xF1, 0x43, 0x73, 0xFC, 0x72, + 0xF8, 0x57, 0x64, 0xC0, 0x18, 0x0A, 0x8D, 0x59, 0xA2, 0x8C, 0xE0, 0xB3, 0xB7, 0x4A, 0xD7, 0x77, + 0xE4, 0x70, 0x45, 0x77, 0x4D, 0x69, 0x22, 0xCA, 0x68, 0xED, 0x19, 0xD0, 0x58, 0xA8, 0x9B, 0xFC, + 0xB2, 0xD8, 0xE6, 0x02, 0x97, 0x53, 0x6D, 0xEB, 0x77, 0x47, 0x9D, 0x85, 0xAF, 0x30, 0xC2, 0x14, + 0xC1, 0xBF, 0xFA, 0x91, 0xA6, 0x8B, 0x0C, 0xAA, 0x78, 0x11, 0xF0, 0x5A, 0xCB, 0xD2, 0xA8, 0x70, + 0x26, 0xB8, 0x8B, 0x88, 0x10, 0x14, 0x28, 0xA9, 0x51, 0x5A, 0x40, 0x5B, 0x4F, 0x3B, 0x10, 0xF7, + 0x13, 0x23, 0xCA, 0x8F, 0x2E, 0xE1, 0x96, 0xC1, 0xC1, 0x60, 0xF0, 0xA5, 0xBA, 0x20, 0xD1, 0xE6, + 0xC4, 0x80, 0x9C, 0x50, 0x5D, 0x0B, 0xB4, 0xCA, 0x04, 0xCA, 0x9E, 0x7A, 0x01, 0xE9, 0x84, 0x62, + 0x68, 0x67, 0xD0, 0xC2, 0x63, 0x36, 0x22, 0x2A, 0x48, 0x61, 0x1B, 0x93, 0x51, 0x37, 0x90, 0xB3, + 0xE8, 0xAF, 0x2E, 0x4C, 0x92, 0x62, 0xF8, 0x42, 0x63, 0x26, 0xD5, 0xB5, 0x4C, 0xA8, 0x91, 0x7A, + 0xA5, 0x45, 0x16, 0xE1, 0xB3, 0x41, 0xD9, 0x43, 0xF0, 0xF1, 0x59, 0xF5, 0x32, 0x5C, 0x49, 0x4B, + 0xDA, 0x7E, 0xB6, 0x2C, 0x24, 0x27, 0xDF, 0x5E, 0x33, 0xD2, 0x96, 0x42, 0x6B, 0x23, 0x85, 0xD7, + 0x79, 0x31, 0x93, 0x88, 0x1B, 0x07, 0x69, 0x76, 0x83, 0x62, 0xE8, 0xF7, 0x29, 0x96, 0xD9, 0x6E, + 0x87, 0x39, 0x2E, 0x1B, 0x95, 0xAC, 0x4F, 0x5D, 0xC1, 0x94, 0x7E, 0xE9, 0xCE, 0xA9, 0xE2, 0x1E, + 0xD4, 0x79, 0xC8, 0x16, 0x65, 0x84, 0xDB, 0xF3, 0xDA, 0x51, 0x88, 0x16, 0x02, 0xC3, 0xE6, 0x23, + 0x8D, 0x18, 0xC5, 0xAB, 0x31, 0xDB, 0xBA, 0xD1, 0xBD, 0x24, 0x97, 0xE2, 0xCD, 0x25, 0x41, 0x7C, + 0x1B, 0x8E, 0x4B, 0x37, 0xD2, 0x6C, 0x7A, 0x2B, 0x24, 0x8A, 0x7F, 0x2E, 0x90, 0xCA, 0x10, 0x6E, + 0x78, 0x23, 0xF2, 0xD2, 0xA9, 0xB9, 0x84, 0xDA, 0x5D, 0xFE, 0xAE, 0x77, 0x2A, 0xFF, 0xB7, 0xF2, + 0x6C, 0x02, 0x77, 0x4E, 0xC2, 0xF4, 0x55, 0xD4, 0x50, 0xD9, 0x20, 0x78, 0xFC, 0x2A, 0x34, 0x38, + 0x46, 0x1D, 0xA3, 0xE4, 0x4E, 0xFA, 0x3B, 0x93, 0xFF, 0x20, 0x9C, 0x6A, 0x15, 0x9D, 0xDD, 0x8C, + 0x98, 0x1B, 0xF6, 0xAD, 0xAF, 0xBD, 0x58, 0x29, 0xDF, 0xE2, 0xBF, 0xF9, 0xB9, 0xED, 0xF0, 0xA2, + 0x98, 0xF2, 0xC9, 0x12, 0x47, 0xCC, 0x26, 0xDF, 0x9A, 0xE0, 0x67, 0x4C, 0xC4, 0x10, 0x53, 0x42, + 0xF2, 0x2D, 0x1C, 0x0B, 0xDC, 0xE3, 0xE3, 0xEB, 0xCB, 0x1B, 0xB3, 0xCF, 0x53, 0x5C, 0xD9, 0x1D, + 0xAA, 0x18, 0xA3, 0xD8, 0x42, 0xC3, 0x26, 0xE9, 0x74, 0x51, 0xB4, 0xB4, 0x94, 0x79, 0xA1, 0x4E, + 0xEF, 0x1B, 0xE9, 0x8F, 0xDE, 0x62, 0x9E, 0xB3, 0xBE, 0x98, 0xEA, 0x88, 0xEC, 0xD2, 0x0E, 0xC3, + 0x37, 0xB4, 0xFF, 0xA2, 0xA9, 0x97, 0xA9, 0xEF, 0x2B, 0x5A, 0x49, 0xA7, 0x52, 0xB5, 0x62, 0xE3, + 0x38, 0xD5, 0x16, 0xE4, 0x55, 0x68, 0xF9, 0x72, 0xD0, 0xBF, 0x3C, 0x62, 0xFD, 0x8F, 0xE3, 0xF4, + 0xB0, 0xF7, 0x7C, 0x94, 0xBD, 0x71, 0x39, 0x2E, 0xA8, 0x7C, 0xA1, 0x99, 0x55, 0x2E, 0x82, 0x03, + 0x9E, 0x69, 0x7E, 0x41, 0x74, 0xE6, 0x69, 0xCD, 0x68, 0xCE, 0x43, 0x30, 0x53, 0xDE, 0x26, 0xC9, + 0xD5, 0xD5, 0x51, 0x6F, 0xA0, 0xCC, 0x5B, 0x81, 0xC1, 0x28, 0x16, 0x93, 0x38, 0x54, 0x97, 0xB7, + 0x60, 0xD8, 0x38, 0x00, 0x95, 0x5C, 0x5C, 0x00, 0x15, 0x94, 0x2A, 0xB6, 0x89, 0xC2, 0xF0, 0x25, + 0x08, 0x89, 0x3A, 0x84, 0x1D, 0x9D, 0x25, 0xE4, 0x53, 0x94, 0xEB, 0x85, 0x5E, 0xE7, 0xC3, 0x81 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + uint increment = kidx % 13; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx + 0x15666D63, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 42936. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_42936.cs +// + +namespace KeyCMF_042936 +{ + static const BYTE Keytable[] = + { + 0x76, 0x1C, 0xE5, 0x6F, 0x6A, 0x38, 0x33, 0x54, 0xF8, 0xF6, 0x78, 0xB6, 0x1F, 0x5F, 0xC9, 0x30, + 0x82, 0x90, 0x84, 0xFB, 0xFD, 0x54, 0x13, 0x20, 0x0A, 0x9F, 0x9B, 0x61, 0xB5, 0xE4, 0x89, 0x65, + 0x9C, 0x46, 0xF0, 0x75, 0x93, 0xC1, 0xC9, 0x63, 0x18, 0x04, 0xB1, 0x4C, 0x45, 0xF8, 0x1D, 0xCD, + 0xC6, 0xCE, 0x22, 0x24, 0xC9, 0x9C, 0x4F, 0x3E, 0x9A, 0x22, 0xF8, 0xCF, 0xD3, 0xA6, 0x16, 0xC5, + 0x72, 0x8D, 0x05, 0x02, 0x14, 0x2D, 0x04, 0x50, 0x41, 0xE1, 0x41, 0x5F, 0x57, 0x88, 0xEF, 0xA8, + 0x37, 0x06, 0xA6, 0x66, 0xD7, 0x89, 0xD5, 0x4A, 0xAE, 0x49, 0x16, 0x4A, 0xE9, 0x20, 0x05, 0x85, + 0xA8, 0xE8, 0x11, 0x22, 0x6D, 0x7D, 0x04, 0xDD, 0xCD, 0x6C, 0xBD, 0x02, 0xBB, 0xF2, 0x74, 0xB8, + 0xFF, 0x41, 0x14, 0x98, 0xE9, 0x39, 0x2B, 0x75, 0xF2, 0x9F, 0x36, 0xF0, 0xD5, 0xAB, 0x05, 0x89, + 0x39, 0x0F, 0x28, 0x6B, 0x68, 0x79, 0x09, 0xC8, 0x58, 0xC9, 0xA3, 0xAE, 0xDA, 0x18, 0xA9, 0x37, + 0xB9, 0x46, 0x71, 0x8A, 0x79, 0xBC, 0xC7, 0xD0, 0xA2, 0x31, 0xD7, 0x1F, 0x2F, 0x2D, 0x8C, 0xC0, + 0x6E, 0x08, 0xBC, 0xAE, 0x5C, 0x6A, 0xB8, 0xA3, 0x63, 0x6A, 0xE8, 0x17, 0xE7, 0x77, 0x5C, 0x28, + 0x77, 0x14, 0x89, 0xFE, 0x41, 0xA2, 0x9F, 0xB2, 0x0D, 0x5E, 0x61, 0x4D, 0x70, 0x70, 0x18, 0x04, + 0x68, 0xC5, 0x6C, 0x88, 0xF8, 0x2C, 0xEB, 0xDD, 0x9F, 0x96, 0xE6, 0x1F, 0x2B, 0xD0, 0xC6, 0x73, + 0x80, 0x5E, 0x27, 0xE9, 0x01, 0xDB, 0x3E, 0xD5, 0x4B, 0xA1, 0x1C, 0x48, 0xBC, 0x0A, 0x73, 0x66, + 0x9F, 0x75, 0x87, 0x55, 0x85, 0xF4, 0x2F, 0x62, 0xF2, 0x4C, 0xA1, 0x23, 0x21, 0x83, 0xAD, 0xF5, + 0x3E, 0x4E, 0xE7, 0x34, 0xAB, 0x7D, 0x31, 0xAA, 0x57, 0xCB, 0x43, 0x5E, 0x12, 0x48, 0xAD, 0x08, + 0x6B, 0x01, 0xBE, 0x04, 0x7D, 0x64, 0x09, 0x30, 0x33, 0x2A, 0x60, 0xE8, 0xEA, 0x08, 0x05, 0x31, + 0xC2, 0xF5, 0xAF, 0xCA, 0x20, 0xFE, 0x6F, 0x77, 0x4F, 0x1C, 0x65, 0x3B, 0x42, 0xE4, 0x6F, 0x29, + 0xFF, 0xAE, 0xA7, 0x7E, 0xD8, 0xA5, 0xB7, 0x3A, 0x4D, 0x83, 0x0D, 0x64, 0xF1, 0x5D, 0x8A, 0x45, + 0x6C, 0xF7, 0xF4, 0x47, 0xBF, 0xEC, 0x0A, 0x59, 0xB9, 0x59, 0x70, 0x46, 0x5E, 0x9D, 0x2C, 0xD0, + 0x11, 0x44, 0xCC, 0xAA, 0x10, 0x57, 0xAF, 0xFB, 0x2E, 0xD3, 0x4D, 0x89, 0x86, 0x1C, 0xE9, 0x88, + 0x01, 0x59, 0x05, 0xF2, 0xA9, 0x25, 0xEE, 0x23, 0x0A, 0x6E, 0xC9, 0x41, 0x2F, 0x17, 0x72, 0xBB, + 0xAE, 0xA5, 0x02, 0xFD, 0x7B, 0x70, 0x93, 0x76, 0x3D, 0xE4, 0xCF, 0xCC, 0xC0, 0x35, 0x72, 0x71, + 0x33, 0x83, 0x5D, 0xAA, 0x21, 0xA3, 0xB8, 0x50, 0x06, 0xF7, 0xF3, 0xE9, 0xB8, 0x40, 0x87, 0x29, + 0x98, 0xE9, 0x22, 0xF9, 0xAA, 0x6E, 0xFF, 0xA0, 0x1E, 0xD3, 0x5D, 0xD8, 0xF1, 0x29, 0xCE, 0x81, + 0x92, 0x04, 0x48, 0xD8, 0x67, 0xF3, 0x6D, 0x06, 0x98, 0xED, 0x7C, 0xB6, 0x5A, 0xCE, 0x6F, 0x78, + 0x61, 0xA8, 0x5D, 0x4B, 0xF0, 0xA7, 0x1D, 0x74, 0xD1, 0x6F, 0x1D, 0xAB, 0x76, 0xF4, 0x26, 0xAD, + 0xBC, 0x97, 0xE4, 0xDA, 0xD8, 0xC6, 0x91, 0x98, 0x85, 0xAC, 0x61, 0x8C, 0x3F, 0xC8, 0x29, 0xBE, + 0x49, 0xE3, 0x90, 0xB3, 0xEB, 0x39, 0x2D, 0x0A, 0xD8, 0xB0, 0xF6, 0x35, 0x74, 0x03, 0x2B, 0x9B, + 0x4A, 0x82, 0xF2, 0xAD, 0xC3, 0xB2, 0x7A, 0x4C, 0x70, 0x78, 0xCA, 0xCE, 0xC9, 0x78, 0xA8, 0x8E, + 0x56, 0x93, 0x3B, 0x33, 0xD4, 0x59, 0xA6, 0xB4, 0x59, 0xBF, 0xC0, 0x8E, 0x32, 0xB5, 0x9A, 0x17, + 0x02, 0x2E, 0xDF, 0xE1, 0x65, 0x1E, 0xA0, 0xD7, 0xAC, 0xCE, 0x63, 0x70, 0x22, 0x33, 0xE3, 0x96 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint) SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 43036. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_43036.cs +// + +namespace KeyCMF_043036 +{ + static const BYTE Keytable[] = + { + 0x95, 0x57, 0x16, 0xDF, 0x02, 0x15, 0x0A, 0xF9, 0x2B, 0x51, 0xE8, 0x0D, 0xCE, 0x47, 0x01, 0x29, + 0xE2, 0x2F, 0x51, 0xD2, 0xD2, 0xBF, 0x1A, 0xD5, 0x3F, 0xDB, 0xA7, 0x6C, 0xC3, 0xCD, 0x2A, 0xAE, + 0x71, 0x6D, 0x4D, 0x87, 0x86, 0x8A, 0x4E, 0xC3, 0x76, 0x0C, 0x49, 0x29, 0x20, 0xB7, 0x2B, 0xE3, + 0x59, 0xC1, 0x9D, 0xF1, 0x07, 0xAB, 0x7D, 0xA9, 0xD9, 0xC8, 0xE2, 0xDB, 0x76, 0xF7, 0x73, 0xBB, + 0xD8, 0x24, 0x4A, 0x90, 0xA0, 0xA9, 0x26, 0xF0, 0x7B, 0xDC, 0xA5, 0x7F, 0xDE, 0x2C, 0xBC, 0x48, + 0xD2, 0x7F, 0x41, 0x3B, 0x9F, 0x85, 0x81, 0x3C, 0xFB, 0x8A, 0x63, 0xFF, 0x77, 0x5C, 0xAB, 0xA7, + 0x59, 0x25, 0xC7, 0x5F, 0xE4, 0x8B, 0x35, 0x60, 0x4B, 0x97, 0xD4, 0x84, 0x54, 0x12, 0x76, 0xF5, + 0x08, 0x56, 0xAF, 0x0A, 0x71, 0xB3, 0xB4, 0x12, 0x79, 0x50, 0x74, 0x26, 0x90, 0x8E, 0xE1, 0xBD, + 0xB4, 0x9D, 0x55, 0xED, 0xC3, 0x8D, 0x72, 0xBB, 0xBC, 0x7C, 0xA3, 0x76, 0x11, 0x39, 0xCB, 0x47, + 0x7E, 0x2C, 0x51, 0x60, 0x7B, 0x67, 0x0D, 0xB6, 0xE3, 0x7C, 0x1E, 0x34, 0x2D, 0x79, 0xD6, 0x44, + 0xE2, 0x5A, 0x23, 0x22, 0xFA, 0x77, 0xB2, 0x00, 0x08, 0x31, 0x51, 0xD5, 0x81, 0x28, 0x5D, 0x20, + 0x47, 0x00, 0x80, 0xAE, 0xD4, 0x03, 0xB9, 0x36, 0x06, 0x70, 0xBE, 0xA3, 0x20, 0xA3, 0xBA, 0xF9, + 0x6A, 0xBF, 0xC8, 0xD7, 0xEE, 0xB4, 0xD3, 0x68, 0x3B, 0x5D, 0xEC, 0x95, 0x01, 0xB7, 0xC5, 0x58, + 0x4B, 0x67, 0x15, 0xBF, 0xDE, 0xBC, 0x2B, 0xA5, 0xB1, 0x8B, 0xEF, 0x1A, 0xC2, 0x01, 0x2D, 0x75, + 0x5D, 0xEC, 0x89, 0x8F, 0xC8, 0xCB, 0x4B, 0x94, 0xC3, 0x2C, 0xD3, 0xE2, 0x82, 0x7E, 0xE6, 0x92, + 0x46, 0x4D, 0xB8, 0x69, 0xB0, 0x38, 0xC4, 0x4C, 0x7E, 0x97, 0xA4, 0x9D, 0x98, 0xB2, 0x78, 0x68, + 0x52, 0x99, 0xCB, 0xDC, 0x56, 0x84, 0x4E, 0x7B, 0x0C, 0x32, 0xD7, 0x08, 0xC1, 0x0F, 0xCC, 0x65, + 0x2A, 0x2B, 0x9E, 0xD6, 0xF9, 0xF4, 0xF7, 0xF4, 0xE8, 0x05, 0x62, 0x70, 0xAF, 0x8D, 0xCF, 0x99, + 0xCD, 0x94, 0x7E, 0x40, 0x6B, 0x56, 0x17, 0xCA, 0x2D, 0x06, 0x7A, 0xD7, 0x23, 0x75, 0x69, 0x56, + 0xBA, 0x1C, 0xD7, 0xE3, 0xCA, 0x0E, 0x0E, 0xB5, 0xC9, 0xB2, 0xFC, 0x9B, 0x92, 0xA7, 0x10, 0x49, + 0x9D, 0x3B, 0x62, 0x98, 0x3E, 0x85, 0xC9, 0xCA, 0x52, 0xF2, 0xD8, 0x19, 0x99, 0x63, 0x0B, 0x56, + 0xE6, 0x76, 0x82, 0xDD, 0xF3, 0x54, 0x82, 0x48, 0x92, 0x6B, 0xBD, 0xC8, 0x36, 0x1D, 0xF9, 0x56, + 0x02, 0x28, 0x6A, 0x9F, 0xEC, 0xE9, 0x36, 0xD8, 0x92, 0xF3, 0x99, 0x94, 0xC3, 0x31, 0xFB, 0xDC, + 0xB6, 0x3A, 0xA3, 0x72, 0x42, 0x7D, 0xA9, 0xA6, 0xE2, 0x3A, 0x58, 0x23, 0x3B, 0x91, 0x3C, 0x00, + 0x89, 0x7C, 0xA0, 0xC9, 0xC8, 0x78, 0xC6, 0x37, 0xF0, 0x47, 0xE6, 0x1E, 0xAA, 0x8B, 0xB4, 0x21, + 0x9D, 0xAF, 0x48, 0x49, 0x31, 0x70, 0x85, 0x62, 0xAE, 0x0A, 0x98, 0x8C, 0xA2, 0x9B, 0x99, 0xBB, + 0x51, 0x77, 0x08, 0x4A, 0x31, 0x2C, 0xA7, 0xF4, 0xFC, 0x75, 0xBD, 0x88, 0x32, 0x73, 0x13, 0xAA, + 0xBC, 0x59, 0x75, 0x30, 0x4B, 0x4D, 0xEF, 0x21, 0x13, 0x0A, 0xDC, 0x11, 0xCB, 0x3B, 0xA3, 0x5E, + 0x5E, 0x4F, 0x83, 0x3D, 0x9E, 0x5A, 0x8F, 0xDC, 0x21, 0x18, 0x3D, 0xD8, 0x6B, 0x4F, 0xA7, 0x52, + 0x53, 0x96, 0x19, 0xA0, 0x5F, 0x0E, 0x1A, 0x52, 0x26, 0x8D, 0xD4, 0xE4, 0xAC, 0x01, 0x1F, 0x3B, + 0xC5, 0x91, 0xD8, 0x83, 0x8F, 0xF4, 0xDE, 0xEE, 0x50, 0xF4, 0x69, 0x1D, 0x84, 0x67, 0x51, 0x1B, + 0x0D, 0x30, 0x61, 0xB2, 0x06, 0x06, 0x92, 0x36, 0x55, 0x1E, 0x46, 0xD1, 0xCB, 0x4E, 0x2C, 0x01 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 43435. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_43435.cs +// + +namespace KeyCMF_043435 +{ + static const BYTE Keytable[] = + { + 0x63, 0x5D, 0x2B, 0x62, 0x33, 0xEE, 0xFA, 0xD3, 0x3B, 0x13, 0xD3, 0x24, 0xA5, 0xC4, 0x8B, 0xBC, + 0x0F, 0x78, 0x8D, 0x34, 0xC9, 0x40, 0xD2, 0x9A, 0x81, 0x2A, 0x55, 0xFB, 0xB7, 0x0D, 0xA1, 0xE8, + 0xC8, 0xE1, 0xFE, 0x03, 0xA7, 0x7A, 0xA5, 0xBE, 0x0B, 0xB5, 0x77, 0xE8, 0xC5, 0x75, 0x5E, 0x0C, + 0x6D, 0x0E, 0x4C, 0x30, 0x69, 0x5B, 0x08, 0x99, 0xD0, 0x03, 0x84, 0x8F, 0x4B, 0xEF, 0x3E, 0x32, + 0x80, 0xC1, 0xFD, 0xB6, 0x2D, 0x59, 0x6A, 0xDB, 0x31, 0xAD, 0x86, 0x76, 0x28, 0xB7, 0x5C, 0x30, + 0xA7, 0x35, 0xEE, 0x71, 0x90, 0x55, 0xFF, 0xD2, 0x58, 0x4B, 0x2C, 0x5D, 0x1E, 0x63, 0x23, 0xE7, + 0xAE, 0x3F, 0x0C, 0xB3, 0xBC, 0xF6, 0xFB, 0x89, 0x9F, 0x3A, 0x9F, 0x01, 0xFD, 0x83, 0x61, 0x68, + 0x66, 0x2F, 0xCB, 0x56, 0x7B, 0xA1, 0xF4, 0x3E, 0xBA, 0xB7, 0xD8, 0x37, 0x3F, 0x9F, 0x6D, 0x30, + 0x4B, 0xDF, 0xF3, 0xD1, 0xF0, 0xC6, 0x30, 0xBE, 0x52, 0xA4, 0x6D, 0x30, 0x1A, 0x51, 0xBA, 0xDF, + 0x50, 0xB9, 0xF5, 0x8B, 0xCB, 0x09, 0xB9, 0xDB, 0xA0, 0xE1, 0xE6, 0x40, 0xD9, 0xB5, 0xCF, 0xE6, + 0xBB, 0x60, 0x0C, 0x6C, 0xA0, 0x73, 0xD2, 0x41, 0x76, 0xD2, 0x80, 0x5D, 0xAF, 0x05, 0x0E, 0xD0, + 0x76, 0x8C, 0x46, 0x35, 0x93, 0x87, 0x5A, 0xCF, 0x18, 0xE7, 0x0D, 0x5A, 0x12, 0x8C, 0x74, 0x94, + 0x9F, 0xEC, 0x53, 0x45, 0x48, 0xFA, 0x42, 0xB4, 0x1C, 0x15, 0xFE, 0x39, 0xD9, 0xAD, 0x4C, 0x1F, + 0x3E, 0x2F, 0x75, 0x1A, 0x39, 0xF3, 0x4F, 0x72, 0x37, 0x33, 0x0C, 0xCC, 0xEB, 0x98, 0x89, 0x32, + 0x14, 0x69, 0xE1, 0x18, 0xE3, 0x29, 0x6B, 0x8B, 0xEA, 0x89, 0x87, 0x62, 0x1D, 0x49, 0x4C, 0xA7, + 0x11, 0x2E, 0x40, 0x84, 0xF7, 0x25, 0x28, 0x46, 0x52, 0x2F, 0x84, 0xF4, 0xB9, 0x93, 0xFF, 0x94, + 0xE1, 0xC1, 0xD9, 0x3C, 0x17, 0xF2, 0xD8, 0x69, 0xF9, 0xEA, 0x8A, 0xC1, 0x85, 0xCE, 0x4F, 0x33, + 0x95, 0x73, 0x48, 0xCA, 0x11, 0x6C, 0x28, 0x98, 0x0B, 0x34, 0xAC, 0xD7, 0x2D, 0x16, 0xAB, 0x8A, + 0x22, 0x82, 0x28, 0x06, 0x67, 0xB1, 0x90, 0x44, 0x62, 0x7E, 0x69, 0xFF, 0x54, 0x54, 0xF0, 0x2B, + 0xE4, 0x46, 0x0A, 0x4E, 0x7A, 0x96, 0x6B, 0x2D, 0x74, 0xF4, 0x4D, 0x62, 0x99, 0x0A, 0xFA, 0xC4, + 0xB8, 0x5A, 0x4A, 0x23, 0xAA, 0x9B, 0xF8, 0xF4, 0xC9, 0xEF, 0xD0, 0x4A, 0x48, 0x11, 0x59, 0xEA, + 0x9F, 0xAB, 0x80, 0x93, 0x5F, 0x80, 0xE2, 0xD0, 0xDA, 0x36, 0x37, 0x2E, 0xF6, 0x27, 0xB8, 0x0D, + 0xD6, 0x0C, 0xE5, 0xD5, 0xAC, 0xA6, 0x21, 0x9D, 0xCC, 0xA9, 0xD5, 0x5D, 0x8C, 0x2A, 0x7A, 0x59, + 0x57, 0x68, 0xF0, 0x20, 0x83, 0xAD, 0xCD, 0xE0, 0x69, 0xF7, 0xB3, 0x8E, 0x60, 0x78, 0xF4, 0x6B, + 0xAE, 0xEA, 0x1B, 0x68, 0x55, 0xFB, 0xE3, 0xAB, 0x4F, 0x08, 0x5D, 0xE2, 0x94, 0x84, 0x38, 0x1B, + 0x8B, 0x96, 0x80, 0x31, 0xE4, 0x16, 0xA2, 0xB0, 0xCC, 0x72, 0x5A, 0x58, 0xE9, 0x3F, 0x74, 0xC5, + 0xFF, 0x81, 0xA1, 0x1B, 0x9B, 0x02, 0x9B, 0x8B, 0x23, 0x7A, 0x9F, 0x78, 0x32, 0xE8, 0x50, 0xDD, + 0x38, 0x49, 0x80, 0x3A, 0x5E, 0xE1, 0x98, 0x5A, 0x05, 0x9B, 0xCC, 0x78, 0x43, 0xFA, 0x81, 0xC0, + 0x72, 0x6A, 0x77, 0x5B, 0x5B, 0x9D, 0x84, 0xA6, 0xDC, 0xAA, 0x8E, 0xDD, 0x46, 0xCF, 0x99, 0x46, + 0xE8, 0xDC, 0x87, 0xCE, 0x6C, 0xA8, 0x38, 0xA1, 0x88, 0xCD, 0x8E, 0xE5, 0x8F, 0x43, 0xB3, 0x8C, + 0x74, 0x27, 0x7E, 0x60, 0x18, 0x0E, 0x4D, 0x54, 0x42, 0xD6, 0x2B, 0xE4, 0xFF, 0xC1, 0x0F, 0xCE, + 0x4A, 0x00, 0x88, 0x05, 0x07, 0x2E, 0x5A, 0x9C, 0x6E, 0x33, 0xEC, 0xD3, 0x60, 0xE8, 0x61, 0xDB + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + uint increment = kidx % 13; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx + 0x15666D63, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 43515. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_43515.cs +// + +namespace KeyCMF_043515 +{ + static const BYTE Keytable[] = + { + 0xEE, 0xF8, 0x0D, 0x93, 0x26, 0x31, 0xE9, 0x0D, 0xFF, 0x07, 0xE7, 0xFA, 0xE8, 0xFD, 0x3E, 0x05, + 0xA0, 0xA7, 0x49, 0xC7, 0x5C, 0xCC, 0x24, 0x78, 0x4D, 0x3C, 0xDD, 0x4B, 0x6A, 0xBF, 0xDF, 0x79, + 0xA9, 0x73, 0xA4, 0x7B, 0x9B, 0x50, 0x6C, 0xFF, 0xA1, 0x2C, 0xFA, 0x6C, 0x96, 0x79, 0x8F, 0x31, + 0x6C, 0x97, 0x74, 0x94, 0x20, 0x47, 0x70, 0x09, 0x37, 0x28, 0x62, 0x46, 0x4A, 0xA3, 0x83, 0xD3, + 0xD4, 0xE4, 0x59, 0xAA, 0x85, 0x13, 0x67, 0x7E, 0xD6, 0x59, 0x0A, 0x84, 0x06, 0x7C, 0x19, 0xB1, + 0x8A, 0xE6, 0xEC, 0x2A, 0xAE, 0x01, 0xBB, 0x23, 0x15, 0x50, 0x2C, 0x0D, 0xF0, 0x25, 0x68, 0x1C, + 0x15, 0xCC, 0x06, 0xB5, 0x88, 0xEF, 0x55, 0xF4, 0xD0, 0xE9, 0x6D, 0x16, 0x58, 0x68, 0x0F, 0xD4, + 0xDF, 0x53, 0xE7, 0xC3, 0x9D, 0x13, 0xEE, 0x64, 0x56, 0xE8, 0x58, 0xAB, 0x10, 0xFA, 0xDC, 0x2A, + 0xC4, 0x9B, 0xE4, 0x5F, 0xDD, 0x9F, 0x28, 0xCA, 0x82, 0x9B, 0xC8, 0x4E, 0x37, 0x19, 0x1F, 0x34, + 0x13, 0x06, 0x00, 0xE1, 0x31, 0xA7, 0xD4, 0x7D, 0x6E, 0xBE, 0x95, 0xD6, 0x45, 0xC9, 0x05, 0x0B, + 0xB8, 0xBD, 0x07, 0x98, 0x5C, 0x48, 0x46, 0x26, 0xCF, 0x1B, 0x9E, 0x2C, 0x96, 0xB3, 0x5F, 0x9E, + 0x36, 0x07, 0xA5, 0x61, 0x87, 0x49, 0x4D, 0x0A, 0x79, 0xA8, 0x8F, 0x0F, 0x9D, 0x5E, 0xEB, 0x07, + 0x0D, 0x7E, 0xF8, 0x1B, 0xC8, 0x9F, 0x7B, 0x2A, 0x1D, 0x69, 0x24, 0x81, 0x4E, 0x09, 0xC7, 0xD1, + 0x54, 0x00, 0x20, 0x2E, 0xE8, 0x60, 0x4C, 0x71, 0x04, 0x96, 0x03, 0x4E, 0xA5, 0x9B, 0x41, 0xB5, + 0x02, 0x91, 0x0B, 0x3F, 0x84, 0x77, 0x2F, 0xCD, 0x19, 0x00, 0xDB, 0x23, 0xB7, 0xBC, 0x47, 0xBD, + 0x62, 0x36, 0x54, 0xCD, 0x99, 0x87, 0x0F, 0x63, 0xD9, 0x74, 0xD1, 0xD1, 0xE2, 0x5E, 0x2B, 0xC6, + 0xDA, 0x96, 0x57, 0x28, 0x9C, 0x54, 0xF4, 0x2C, 0xB9, 0xE1, 0x2F, 0x15, 0xCF, 0x04, 0x2E, 0xE1, + 0xFD, 0x44, 0x08, 0xC3, 0xED, 0xE1, 0x58, 0xD4, 0x40, 0x6F, 0x26, 0x11, 0x64, 0xC8, 0x5D, 0x13, + 0x63, 0xAE, 0xCD, 0x4C, 0xC0, 0x1D, 0x73, 0xF2, 0xF9, 0x4D, 0x2D, 0x1C, 0x9E, 0xFB, 0xF5, 0xEF, + 0x8D, 0x78, 0x51, 0xB3, 0x54, 0x23, 0xC5, 0x66, 0x48, 0xF6, 0xCA, 0xD0, 0xF0, 0xFE, 0x18, 0x97, + 0x88, 0x78, 0x55, 0x22, 0xA5, 0x7D, 0x33, 0xCA, 0xBD, 0x91, 0x21, 0x2D, 0xEC, 0x10, 0x42, 0xEF, + 0x5C, 0xC0, 0x5E, 0x34, 0x71, 0x0A, 0x9A, 0x14, 0xBA, 0x9B, 0xA4, 0xAE, 0x3D, 0xA2, 0xC4, 0x5F, + 0x02, 0xD2, 0x67, 0x8D, 0xC7, 0x2C, 0xFE, 0xAE, 0x34, 0xD7, 0xA7, 0x36, 0x3B, 0x67, 0x35, 0x36, + 0x3A, 0xE4, 0xDA, 0x40, 0x83, 0x60, 0xDF, 0x24, 0x0E, 0x36, 0x43, 0x29, 0xB8, 0xDA, 0x22, 0xBA, + 0xA7, 0x73, 0x7F, 0xE3, 0x9A, 0xFE, 0xBE, 0x7C, 0xF9, 0xA0, 0xF7, 0x92, 0xCB, 0xDA, 0x03, 0xA7, + 0x76, 0x82, 0xA2, 0x9C, 0x39, 0x40, 0x86, 0xD6, 0x02, 0x4E, 0x8B, 0xDB, 0x11, 0xBE, 0x82, 0x81, + 0x27, 0x97, 0x53, 0x32, 0x63, 0x14, 0x47, 0xC8, 0x7D, 0x3E, 0x21, 0x04, 0xBB, 0x4A, 0x26, 0x24, + 0xF5, 0x84, 0x13, 0x7C, 0xBD, 0x6D, 0x1F, 0xB4, 0x91, 0xF1, 0x2E, 0x72, 0x1C, 0xCA, 0xCC, 0xA1, + 0x22, 0x36, 0x5F, 0x66, 0xC0, 0x16, 0xFB, 0x94, 0x0E, 0xD7, 0x82, 0x0D, 0x95, 0xEF, 0x94, 0x12, + 0x97, 0xC0, 0xBE, 0xBE, 0x75, 0x79, 0x9B, 0x35, 0x22, 0x77, 0xBA, 0x85, 0x93, 0xF0, 0x2F, 0x2E, + 0x3E, 0xFC, 0x18, 0x25, 0x0F, 0xC3, 0xE5, 0x9E, 0x8B, 0xA9, 0x6D, 0xDB, 0xA1, 0x7E, 0x7B, 0x2E, + 0x37, 0x54, 0xFA, 0x11, 0xEC, 0x7B, 0x83, 0x0E, 0x1F, 0x28, 0xED, 0x1A, 0x75, 0x1C, 0xB9, 0x6A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 0x2B; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 43605. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_43605.cs +// + +namespace KeyCMF_043605 +{ + static const BYTE Keytable[] = + { + 0x77, 0xF0, 0xDF, 0xCA, 0x53, 0x1A, 0x9E, 0x77, 0xDD, 0x1F, 0x0B, 0x5E, 0xE2, 0x41, 0xA4, 0x4F, + 0xD2, 0x93, 0x5F, 0xA9, 0x04, 0xAB, 0x4F, 0xD1, 0xD9, 0xD6, 0x4C, 0x76, 0xF1, 0xD0, 0x51, 0xBA, + 0xD2, 0x70, 0x94, 0xD1, 0x6D, 0x01, 0x2D, 0x95, 0x67, 0x70, 0xE9, 0xF7, 0x04, 0xA3, 0x87, 0x16, + 0xCC, 0xF7, 0x7A, 0x7D, 0xA6, 0x6A, 0x6F, 0x25, 0xC6, 0xEE, 0x31, 0x63, 0x07, 0xF7, 0x26, 0x3D, + 0x6D, 0xC7, 0xE7, 0x7E, 0x33, 0x68, 0xCA, 0x01, 0x09, 0x20, 0xBD, 0x9F, 0x6A, 0x6C, 0x56, 0xD0, + 0x43, 0xBA, 0xCC, 0x51, 0x35, 0xF7, 0x8A, 0x93, 0x2C, 0xA0, 0x31, 0x62, 0xC3, 0x10, 0xF1, 0x38, + 0x2A, 0x38, 0xF2, 0xB9, 0xF0, 0x15, 0x92, 0x34, 0x02, 0x7D, 0xF1, 0x4A, 0x4B, 0x7E, 0x22, 0xE9, + 0x71, 0x97, 0x84, 0xF3, 0x10, 0x4E, 0x3C, 0x1F, 0xFD, 0xD2, 0xBA, 0xC7, 0xDF, 0x31, 0xC7, 0x55, + 0x57, 0x35, 0x86, 0x38, 0x6C, 0x75, 0xAC, 0xD6, 0x6B, 0xE0, 0x0B, 0x67, 0x18, 0x0F, 0xC1, 0x5B, + 0x3A, 0x35, 0xD3, 0xC1, 0x79, 0x87, 0x33, 0xF1, 0x2F, 0x4A, 0x66, 0x7E, 0x60, 0xD5, 0x14, 0xF8, + 0x91, 0x4B, 0x05, 0x40, 0xB3, 0xB0, 0x05, 0x25, 0xE0, 0xE0, 0x33, 0x56, 0xEC, 0x1D, 0x04, 0xF7, + 0xDA, 0x01, 0xE4, 0x0E, 0x4D, 0x8D, 0x2D, 0x65, 0xA5, 0xB4, 0x33, 0x8D, 0x5D, 0xB8, 0xC8, 0x75, + 0x29, 0x85, 0x2A, 0x7E, 0x7F, 0xBE, 0xD5, 0x3E, 0xCA, 0x79, 0x77, 0x48, 0x82, 0x63, 0x59, 0x47, + 0x8B, 0xAD, 0x02, 0x62, 0xC7, 0x8C, 0xB3, 0x37, 0x2E, 0xBC, 0x55, 0x69, 0xF5, 0xA4, 0x91, 0xEB, + 0xC6, 0xAE, 0x4A, 0xC4, 0xAF, 0x0D, 0x1B, 0x70, 0x77, 0x07, 0x76, 0x44, 0x07, 0x3F, 0xCF, 0xA8, + 0xBB, 0xCB, 0x92, 0x18, 0x29, 0x58, 0xCA, 0xD1, 0x9A, 0xF0, 0x65, 0xFC, 0x4A, 0xDE, 0x73, 0xDC, + 0x80, 0xB6, 0xEE, 0xD1, 0xCA, 0x69, 0x15, 0xC7, 0xCB, 0x9C, 0xE1, 0xBB, 0xEF, 0x94, 0xC7, 0xA7, + 0xDF, 0xB4, 0x5B, 0x31, 0xCB, 0x03, 0xA0, 0xBE, 0xA1, 0x34, 0xF6, 0xCC, 0x89, 0x0A, 0xEF, 0xAC, + 0xBD, 0x4C, 0x94, 0xBE, 0x40, 0x2C, 0xCE, 0x48, 0xC6, 0x93, 0xB4, 0x60, 0xA5, 0x4A, 0x21, 0x33, + 0x93, 0x00, 0x85, 0xB9, 0xB4, 0x70, 0xFD, 0xEC, 0xC9, 0x4C, 0x74, 0x28, 0x4E, 0x43, 0xFA, 0x1A, + 0xEB, 0xB3, 0xA0, 0xEB, 0x33, 0x13, 0x73, 0x25, 0x58, 0x0F, 0x73, 0xAC, 0x47, 0x0F, 0x71, 0xD6, + 0x3E, 0x5B, 0xCA, 0xD8, 0x9C, 0x7A, 0xE4, 0x86, 0xD3, 0x0B, 0x38, 0x2A, 0xCB, 0xA5, 0xD3, 0xC5, + 0x15, 0xA9, 0x0B, 0x4F, 0x5F, 0xE9, 0x03, 0x05, 0x4C, 0xE7, 0x3A, 0xE2, 0x15, 0xD2, 0x2C, 0xF9, + 0xF5, 0x5F, 0x5F, 0xD7, 0x20, 0x6D, 0xB1, 0xFF, 0xED, 0x94, 0x14, 0x4B, 0xC0, 0x07, 0x2E, 0xC8, + 0x7C, 0xF7, 0x4C, 0x1D, 0xC1, 0x5D, 0x9A, 0x58, 0x38, 0x15, 0x71, 0x35, 0x14, 0xB3, 0xCB, 0x89, + 0xAB, 0x50, 0xF0, 0x2B, 0x1B, 0x44, 0x00, 0x95, 0x6D, 0xD6, 0x6B, 0x55, 0xDE, 0x49, 0xB4, 0xC7, + 0xBB, 0xB4, 0xAC, 0x28, 0x4B, 0xB5, 0x28, 0x37, 0xE3, 0xD5, 0xEA, 0x00, 0x82, 0x20, 0xD1, 0x49, + 0xE3, 0xDB, 0x3C, 0x41, 0x82, 0x89, 0x2B, 0x5E, 0xB7, 0xA6, 0x1F, 0x29, 0xBB, 0x7F, 0x5A, 0xF1, + 0x9A, 0xE0, 0x73, 0x7C, 0x97, 0x5F, 0x2B, 0xA6, 0xB5, 0x18, 0x67, 0xE6, 0x7E, 0x19, 0x34, 0xDB, + 0x80, 0xD6, 0xC3, 0xDD, 0x22, 0x27, 0xB7, 0xB7, 0x23, 0xEA, 0xE4, 0x45, 0x9F, 0x75, 0xC2, 0xE1, + 0x9E, 0xA3, 0xC1, 0x3B, 0x42, 0x35, 0x83, 0xF9, 0xFD, 0x63, 0x14, 0x9B, 0xFE, 0x8C, 0x1E, 0x1F, + 0xF6, 0xDC, 0x31, 0xA8, 0x53, 0x1C, 0x0B, 0xC8, 0xCE, 0xC9, 0x21, 0xA2, 0x1D, 0xE0, 0x3B, 0x08 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 0x55; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = (uint)header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 44022. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_44022.cs +// + +namespace KeyCMF_044022 +{ + static const BYTE Keytable[] = + { + 0xD0, 0x28, 0x8E, 0xB1, 0x31, 0x7C, 0x7C, 0x1C, 0x49, 0x55, 0xB4, 0x69, 0x91, 0x76, 0x27, 0xF4, + 0x32, 0xC8, 0x32, 0xFA, 0xBB, 0x31, 0xF8, 0x3B, 0x8B, 0x44, 0x09, 0xC4, 0xBE, 0x66, 0x58, 0x5C, + 0x06, 0x3F, 0x32, 0x3B, 0x1D, 0xF1, 0x27, 0x55, 0x6C, 0xFC, 0x22, 0x68, 0x91, 0x74, 0x99, 0x1C, + 0xEF, 0x57, 0x4D, 0x80, 0xD0, 0xB7, 0x92, 0x27, 0x9A, 0x46, 0xB1, 0x3B, 0x64, 0x5B, 0x4F, 0x97, + 0x73, 0x85, 0x29, 0x1E, 0x48, 0x3F, 0xFC, 0x7D, 0x1F, 0x46, 0x4C, 0xC9, 0x40, 0x2D, 0x55, 0xDF, + 0x39, 0xC2, 0xF3, 0xFD, 0x0F, 0x55, 0x26, 0xC7, 0xB8, 0x56, 0xC8, 0x9A, 0x4D, 0x5D, 0x94, 0xA0, + 0xD9, 0x59, 0xAC, 0x81, 0xA7, 0x20, 0x53, 0xB5, 0x8A, 0xDD, 0xE6, 0xA8, 0x61, 0x64, 0x53, 0xB6, + 0xB1, 0xFD, 0xC0, 0xFE, 0x6E, 0xC3, 0x4B, 0x4F, 0x62, 0x52, 0x35, 0xA4, 0x45, 0xB7, 0x2F, 0x3E, + 0x39, 0x44, 0x8B, 0xF6, 0x07, 0x17, 0xCD, 0xB6, 0xF3, 0xD4, 0x14, 0x65, 0xFD, 0xE9, 0x4D, 0x7C, + 0x91, 0x87, 0xEF, 0x95, 0x62, 0xB6, 0xD1, 0x93, 0xFA, 0x49, 0x80, 0x8D, 0x19, 0xBF, 0xD1, 0xEC, + 0xE6, 0xD2, 0x3B, 0xBB, 0x92, 0x14, 0x15, 0x5D, 0xC0, 0xA0, 0xB8, 0xD0, 0x00, 0xBB, 0x4B, 0x16, + 0x10, 0x6E, 0x0D, 0x98, 0xB2, 0x9D, 0xC8, 0x06, 0xE4, 0xBB, 0xDF, 0xB7, 0xCE, 0xB5, 0x57, 0x5F, + 0x43, 0x68, 0xB8, 0x73, 0xE5, 0xCA, 0x60, 0x2F, 0x5F, 0xCC, 0x9F, 0x55, 0x5F, 0x75, 0x64, 0x7F, + 0x9A, 0x6B, 0x7C, 0x59, 0x18, 0x1E, 0x0B, 0x71, 0x23, 0x7A, 0x16, 0x47, 0x6C, 0x84, 0xB2, 0xF5, + 0x80, 0x33, 0x9A, 0x47, 0x70, 0x19, 0xCC, 0x20, 0x71, 0x7F, 0x96, 0x12, 0x3D, 0x0C, 0x35, 0x48, + 0xF8, 0xE7, 0x74, 0xB5, 0xA9, 0x53, 0xCF, 0xB3, 0x76, 0x33, 0x06, 0x1B, 0xC9, 0x39, 0x17, 0x6B, + 0x72, 0xC7, 0xFB, 0x94, 0x1A, 0x1F, 0xFA, 0x0C, 0xF5, 0xD4, 0x81, 0xBA, 0xDE, 0xC9, 0x35, 0xFD, + 0xC6, 0x5C, 0x7D, 0x15, 0xED, 0xAC, 0xEE, 0xF1, 0xAC, 0xB2, 0x0C, 0x42, 0x99, 0xA4, 0xD9, 0xBC, + 0xD0, 0x6B, 0xCE, 0x9F, 0xE5, 0x8B, 0xF8, 0xF8, 0xF8, 0xBC, 0x4D, 0xE9, 0x3B, 0x52, 0xE5, 0x8A, + 0x71, 0xDC, 0xD7, 0x25, 0x3D, 0xE2, 0xDD, 0x93, 0xFB, 0xCD, 0x47, 0x6A, 0xC9, 0x3A, 0x98, 0xA0, + 0xD4, 0xC7, 0xAC, 0xA1, 0x7A, 0xF9, 0xA1, 0x9F, 0xDC, 0xAD, 0xD3, 0xBC, 0xDA, 0x9F, 0xD2, 0xBE, + 0x6A, 0xE3, 0xC0, 0x62, 0x57, 0x22, 0x4D, 0x73, 0x22, 0x5F, 0x57, 0x31, 0x3F, 0xAE, 0xBC, 0x8C, + 0x0E, 0xA3, 0xBF, 0x56, 0xD5, 0x7E, 0x1A, 0xBB, 0xC0, 0xFB, 0x58, 0x7D, 0xF6, 0x2B, 0x90, 0x7C, + 0x27, 0xFD, 0xC1, 0xF6, 0xD3, 0x40, 0xD1, 0x2A, 0x77, 0xB0, 0x2B, 0x80, 0xC2, 0xE9, 0x6F, 0xD7, + 0xCE, 0xDE, 0x51, 0xCD, 0xC4, 0x21, 0xC5, 0xDC, 0xC0, 0xC1, 0xA2, 0x65, 0xCB, 0xDD, 0x11, 0x78, + 0x1B, 0xFB, 0x14, 0x1D, 0x8A, 0x77, 0x83, 0xB1, 0x8C, 0x52, 0x2A, 0x57, 0x2C, 0xF7, 0xD8, 0x59, + 0x81, 0x4C, 0xEE, 0x13, 0xB3, 0x47, 0x84, 0x0A, 0xFD, 0x1D, 0x4C, 0x9E, 0xB0, 0xDE, 0xF3, 0x19, + 0x4A, 0x11, 0xFD, 0x04, 0x8E, 0x3E, 0x4C, 0x8C, 0x5F, 0x9A, 0xF5, 0x98, 0x7A, 0x2B, 0xF5, 0xB2, + 0x7F, 0x8F, 0x2B, 0xD0, 0x91, 0x6F, 0x8B, 0x8C, 0xF8, 0x33, 0x97, 0x64, 0x1D, 0xE1, 0x23, 0x38, + 0xDD, 0xD9, 0xCB, 0xDF, 0x37, 0xA5, 0xF4, 0xB1, 0x8E, 0xDB, 0x1E, 0x1C, 0xB9, 0x73, 0x49, 0xE8, + 0x85, 0x24, 0xD0, 0x74, 0x5F, 0x5D, 0x37, 0x95, 0x32, 0xCE, 0xDD, 0x27, 0xC7, 0x7D, 0x31, 0xFF, + 0x13, 0xB2, 0x16, 0xF0, 0x46, 0x75, 0x46, 0x7F, 0x88, 0xA4, 0x79, 0x67, 0x45, 0x3B, 0xCC, 0x35 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + uint increment = (uint) SignedMod(kidx, 61); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (digest[7] + (uint)header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 44916. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_44916.cs +// + +namespace KeyCMF_044916 +{ + static const BYTE Keytable[] = + { + 0xEE, 0xA0, 0xAF, 0x29, 0xC0, 0x55, 0x22, 0xF6, 0x9F, 0x07, 0x07, 0x17, 0xA5, 0x59, 0xF3, 0x87, + 0x4B, 0x97, 0xAE, 0x8A, 0x22, 0x9A, 0x1F, 0xA7, 0x1E, 0x72, 0xF3, 0xC3, 0x75, 0xC3, 0x90, 0xA8, + 0xE6, 0x10, 0xE5, 0xA5, 0x09, 0xEF, 0x36, 0x2A, 0xE8, 0x49, 0x85, 0x0B, 0xDD, 0x62, 0x31, 0x8A, + 0xA7, 0xE8, 0x11, 0x89, 0xAA, 0xAE, 0x79, 0x91, 0xF7, 0x5D, 0x6F, 0x74, 0x94, 0x2E, 0x49, 0x5C, + 0x4C, 0x76, 0xD2, 0x06, 0x17, 0xCC, 0x03, 0x37, 0x92, 0xF7, 0x29, 0x08, 0xCD, 0x77, 0x5B, 0xBD, + 0x7F, 0x97, 0x65, 0xC2, 0x2D, 0x1E, 0xE7, 0x18, 0xEF, 0x90, 0x98, 0x12, 0x75, 0xB0, 0xC2, 0x64, + 0x05, 0x47, 0x3B, 0x03, 0x8E, 0x78, 0xBB, 0xB5, 0xE2, 0xF2, 0x20, 0x1C, 0x7C, 0xA9, 0x78, 0xF7, + 0x27, 0x89, 0xCD, 0xF0, 0x16, 0xA7, 0x48, 0x65, 0x88, 0x61, 0xEA, 0x5F, 0xC3, 0x2E, 0x69, 0xA3, + 0x38, 0x59, 0x3B, 0x21, 0x85, 0x1B, 0x1E, 0x90, 0xA5, 0x93, 0xA2, 0xB3, 0x78, 0x0E, 0x19, 0x27, + 0x20, 0x8B, 0x0F, 0xAB, 0x65, 0x3D, 0x17, 0x38, 0x80, 0x5E, 0x50, 0x77, 0x5B, 0x14, 0xCF, 0xDA, + 0xC3, 0x6A, 0xCE, 0x18, 0xCD, 0x71, 0xAB, 0xE7, 0xDC, 0xDE, 0xA9, 0xB8, 0xB9, 0x3A, 0x68, 0x76, + 0x0D, 0x70, 0xDA, 0xAD, 0x98, 0x3D, 0x18, 0x86, 0xFB, 0x3D, 0xF4, 0x63, 0x10, 0x70, 0x52, 0x3B, + 0xB2, 0x14, 0xA2, 0xD8, 0xDE, 0x37, 0x83, 0x8D, 0xE6, 0x26, 0x20, 0x30, 0xB8, 0x6F, 0xF7, 0x7B, + 0x9C, 0xEC, 0x1E, 0xFB, 0x50, 0x35, 0x8B, 0xF4, 0xC4, 0x2E, 0xCC, 0xD5, 0xFF, 0x3D, 0x25, 0x6E, + 0x0A, 0x88, 0x5B, 0x79, 0x13, 0x59, 0xAD, 0x97, 0x42, 0xF5, 0x6B, 0x01, 0xAC, 0x47, 0xAD, 0xA5, + 0xF5, 0xB1, 0x86, 0xDD, 0x0E, 0x29, 0x6A, 0xC5, 0xC4, 0x64, 0x65, 0x79, 0x59, 0x75, 0xF2, 0xE7, + 0xD2, 0x71, 0xCB, 0x1D, 0x3D, 0x70, 0x85, 0x19, 0x8F, 0x7D, 0x73, 0x0C, 0xDA, 0xE4, 0xF9, 0x6D, + 0x90, 0x60, 0x64, 0x27, 0x66, 0xE9, 0x70, 0x23, 0x5C, 0xA0, 0x6B, 0xD2, 0x18, 0x20, 0xA3, 0xAA, + 0x87, 0x41, 0xBD, 0x2C, 0x1F, 0x9E, 0x89, 0x17, 0xE0, 0x2C, 0xDC, 0xE2, 0x28, 0x58, 0xAD, 0x3A, + 0x96, 0xA2, 0xA2, 0xF4, 0x02, 0x4C, 0xFA, 0x61, 0x43, 0x9A, 0x1A, 0x2B, 0x87, 0xF2, 0xD2, 0xC9, + 0xC3, 0xB9, 0xEB, 0xA2, 0x68, 0xF8, 0xC6, 0x79, 0x9F, 0xFD, 0xCB, 0x21, 0x6B, 0xF1, 0x14, 0x0F, + 0xD4, 0x56, 0x6A, 0xDC, 0x6B, 0xF5, 0x4C, 0x81, 0x69, 0xC4, 0xAE, 0xF5, 0xF4, 0x2A, 0xC5, 0x52, + 0xC5, 0xD9, 0x32, 0xFE, 0x1F, 0xE5, 0x2D, 0x72, 0xEB, 0x8F, 0xFD, 0xD8, 0x7C, 0x2B, 0x0C, 0xDC, + 0xEF, 0xEE, 0xE0, 0xA2, 0x7E, 0x8C, 0xD4, 0x3E, 0xBF, 0xD8, 0xCF, 0xAA, 0x19, 0x64, 0x5D, 0x57, + 0xD9, 0xA5, 0x4B, 0xC9, 0x83, 0x7C, 0x5C, 0x86, 0xBA, 0x95, 0x9E, 0x61, 0x93, 0xD1, 0x4B, 0x1A, + 0xF5, 0x0A, 0xD0, 0xE8, 0xBA, 0xED, 0xD7, 0xB7, 0xAD, 0xF2, 0x3E, 0x2A, 0xD2, 0x52, 0x68, 0x58, + 0xEC, 0x2F, 0xBD, 0xDE, 0x81, 0xA7, 0x5B, 0x74, 0x80, 0x83, 0x2F, 0xC1, 0x9B, 0x52, 0x36, 0x5F, + 0x91, 0x8A, 0x6C, 0x6F, 0x9E, 0x1D, 0xD8, 0x52, 0x3C, 0xCC, 0x71, 0x5A, 0x9B, 0xF7, 0x8C, 0x76, + 0x44, 0x3A, 0x30, 0x75, 0x1A, 0xD5, 0x29, 0x93, 0x2E, 0xD7, 0xA5, 0x5C, 0x0C, 0x4E, 0xA4, 0x4F, + 0xA3, 0x43, 0x21, 0xC9, 0x17, 0x8D, 0xA0, 0xC1, 0x3B, 0x6A, 0xE8, 0x05, 0x9E, 0xA9, 0x07, 0x88, + 0x8E, 0xB2, 0x82, 0x45, 0x33, 0x8C, 0x57, 0xDF, 0x46, 0x34, 0xA0, 0xDF, 0x4C, 0xD0, 0xD7, 0xE2, + 0x1A, 0x84, 0x13, 0x67, 0x86, 0xDE, 0x94, 0xCD, 0x21, 0x5D, 0x9F, 0xA9, 0x4F, 0x17, 0x63, 0xA9 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[digest[7] * Keytable[0] & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 45214. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_45214.cs +// + +namespace KeyCMF_045214 +{ + static const BYTE Keytable[] = + { + 0xF8, 0xB0, 0xF2, 0x21, 0x7D, 0xB9, 0x4A, 0x3F, 0x75, 0xE5, 0x11, 0x07, 0xA7, 0x94, 0xBF, 0x14, + 0x7A, 0x8C, 0x07, 0x77, 0x6B, 0x40, 0x6E, 0x80, 0x8B, 0xAD, 0x28, 0xB2, 0x5B, 0x9A, 0x32, 0x9B, + 0x97, 0x33, 0x37, 0x38, 0xAE, 0xDB, 0xAD, 0x68, 0xCB, 0xA0, 0xB9, 0x12, 0x82, 0x6D, 0x6A, 0x5E, + 0xD5, 0xD1, 0xBA, 0xDF, 0x78, 0x80, 0x98, 0xCC, 0xC6, 0xEE, 0xCF, 0xCB, 0xBD, 0x7E, 0x0A, 0xE4, + 0x63, 0x23, 0x09, 0x2E, 0x76, 0x33, 0x3A, 0x37, 0xDC, 0x6B, 0x86, 0x3A, 0x69, 0x87, 0x2B, 0x8D, + 0x32, 0xBB, 0x89, 0xAC, 0x1F, 0xEC, 0x62, 0x4B, 0x83, 0xCD, 0xBA, 0x1F, 0x86, 0x1B, 0xAC, 0x25, + 0x8B, 0x50, 0xD6, 0xDC, 0xE4, 0x77, 0xD2, 0x4F, 0xBA, 0x83, 0xDA, 0x1E, 0x7A, 0x6D, 0xE5, 0x67, + 0xD2, 0x8F, 0xAE, 0x89, 0x26, 0x26, 0x00, 0x73, 0xA9, 0x57, 0x35, 0x47, 0xD7, 0x68, 0xF3, 0x00, + 0x6B, 0xB0, 0x19, 0xDE, 0xB9, 0x2A, 0x2F, 0xF2, 0xA7, 0x52, 0x64, 0xC9, 0x65, 0x92, 0xEF, 0xB1, + 0xDB, 0x43, 0xBE, 0x20, 0x9D, 0xC7, 0x68, 0x31, 0x06, 0x56, 0x5E, 0x24, 0x26, 0x64, 0x47, 0x03, + 0x3D, 0xD4, 0xD1, 0x74, 0xA4, 0xF3, 0x30, 0x77, 0x89, 0xCB, 0xB4, 0x3E, 0x53, 0xD6, 0x39, 0x0A, + 0xC2, 0xC2, 0xDD, 0xFE, 0x1A, 0x99, 0x3A, 0xAE, 0x87, 0x88, 0x7B, 0x3A, 0x8C, 0x91, 0xE8, 0x4F, + 0xB6, 0x13, 0x39, 0xD8, 0xC9, 0x77, 0x4F, 0x62, 0x9B, 0xC7, 0xD8, 0x31, 0xF3, 0xDA, 0x9F, 0x03, + 0x14, 0x14, 0xC2, 0xC0, 0x04, 0x45, 0x48, 0xEB, 0x86, 0xF8, 0xAB, 0x87, 0x04, 0xCB, 0x56, 0x90, + 0xD1, 0x86, 0x7E, 0x12, 0xFE, 0x50, 0x08, 0x94, 0xD1, 0xD8, 0x3F, 0x31, 0xFA, 0xA2, 0xC8, 0x9A, + 0x48, 0xCD, 0x99, 0xCA, 0xEC, 0x3B, 0x64, 0x98, 0x96, 0xC7, 0x9E, 0x66, 0xDA, 0x37, 0xE4, 0xDA, + 0xC9, 0xA9, 0xF6, 0xC5, 0x86, 0xAB, 0xA7, 0x6E, 0x7D, 0x09, 0x95, 0x5D, 0xCE, 0x4C, 0x1D, 0x6E, + 0x16, 0x44, 0x81, 0x41, 0x33, 0x1E, 0x0D, 0x8C, 0xDE, 0x8B, 0x04, 0xAE, 0x4E, 0xB9, 0x57, 0x42, + 0x90, 0xF4, 0x92, 0x04, 0x85, 0x37, 0xF9, 0xF5, 0x9F, 0x5C, 0x54, 0xD8, 0xD1, 0x91, 0xEB, 0xD6, + 0x29, 0x06, 0x44, 0x9C, 0x06, 0xC7, 0x80, 0xBF, 0x4F, 0x58, 0x95, 0xE9, 0xF8, 0x91, 0x6F, 0x8F, + 0xA6, 0x46, 0xC8, 0x9B, 0xBE, 0xFE, 0x3F, 0x78, 0x5D, 0x71, 0x9F, 0xDB, 0x95, 0xFC, 0x65, 0x4C, + 0x6C, 0x6F, 0x14, 0x49, 0x33, 0x79, 0x2C, 0x09, 0x5B, 0xBB, 0x45, 0x82, 0x70, 0x62, 0xEF, 0x9C, + 0x34, 0xD6, 0xAE, 0x05, 0xAB, 0x62, 0x92, 0x6F, 0xCE, 0x16, 0x94, 0x87, 0xDA, 0x2B, 0xE9, 0x9F, + 0xA2, 0xC8, 0x69, 0x60, 0x4C, 0x33, 0x52, 0x9F, 0xB6, 0xCF, 0xE7, 0x5F, 0x1F, 0xEB, 0x6F, 0x54, + 0x26, 0xFA, 0xAF, 0xE4, 0xD6, 0x57, 0x39, 0x54, 0xE2, 0x02, 0x86, 0xEE, 0x75, 0x7A, 0xB8, 0xAA, + 0x11, 0x45, 0xB7, 0xEB, 0x7E, 0x5C, 0xAC, 0x6A, 0x2C, 0xB8, 0xE3, 0x76, 0xE7, 0xB7, 0x09, 0x5B, + 0xFE, 0x23, 0x44, 0x80, 0x78, 0xC2, 0xAB, 0x08, 0x3D, 0xFB, 0x18, 0x74, 0xD1, 0x3A, 0x8D, 0xBD, + 0xD4, 0x0D, 0xE1, 0x9D, 0x51, 0x43, 0x28, 0x18, 0x4A, 0x8F, 0x75, 0x49, 0xC3, 0xA8, 0x43, 0xD9, + 0xED, 0x46, 0x9B, 0x6F, 0xE7, 0x6F, 0x46, 0x42, 0xAA, 0xCE, 0xC7, 0xA1, 0x42, 0x98, 0xBA, 0x22, + 0xEA, 0xC6, 0x08, 0xEC, 0x41, 0x2C, 0x4C, 0x07, 0x1C, 0x0A, 0xC5, 0x51, 0x75, 0x7C, 0xF1, 0x6B, + 0xC9, 0x9E, 0xDD, 0xF8, 0x0F, 0x4F, 0x5C, 0xF2, 0x31, 0x10, 0xB9, 0x47, 0x86, 0x37, 0x5E, 0xDD, + 0x6B, 0xE9, 0xB1, 0x11, 0xC4, 0x18, 0xE5, 0xC8, 0xC1, 0x2E, 0xA3, 0xB8, 0x79, 0x1E, 0x83, 0xA2 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(2 * digest[13] - length, 512)]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 45420. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_45420.cs +// + +namespace KeyCMF_045420 +{ + static const BYTE Keytable[] = + { + 0xA3, 0x0C, 0x86, 0x75, 0xD7, 0x2B, 0x49, 0xF9, 0x6B, 0x8F, 0x5C, 0xE4, 0xE4, 0x9D, 0xCF, 0x63, + 0x5C, 0xEF, 0xF2, 0xC4, 0x3D, 0xCD, 0x76, 0xE7, 0x96, 0x15, 0x28, 0x4C, 0x46, 0x5E, 0xC3, 0x55, + 0x65, 0x56, 0x28, 0x89, 0x37, 0x0D, 0x37, 0xE6, 0x78, 0xE0, 0x77, 0xB5, 0xB0, 0x26, 0x9B, 0x69, + 0xB1, 0xAD, 0x22, 0xA6, 0xA1, 0x6A, 0x78, 0xB7, 0x48, 0xFD, 0xBC, 0xE3, 0x4A, 0xAB, 0xD4, 0xF1, + 0x35, 0xA9, 0x69, 0x64, 0x45, 0x61, 0xFE, 0x31, 0x94, 0xAE, 0x2C, 0x41, 0xD2, 0x17, 0x1B, 0x6A, + 0x89, 0x8A, 0x1C, 0x0F, 0xE5, 0x1D, 0x28, 0x8D, 0x93, 0x4E, 0x69, 0x3F, 0x25, 0xC5, 0x6D, 0xB7, + 0xAB, 0x44, 0x83, 0x49, 0x15, 0x8D, 0xD4, 0xC8, 0x16, 0xFA, 0x85, 0x2F, 0x6B, 0x0C, 0x5C, 0xE6, + 0x17, 0x54, 0xBE, 0x74, 0xAB, 0x6D, 0xF2, 0xAF, 0x81, 0x26, 0x3B, 0x1B, 0x1D, 0x36, 0x45, 0x58, + 0xD0, 0x54, 0xCB, 0x45, 0xFB, 0x6E, 0x1E, 0x9E, 0xC2, 0xA8, 0x96, 0x99, 0xF4, 0x3A, 0x02, 0x5E, + 0xAE, 0xD2, 0x07, 0x1F, 0x77, 0xD6, 0x07, 0x79, 0x63, 0xC4, 0x9D, 0xCD, 0x49, 0xD9, 0xA4, 0x5C, + 0x8E, 0x1C, 0x62, 0x8C, 0x96, 0x61, 0x75, 0xA2, 0x37, 0xDC, 0x35, 0x72, 0x39, 0xB2, 0x0F, 0xB0, + 0xE3, 0x50, 0x88, 0x7D, 0x7B, 0xE2, 0x65, 0xA9, 0x18, 0xE0, 0xD0, 0x6E, 0x2E, 0xC5, 0x2D, 0x8A, + 0xA6, 0x10, 0xE6, 0xC1, 0xB3, 0xBC, 0xF1, 0x31, 0x98, 0xD8, 0x26, 0x79, 0x69, 0xC2, 0x97, 0x63, + 0x36, 0xF7, 0xFC, 0xF6, 0x54, 0xF8, 0xDB, 0xB4, 0x42, 0xDB, 0x33, 0x0B, 0x6C, 0x5C, 0x3E, 0xA9, + 0xEF, 0x34, 0xA6, 0xDA, 0xCA, 0xC6, 0x26, 0x84, 0x2C, 0x97, 0x75, 0xCB, 0x8D, 0xDE, 0xCE, 0x16, + 0xD3, 0x91, 0xA5, 0x67, 0x10, 0xF8, 0x1A, 0xF9, 0xD4, 0x8B, 0x28, 0x50, 0x49, 0xA6, 0x4F, 0xFF, + 0x31, 0x42, 0x10, 0x47, 0x36, 0xB0, 0xC3, 0x04, 0x5A, 0x62, 0x1A, 0x18, 0x0C, 0x6C, 0x1E, 0xD3, + 0xD8, 0x71, 0xDE, 0x16, 0xC7, 0x31, 0x00, 0xFA, 0xC4, 0x1C, 0x37, 0xC3, 0x74, 0x89, 0xAF, 0xAA, + 0xAB, 0x55, 0x82, 0xCF, 0x1B, 0x0F, 0xFD, 0x93, 0x4C, 0x51, 0x46, 0xF6, 0x20, 0x31, 0x8F, 0x38, + 0x14, 0xE5, 0x14, 0x91, 0x82, 0x68, 0xAA, 0x3E, 0x20, 0xCA, 0xA3, 0x1C, 0x68, 0xDB, 0x6D, 0xE6, + 0xB9, 0x01, 0xD3, 0x63, 0x7B, 0xAB, 0x1F, 0xE5, 0x9D, 0xCC, 0x0F, 0x1E, 0x9A, 0x7B, 0x3A, 0x95, + 0x4B, 0x25, 0xD0, 0xE0, 0xDE, 0x28, 0xAC, 0xDE, 0xA3, 0x1B, 0xC0, 0xF8, 0x28, 0xAE, 0x65, 0x7C, + 0xD8, 0xA4, 0x20, 0xFE, 0x6C, 0x35, 0x3B, 0xAE, 0xE8, 0xDD, 0xB3, 0x55, 0x20, 0x3A, 0xB8, 0xA2, + 0xFB, 0xF6, 0x1C, 0xEA, 0x38, 0x1F, 0x4F, 0x14, 0xFD, 0x23, 0x29, 0x1E, 0xA2, 0x25, 0xC0, 0x0B, + 0x9A, 0xC2, 0xC5, 0x30, 0xC1, 0x59, 0x64, 0x40, 0xDB, 0x83, 0x89, 0x7E, 0x7D, 0xAD, 0x32, 0x3D, + 0x8B, 0x89, 0x38, 0xB2, 0xF8, 0x6F, 0x9C, 0xFA, 0x17, 0x40, 0x6D, 0x83, 0x9C, 0x20, 0x3C, 0x8B, + 0xA1, 0x0F, 0xD8, 0x4A, 0x10, 0x9C, 0xCC, 0xBF, 0x5D, 0xAA, 0x6F, 0x54, 0xC9, 0x13, 0xCA, 0xEA, + 0xA6, 0xB9, 0xD0, 0x01, 0xC4, 0xAF, 0xA9, 0x28, 0x38, 0x60, 0x96, 0x7D, 0xAD, 0x0A, 0xE3, 0xA4, + 0xE6, 0x21, 0x8A, 0x47, 0xE1, 0xEE, 0xB3, 0x33, 0xC2, 0x4A, 0xED, 0x37, 0x80, 0xB7, 0xC7, 0x66, + 0xB3, 0xDC, 0x85, 0xD1, 0x4C, 0x7F, 0x3F, 0xA4, 0xCE, 0xBC, 0x28, 0x06, 0x78, 0x57, 0xF4, 0x49, + 0x82, 0xCD, 0x20, 0xAC, 0xCE, 0xC5, 0x84, 0x0D, 0xF1, 0x77, 0x04, 0xD1, 0xC9, 0xB4, 0x5D, 0xB9, + 0x2E, 0x22, 0x3B, 0xE7, 0x52, 0x70, 0x26, 0x4E, 0x39, 0x64, 0x0B, 0xC2, 0x79, 0xB0, 0xBB, 0x9A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[Keytable[0] * digest[7] & 511]; + uint increment = (uint)header.m_entryCount + digest[header.m_entryCount % 20]; + + for (int i = 0; i != length; ++i) + { + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 45752. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_45752.cs +// + +namespace KeyCMF_045752 +{ + static const BYTE Keytable[] = + { + 0xF5, 0xD0, 0xE7, 0x8D, 0x86, 0xD6, 0x22, 0xA2, 0xA6, 0xEC, 0x4B, 0xCD, 0x72, 0x4A, 0xD4, 0x8B, + 0xC7, 0xE4, 0x5B, 0x55, 0x25, 0xF6, 0xEE, 0xBE, 0xA5, 0x24, 0x1B, 0xFA, 0x50, 0xEF, 0x0C, 0xE7, + 0xA4, 0xA8, 0xE4, 0xF5, 0x97, 0x2B, 0xCF, 0xF6, 0xBB, 0x06, 0x75, 0x6A, 0xF4, 0x61, 0xE4, 0xF2, + 0xCA, 0xBC, 0x7B, 0x23, 0x87, 0x49, 0x99, 0x83, 0x28, 0xFC, 0x88, 0xB8, 0x23, 0x9C, 0xFF, 0xB9, + 0x8B, 0x89, 0x7F, 0x08, 0x42, 0xF5, 0x06, 0xED, 0x5D, 0x7C, 0x98, 0x6B, 0x2E, 0x37, 0xB2, 0xDE, + 0xBD, 0xAB, 0x65, 0x79, 0xAA, 0xDA, 0x70, 0x83, 0x30, 0xA0, 0xA4, 0x4D, 0x68, 0xFF, 0x4B, 0x32, + 0x0F, 0x97, 0x0A, 0x73, 0xDC, 0x77, 0x67, 0x10, 0x89, 0xB6, 0xE7, 0xBE, 0x96, 0xD0, 0x15, 0x24, + 0x13, 0xB6, 0x7F, 0xA8, 0x18, 0xEF, 0x53, 0x83, 0xA0, 0x9E, 0x50, 0x29, 0xE7, 0x5E, 0x5F, 0xAC, + 0x25, 0x11, 0xA2, 0xA2, 0x6D, 0xE2, 0xBB, 0xE6, 0x60, 0x14, 0x25, 0x07, 0xC5, 0xB9, 0xB1, 0x37, + 0x2C, 0x34, 0x6B, 0xC6, 0x95, 0x04, 0x73, 0xE5, 0xD7, 0x01, 0x78, 0x8E, 0x0E, 0xDF, 0x5D, 0x30, + 0xFE, 0x1D, 0x81, 0xC3, 0x53, 0x17, 0xB7, 0x6F, 0xF7, 0x99, 0x6E, 0xB5, 0x19, 0x12, 0xD6, 0x1F, + 0x04, 0x48, 0x82, 0x07, 0x22, 0x71, 0x39, 0x0A, 0x79, 0x1B, 0x5F, 0x6A, 0x4C, 0xED, 0xF4, 0x3E, + 0xC7, 0x84, 0x45, 0x41, 0x5F, 0xAF, 0x78, 0x13, 0xB0, 0xB4, 0x82, 0xD7, 0x21, 0x9C, 0x33, 0x24, + 0x8A, 0x54, 0xF9, 0xC4, 0xC9, 0x1A, 0x1E, 0x56, 0x21, 0x93, 0xEF, 0xFC, 0x1A, 0x5E, 0x2F, 0x68, + 0x74, 0x27, 0x64, 0xEC, 0xBD, 0x1B, 0x0F, 0x94, 0xFD, 0xD7, 0x85, 0x0F, 0x83, 0x6B, 0x6F, 0xAC, + 0xD3, 0x64, 0xFC, 0xD0, 0x6B, 0x4E, 0xB8, 0x86, 0x8A, 0x45, 0xAE, 0x31, 0x55, 0xBA, 0xAF, 0xB6, + 0x50, 0x5C, 0x4E, 0xE4, 0xF4, 0x1A, 0xE8, 0xFC, 0xAD, 0xB6, 0xE6, 0xBF, 0x5F, 0x35, 0x63, 0x1A, + 0xBD, 0xC2, 0x6C, 0xCD, 0x28, 0xEE, 0xB6, 0xA2, 0x6B, 0x7A, 0xD7, 0xBC, 0xF3, 0xC4, 0x9F, 0xD6, + 0x2D, 0xC4, 0xB7, 0xBF, 0xEF, 0x44, 0xFA, 0x3D, 0xA9, 0x70, 0x19, 0x34, 0x32, 0x88, 0xD9, 0x37, + 0x4D, 0x78, 0x2E, 0xCB, 0x7A, 0x11, 0xEF, 0xCD, 0x17, 0xDB, 0xD6, 0x87, 0x3F, 0x75, 0x77, 0xEA, + 0x0A, 0xE1, 0x65, 0x02, 0x91, 0xD1, 0x4C, 0x11, 0x75, 0xF0, 0x35, 0x87, 0xC6, 0xF9, 0x22, 0x47, + 0x15, 0x96, 0xB3, 0x8D, 0xF9, 0xD5, 0x0E, 0x87, 0x7F, 0x47, 0x33, 0x18, 0x1E, 0x75, 0xA3, 0xC1, + 0xDB, 0x32, 0x63, 0x9F, 0xA4, 0xA1, 0x46, 0x4C, 0xB3, 0x3D, 0x44, 0x11, 0x64, 0x34, 0x27, 0x01, + 0xE5, 0x44, 0x0C, 0x16, 0x6A, 0xC7, 0x77, 0xB4, 0x31, 0xF2, 0x44, 0x2A, 0xFD, 0x7B, 0x04, 0xF7, + 0xD4, 0x3D, 0x3C, 0x80, 0x0A, 0x25, 0xC4, 0xBF, 0xE4, 0x34, 0x65, 0x17, 0x18, 0x02, 0x54, 0xA3, + 0xA7, 0x00, 0x40, 0xFE, 0x10, 0xDB, 0x24, 0x69, 0xFD, 0xF8, 0x2E, 0x53, 0xB1, 0x80, 0x5A, 0xF9, + 0x59, 0x2D, 0xA7, 0x51, 0x66, 0xD1, 0x66, 0xFC, 0x7D, 0x15, 0xCD, 0x88, 0x45, 0x9D, 0x66, 0x63, + 0x79, 0xE7, 0x18, 0x10, 0x0B, 0x57, 0x73, 0x1D, 0xD5, 0xDC, 0x3E, 0xA6, 0x84, 0x36, 0xB2, 0xD0, + 0x25, 0x52, 0xBE, 0xFE, 0xE1, 0x77, 0xF0, 0x0B, 0x77, 0x7F, 0xF2, 0xED, 0xB6, 0xD8, 0x9A, 0x32, + 0xA1, 0xA8, 0xAB, 0xC3, 0xEC, 0xE9, 0xFD, 0x5B, 0xF0, 0x4E, 0xCD, 0x3D, 0xA2, 0xBF, 0x71, 0xAC, + 0x09, 0x67, 0x5E, 0x6B, 0x44, 0xA5, 0xC5, 0xEC, 0xBC, 0xC1, 0x23, 0x0B, 0x0C, 0x70, 0x5D, 0xF2, + 0x69, 0x59, 0x7E, 0x6E, 0xED, 0xEF, 0x92, 0xA9, 0x52, 0xBC, 0xCC, 0xEA, 0x97, 0xFD, 0xB4, 0xDD + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(i + kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 46137. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_46137.cs +// + +namespace KeyCMF_046137 +{ + static const BYTE Keytable[] = + { + 0x39, 0x5D, 0xF5, 0x1F, 0x14, 0xB2, 0x36, 0x17, 0x42, 0x84, 0x04, 0xCB, 0xAE, 0xC6, 0xCE, 0xC5, + 0x82, 0xD3, 0xAF, 0x97, 0x5D, 0xF2, 0x8E, 0x6E, 0xDA, 0x1C, 0x86, 0x66, 0xDE, 0x78, 0xA2, 0xFF, + 0xD4, 0xBD, 0x4B, 0xCA, 0x39, 0x48, 0xD9, 0x4B, 0xCA, 0x1E, 0xDB, 0xF9, 0x87, 0xB3, 0xB1, 0x4F, + 0x56, 0x6B, 0x46, 0xFE, 0xD4, 0xF6, 0x5C, 0xEC, 0x03, 0x4A, 0xE2, 0x1D, 0xB4, 0xFA, 0x63, 0x22, + 0x4D, 0x3C, 0xB7, 0x2C, 0xCA, 0xF3, 0x79, 0xF9, 0x93, 0x92, 0xBA, 0x89, 0x0E, 0x0F, 0x98, 0x49, + 0x7A, 0xC6, 0xE0, 0x96, 0x0A, 0xAC, 0x3B, 0xFD, 0x6E, 0x4E, 0xC2, 0x36, 0x1C, 0xA0, 0x4B, 0x18, + 0x9C, 0x74, 0x46, 0x01, 0xCE, 0x75, 0x5F, 0x34, 0xB0, 0x26, 0x61, 0x47, 0xF9, 0xAC, 0xA0, 0xEA, + 0x0D, 0x36, 0x8F, 0x34, 0xA0, 0x06, 0x51, 0x26, 0xA8, 0x74, 0x7E, 0x92, 0xAC, 0x32, 0x27, 0x8C, + 0xE5, 0x41, 0xC8, 0x8F, 0xF2, 0x84, 0x13, 0x91, 0x36, 0x41, 0x3A, 0x2C, 0x24, 0x1E, 0xF0, 0x94, + 0xED, 0xD4, 0xC0, 0xBC, 0x1E, 0x6D, 0x1E, 0x82, 0xB1, 0x57, 0x5C, 0xFA, 0x0B, 0x69, 0xDF, 0xCE, + 0xA4, 0xC0, 0x9E, 0x73, 0x2C, 0xB9, 0xCA, 0xAD, 0x05, 0x3C, 0x9A, 0xFA, 0x23, 0xC1, 0xAB, 0xE2, + 0xF2, 0xF3, 0xAE, 0x1C, 0xF6, 0x6E, 0xD3, 0x79, 0x35, 0x58, 0xA6, 0xF2, 0xC4, 0x1B, 0x57, 0x49, + 0x2E, 0xBE, 0x97, 0x74, 0x0B, 0xB4, 0x66, 0x76, 0x4C, 0xAA, 0xD4, 0x69, 0x01, 0x28, 0x72, 0xA3, + 0x40, 0xB8, 0x9A, 0x85, 0x4A, 0xAD, 0x6C, 0xEC, 0xBA, 0x81, 0x20, 0x7D, 0x2D, 0xB4, 0x49, 0xF4, + 0xDE, 0xCA, 0x56, 0x19, 0xD6, 0xFF, 0x4E, 0x79, 0xF0, 0xDB, 0x2A, 0xFD, 0xB6, 0x11, 0xDC, 0x51, + 0xB4, 0x55, 0x8C, 0xAD, 0xDC, 0xFD, 0xDA, 0x64, 0x64, 0xE2, 0x7D, 0x7E, 0xD2, 0x05, 0xE0, 0xC3, + 0xC2, 0xD4, 0x34, 0x9D, 0xC7, 0xD4, 0x02, 0x5F, 0xED, 0x31, 0x14, 0x19, 0x3A, 0xF9, 0xB7, 0x3E, + 0xE3, 0x6A, 0x40, 0x62, 0x95, 0x1A, 0x05, 0x2C, 0xF9, 0xDC, 0xBD, 0x8C, 0x1F, 0x78, 0xB1, 0x85, + 0x07, 0x50, 0xF6, 0x93, 0xC6, 0x08, 0x97, 0x38, 0xFF, 0x19, 0x36, 0x24, 0x31, 0x55, 0x0B, 0x51, + 0x2F, 0x3B, 0xD3, 0x06, 0xE0, 0xE2, 0xDB, 0x9B, 0x4A, 0xF8, 0x03, 0x6C, 0xBB, 0xCE, 0x4E, 0xDB, + 0x28, 0x64, 0x6F, 0xED, 0x73, 0x02, 0x00, 0xA8, 0xF8, 0x25, 0x1E, 0xC6, 0x4F, 0x56, 0x49, 0xA2, + 0x7D, 0x7C, 0x4A, 0x86, 0x47, 0x74, 0x1A, 0xFE, 0x10, 0xE8, 0xE4, 0x5E, 0x9E, 0x46, 0x6F, 0x1C, + 0x12, 0xA9, 0xE8, 0xA0, 0x53, 0x60, 0xBC, 0xB8, 0xF8, 0xA0, 0xB5, 0x17, 0xAE, 0xE1, 0x4C, 0x68, + 0xAE, 0xE0, 0x3E, 0x49, 0x80, 0x7F, 0xAF, 0xB9, 0xA1, 0xFB, 0x51, 0xBA, 0x70, 0xF0, 0x06, 0xA3, + 0x72, 0xB8, 0xA7, 0xBE, 0xC2, 0x6D, 0xA3, 0x81, 0xA9, 0x64, 0xF0, 0x65, 0x82, 0xD3, 0x74, 0x6D, + 0xA5, 0x03, 0x3A, 0x45, 0x48, 0xDE, 0x68, 0xD0, 0xD8, 0x80, 0x55, 0x1A, 0xEE, 0x9B, 0x3C, 0xED, + 0x90, 0x5E, 0x99, 0x7F, 0x7E, 0xD3, 0x24, 0x56, 0x21, 0x49, 0x29, 0x0F, 0xCD, 0xC7, 0xDA, 0xCB, + 0x1A, 0x0A, 0xFA, 0x69, 0x55, 0xF3, 0x20, 0x9A, 0x86, 0x18, 0x3B, 0xEE, 0xEB, 0x1A, 0x73, 0x4F, + 0x7A, 0x3E, 0xC4, 0x2D, 0xCF, 0x04, 0xEF, 0x3E, 0x63, 0xB8, 0x8F, 0x29, 0x4B, 0x6B, 0x15, 0xBD, + 0xFE, 0x10, 0x4C, 0x07, 0xB1, 0x16, 0x02, 0x92, 0x2B, 0x1F, 0xA5, 0xEE, 0x6B, 0xD3, 0xB9, 0x90, + 0xDD, 0xB2, 0x48, 0x6F, 0xC7, 0x24, 0x45, 0x74, 0xEF, 0x7B, 0xB7, 0xD4, 0x58, 0x5B, 0x5E, 0x50, + 0x4F, 0xAF, 0xA9, 0xCB, 0xAD, 0x7A, 0x7A, 0xDD, 0xD9, 0xB4, 0x14, 0xD7, 0xDB, 0xA8, 0xF5, 0x87 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(i + kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 46510. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_46510.cs +// + +namespace KeyCMF_046510 +{ + static const BYTE Keytable[] = + { + 0x44, 0xFF, 0x01, 0xB0, 0xC1, 0xD5, 0xC9, 0x0B, 0x36, 0x2D, 0xE9, 0x6B, 0x03, 0x7F, 0x0A, 0x5A, + 0x68, 0xB3, 0x1C, 0x67, 0xE6, 0x42, 0xB0, 0x47, 0x57, 0xA0, 0x7D, 0x7D, 0xD4, 0x06, 0x32, 0x04, + 0xB4, 0xF7, 0xB2, 0x88, 0xE0, 0x02, 0x2E, 0xBC, 0x33, 0xFC, 0x84, 0x73, 0xCA, 0x92, 0x85, 0x96, + 0x9C, 0x87, 0x71, 0x01, 0x98, 0x34, 0xC3, 0x32, 0x4D, 0x06, 0x8E, 0x43, 0x65, 0x58, 0xA8, 0x30, + 0x87, 0x1E, 0xDD, 0x68, 0xE9, 0x02, 0xC3, 0xE4, 0x16, 0x2F, 0xEF, 0xB6, 0x41, 0xCB, 0x3E, 0x54, + 0xC9, 0x1A, 0xAB, 0x7D, 0x57, 0x9E, 0xA2, 0xB8, 0x38, 0xEC, 0x08, 0x84, 0xB8, 0x65, 0x7E, 0x77, + 0xB2, 0x4E, 0xB9, 0x84, 0xD3, 0xD3, 0x29, 0x98, 0x16, 0x80, 0x24, 0x55, 0xDC, 0x47, 0x90, 0x39, + 0x02, 0x52, 0x25, 0x9E, 0x84, 0xEC, 0x2B, 0xB4, 0x54, 0xE2, 0xA1, 0x95, 0x9D, 0xD4, 0xE6, 0x73, + 0x10, 0x8E, 0x57, 0x1E, 0xB2, 0xB7, 0x01, 0xC6, 0xDE, 0xA5, 0x89, 0x7D, 0x9E, 0xC0, 0x1A, 0x69, + 0x38, 0xC9, 0xED, 0xBE, 0x24, 0x1D, 0xB3, 0x45, 0x2D, 0x1B, 0xE0, 0x4B, 0x4C, 0x8D, 0x07, 0x2C, + 0x73, 0xEE, 0x2F, 0x5B, 0x2B, 0x74, 0x21, 0x80, 0x84, 0x69, 0xFB, 0x7D, 0x01, 0x8C, 0x95, 0xA5, + 0x6F, 0x7D, 0x09, 0xE0, 0xF8, 0xD1, 0x5B, 0xED, 0x8B, 0x07, 0x77, 0x64, 0x27, 0xCA, 0xA6, 0xD8, + 0x82, 0xB0, 0xD8, 0xA9, 0xAC, 0x93, 0x42, 0xCC, 0xB4, 0xB9, 0xC9, 0xD4, 0x97, 0xDC, 0x95, 0xF6, + 0x3B, 0x8C, 0xB3, 0xA6, 0x7C, 0xA5, 0xD4, 0x91, 0x6B, 0x3D, 0xE7, 0xA2, 0xC5, 0xA5, 0xF9, 0x45, + 0xC7, 0x23, 0xF0, 0x65, 0x27, 0xDF, 0x37, 0x87, 0xCF, 0xC8, 0xAB, 0x57, 0x64, 0xA7, 0xC4, 0x8B, + 0x4C, 0xBA, 0x2E, 0x0F, 0xFF, 0x44, 0xB5, 0xBA, 0xF0, 0x0B, 0x43, 0x1E, 0xF7, 0x8A, 0x68, 0xDC, + 0x5D, 0xB6, 0x83, 0x27, 0x30, 0xF2, 0xAC, 0x25, 0xCA, 0x07, 0xBB, 0x25, 0x2B, 0xC1, 0x2D, 0xE0, + 0x00, 0x8A, 0xF1, 0x46, 0xE1, 0x6F, 0x41, 0xF2, 0x62, 0x8F, 0xA3, 0x88, 0x55, 0xF7, 0x0A, 0x93, + 0xF7, 0x7C, 0x04, 0x1E, 0x26, 0xD6, 0x20, 0x5F, 0x7B, 0xD7, 0x43, 0x70, 0xB2, 0x35, 0xD4, 0x67, + 0xAD, 0x37, 0x58, 0x1F, 0x5F, 0xA9, 0x86, 0xCF, 0x11, 0x23, 0xE0, 0x52, 0xA3, 0x5B, 0x21, 0x96, + 0xF5, 0xF6, 0xE7, 0x14, 0x35, 0x3B, 0xFF, 0x81, 0x2E, 0x26, 0x92, 0x1C, 0x18, 0x69, 0x8F, 0x2B, + 0x31, 0xA4, 0x56, 0x34, 0xE1, 0xEA, 0x1F, 0x52, 0x21, 0x2F, 0x23, 0xDF, 0x52, 0xC8, 0x39, 0x00, + 0xB3, 0x31, 0x9E, 0x2A, 0x52, 0x1E, 0xE7, 0xE6, 0xE3, 0x79, 0xAB, 0x42, 0x16, 0x27, 0x73, 0xBC, + 0x79, 0x4A, 0x4E, 0xB8, 0x61, 0x01, 0xCD, 0xA1, 0xAC, 0x36, 0x26, 0x1E, 0x45, 0x3D, 0x12, 0x4D, + 0x85, 0xE8, 0x6E, 0x20, 0xAF, 0x71, 0xB3, 0x7F, 0xFB, 0xFF, 0xD4, 0x45, 0x60, 0x4A, 0x4A, 0x52, + 0x6A, 0xE4, 0xD7, 0x32, 0xF4, 0x2C, 0xCA, 0xC3, 0x63, 0x44, 0x75, 0xE3, 0x90, 0x76, 0x30, 0xE9, + 0xE7, 0x6D, 0x03, 0xD9, 0x16, 0xA1, 0x96, 0xC0, 0x8D, 0xE7, 0xE6, 0x59, 0xBC, 0xC2, 0xB1, 0x02, + 0xE5, 0xBC, 0x4E, 0xF7, 0x14, 0xEB, 0x34, 0x58, 0x95, 0xFD, 0xA0, 0xD1, 0x3B, 0x56, 0x0A, 0x61, + 0x84, 0x07, 0x6A, 0x26, 0x24, 0x0A, 0xF7, 0x72, 0xA9, 0x73, 0xB7, 0x5F, 0x2E, 0xAD, 0x8E, 0x0F, + 0x6E, 0x27, 0x66, 0x2C, 0xDC, 0x86, 0x04, 0xDD, 0xC8, 0x28, 0xED, 0xA3, 0x42, 0xD7, 0x8D, 0xD3, + 0x68, 0x35, 0x67, 0x28, 0x50, 0xCF, 0x31, 0xB9, 0x5F, 0x7D, 0xA3, 0xB7, 0xCD, 0xA9, 0x38, 0x9D, + 0x5E, 0xE7, 0x85, 0xBD, 0xBA, 0xD9, 0x52, 0xE3, 0x1B, 0x21, 0xBF, 0x96, 0xE5, 0xC5, 0x8B, 0x2F + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 2u * digest[1]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - 73 , SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 46823. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_46823.cs +// + +namespace KeyCMF_046823 +{ + static const BYTE Keytable[] = + { + 0x1D, 0xA5, 0x40, 0x68, 0x54, 0xFA, 0x6B, 0xC9, 0x5A, 0x20, 0xB5, 0xA3, 0x6F, 0xB8, 0xB4, 0x87, + 0x14, 0x34, 0xCA, 0x28, 0x54, 0x00, 0xD6, 0x91, 0x16, 0x4F, 0xD4, 0x11, 0x43, 0x96, 0x89, 0x32, + 0x80, 0x62, 0x33, 0x62, 0x09, 0xA9, 0x17, 0x76, 0xB7, 0xF5, 0xEF, 0x73, 0x95, 0xA6, 0xFB, 0x19, + 0xA4, 0x27, 0xBB, 0x54, 0xE8, 0xE6, 0xD0, 0x0B, 0x4D, 0xCE, 0x3E, 0x8E, 0x40, 0xD2, 0x17, 0xE3, + 0x4E, 0x77, 0xE3, 0x79, 0x1C, 0x28, 0xA1, 0xF1, 0x9A, 0x66, 0x97, 0x40, 0xE8, 0xED, 0xE2, 0xE3, + 0xCA, 0xE5, 0xA8, 0xA3, 0x72, 0x62, 0xA1, 0xF6, 0xBE, 0x2E, 0xCA, 0xA8, 0xE4, 0xFA, 0xA8, 0x0E, + 0x60, 0x82, 0xCF, 0x7B, 0xE5, 0xF2, 0x29, 0xC7, 0xDC, 0x90, 0xC4, 0xE8, 0x09, 0x79, 0xBA, 0x2C, + 0x8A, 0x49, 0xA2, 0xFA, 0x3A, 0xCA, 0x1C, 0xEC, 0x5D, 0xEB, 0xC9, 0x9A, 0xD8, 0x11, 0x73, 0x4C, + 0x04, 0xF7, 0x13, 0x29, 0x71, 0xAB, 0x5E, 0x74, 0xFA, 0xAC, 0xB6, 0x9A, 0x38, 0xAA, 0xE5, 0x86, + 0xD4, 0x3D, 0x12, 0x82, 0x45, 0xD1, 0x76, 0xB2, 0xCC, 0xA7, 0x86, 0xF6, 0x30, 0x59, 0x5B, 0x1A, + 0xED, 0x6A, 0x2F, 0x65, 0xB3, 0x62, 0x6E, 0x32, 0x7D, 0x82, 0x95, 0xB8, 0x2C, 0xBF, 0x7E, 0x5C, + 0x76, 0x45, 0x40, 0x6D, 0x15, 0x4A, 0x77, 0xDA, 0xFD, 0x15, 0x56, 0x0A, 0xBA, 0x62, 0x9E, 0x84, + 0xA8, 0x30, 0x5D, 0xDD, 0x1C, 0xB8, 0x83, 0x2F, 0x2D, 0xD0, 0x08, 0x5C, 0x1F, 0x94, 0x6C, 0xE5, + 0x5B, 0xDC, 0xDE, 0x8D, 0x42, 0x88, 0xC7, 0xEE, 0xC6, 0xBD, 0xEF, 0xF6, 0x02, 0xB1, 0x78, 0x0A, + 0xC7, 0xF0, 0xA4, 0x83, 0xE8, 0xEA, 0x10, 0x8A, 0xEA, 0xD3, 0x9E, 0xA0, 0xF5, 0x0D, 0x60, 0x2D, + 0x4B, 0xE4, 0xE4, 0x80, 0x01, 0x84, 0x60, 0x27, 0x1E, 0x14, 0xB8, 0xF4, 0xAC, 0x2D, 0x7C, 0xB2, + 0x41, 0x81, 0x2F, 0x55, 0x39, 0x64, 0x16, 0xB4, 0x5D, 0x60, 0x24, 0x80, 0x74, 0x76, 0x83, 0x15, + 0x18, 0xA0, 0xDD, 0xF0, 0x29, 0x3E, 0xF9, 0xD1, 0xC5, 0x22, 0x4A, 0x23, 0x38, 0x8A, 0x02, 0x27, + 0xAF, 0xB2, 0x5E, 0x8B, 0xAC, 0x69, 0x81, 0xF0, 0xFA, 0x1D, 0x76, 0xE2, 0xF0, 0x67, 0x53, 0x51, + 0x54, 0xBF, 0x01, 0x5B, 0x2E, 0x26, 0x55, 0x88, 0x91, 0x3F, 0xBC, 0x90, 0x81, 0xE8, 0xAF, 0x02, + 0xAF, 0xB1, 0x5C, 0xB9, 0x55, 0xB5, 0x33, 0x58, 0xCB, 0x15, 0xBB, 0xF8, 0xF5, 0x9B, 0x15, 0xD7, + 0x42, 0xC3, 0x34, 0xEA, 0x24, 0x71, 0xA3, 0xE1, 0xEA, 0x81, 0xD5, 0xDA, 0x04, 0x59, 0xC7, 0x88, + 0x12, 0x97, 0x60, 0x1F, 0xD5, 0xFF, 0xDB, 0x2C, 0xBC, 0x98, 0x41, 0xBF, 0xC7, 0x8B, 0x06, 0xA3, + 0x6B, 0x3F, 0x79, 0xE5, 0xC9, 0x92, 0xC9, 0x82, 0x2E, 0x91, 0x6E, 0x0E, 0x81, 0xCD, 0x88, 0xA6, + 0x50, 0x9E, 0x25, 0xF5, 0x68, 0x9D, 0x43, 0xC8, 0x6E, 0xBD, 0xC6, 0xD6, 0x29, 0x80, 0x22, 0x0C, + 0x95, 0xBD, 0xBB, 0x56, 0xFC, 0xAA, 0x09, 0xEF, 0xCB, 0x60, 0xC9, 0x00, 0x6C, 0x0E, 0x07, 0x6C, + 0x18, 0x1F, 0x62, 0xF9, 0x95, 0x5F, 0x30, 0xA7, 0x55, 0x72, 0xD2, 0x6A, 0x55, 0xEB, 0xBA, 0x77, + 0xF0, 0xC9, 0x79, 0xF3, 0x03, 0x6D, 0xDD, 0xDA, 0x96, 0x8E, 0xD5, 0xC1, 0xC3, 0xBC, 0x79, 0xBC, + 0xFB, 0x4B, 0x42, 0x1C, 0x36, 0xD6, 0x5C, 0xD1, 0x67, 0xD2, 0x35, 0xCB, 0xDA, 0xF5, 0xC2, 0x86, + 0x1E, 0xA2, 0x50, 0x5D, 0x31, 0x74, 0x0D, 0xF3, 0x0F, 0x02, 0x98, 0x6B, 0x3C, 0xC9, 0x7E, 0x23, + 0xF3, 0xEA, 0x15, 0x66, 0x6F, 0xD9, 0xDA, 0x15, 0xA6, 0x32, 0x70, 0x5E, 0xEF, 0x60, 0x22, 0x7F, + 0xFF, 0x0E, 0xC8, 0x59, 0x91, 0xAF, 0x9C, 0x02, 0xEB, 0x75, 0xD8, 0xBF, 0xE2, 0xA8, 0xF3, 0xF3 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length * header.m_buildVersion; + uint increment = kidx % 13; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx + 0x16666D63 , SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 46836. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_46836.cs +// + +namespace KeyCMF_046836 +{ + static const BYTE Keytable[] = + { + 0x08, 0xAC, 0x86, 0x79, 0x40, 0xB6, 0xA1, 0xC1, 0xD3, 0x5B, 0x35, 0x1A, 0xDD, 0x4A, 0x34, 0x22, + 0x38, 0x1A, 0x8B, 0x09, 0x64, 0xB9, 0x1D, 0x7B, 0xD8, 0xA8, 0x06, 0x1E, 0x91, 0xC7, 0x6F, 0xEA, + 0x84, 0x6E, 0x51, 0x79, 0x39, 0xCF, 0xE6, 0x61, 0x7A, 0x14, 0xEA, 0x47, 0x0D, 0x0F, 0xAA, 0x62, + 0x15, 0x2C, 0x42, 0xFE, 0x68, 0x7C, 0x7E, 0x87, 0xD2, 0xFD, 0x91, 0x68, 0xFF, 0x85, 0xC0, 0xEC, + 0x9F, 0xDE, 0x88, 0x44, 0xFB, 0x52, 0x67, 0xA5, 0xC7, 0x3F, 0x6C, 0xA4, 0x59, 0x83, 0x82, 0x3B, + 0x1D, 0x96, 0xC7, 0xF0, 0x58, 0x8A, 0xA5, 0x57, 0xD7, 0x44, 0x7E, 0x7D, 0x5D, 0x4E, 0x21, 0x52, + 0x53, 0x5C, 0xCA, 0x4E, 0x5A, 0x1B, 0xBF, 0x7F, 0x59, 0x55, 0x08, 0xFE, 0xE5, 0x55, 0x7B, 0x22, + 0xAD, 0xC2, 0x22, 0x0A, 0x3D, 0xC5, 0x91, 0xA4, 0x30, 0xCF, 0xA7, 0xC0, 0x2E, 0x79, 0x9B, 0x80, + 0x86, 0xF1, 0xC5, 0xFC, 0xFD, 0xAE, 0x8E, 0x3A, 0x80, 0x5C, 0x9F, 0x60, 0xB7, 0x66, 0x14, 0x11, + 0x4A, 0xF9, 0x0D, 0x72, 0x76, 0xC7, 0x35, 0xCC, 0xCC, 0x76, 0x11, 0x0C, 0x69, 0xED, 0xE6, 0xC8, + 0x4F, 0xBE, 0x9C, 0x47, 0x62, 0x7E, 0x1E, 0x34, 0x95, 0xE8, 0x52, 0xF6, 0x09, 0x91, 0xE3, 0x3E, + 0xB5, 0x43, 0x43, 0xFF, 0xB0, 0x17, 0xEA, 0x24, 0xF7, 0xEA, 0xF9, 0x66, 0x56, 0x25, 0x72, 0x2B, + 0x49, 0x30, 0x23, 0xCE, 0x4E, 0x37, 0x75, 0x52, 0xE9, 0x4F, 0x29, 0x05, 0xFD, 0x6F, 0x90, 0x55, + 0x9E, 0x62, 0xD4, 0x0C, 0x81, 0xF7, 0xE1, 0x30, 0x49, 0xF1, 0x48, 0xC3, 0xEB, 0x01, 0x9F, 0x3E, + 0x24, 0x8C, 0x56, 0x21, 0xB1, 0x74, 0x58, 0xD2, 0xC2, 0xD3, 0xA4, 0xC2, 0x25, 0xBF, 0x7B, 0x0D, + 0x39, 0x43, 0x3E, 0x0F, 0x70, 0x88, 0x13, 0x13, 0x75, 0xB5, 0x28, 0x92, 0x80, 0x5A, 0x13, 0x1D, + 0x7D, 0xEC, 0x1B, 0x9B, 0x8F, 0x80, 0xF5, 0xFA, 0x20, 0xCA, 0x55, 0x40, 0x0B, 0xBB, 0x3D, 0xE0, + 0xAB, 0xEF, 0x25, 0x8E, 0xF7, 0x08, 0x2F, 0x9C, 0x7C, 0x3A, 0xD8, 0x8E, 0xDD, 0x05, 0xE8, 0x72, + 0x48, 0x96, 0xED, 0xA8, 0x05, 0x4B, 0x70, 0x07, 0x51, 0x7D, 0x77, 0x63, 0x3F, 0xA0, 0x47, 0x98, + 0x0F, 0x07, 0xA5, 0x9A, 0x61, 0x11, 0x83, 0x64, 0xF9, 0x2B, 0x43, 0xA4, 0x68, 0x88, 0x55, 0xFE, + 0xD0, 0x26, 0xCE, 0xAA, 0xD9, 0xDA, 0x58, 0xB7, 0xC7, 0x52, 0xBF, 0x33, 0x94, 0x6A, 0x86, 0x60, + 0x9E, 0xD1, 0xB6, 0x57, 0x2C, 0x51, 0xB5, 0xB0, 0x95, 0x72, 0xE5, 0x15, 0xC6, 0x15, 0xC4, 0xF8, + 0xDF, 0xF3, 0x47, 0x79, 0xC7, 0xC2, 0xE1, 0x42, 0xEA, 0x58, 0x67, 0xEB, 0xFA, 0x01, 0xBA, 0x10, + 0xF6, 0x77, 0xC3, 0x52, 0x5B, 0x6F, 0xC8, 0xFA, 0xEF, 0x3D, 0xAF, 0x05, 0x99, 0x6A, 0x3A, 0xB8, + 0x52, 0x00, 0x7E, 0x44, 0x24, 0x3A, 0xF0, 0xA1, 0x37, 0xB5, 0xC1, 0xC8, 0x8B, 0x1D, 0x29, 0x27, + 0x62, 0x73, 0x64, 0x91, 0xEF, 0x59, 0x11, 0x18, 0x62, 0xDC, 0x88, 0x43, 0x79, 0xFC, 0xCD, 0x88, + 0x6E, 0x01, 0xAE, 0x80, 0x5A, 0xBB, 0xB4, 0xA1, 0x41, 0x59, 0xFD, 0xA9, 0x44, 0x57, 0xA7, 0xD1, + 0x22, 0xB6, 0xB7, 0x21, 0xF7, 0xEE, 0x6E, 0x9F, 0x29, 0x6C, 0x96, 0x6D, 0xDF, 0x3D, 0xC5, 0x4C, + 0x90, 0x85, 0x2C, 0xF2, 0x85, 0x90, 0x0D, 0x9F, 0x69, 0xF9, 0x08, 0x85, 0xD8, 0x41, 0x88, 0xF8, + 0x7F, 0xF1, 0x7C, 0x5E, 0xDA, 0xDD, 0xE7, 0xC0, 0xCE, 0x38, 0x0F, 0x83, 0x28, 0x1E, 0x7C, 0x55, + 0xF3, 0x55, 0x7A, 0x2F, 0x15, 0x8D, 0xCE, 0x0B, 0x91, 0xF1, 0x0A, 0xBD, 0x69, 0x2B, 0x3D, 0xE0, + 0x77, 0xAB, 0x03, 0x0D, 0x99, 0xC8, 0xD5, 0xA3, 0xD8, 0x95, 0x47, 0xB9, 0xA3, 0x65, 0x21, 0xB9 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)(digest[7] + (ushort) header.m_dataCount) & 511; + uint increment = (uint)header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 47161. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_47161.cs +// + +namespace KeyCMF_047161 +{ + static const BYTE Keytable[] = + { + 0x96, 0x78, 0x53, 0x56, 0x19, 0xE4, 0xAE, 0x30, 0x60, 0xD3, 0xD1, 0x8A, 0x74, 0x91, 0xC8, 0xA6, + 0x7A, 0xF2, 0xEA, 0xB3, 0xD9, 0x68, 0xFF, 0xC0, 0xCF, 0xEB, 0x93, 0x1D, 0xBE, 0x85, 0x54, 0x3A, + 0x12, 0x3A, 0xDA, 0xDC, 0x9E, 0xBD, 0x17, 0x3E, 0xC8, 0xF7, 0xBC, 0x94, 0x14, 0x8E, 0x43, 0xA0, + 0xB4, 0x57, 0x4C, 0x7A, 0xFD, 0x0F, 0x91, 0x82, 0x52, 0x76, 0x7C, 0x5D, 0xF1, 0xA3, 0x7A, 0x2C, + 0x35, 0xF1, 0xF7, 0x27, 0x11, 0x80, 0x1C, 0x1D, 0x23, 0xB2, 0x3F, 0x55, 0xEC, 0xAC, 0x72, 0xD7, + 0xB8, 0x34, 0xAF, 0x91, 0x67, 0xCF, 0x87, 0x66, 0x63, 0x0B, 0xBE, 0xB2, 0x21, 0x0C, 0xD1, 0x94, + 0x98, 0x77, 0xF7, 0xFF, 0xF4, 0x91, 0xFF, 0xCB, 0x80, 0xF7, 0x70, 0x71, 0xB8, 0x7A, 0x92, 0xCA, + 0x8A, 0xEB, 0x58, 0xB4, 0x0E, 0x61, 0x4B, 0x73, 0x62, 0xED, 0xF3, 0x5F, 0xF9, 0x4F, 0x03, 0x16, + 0x44, 0x0D, 0xA8, 0x45, 0x84, 0xA2, 0xCF, 0x36, 0x0C, 0xE5, 0xE0, 0xD8, 0x95, 0x46, 0x6D, 0x6B, + 0xDB, 0xD1, 0x42, 0x2E, 0xDC, 0x79, 0xDB, 0x11, 0x9E, 0xD7, 0x8D, 0x39, 0x4B, 0x24, 0x47, 0x44, + 0x89, 0xA3, 0x2B, 0x64, 0xB7, 0x28, 0xB8, 0x69, 0x4C, 0x84, 0x48, 0x55, 0xEE, 0x34, 0x78, 0xDA, + 0x32, 0x7A, 0x54, 0xC2, 0x55, 0x4A, 0xF5, 0xFC, 0x36, 0x4F, 0x31, 0x01, 0xCC, 0xC0, 0x05, 0xDC, + 0x92, 0x3A, 0x58, 0x18, 0x15, 0xCD, 0x49, 0xF8, 0x7A, 0x2A, 0x2E, 0xCD, 0x01, 0x81, 0x12, 0xE3, + 0x42, 0x4D, 0x18, 0xC3, 0x68, 0x31, 0xC4, 0x32, 0xC3, 0x72, 0x48, 0x72, 0x61, 0x0B, 0x99, 0xAB, + 0x7C, 0x3D, 0xFE, 0x80, 0xC5, 0x84, 0x66, 0x30, 0xF5, 0x71, 0xD5, 0x7C, 0xFF, 0xAF, 0x83, 0x1F, + 0xB6, 0x14, 0xB4, 0x79, 0x0F, 0x3E, 0xA9, 0x5F, 0xDF, 0xCD, 0xCF, 0xF0, 0x56, 0xAA, 0x21, 0xA0, + 0xA8, 0xF5, 0x4E, 0x3F, 0x56, 0xF7, 0x14, 0x07, 0xDD, 0xC1, 0x7C, 0x52, 0xF3, 0xE2, 0x95, 0x76, + 0xB4, 0x87, 0x34, 0xA8, 0x63, 0x0C, 0x94, 0xA2, 0x13, 0x2C, 0xDD, 0x1D, 0xA5, 0x18, 0xA9, 0x79, + 0x09, 0x63, 0x06, 0x64, 0x00, 0xEC, 0x2A, 0xE0, 0x65, 0x4D, 0x8C, 0x12, 0x6C, 0xB8, 0xF1, 0x8B, + 0xCC, 0xE0, 0x06, 0xB6, 0xC1, 0x02, 0x83, 0xE9, 0x1E, 0xA7, 0xB6, 0x10, 0x20, 0xF4, 0x0B, 0x74, + 0x7F, 0x3D, 0x37, 0x36, 0x7D, 0xFF, 0xA6, 0x78, 0xCE, 0x04, 0x03, 0x16, 0x62, 0xE2, 0x06, 0x30, + 0x44, 0x7C, 0x15, 0x27, 0x96, 0x7C, 0xA9, 0xB8, 0x25, 0xA3, 0xCF, 0x32, 0xC0, 0x9E, 0xE5, 0x30, + 0x33, 0x7E, 0x7B, 0x4D, 0x0E, 0xD2, 0x34, 0xFB, 0xA4, 0x2C, 0x01, 0x12, 0xC0, 0x27, 0x5F, 0x56, + 0x81, 0x1E, 0xA7, 0x05, 0x5A, 0x4E, 0x9C, 0x05, 0xED, 0x4F, 0x3E, 0x53, 0x60, 0xD0, 0xBA, 0xA0, + 0xBF, 0x4A, 0x34, 0xF4, 0x83, 0x07, 0xBA, 0x40, 0x89, 0xDB, 0xBC, 0x66, 0x2A, 0x17, 0x8D, 0xFB, + 0x0E, 0xBB, 0xD4, 0x36, 0xF2, 0x26, 0xE1, 0x49, 0x1E, 0x60, 0x00, 0xE1, 0x17, 0xC7, 0x8F, 0xD5, + 0x29, 0x33, 0x8F, 0x1E, 0x03, 0xC9, 0x92, 0x14, 0x5D, 0x75, 0x7D, 0x64, 0xBA, 0x19, 0xF1, 0x60, + 0xEC, 0x84, 0x88, 0x89, 0x5D, 0xC5, 0x95, 0x4E, 0x6D, 0x8B, 0xBF, 0xCE, 0x28, 0x56, 0x27, 0xB4, + 0x24, 0x81, 0x5B, 0xEE, 0xBE, 0x4E, 0xD2, 0x21, 0x29, 0xE5, 0x9D, 0x2B, 0xB8, 0x3D, 0x7F, 0x09, + 0x52, 0xDB, 0xF0, 0x51, 0x3A, 0x40, 0xFD, 0x5C, 0xCE, 0x1F, 0x16, 0x3B, 0x16, 0x39, 0xF9, 0x21, + 0x3B, 0xBD, 0x0F, 0xAE, 0x7C, 0xCC, 0x60, 0xA4, 0x40, 0x3A, 0x8D, 0xD8, 0xE0, 0x48, 0x44, 0xB5, + 0x55, 0x2B, 0x30, 0xAD, 0x99, 0xB6, 0x0B, 0xEB, 0x65, 0x22, 0x4C, 0x91, 0x08, 0xAD, 0xF8, 0x4A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 57; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 47452. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_47452.cs +// + +namespace KeyCMF_047452 +{ + static const BYTE Keytable[] = + { + 0xD7, 0x4E, 0x89, 0x5A, 0x94, 0xF6, 0x16, 0x6D, 0xCC, 0xDB, 0x37, 0x3D, 0xCB, 0xBD, 0x61, 0xDE, + 0x54, 0x68, 0xEE, 0x88, 0x41, 0xC6, 0xA4, 0x0F, 0x3F, 0xCE, 0xA3, 0x97, 0xC3, 0x90, 0xF4, 0x45, + 0x37, 0x9E, 0x93, 0xCC, 0xFF, 0xA4, 0x24, 0xB6, 0x43, 0x1D, 0xED, 0xF3, 0xAC, 0x05, 0x7B, 0x44, + 0xC8, 0x8E, 0xB2, 0xDF, 0xA1, 0x9A, 0x65, 0x23, 0x6A, 0x75, 0x1B, 0xE7, 0xB0, 0x04, 0x25, 0x0D, + 0x0C, 0x93, 0x12, 0x1C, 0x1D, 0x81, 0x3F, 0xA5, 0x09, 0x52, 0x8D, 0x7F, 0x31, 0xC9, 0xB5, 0x96, + 0x7E, 0x4E, 0x90, 0x9E, 0x89, 0x1D, 0x3C, 0x63, 0x6F, 0xD0, 0xD1, 0x83, 0x3F, 0x8E, 0x39, 0x33, + 0x3C, 0xC7, 0xDD, 0xD9, 0xBC, 0x3F, 0xFE, 0x58, 0xB3, 0x84, 0xCB, 0x63, 0xA7, 0x7C, 0xCC, 0xCF, + 0x31, 0x9A, 0x8C, 0x69, 0xD5, 0x98, 0x7F, 0x49, 0x6B, 0xAB, 0x16, 0x44, 0x5A, 0xD0, 0x8E, 0x5F, + 0x6A, 0xEA, 0x70, 0x6B, 0xB4, 0x03, 0x7A, 0x3D, 0x9E, 0x40, 0xFE, 0x09, 0x42, 0xF8, 0xB4, 0x28, + 0x91, 0x9B, 0x16, 0xF0, 0xE0, 0xD0, 0x68, 0x41, 0xE1, 0xB0, 0x76, 0xD1, 0x7B, 0xBC, 0x70, 0x69, + 0xE4, 0xDB, 0x77, 0xAF, 0x32, 0xE4, 0xD6, 0x78, 0x24, 0xB5, 0x91, 0xA2, 0xC8, 0x95, 0x40, 0x43, + 0xC7, 0x1F, 0xF7, 0xF8, 0xF2, 0xB1, 0xA1, 0x7B, 0xD6, 0x83, 0xCB, 0x1E, 0x72, 0xEE, 0x1A, 0xFD, + 0x0A, 0xF9, 0xB0, 0x58, 0xD6, 0x64, 0xFA, 0x95, 0x87, 0x91, 0xB6, 0x2A, 0x02, 0x28, 0x12, 0x8F, + 0xE5, 0x22, 0x83, 0xCC, 0x9B, 0x2C, 0xDD, 0x23, 0xC7, 0xC5, 0x1D, 0xC6, 0x46, 0x5F, 0x5B, 0x65, + 0xAC, 0x64, 0x3A, 0xA3, 0x3A, 0x3A, 0xEB, 0x84, 0x09, 0xF7, 0xEA, 0x4F, 0x1D, 0xF5, 0x0C, 0x28, + 0xD2, 0xEB, 0xF9, 0xFC, 0xE6, 0xFA, 0x3B, 0x14, 0x8F, 0x66, 0xAA, 0x8E, 0x6A, 0xD9, 0x4A, 0xFD, + 0x9A, 0x29, 0x8D, 0x0D, 0x34, 0x37, 0x7A, 0xBA, 0xDD, 0xF1, 0x7D, 0xBD, 0xD8, 0x58, 0x2B, 0xB7, + 0xB5, 0x8D, 0xB9, 0xB0, 0xDA, 0x52, 0x56, 0xC1, 0xA9, 0x52, 0x1B, 0x64, 0x5F, 0x0B, 0xE1, 0x6B, + 0x8F, 0x2F, 0x99, 0xC4, 0x19, 0xC7, 0x2F, 0x9C, 0x54, 0x24, 0x57, 0xE3, 0x92, 0xB1, 0xA1, 0xD7, + 0xC2, 0x16, 0x50, 0x96, 0x3A, 0xE2, 0x59, 0x88, 0x90, 0x3C, 0xAA, 0x06, 0xE3, 0x92, 0x49, 0x0E, + 0xFA, 0x81, 0xB9, 0x59, 0x05, 0xAC, 0x21, 0x3F, 0x49, 0xA1, 0xA9, 0xD1, 0x74, 0x65, 0x29, 0x7A, + 0x60, 0xBE, 0x1E, 0x31, 0x5B, 0x37, 0x51, 0xE8, 0xC0, 0xA5, 0x90, 0x8F, 0x31, 0x48, 0x3A, 0x2D, + 0x26, 0xFF, 0xC0, 0xC6, 0x84, 0xEE, 0xAD, 0x3F, 0xB4, 0xA6, 0xAD, 0x1F, 0xF0, 0xCA, 0x1B, 0x02, + 0x5D, 0x79, 0x6A, 0x1E, 0xE7, 0x71, 0xCA, 0x93, 0x25, 0x46, 0xB5, 0x26, 0xCC, 0x67, 0x48, 0x0E, + 0x95, 0xAA, 0x04, 0x3B, 0x76, 0x73, 0x41, 0x19, 0x04, 0x1B, 0xEA, 0x2E, 0x9F, 0x08, 0x0A, 0xB5, + 0xF8, 0xA9, 0xFE, 0x88, 0x26, 0x3E, 0x04, 0x9B, 0xE5, 0x56, 0x30, 0x27, 0x50, 0xFC, 0x91, 0x3F, + 0x22, 0xE9, 0xDD, 0xC5, 0x2D, 0x3E, 0x36, 0xB3, 0x71, 0x5F, 0x30, 0x04, 0x2D, 0x93, 0x57, 0x78, + 0x0F, 0xA0, 0x74, 0x9C, 0x02, 0x8B, 0x9D, 0x03, 0x3C, 0x98, 0x78, 0x5B, 0x00, 0x76, 0xA1, 0xFD, + 0x87, 0xDB, 0xFE, 0xDD, 0x1F, 0x29, 0xC2, 0x31, 0xAC, 0x2A, 0xF7, 0x84, 0x6A, 0xF4, 0x39, 0x49, + 0xA4, 0x7A, 0x3A, 0x7B, 0xD6, 0x77, 0xA9, 0xE5, 0x40, 0x50, 0x36, 0x40, 0xE7, 0x9C, 0xDD, 0x3A, + 0x14, 0x45, 0x26, 0xBB, 0x67, 0xBA, 0x33, 0xDB, 0x8A, 0x87, 0xAC, 0x6E, 0x10, 0x2E, 0x9D, 0x4A, + 0x6A, 0x10, 0x44, 0x63, 0xBA, 0xEA, 0x53, 0x93, 0xF8, 0xCB, 0xCD, 0xC4, 0x1B, 0x12, 0xBE, 0x75 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)(digest[7] + (ushort)header.m_dataCount) & 511; + uint increment = (uint)header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 47946. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_47946.cs +// + +namespace KeyCMF_047946 +{ + static const BYTE Keytable[] = + { + 0x95, 0x14, 0xA3, 0x79, 0xDC, 0x50, 0x66, 0x5D, 0x3B, 0xAC, 0x5A, 0xE0, 0x35, 0xD8, 0xF1, 0x0D, + 0x91, 0x49, 0x84, 0x39, 0xAF, 0x64, 0xAC, 0x8F, 0xE6, 0xAC, 0x74, 0x43, 0xD5, 0xFF, 0x3D, 0xD6, + 0x97, 0x56, 0x13, 0x41, 0xE8, 0x81, 0x54, 0x44, 0xB0, 0xAA, 0xE0, 0x39, 0x61, 0x9E, 0xD3, 0x00, + 0xDC, 0x33, 0x7D, 0x8B, 0x7F, 0x50, 0xC5, 0xBA, 0x98, 0xFD, 0xF9, 0x89, 0xDF, 0x10, 0x76, 0x84, + 0x8A, 0x04, 0x35, 0xE9, 0x3A, 0x91, 0x09, 0x38, 0x56, 0x2B, 0xB1, 0xBA, 0x07, 0xE2, 0x26, 0x19, + 0xD8, 0x1A, 0xB7, 0x32, 0x61, 0xFC, 0x4D, 0x6E, 0xD4, 0x25, 0x00, 0x73, 0xE6, 0x71, 0x0D, 0x49, + 0xBC, 0xF0, 0x6B, 0x35, 0x06, 0xBC, 0x23, 0xF4, 0x00, 0x28, 0x0D, 0x67, 0xF0, 0xD7, 0x7D, 0x70, + 0x18, 0x4D, 0xCE, 0x54, 0x7A, 0x0F, 0x9C, 0x70, 0xB1, 0x4C, 0x36, 0xB3, 0x35, 0x76, 0x06, 0x79, + 0xF5, 0x57, 0x78, 0x3B, 0x57, 0x41, 0x83, 0xFD, 0x38, 0x6B, 0xE4, 0x17, 0x92, 0x19, 0x07, 0x01, + 0x6C, 0xE0, 0xD7, 0xCA, 0x51, 0xE7, 0x2C, 0x0E, 0x53, 0x00, 0x86, 0x6C, 0xED, 0x8A, 0x88, 0xBE, + 0xE7, 0x21, 0xAC, 0x6C, 0x03, 0xD9, 0x45, 0xD1, 0x17, 0x40, 0xCD, 0xC0, 0x4B, 0xF0, 0xBD, 0x0F, + 0x55, 0x8B, 0xDF, 0x3E, 0x4D, 0x4E, 0x11, 0x1D, 0xC2, 0xBF, 0xF9, 0x20, 0xF9, 0xF7, 0x2D, 0x3B, + 0xB8, 0x8B, 0xB3, 0x86, 0x94, 0xAF, 0x03, 0x80, 0xFC, 0xDF, 0x6C, 0xAD, 0x80, 0x54, 0xBB, 0x28, + 0xA4, 0x6C, 0x67, 0xDC, 0x21, 0xD7, 0x92, 0x37, 0xD2, 0xB9, 0xE7, 0x74, 0xEE, 0xEA, 0x72, 0x7E, + 0x37, 0x1F, 0x87, 0x9F, 0x68, 0x88, 0xFB, 0x79, 0x84, 0xC1, 0xA1, 0x23, 0x9B, 0x2F, 0xFB, 0xE2, + 0x86, 0xD4, 0xD3, 0x2E, 0x48, 0x5A, 0x49, 0x31, 0x0E, 0x73, 0x9A, 0x4E, 0xCC, 0xF4, 0x59, 0x1C, + 0x82, 0x39, 0x8F, 0x18, 0x9C, 0x71, 0xB4, 0xC0, 0x6D, 0x4E, 0xB3, 0xF6, 0x21, 0xED, 0xB3, 0x82, + 0x23, 0xFF, 0x4C, 0x32, 0x81, 0x6A, 0x96, 0xA9, 0xA7, 0x92, 0x83, 0x5F, 0xCD, 0x63, 0x4A, 0xC4, + 0xA0, 0x3D, 0x1B, 0xAD, 0x38, 0xAB, 0xC0, 0x09, 0x93, 0x25, 0x96, 0x92, 0x67, 0x03, 0x83, 0x78, + 0xFC, 0xA6, 0xFE, 0x04, 0xF7, 0xC8, 0xC6, 0x05, 0x6B, 0x30, 0x6A, 0x5F, 0xBE, 0x64, 0x9F, 0x7F, + 0x6C, 0x9F, 0x80, 0xA2, 0x87, 0xE8, 0x1E, 0x05, 0x00, 0x16, 0x97, 0xF3, 0x23, 0x88, 0x45, 0xCE, + 0x2C, 0x0F, 0xF8, 0xBC, 0x54, 0xD4, 0x1D, 0xCA, 0x23, 0x7D, 0x43, 0xDF, 0x05, 0xB9, 0xFE, 0xA9, + 0x77, 0x35, 0xC3, 0x6C, 0x11, 0x76, 0xCE, 0x9C, 0xAD, 0x4F, 0x00, 0xCB, 0x5B, 0x39, 0xCE, 0xF2, + 0x05, 0x03, 0xC5, 0xAA, 0xB6, 0x40, 0x4E, 0x1C, 0x3E, 0x79, 0xEE, 0x12, 0xBB, 0x9E, 0xE7, 0xE0, + 0xF0, 0xD5, 0x3E, 0xCD, 0xC6, 0xEA, 0xDB, 0x3C, 0x6B, 0x49, 0x4C, 0x51, 0x59, 0x87, 0xEA, 0xEF, + 0xA7, 0x0F, 0x26, 0xD6, 0x09, 0x6A, 0x69, 0x90, 0xD4, 0xC6, 0x44, 0xD6, 0x29, 0x53, 0x2D, 0xE1, + 0xDF, 0xCC, 0x2D, 0xE5, 0xB8, 0x77, 0xE6, 0x8E, 0x61, 0x91, 0xF5, 0x87, 0x61, 0x26, 0x59, 0xFB, + 0x4C, 0xA3, 0x23, 0x15, 0xD4, 0x72, 0x05, 0xE1, 0x13, 0x35, 0x12, 0x39, 0xE0, 0x71, 0x4D, 0x82, + 0x16, 0xBF, 0xDE, 0xF2, 0x56, 0x10, 0x43, 0x98, 0xBC, 0x16, 0x13, 0x6F, 0x79, 0xE7, 0xF2, 0x21, + 0x32, 0x0A, 0x49, 0x70, 0x9B, 0x0B, 0x42, 0x5B, 0xA8, 0xFD, 0xF5, 0x3A, 0xD2, 0xF9, 0x45, 0x37, + 0x2F, 0x4E, 0x62, 0x79, 0x21, 0xA4, 0xD4, 0xFB, 0x72, 0x13, 0x4C, 0xF7, 0x2C, 0x25, 0xD0, 0x68, + 0x93, 0x72, 0x33, 0x6F, 0x5F, 0xFE, 0xF2, 0x6A, 0x84, 0x92, 0x2E, 0xB5, 0x01, 0x6B, 0xA3, 0xDC + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx + header.m_entryCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 49154. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_49154.cs +// + +namespace KeyCMF_049154 +{ + static const BYTE Keytable[] = + { + 0x35, 0xD4, 0x55, 0x9A, 0xC9, 0x98, 0xFF, 0xBF, 0x9C, 0x31, 0x1B, 0x75, 0x79, 0xFE, 0x4A, 0xA9, + 0xDE, 0xEC, 0x4D, 0x2B, 0xD7, 0x54, 0x62, 0xE8, 0x6D, 0x20, 0xC9, 0xDD, 0x6F, 0x1E, 0x54, 0x99, + 0x39, 0xA2, 0x1C, 0x53, 0x63, 0xDF, 0x1F, 0x67, 0x0D, 0xE2, 0x84, 0x2B, 0x70, 0xB9, 0x0C, 0x21, + 0xBD, 0xBA, 0x0D, 0x6A, 0xF5, 0xB6, 0x75, 0x6C, 0xE4, 0x43, 0xCF, 0xB8, 0x6F, 0x59, 0x9D, 0xCF, + 0xDC, 0x92, 0x0C, 0xB5, 0x32, 0xDD, 0x1B, 0x15, 0x7F, 0xA7, 0xA9, 0x9C, 0xA0, 0xDA, 0xF6, 0x5E, + 0x83, 0x70, 0x6A, 0x3F, 0x96, 0x5E, 0x00, 0x75, 0x33, 0x3C, 0x23, 0xA4, 0x7B, 0x1E, 0x6E, 0xA8, + 0x99, 0x43, 0x8C, 0x08, 0x3F, 0x75, 0x5B, 0xDF, 0x49, 0xEC, 0x4A, 0x99, 0x59, 0x5D, 0x69, 0x59, + 0x2E, 0x47, 0x35, 0x5B, 0x9C, 0x09, 0xBD, 0x6B, 0x21, 0x55, 0x0D, 0x5B, 0xE7, 0xD2, 0x92, 0x36, + 0x83, 0x97, 0x07, 0xAC, 0x2D, 0xD0, 0x44, 0xB5, 0x83, 0x73, 0x5D, 0xFB, 0x9A, 0x99, 0x77, 0x17, + 0xDA, 0x7E, 0x0F, 0xA2, 0x9F, 0x10, 0x27, 0x64, 0x07, 0x1C, 0x88, 0xBB, 0xFB, 0x68, 0xE7, 0xD9, + 0x37, 0x06, 0xD6, 0x6F, 0x0B, 0xD4, 0x42, 0x08, 0xE8, 0xB4, 0x10, 0x28, 0x03, 0x31, 0xB3, 0x59, + 0xE3, 0x6F, 0x7C, 0xE2, 0xEF, 0x3E, 0x39, 0xAA, 0x3F, 0xC2, 0x51, 0x05, 0xC0, 0x6F, 0xCA, 0x75, + 0x7E, 0x30, 0x64, 0xDA, 0xAB, 0x4D, 0x74, 0x4E, 0xF4, 0xF3, 0x6A, 0x8F, 0xE4, 0xEB, 0x49, 0xE0, + 0x8C, 0x1A, 0xEF, 0x3B, 0x49, 0x40, 0xA4, 0xC4, 0xB5, 0x20, 0xDF, 0x1E, 0xCA, 0x4A, 0x4B, 0x5C, + 0xD3, 0x1A, 0x4B, 0x31, 0x18, 0x70, 0x89, 0xC3, 0x38, 0x61, 0x53, 0x72, 0x1E, 0xA0, 0x67, 0x0D, + 0x9F, 0x8B, 0x86, 0x76, 0x09, 0x89, 0x96, 0x0D, 0x7E, 0x52, 0xBB, 0x90, 0x11, 0xD3, 0x57, 0x43, + 0x28, 0xE4, 0x3C, 0x67, 0xE5, 0xEC, 0x01, 0x5C, 0x93, 0x7B, 0xED, 0xD0, 0x75, 0x50, 0x2E, 0x94, + 0x17, 0x1E, 0x31, 0x5C, 0x7D, 0x2F, 0xBC, 0x8C, 0xA2, 0x01, 0x74, 0x86, 0xF1, 0x06, 0xDA, 0x8E, + 0xBE, 0x21, 0xA0, 0xB2, 0x55, 0x6F, 0xA5, 0xCF, 0x82, 0x2D, 0xEB, 0xE6, 0x3F, 0x21, 0x87, 0xF0, + 0x78, 0xB8, 0x63, 0xEF, 0x01, 0x4E, 0x7E, 0x94, 0x4D, 0x53, 0x67, 0x7A, 0x5D, 0x53, 0x8D, 0x8F, + 0x98, 0x6B, 0x50, 0x10, 0x62, 0x00, 0xEE, 0xC5, 0x4D, 0x36, 0xF0, 0x90, 0x50, 0xD2, 0xC0, 0xA4, + 0x8E, 0xB1, 0xB3, 0xAF, 0x61, 0xCD, 0xA3, 0xAC, 0x35, 0x96, 0x82, 0x54, 0x48, 0x51, 0x8F, 0xB0, + 0x95, 0x95, 0x2E, 0xB3, 0x44, 0xCE, 0x16, 0xF7, 0x8D, 0x65, 0x27, 0x17, 0x7E, 0xF1, 0x43, 0xB6, + 0xD4, 0xD1, 0x83, 0x5D, 0xF3, 0xC0, 0xED, 0xD7, 0x76, 0xB3, 0x8C, 0xA4, 0xED, 0x75, 0xD2, 0xC5, + 0x0B, 0x30, 0xFE, 0x52, 0x10, 0x36, 0x27, 0x2E, 0x82, 0xA5, 0xE9, 0xD0, 0xB1, 0x4D, 0x45, 0xC3, + 0xF9, 0x13, 0x00, 0x6E, 0x5F, 0xFA, 0x6C, 0xC9, 0x44, 0x11, 0x84, 0xC2, 0x6C, 0xEE, 0x67, 0x55, + 0x57, 0x62, 0x52, 0x05, 0xE0, 0x63, 0x4F, 0x58, 0xB0, 0xB8, 0x0E, 0xEE, 0x9B, 0x8B, 0x6A, 0x0C, + 0x79, 0xB7, 0xB3, 0xC7, 0x55, 0x99, 0x4B, 0xE7, 0x17, 0x80, 0xAB, 0x51, 0x7D, 0x11, 0x2C, 0xD1, + 0x0F, 0xF8, 0x54, 0x34, 0x0A, 0x33, 0xE4, 0x39, 0x8E, 0x8B, 0x9F, 0xA6, 0xB9, 0x6D, 0xDC, 0x6E, + 0xE5, 0x70, 0xC7, 0x84, 0xE9, 0x4E, 0x24, 0xAE, 0x38, 0x7B, 0x63, 0xBD, 0xCA, 0x6B, 0x7C, 0x38, + 0x38, 0xDE, 0xD8, 0x1C, 0x91, 0x0F, 0x79, 0xCF, 0x71, 0xCB, 0x01, 0x93, 0x8A, 0x07, 0x2D, 0x2F, + 0x43, 0xC9, 0x92, 0x83, 0xAF, 0xB1, 0x00, 0x31, 0xDD, 0x8B, 0xAE, 0xC3, 0xD4, 0x35, 0x86, 0xED + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length * header.m_buildVersion; + uint increment = (digest[6] & 1) == 0 ? 37 : (kidx % 61); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 49656. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_49656.cs +// + +namespace KeyCMF_049656 +{ + static const BYTE Keytable[] = + { + 0x60, 0xE6, 0x1A, 0x16, 0xED, 0x45, 0x78, 0x1C, 0x3D, 0x4B, 0xA3, 0xFA, 0x8F, 0xFD, 0xD0, 0x75, + 0x31, 0x77, 0x79, 0xB5, 0x87, 0xBE, 0xB1, 0x41, 0x60, 0xA9, 0xCC, 0x39, 0x17, 0x12, 0xB5, 0x2D, + 0x16, 0xEE, 0x88, 0xD2, 0xF4, 0x58, 0xE3, 0x9B, 0xA8, 0x71, 0xB0, 0xD8, 0x39, 0x93, 0x2F, 0xCA, + 0xD7, 0x1B, 0x36, 0xF5, 0x72, 0x08, 0xA8, 0x4F, 0xD3, 0x1A, 0x78, 0xDB, 0x57, 0x87, 0xBB, 0x72, + 0x1A, 0x24, 0x4D, 0xEE, 0x1E, 0xBA, 0x5E, 0xF9, 0x5D, 0x3B, 0x20, 0x97, 0xB5, 0x24, 0xD9, 0x0A, + 0x9C, 0xAB, 0x1B, 0x10, 0x0A, 0xD4, 0xD5, 0x76, 0xEF, 0xFD, 0x38, 0x40, 0x1E, 0x34, 0xFD, 0xFF, + 0x9B, 0xA5, 0x46, 0x3C, 0x25, 0xAD, 0x82, 0xBA, 0x5E, 0xA2, 0xB7, 0x78, 0xE3, 0xB6, 0x15, 0x4B, + 0x3F, 0xC1, 0xFC, 0xEC, 0xEF, 0x60, 0xBC, 0xEE, 0x07, 0x58, 0xDC, 0xA2, 0x0B, 0xBC, 0x00, 0x35, + 0x96, 0x3D, 0x39, 0xAE, 0x00, 0xDA, 0x82, 0x6A, 0x08, 0x1E, 0x0B, 0xFF, 0x0F, 0x6A, 0x3E, 0xF6, + 0x88, 0x2D, 0xCC, 0x3F, 0xD8, 0x79, 0xDC, 0x8B, 0xEB, 0xCE, 0xAD, 0x28, 0x26, 0xB7, 0x60, 0xD7, + 0x3F, 0xC5, 0xDF, 0xA1, 0xAB, 0xB2, 0x62, 0xD1, 0xA0, 0x56, 0x0C, 0x62, 0x36, 0x07, 0xA0, 0x48, + 0x0F, 0xC4, 0xD7, 0x12, 0xCB, 0xAD, 0x42, 0x5B, 0x3F, 0x2A, 0xDC, 0xCC, 0xEE, 0x69, 0xAB, 0xF4, + 0xBE, 0x7E, 0x4E, 0x0B, 0x1B, 0xF3, 0x02, 0xF7, 0xE5, 0x8A, 0x7B, 0xBA, 0xF4, 0xCD, 0xFE, 0xBC, + 0x82, 0x30, 0x05, 0xCE, 0x6F, 0x0B, 0x21, 0xE6, 0xE2, 0x36, 0xE1, 0xEE, 0x65, 0x85, 0x6F, 0x04, + 0xDD, 0x63, 0x33, 0xB9, 0x59, 0x6C, 0x3E, 0xFD, 0x7B, 0xF0, 0x12, 0x09, 0x98, 0x35, 0xBF, 0xD4, + 0x03, 0xC7, 0x26, 0x74, 0x22, 0x59, 0x42, 0xB1, 0xEC, 0x72, 0x60, 0x3A, 0x25, 0x22, 0xB0, 0x55, + 0xDD, 0x4A, 0x34, 0x8D, 0xED, 0x5B, 0x9F, 0x8B, 0x39, 0x70, 0x3C, 0x3C, 0xDB, 0x89, 0x06, 0xCC, + 0x69, 0x1F, 0x59, 0x25, 0x56, 0x1D, 0x5D, 0xE2, 0x74, 0xAD, 0xFF, 0x34, 0x27, 0xBD, 0xF4, 0xBA, + 0x60, 0xFC, 0x59, 0xF5, 0x42, 0xB1, 0x2F, 0x42, 0x9B, 0x3A, 0xF9, 0xC6, 0xF7, 0x7D, 0x6C, 0xAC, + 0x37, 0x56, 0xF3, 0x45, 0xE1, 0xB5, 0x52, 0x42, 0x08, 0x1B, 0xC4, 0xBA, 0x27, 0xB3, 0x5F, 0x88, + 0x28, 0x01, 0x51, 0xE8, 0x04, 0xB9, 0x68, 0x0C, 0x3C, 0xD4, 0x5D, 0x25, 0xA3, 0x6E, 0xE1, 0x8D, + 0xFC, 0xA0, 0x8B, 0x6F, 0x71, 0x13, 0xFD, 0xD9, 0x65, 0xB2, 0x01, 0xF0, 0x3D, 0xAD, 0xA2, 0xDD, + 0xD7, 0x10, 0xA4, 0x67, 0xB3, 0x39, 0x21, 0x89, 0xB8, 0x17, 0x61, 0x5B, 0xDB, 0x60, 0x48, 0x86, + 0x4E, 0xAA, 0x0E, 0xA4, 0xAC, 0x0F, 0xB2, 0x79, 0xF4, 0x81, 0xDD, 0xF9, 0x0F, 0x66, 0xE2, 0x7C, + 0x90, 0x4F, 0x63, 0x9F, 0xA3, 0x9B, 0x76, 0x02, 0x0D, 0x86, 0xA3, 0x0D, 0x7D, 0x8C, 0xFE, 0xCA, + 0xBD, 0xB8, 0x52, 0x2E, 0xF3, 0x66, 0xB9, 0xC6, 0x2B, 0xC4, 0xFE, 0x5C, 0x23, 0xC7, 0x45, 0xD5, + 0x54, 0xFA, 0xD0, 0x7D, 0xB6, 0xC4, 0x6D, 0x55, 0x31, 0x61, 0xEC, 0xFC, 0x28, 0xE0, 0x28, 0x90, + 0xA5, 0xD0, 0xB6, 0x3F, 0x52, 0x00, 0xCC, 0x6A, 0x88, 0x11, 0x06, 0xB0, 0x8E, 0x62, 0xD5, 0xA6, + 0xAE, 0x39, 0x72, 0x3C, 0x72, 0x80, 0x6C, 0x4F, 0xF9, 0x96, 0xA0, 0x7B, 0x82, 0x1A, 0x96, 0x57, + 0xC4, 0x8F, 0xB6, 0x0B, 0xB8, 0x90, 0x3F, 0x6F, 0xDF, 0xB0, 0x49, 0xDC, 0xB8, 0x2F, 0xCE, 0x70, + 0x6E, 0x37, 0x93, 0x8F, 0x9E, 0x80, 0x86, 0xA5, 0xAC, 0x9E, 0x76, 0x68, 0x99, 0xE1, 0x27, 0x2E, + 0xD8, 0x4D, 0x57, 0x4D, 0xB2, 0xF8, 0x95, 0xE2, 0xE5, 0xD0, 0xB7, 0x4F, 0x6D, 0x8A, 0xED, 0xB1 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + int kidx = 2 * digest[5]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 504; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 50148. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_50148.cs +// + +namespace KeyCMF_050148 +{ + static const BYTE Keytable[] = + { + 0xAC, 0x70, 0x7D, 0x5D, 0x48, 0x1D, 0x11, 0x1C, 0xE8, 0x0A, 0x13, 0xC7, 0x97, 0xD7, 0xC3, 0xDC, + 0x6A, 0x3C, 0xC9, 0xE3, 0x8D, 0x99, 0x7D, 0x2F, 0x33, 0xAA, 0xAF, 0xA1, 0x58, 0xB7, 0xCA, 0xBD, + 0x0E, 0x58, 0x79, 0xD7, 0xFD, 0x0A, 0x45, 0xE8, 0x04, 0x5C, 0x97, 0xF0, 0xC9, 0xA9, 0xE4, 0x21, + 0xCC, 0xCA, 0x2D, 0xBD, 0x57, 0x3C, 0x4D, 0x4F, 0xF4, 0x6D, 0xB9, 0xA2, 0xE3, 0x80, 0x70, 0x31, + 0x15, 0x8E, 0x0E, 0x8B, 0xC6, 0x66, 0x42, 0x14, 0x8C, 0xC7, 0xAD, 0x09, 0xB9, 0x49, 0x64, 0xEC, + 0xD1, 0x8C, 0x3C, 0xF2, 0x49, 0xFB, 0xBC, 0xB2, 0xC9, 0xB4, 0x6A, 0xBA, 0x70, 0x93, 0x27, 0x66, + 0x08, 0xE6, 0x3A, 0x4E, 0x43, 0x6C, 0x81, 0xDE, 0xBA, 0x8B, 0x1F, 0x9B, 0x5B, 0xD4, 0x54, 0xCF, + 0x2A, 0xB7, 0xEE, 0x2F, 0xE4, 0xDE, 0x75, 0x5A, 0x59, 0xA4, 0x84, 0x48, 0xFD, 0x0D, 0x58, 0x83, + 0x67, 0x76, 0x3C, 0x37, 0xF2, 0x77, 0xF8, 0x29, 0x33, 0xE4, 0x03, 0xA3, 0xDF, 0x39, 0xD7, 0x8B, + 0x04, 0xF1, 0x80, 0xA1, 0x0C, 0xC7, 0xC4, 0xB8, 0x7A, 0x4E, 0x2D, 0x47, 0xE2, 0x75, 0x0B, 0xD5, + 0x45, 0x7D, 0xB2, 0xB6, 0xD1, 0x67, 0xDE, 0x5C, 0x1E, 0xFF, 0xC7, 0xE3, 0x46, 0x3F, 0x8F, 0x42, + 0x4E, 0x43, 0x61, 0x36, 0xF0, 0x80, 0x31, 0xFC, 0x55, 0xAB, 0xE7, 0x5A, 0x3B, 0xE5, 0x1C, 0x22, + 0x1E, 0xBB, 0x86, 0x39, 0x6B, 0xE5, 0xAB, 0x32, 0xAA, 0x20, 0x5B, 0x22, 0x8D, 0x1A, 0x7E, 0x8C, + 0x29, 0x7F, 0x6A, 0x44, 0x00, 0xAE, 0xF9, 0x5C, 0x27, 0xEB, 0x66, 0x70, 0xCA, 0x8B, 0x9F, 0x37, + 0x89, 0x54, 0x12, 0xD8, 0xDA, 0xB5, 0xBD, 0xAB, 0xD3, 0x66, 0x1D, 0x41, 0x29, 0x48, 0x79, 0x11, + 0x84, 0xE4, 0x1F, 0x9A, 0xCE, 0x2A, 0x35, 0xA4, 0x45, 0xC8, 0xC8, 0xD1, 0x70, 0xB0, 0xB7, 0x7A, + 0xD9, 0x34, 0xD8, 0x7D, 0xC2, 0x7C, 0xFA, 0x5C, 0x6F, 0x7E, 0x4A, 0x96, 0x24, 0x91, 0xEF, 0xFD, + 0xB8, 0xC8, 0xA3, 0xBF, 0x47, 0xD4, 0x00, 0x99, 0xB0, 0x60, 0x06, 0xB5, 0x2A, 0x4D, 0x8C, 0x4D, + 0x14, 0x2E, 0x15, 0xAB, 0x2D, 0xD3, 0x78, 0x00, 0x55, 0x03, 0x4A, 0xDA, 0x4A, 0x64, 0x94, 0x38, + 0x6E, 0x72, 0xE1, 0xE3, 0x21, 0xDC, 0x31, 0x69, 0xB1, 0xA2, 0x2B, 0x12, 0x61, 0xAD, 0xCE, 0xFC, + 0xB0, 0x86, 0xAE, 0x02, 0x10, 0xA9, 0x65, 0x7E, 0x26, 0x23, 0xD6, 0xBB, 0xDC, 0x3F, 0x70, 0x1C, + 0xDA, 0x8C, 0x47, 0x4F, 0xA3, 0x6F, 0xE0, 0x98, 0x04, 0x22, 0xF0, 0x49, 0x48, 0xC2, 0x6A, 0x9F, + 0x53, 0xCD, 0x58, 0xFE, 0x07, 0x55, 0x53, 0x16, 0x2D, 0xA5, 0xDA, 0xBD, 0x3C, 0x94, 0x46, 0x1C, + 0xCF, 0x07, 0x19, 0x4F, 0x14, 0xBC, 0xE2, 0x28, 0x9F, 0xCC, 0xC9, 0x18, 0xFB, 0x8C, 0x80, 0xBF, + 0x46, 0x55, 0x5A, 0x19, 0x0D, 0x2C, 0x51, 0xFD, 0xD1, 0x21, 0x12, 0x02, 0x03, 0x9D, 0x96, 0x22, + 0x99, 0xF5, 0x6D, 0xA7, 0x98, 0x51, 0x7A, 0xF3, 0x00, 0x23, 0xE7, 0x1C, 0xCD, 0x6B, 0x0D, 0xF9, + 0x43, 0x55, 0x4F, 0x10, 0x93, 0xEB, 0x3A, 0x42, 0x8F, 0x66, 0x71, 0xD6, 0xC7, 0xFF, 0x36, 0x48, + 0x4A, 0x3B, 0x87, 0xC9, 0x06, 0x8F, 0xE7, 0x12, 0x92, 0xDE, 0x5D, 0x95, 0x28, 0x54, 0x83, 0xD1, + 0xE9, 0xAA, 0x32, 0xE0, 0xE7, 0x64, 0x93, 0x7B, 0x7E, 0x9F, 0x91, 0x4F, 0x8F, 0x4D, 0x30, 0x76, + 0x6C, 0xFC, 0xF2, 0xD6, 0x28, 0x25, 0x9E, 0x24, 0x6E, 0xA2, 0x7D, 0x9A, 0x22, 0xCC, 0xFB, 0x9E, + 0x5D, 0x11, 0x4D, 0x3D, 0x4C, 0xF1, 0x26, 0xD3, 0xBB, 0xAA, 0x71, 0x8D, 0x28, 0xA7, 0xB9, 0x3D, + 0x13, 0xC1, 0x28, 0x86, 0x50, 0x6D, 0x8E, 0xC1, 0x71, 0x4F, 0x2C, 0x0A, 0x4F, 0xED, 0xFE, 0x13 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length * header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + int kidx = length * (int)header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 0x2B; + // m_keytable[ ??? -> 0x13A ] buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 50483. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_50483.cs +// + +namespace KeyCMF_050483 +{ + static const BYTE Keytable[] = + { + 0x09, 0x8E, 0x91, 0x47, 0x54, 0x16, 0x8E, 0x96, 0xFE, 0x99, 0xEF, 0xE5, 0x57, 0xB3, 0x4D, 0xE3, + 0x7A, 0xE7, 0x3E, 0xDE, 0x2C, 0x12, 0x98, 0x96, 0x2F, 0x00, 0x52, 0x84, 0x60, 0xA2, 0xFA, 0xC6, + 0x3C, 0xAC, 0xBA, 0x97, 0x5F, 0xA1, 0x5A, 0x3E, 0x2A, 0xA5, 0x54, 0xE5, 0x0A, 0x48, 0xA9, 0x22, + 0x64, 0xCB, 0x9B, 0xC2, 0x07, 0x98, 0x21, 0x51, 0x60, 0x70, 0xB2, 0x71, 0x18, 0x75, 0x6C, 0x11, + 0x08, 0xCE, 0x32, 0xC0, 0x0B, 0x2B, 0x34, 0xD2, 0x87, 0x33, 0xF8, 0xD8, 0x43, 0x25, 0x4F, 0x90, + 0x0D, 0x11, 0xEA, 0x34, 0xAD, 0x87, 0x86, 0x1E, 0xAE, 0x3D, 0x6C, 0x74, 0xCC, 0x0E, 0xD6, 0x0B, + 0x0E, 0xDA, 0x87, 0xDC, 0xA0, 0xBE, 0xC2, 0x17, 0x7D, 0x01, 0x04, 0x3E, 0xB6, 0x49, 0xD4, 0x51, + 0xCC, 0xFE, 0xB3, 0x01, 0xA2, 0x2B, 0x0A, 0x1B, 0xCC, 0x21, 0xE1, 0xC7, 0x5B, 0x94, 0x65, 0x8B, + 0xCE, 0x41, 0x9E, 0xB2, 0xFA, 0xA4, 0x51, 0xF0, 0x86, 0x02, 0x1A, 0xB8, 0x26, 0xB0, 0x80, 0x8A, + 0x04, 0xF6, 0x6B, 0xEA, 0xD9, 0x57, 0x03, 0xE5, 0xD6, 0x60, 0x9A, 0xEC, 0x0E, 0x4E, 0x1E, 0xF3, + 0x83, 0x7A, 0xAF, 0x79, 0x91, 0x96, 0xD7, 0xCF, 0x2A, 0x99, 0xB0, 0x66, 0x10, 0x74, 0x1A, 0xA3, + 0x72, 0xDF, 0x7B, 0x3D, 0xDC, 0xD1, 0xE8, 0x7A, 0x58, 0x81, 0x8E, 0xDA, 0x20, 0x20, 0x2C, 0x0D, + 0x83, 0x40, 0xD2, 0xCF, 0x1C, 0x76, 0xB2, 0x08, 0x6A, 0x5A, 0x3B, 0x0F, 0x97, 0x75, 0xF2, 0x27, + 0x52, 0x2C, 0x36, 0xD1, 0x07, 0xCE, 0x4C, 0x88, 0x12, 0xF8, 0x43, 0x02, 0x90, 0x1B, 0x29, 0xBF, + 0x8D, 0x5D, 0x3E, 0xA3, 0xD1, 0xC9, 0x25, 0x57, 0x25, 0xB5, 0x26, 0x0B, 0xE4, 0x50, 0x3C, 0x02, + 0x9D, 0xA2, 0xC5, 0xEA, 0x82, 0x30, 0xD1, 0xAE, 0x1B, 0x61, 0xD5, 0x89, 0x36, 0xC5, 0xF3, 0x2A, + 0x77, 0xD0, 0x50, 0xCE, 0xC0, 0xED, 0xC1, 0x36, 0x66, 0x90, 0x43, 0x66, 0x61, 0x38, 0x92, 0x03, + 0x2A, 0x0B, 0x7A, 0xDA, 0xDC, 0x96, 0xE4, 0x35, 0x46, 0x90, 0x49, 0x0E, 0x67, 0xD5, 0xAB, 0x39, + 0x4D, 0xC4, 0xBC, 0xB8, 0xD5, 0x22, 0x05, 0x4D, 0x28, 0x4E, 0x01, 0xA8, 0x40, 0x86, 0x8A, 0x63, + 0xEE, 0x51, 0x04, 0x94, 0x89, 0x66, 0xDC, 0xE1, 0xB9, 0x81, 0xB1, 0x41, 0x41, 0x18, 0x34, 0x13, + 0xCF, 0x8F, 0x5A, 0x56, 0x5A, 0x50, 0xF7, 0x81, 0x89, 0xB7, 0x14, 0xA2, 0x60, 0xAD, 0x4C, 0x57, + 0x47, 0x27, 0xE8, 0x3B, 0x3A, 0xE5, 0xC1, 0x15, 0x64, 0x4D, 0xA5, 0xA8, 0x30, 0x5E, 0xCB, 0x29, + 0x77, 0x8E, 0xF6, 0xD1, 0x03, 0xAC, 0xF4, 0x79, 0xB8, 0x5C, 0xDA, 0xEA, 0x9B, 0xD6, 0x05, 0x12, + 0x9D, 0x90, 0x67, 0x17, 0x39, 0x91, 0x93, 0x65, 0x08, 0x7B, 0xAB, 0xD0, 0xD0, 0x07, 0x4F, 0x3C, + 0x7D, 0x37, 0x0D, 0x03, 0xA6, 0x0B, 0xE1, 0x25, 0x63, 0x57, 0x5E, 0x20, 0x55, 0xB3, 0x5D, 0x33, + 0x35, 0x9C, 0xC3, 0x79, 0xF5, 0xDC, 0x2D, 0x72, 0x28, 0xBB, 0xB2, 0xCC, 0x03, 0x62, 0x76, 0xB4, + 0xCD, 0x8B, 0xB1, 0xA5, 0x55, 0x4F, 0xB8, 0x1D, 0x00, 0x50, 0xB0, 0x66, 0x38, 0xFF, 0xE9, 0x78, + 0x25, 0x28, 0x82, 0xD4, 0xFC, 0xE2, 0x0B, 0x64, 0xEF, 0x16, 0xCC, 0xF5, 0x8D, 0xF5, 0x7A, 0x78, + 0x9E, 0x9C, 0x4B, 0xAC, 0x59, 0xDF, 0x68, 0x47, 0x81, 0x73, 0xC5, 0x59, 0x98, 0x86, 0x10, 0xB0, + 0x3D, 0xC2, 0xC8, 0x53, 0xF0, 0x47, 0x9F, 0xC1, 0x89, 0x74, 0x18, 0x20, 0xEE, 0x84, 0xB4, 0x50, + 0x14, 0x9E, 0x58, 0xEF, 0xF4, 0xE7, 0xE1, 0xD0, 0x4F, 0xDC, 0x58, 0x5B, 0x9D, 0x8C, 0x25, 0xB8, + 0x9C, 0xE0, 0xA7, 0xAE, 0x99, 0x0C, 0x53, 0x35, 0x2A, 0xDA, 0x18, 0x4E, 0x08, 0x38, 0xD4, 0x0B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)(header.m_buildVersion * length); + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)((header.m_dataCount + digest[7]) & 511); + uint increment = (uint)(header.m_buildVersion * header.m_dataCount % 7); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - 0x49, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 51575. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_51575.cs +// + +namespace KeyCMF_051575 +{ + static const BYTE Keytable[] = + { + 0x87, 0xDD, 0x69, 0x09, 0x8E, 0xD8, 0xB7, 0xBB, 0x11, 0x41, 0x75, 0x2C, 0x0C, 0xDA, 0x41, 0x6B, + 0x6F, 0x26, 0x27, 0xC2, 0x48, 0xEB, 0x95, 0x69, 0x8E, 0x68, 0xA9, 0x9B, 0x2B, 0x14, 0xA8, 0x92, + 0xD2, 0x75, 0x80, 0x37, 0xB0, 0xBA, 0x40, 0x49, 0xF1, 0x89, 0xAF, 0x35, 0x15, 0x85, 0x7E, 0x40, + 0x8B, 0xDF, 0x25, 0x31, 0x14, 0x0E, 0x40, 0x2F, 0x8E, 0x03, 0x73, 0xBE, 0x83, 0x60, 0xEC, 0xE6, + 0x51, 0xFB, 0xB6, 0x52, 0xF0, 0x59, 0xE5, 0x4B, 0x55, 0x41, 0x85, 0x5F, 0x48, 0xAE, 0x28, 0x34, + 0xA7, 0xA2, 0x09, 0x77, 0xB1, 0x06, 0x18, 0xB6, 0x1D, 0x15, 0x23, 0x31, 0x6B, 0xA3, 0x24, 0x7F, + 0x00, 0x1F, 0xF9, 0x42, 0x75, 0x56, 0xD2, 0x22, 0x70, 0x50, 0x1C, 0x69, 0x07, 0x0A, 0x1C, 0x95, + 0x87, 0x6F, 0x4B, 0xAF, 0xD5, 0x25, 0xC9, 0x7E, 0xA7, 0x9E, 0x42, 0xCE, 0x8B, 0x7D, 0xFA, 0x01, + 0x6B, 0xD4, 0x49, 0x4A, 0x4F, 0x8D, 0x11, 0xAC, 0x99, 0xCF, 0xF1, 0x3D, 0xD4, 0x13, 0x89, 0x57, + 0xC9, 0x4B, 0x3E, 0x2E, 0x3B, 0x44, 0x4F, 0xBF, 0x36, 0xDA, 0xDC, 0x24, 0x8E, 0xBA, 0x12, 0x1D, + 0xA1, 0xD6, 0x7E, 0xA8, 0x41, 0x00, 0xBD, 0xCD, 0x38, 0xAA, 0xCA, 0x71, 0x34, 0x72, 0xDB, 0x40, + 0x5D, 0x58, 0x69, 0x70, 0x89, 0xB3, 0x16, 0x21, 0xCD, 0xF6, 0x1E, 0xAB, 0xC6, 0xAA, 0x21, 0xB6, + 0x04, 0x69, 0xFC, 0xF2, 0x34, 0x2F, 0xF2, 0x74, 0x1E, 0xEC, 0x3D, 0x7E, 0x74, 0x6C, 0x82, 0xEA, + 0xA7, 0x30, 0xF4, 0x7A, 0x50, 0xF4, 0x21, 0x33, 0x2E, 0x9F, 0xB0, 0x86, 0x38, 0x9F, 0x9C, 0x30, + 0x46, 0xC5, 0xEA, 0x5B, 0xCA, 0xD4, 0x28, 0x9A, 0xBA, 0xF9, 0xF5, 0x46, 0x8F, 0x35, 0x85, 0xC2, + 0x35, 0x0A, 0x63, 0xD5, 0xFB, 0xF5, 0x63, 0xDA, 0x25, 0x34, 0xAE, 0xE1, 0x01, 0xAF, 0xAF, 0xB4, + 0x8F, 0x8A, 0x4C, 0xF3, 0x27, 0x34, 0x41, 0xD2, 0x28, 0xA1, 0xD8, 0x2F, 0x1E, 0xF2, 0xF7, 0xC4, + 0xE8, 0x88, 0xD3, 0xED, 0x7A, 0xC6, 0xB0, 0x02, 0xB1, 0x30, 0x36, 0xA6, 0xB5, 0x1A, 0x31, 0x07, + 0xE6, 0xB7, 0xB0, 0x87, 0xB7, 0xA9, 0xD0, 0x17, 0x2A, 0xD0, 0xB4, 0x78, 0xA6, 0x8A, 0x4B, 0x03, + 0x8A, 0x2E, 0xEB, 0x46, 0x2F, 0xCB, 0x91, 0x90, 0x7F, 0xB3, 0x28, 0x14, 0x95, 0x0A, 0x31, 0x3E, + 0x97, 0xD6, 0x9C, 0x42, 0xFC, 0xD0, 0xD8, 0x7E, 0x1E, 0xB8, 0x57, 0x70, 0x80, 0x14, 0x9C, 0xA0, + 0xDC, 0x8F, 0xD4, 0xE0, 0x18, 0xEC, 0x8F, 0x55, 0xA6, 0xCA, 0xF8, 0xD1, 0x0F, 0xC4, 0x85, 0x42, + 0xC2, 0x4B, 0x39, 0x49, 0x72, 0x36, 0xE6, 0xF1, 0x79, 0xF2, 0x8D, 0x45, 0xEE, 0xFE, 0x9F, 0x57, + 0x9D, 0x1F, 0x39, 0xB5, 0x26, 0x26, 0x61, 0xA3, 0x1C, 0xA6, 0x66, 0x11, 0x5C, 0xCE, 0x47, 0xD0, + 0xAE, 0x41, 0xF0, 0x23, 0x4E, 0x22, 0x59, 0x01, 0x58, 0x13, 0x6C, 0xD5, 0x77, 0x40, 0x2B, 0x8E, + 0xB9, 0x97, 0xB2, 0x34, 0x95, 0xCD, 0xC3, 0x28, 0x7D, 0x12, 0x5C, 0x4D, 0xE6, 0x4E, 0x6F, 0x64, + 0x31, 0x58, 0xDC, 0x63, 0x76, 0x2D, 0x90, 0xC6, 0x91, 0x0D, 0x81, 0xAA, 0x65, 0xE8, 0x2C, 0x07, + 0x47, 0x49, 0x9E, 0x73, 0xC7, 0x73, 0xB4, 0x39, 0x19, 0xC4, 0x88, 0xAB, 0xC4, 0xAE, 0x0E, 0x48, + 0x24, 0x94, 0x13, 0x2F, 0x8E, 0x76, 0xCF, 0x3D, 0xB9, 0xDF, 0x08, 0xBD, 0xFF, 0x98, 0xAC, 0xFF, + 0xEA, 0xFF, 0xC9, 0x64, 0x9B, 0xF8, 0x94, 0x2E, 0x08, 0x36, 0xC1, 0xBB, 0x7B, 0x1B, 0xFE, 0xDA, + 0x8C, 0xFD, 0x0E, 0x17, 0x57, 0xD7, 0x08, 0x1A, 0xE8, 0x86, 0xB8, 0x6F, 0xD8, 0x29, 0x74, 0xCB, + 0x63, 0x95, 0xD7, 0x42, 0xE8, 0x64, 0x72, 0x7D, 0x49, 0x72, 0x08, 0xBB, 0x5F, 0xA8, 0x3B, 0xE7 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)((digest[7] + (ushort)header.m_dataCount) & 511); + uint increment = kidx % 13; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx + 0x16666D63, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 51948. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_51948.cs +// + +namespace KeyCMF_051948 +{ + static const BYTE Keytable[] = + { + 0xA3, 0xB0, 0xE5, 0x73, 0x2D, 0x28, 0x05, 0xEC, 0xD1, 0xF3, 0x32, 0x89, 0xFE, 0xEA, 0x81, 0x51, + 0xB2, 0x42, 0x02, 0x81, 0x74, 0x3B, 0xBF, 0x21, 0xED, 0x0A, 0x7E, 0x77, 0x82, 0x82, 0xF0, 0x0A, + 0x18, 0xAD, 0x4A, 0x01, 0x79, 0xFD, 0x07, 0x23, 0x27, 0x7B, 0x57, 0x9F, 0x42, 0x81, 0x44, 0x4B, + 0x2D, 0x7E, 0xC4, 0x7C, 0x31, 0x6E, 0x43, 0x3D, 0x1D, 0x61, 0x64, 0xC1, 0x52, 0x3E, 0x07, 0xC4, + 0x42, 0xBC, 0x4E, 0x9D, 0xCB, 0x5C, 0xD3, 0x84, 0xFF, 0xB3, 0x71, 0xD3, 0xF6, 0x33, 0xEB, 0x3B, + 0x48, 0x9E, 0x15, 0x2C, 0x3C, 0x68, 0x66, 0x7A, 0x8A, 0xA4, 0xDE, 0x58, 0xFC, 0x36, 0xE4, 0x20, + 0x70, 0x7C, 0x6B, 0x78, 0xE9, 0x59, 0x81, 0xA9, 0x3B, 0x89, 0xF4, 0x4A, 0x2C, 0x52, 0x56, 0x74, + 0xE6, 0x8F, 0xD7, 0x2E, 0xDA, 0x7E, 0x1A, 0x0A, 0xE1, 0xF0, 0xA1, 0x54, 0xF9, 0x6B, 0x8A, 0xDF, + 0x4F, 0x1F, 0x7D, 0x84, 0x7D, 0x7A, 0x86, 0xB9, 0x00, 0x65, 0x75, 0x46, 0xBC, 0x38, 0x57, 0xF0, + 0x19, 0x6F, 0xE2, 0xB1, 0xF8, 0xE5, 0x30, 0xE5, 0x6D, 0xA9, 0x5C, 0xF4, 0x81, 0x18, 0x39, 0x9B, + 0x8F, 0xBE, 0x09, 0x00, 0xF8, 0xF3, 0x17, 0x64, 0x2E, 0xF1, 0xB8, 0x7A, 0x75, 0xDA, 0xB6, 0x63, + 0x99, 0x7D, 0x8F, 0x6E, 0x67, 0xCA, 0x55, 0x74, 0xBE, 0x19, 0xBF, 0x1A, 0xD8, 0x40, 0x05, 0x70, + 0x57, 0x06, 0x77, 0x98, 0x66, 0x09, 0x79, 0x6F, 0x62, 0xD6, 0xAA, 0xBD, 0x37, 0x24, 0x0B, 0xE5, + 0x10, 0xBC, 0x51, 0xC5, 0xEB, 0xAA, 0xA7, 0x87, 0xEA, 0xEC, 0x1C, 0x60, 0x06, 0x0C, 0x29, 0xD1, + 0x48, 0x75, 0xCB, 0xC2, 0x18, 0x35, 0x25, 0x97, 0xEA, 0xB0, 0x1C, 0x19, 0x48, 0xB6, 0x7A, 0x20, + 0xC4, 0x5A, 0xD9, 0x2C, 0x25, 0xF4, 0xE1, 0xDC, 0xF9, 0x35, 0x88, 0x14, 0x2C, 0xC7, 0x53, 0x5F, + 0xA8, 0x58, 0x2F, 0xA0, 0x40, 0xDE, 0x92, 0x3F, 0xAF, 0x30, 0x7C, 0x78, 0x0B, 0xEE, 0x18, 0xA1, + 0x41, 0xC6, 0x88, 0x24, 0xE9, 0x4C, 0x1C, 0x46, 0x47, 0xC4, 0xF2, 0x14, 0xC1, 0xB8, 0xCC, 0xA3, + 0x77, 0xE9, 0x34, 0xA3, 0x22, 0x5C, 0xBA, 0x5F, 0x03, 0xF3, 0xFB, 0x62, 0xD3, 0x9D, 0xF2, 0xD3, + 0xC5, 0xE4, 0x19, 0xC1, 0x83, 0x8D, 0x53, 0x7F, 0x0A, 0xB2, 0x21, 0xAB, 0x2C, 0x37, 0x2C, 0x31, + 0x06, 0xEC, 0x58, 0x96, 0xC7, 0x85, 0x67, 0x7D, 0x89, 0xEE, 0xD9, 0x64, 0x2B, 0xAB, 0xC6, 0x1E, + 0xA8, 0xC9, 0x59, 0x8E, 0x1F, 0x51, 0x2E, 0x5A, 0xC7, 0xCD, 0xC5, 0x9A, 0x87, 0x7D, 0x2C, 0x3D, + 0x91, 0xA9, 0x56, 0x5C, 0xFF, 0xFC, 0xBA, 0x05, 0xB0, 0x86, 0x7B, 0xA8, 0xEB, 0x79, 0x60, 0xA9, + 0x56, 0x88, 0x22, 0xE1, 0x89, 0x9A, 0x4C, 0x14, 0x3C, 0x6E, 0xB7, 0x2C, 0xDA, 0x79, 0xEE, 0x0A, + 0x05, 0x2D, 0x20, 0xB5, 0xDD, 0xBE, 0x15, 0x14, 0x9C, 0xEF, 0xCB, 0x20, 0xAF, 0x8C, 0xE5, 0x03, + 0x1A, 0x4C, 0xA7, 0xFD, 0x10, 0x72, 0x17, 0xD8, 0xBD, 0xD8, 0x86, 0x84, 0x26, 0xB7, 0xEC, 0x21, + 0x1F, 0xA9, 0x15, 0xEB, 0x40, 0xE1, 0xB5, 0x87, 0xC6, 0x96, 0x3E, 0x75, 0xB0, 0x0B, 0xE3, 0x81, + 0x61, 0x49, 0x67, 0x76, 0xAF, 0x7E, 0x6C, 0x50, 0x74, 0xCC, 0xBE, 0x69, 0xA4, 0x16, 0xCC, 0xA3, + 0x78, 0x2C, 0x2E, 0x69, 0x2D, 0x3D, 0xFA, 0x58, 0x01, 0x8B, 0x1F, 0xB5, 0xBA, 0x67, 0x92, 0xBE, + 0xD3, 0x2D, 0x6D, 0x88, 0xB8, 0xAB, 0x99, 0xCE, 0x76, 0xA2, 0x60, 0xE6, 0x17, 0xCC, 0xF0, 0xB6, + 0x0E, 0x83, 0xB1, 0xEE, 0x7B, 0x71, 0x57, 0xB3, 0x70, 0x8B, 0x7A, 0x28, 0x59, 0x02, 0x3F, 0xD1, + 0x76, 0x7C, 0x5A, 0x57, 0x8D, 0x95, 0x8D, 0x41, 0x0D, 0xC2, 0xCE, 0x4C, 0x6E, 0x44, 0xE0, 0x03 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint)length; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod((2 * digest[7]) - length, 512)]; + uint increment = (digest[6] & 1) == 1 ? 37 : kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 52717. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_52717.cs +// + +namespace KeyCMF_052717 +{ + static const BYTE Keytable[] = + { + 0xFC, 0x77, 0x22, 0xA4, 0x3F, 0xA3, 0xC5, 0x5D, 0x8B, 0x1F, 0x8B, 0xC6, 0xBE, 0x72, 0x02, 0x46, + 0x73, 0x1D, 0xAD, 0xA9, 0xAE, 0x53, 0xA1, 0xE8, 0xD1, 0x4F, 0x62, 0x43, 0xE1, 0xB6, 0xF7, 0xEC, + 0xE2, 0xB0, 0x75, 0xC9, 0xF6, 0x2C, 0x15, 0xB1, 0xEC, 0x6E, 0xDC, 0xBC, 0x1C, 0x41, 0x68, 0x1F, + 0x89, 0x0D, 0x9B, 0xAE, 0x0F, 0x08, 0xD0, 0x19, 0xD8, 0xC3, 0x13, 0x35, 0x2D, 0x54, 0xE5, 0x9A, + 0x7E, 0xFE, 0x16, 0xB9, 0x11, 0x27, 0xB6, 0x4E, 0xE0, 0xEA, 0x91, 0x78, 0xE2, 0x30, 0xDB, 0x0E, + 0xCF, 0x0D, 0xE4, 0x69, 0x53, 0x9D, 0xF9, 0x53, 0x5A, 0xA0, 0x89, 0x35, 0x70, 0xC1, 0x97, 0x64, + 0xB6, 0x0B, 0x1F, 0xBB, 0x83, 0xB5, 0xB6, 0x24, 0x3A, 0x3E, 0x34, 0x4A, 0x5E, 0xEF, 0x78, 0xAF, + 0xC4, 0xAB, 0xFB, 0x0B, 0x31, 0xCF, 0x2F, 0xED, 0xE0, 0x2E, 0xBD, 0x93, 0x0B, 0x72, 0xE9, 0x54, + 0x72, 0x61, 0x21, 0x29, 0xBA, 0x6C, 0x80, 0x58, 0xCE, 0x83, 0x00, 0x88, 0x6E, 0x7B, 0x21, 0xEB, + 0x60, 0xC6, 0xC6, 0xC0, 0xAD, 0x23, 0xD7, 0x56, 0x79, 0x4E, 0x8F, 0x56, 0x6B, 0xAC, 0x3C, 0xA1, + 0x60, 0xC7, 0xFF, 0x44, 0xC2, 0x28, 0x7A, 0xF8, 0x28, 0x16, 0xC2, 0xDB, 0xFD, 0x12, 0xF2, 0xBD, + 0x67, 0xAC, 0x41, 0x10, 0xEC, 0x6B, 0xE7, 0xBA, 0xA7, 0x1E, 0x0E, 0x95, 0x56, 0xBA, 0x49, 0x7F, + 0x99, 0x59, 0x59, 0xA6, 0x5C, 0x49, 0x35, 0xB2, 0xC8, 0xF2, 0xEC, 0x87, 0x3B, 0x96, 0x35, 0xCC, + 0x32, 0x65, 0x33, 0xF4, 0xDF, 0x18, 0x38, 0x3D, 0xED, 0x78, 0xFF, 0x3F, 0xE9, 0x53, 0x2E, 0xE0, + 0xAC, 0x4B, 0x2B, 0x68, 0xFB, 0xCA, 0x98, 0x26, 0x9C, 0xC9, 0xDF, 0x51, 0x5B, 0x0A, 0xE1, 0xAE, + 0xA8, 0xE5, 0x78, 0x11, 0xE4, 0x1B, 0x28, 0x3E, 0xB4, 0x08, 0x6C, 0xC9, 0xD5, 0xDD, 0x4B, 0xC5, + 0xA8, 0xB3, 0xAE, 0x58, 0xBF, 0x14, 0xAF, 0xFE, 0xE7, 0x37, 0xE5, 0xB3, 0xD9, 0xB9, 0x12, 0xDE, + 0x11, 0xA7, 0x5F, 0xDD, 0xDF, 0xEF, 0x17, 0x06, 0x1E, 0xFC, 0x4B, 0xE0, 0xDC, 0xBE, 0x15, 0x0A, + 0xE5, 0xDD, 0x6E, 0x8C, 0x82, 0x17, 0x78, 0x60, 0xDB, 0x68, 0x9B, 0xED, 0xC6, 0xCF, 0x06, 0xA6, + 0xF6, 0x61, 0x56, 0xCD, 0xF5, 0xB8, 0xE7, 0x43, 0x9C, 0x59, 0x26, 0xAA, 0x62, 0x32, 0x92, 0x64, + 0x9D, 0x4F, 0x8A, 0xF1, 0x22, 0x8E, 0x9F, 0x63, 0xE4, 0x26, 0x79, 0xD5, 0x78, 0xB7, 0x9E, 0x65, + 0x60, 0x25, 0x62, 0xFC, 0x59, 0x6D, 0x50, 0x7C, 0xD9, 0xB8, 0x1C, 0xC5, 0xFF, 0x6C, 0x6F, 0x62, + 0xF6, 0x0D, 0xD5, 0xA0, 0x94, 0x63, 0x67, 0x92, 0x46, 0x01, 0x83, 0x66, 0x7F, 0xEB, 0xD7, 0xD3, + 0x42, 0x53, 0xFF, 0xB8, 0xD7, 0x98, 0xFA, 0xDA, 0x25, 0x66, 0xF7, 0xFE, 0x3B, 0xD6, 0x72, 0x34, + 0x7E, 0x74, 0x27, 0xB3, 0x91, 0x90, 0x49, 0x81, 0x6A, 0x99, 0xDB, 0xB7, 0x64, 0xE7, 0xAD, 0xD9, + 0xB6, 0x89, 0x5B, 0x64, 0x0D, 0xA4, 0x51, 0x33, 0x86, 0xCF, 0x52, 0x52, 0x00, 0x94, 0x61, 0x84, + 0xFA, 0x9B, 0x3C, 0xC3, 0xB5, 0xE1, 0x04, 0x68, 0x46, 0x22, 0x9D, 0xD2, 0x2D, 0x3B, 0x04, 0xC3, + 0xAE, 0xD1, 0xB1, 0xED, 0xDC, 0x9A, 0x98, 0xBF, 0xD6, 0x5B, 0x84, 0xAE, 0x3C, 0x91, 0x83, 0x63, + 0x64, 0xE7, 0x2A, 0xAB, 0xE1, 0x50, 0x35, 0xB9, 0x22, 0xD6, 0x79, 0x02, 0x7F, 0xBD, 0x5C, 0x78, + 0x18, 0x56, 0x05, 0x72, 0x11, 0x84, 0x49, 0xDB, 0xE2, 0x5D, 0xEF, 0x98, 0xB5, 0x14, 0x3A, 0x2E, + 0x6A, 0x45, 0xBB, 0x2C, 0x7E, 0xE2, 0x45, 0xE8, 0x8C, 0x52, 0x36, 0x3D, 0x4B, 0xEA, 0x85, 0xC9, + 0x70, 0x0A, 0xF0, 0x83, 0x28, 0x57, 0x76, 0xB7, 0xFE, 0x8C, 0x06, 0x37, 0x9A, 0xD8, 0xAC, 0x35 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (4 * kidx) % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 52926. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_52926.cs +// + +namespace KeyCMF_052926 +{ + static const BYTE Keytable[] = + { + 0x03, 0xCB, 0x40, 0xCD, 0x0E, 0x02, 0xDC, 0x5F, 0x81, 0x9B, 0x70, 0xE5, 0x31, 0x7D, 0x77, 0x4E, + 0x6D, 0xF0, 0x21, 0xE2, 0xB0, 0x8E, 0xAB, 0xEB, 0x7F, 0xE8, 0x64, 0x50, 0x74, 0x07, 0xC6, 0xD5, + 0x7E, 0x64, 0x20, 0x07, 0xD4, 0x7C, 0x4E, 0x7E, 0x09, 0xE4, 0x96, 0x57, 0x05, 0x04, 0x9D, 0x9E, + 0xCC, 0x1B, 0xC6, 0x22, 0xAD, 0xC4, 0xE1, 0x28, 0xC4, 0x4C, 0x86, 0x0C, 0xE1, 0x43, 0x73, 0xDE, + 0x1B, 0x1F, 0xA0, 0x58, 0xD4, 0xFB, 0xBB, 0x35, 0x3A, 0x2F, 0xAD, 0x5F, 0x02, 0xFA, 0xB8, 0xCF, + 0x0F, 0xA2, 0x7B, 0x21, 0x58, 0xEC, 0x02, 0x3F, 0x4D, 0x63, 0xF4, 0x8A, 0x4A, 0x2B, 0xAC, 0xDC, + 0x87, 0x41, 0x4E, 0xF4, 0x79, 0xF1, 0xB9, 0xB7, 0x07, 0x9A, 0x80, 0xD8, 0xC3, 0x09, 0x2E, 0x54, + 0x33, 0x30, 0x6A, 0xBC, 0xF1, 0xC6, 0xBF, 0x45, 0x0F, 0x4F, 0x9A, 0x1E, 0xEC, 0xE1, 0xD4, 0xD7, + 0xDF, 0x3D, 0x4F, 0x81, 0x67, 0xB9, 0x23, 0xDD, 0xD3, 0x56, 0xDC, 0x83, 0xE5, 0x03, 0xAA, 0xCE, + 0xAE, 0x99, 0xA5, 0x8F, 0x7A, 0x3F, 0xF2, 0xD3, 0x23, 0x50, 0x0C, 0xEB, 0x98, 0xA9, 0x6A, 0x55, + 0xC6, 0xCD, 0xDC, 0xDA, 0x41, 0xCC, 0xA2, 0x78, 0x94, 0xFA, 0x74, 0xAA, 0x24, 0xD9, 0x68, 0x7A, + 0xA1, 0x91, 0xB6, 0xF5, 0x38, 0xBA, 0x75, 0x2C, 0x12, 0x68, 0x5F, 0x7F, 0xC7, 0x81, 0x85, 0x34, + 0xDC, 0xA5, 0x8B, 0x2F, 0x4F, 0x7E, 0x19, 0x06, 0x79, 0x39, 0x8D, 0xD3, 0xD9, 0x4C, 0xD9, 0x88, + 0x7B, 0x91, 0x62, 0x5D, 0x8D, 0xF6, 0x84, 0x81, 0x78, 0x9D, 0xDC, 0x33, 0x96, 0x34, 0x30, 0x2B, + 0xFB, 0x03, 0xE6, 0x3A, 0x1D, 0x13, 0x7E, 0x00, 0xE0, 0x47, 0xEE, 0xD3, 0x64, 0x6D, 0x0A, 0x05, + 0xF3, 0x79, 0xA5, 0x63, 0x0B, 0xE5, 0x17, 0xF3, 0x1B, 0xB0, 0xE4, 0x71, 0x39, 0x3C, 0x3D, 0x3B, + 0xEB, 0x46, 0x23, 0x7D, 0x52, 0x0E, 0x23, 0x44, 0x64, 0xDE, 0x58, 0xAB, 0x1B, 0x57, 0x3A, 0x97, + 0xC0, 0x37, 0xD1, 0xB9, 0xA1, 0x0F, 0x13, 0xF9, 0x90, 0x65, 0x0E, 0xAB, 0xB7, 0x28, 0xD2, 0xCE, + 0xCB, 0x44, 0x25, 0x1F, 0x50, 0x83, 0x33, 0x6F, 0xCF, 0xD1, 0xF3, 0x33, 0x34, 0x9D, 0xBD, 0x03, + 0xEE, 0x23, 0xE3, 0xB1, 0x3C, 0x06, 0xB0, 0x40, 0xA9, 0x02, 0x28, 0xBF, 0x6B, 0xF7, 0xAF, 0x70, + 0xAA, 0x6A, 0x08, 0xD3, 0xFB, 0x2E, 0x6B, 0x88, 0xD5, 0x30, 0x7F, 0x8E, 0x0A, 0x6F, 0xC4, 0x7C, + 0xAF, 0x84, 0xC8, 0x13, 0x84, 0xD6, 0x0F, 0xC4, 0x5B, 0x50, 0x9E, 0x94, 0xCC, 0x73, 0x3C, 0xEC, + 0x03, 0x2E, 0xB2, 0xDA, 0xF0, 0xDB, 0x57, 0xBD, 0x53, 0x65, 0xF6, 0x7E, 0xA2, 0x76, 0x57, 0x30, + 0x22, 0xFD, 0x3E, 0x66, 0x70, 0x0D, 0xDD, 0x86, 0x66, 0x0D, 0xD7, 0xB8, 0x44, 0x16, 0x09, 0xAF, + 0xBD, 0x81, 0x6E, 0xB2, 0x63, 0xC3, 0x64, 0x49, 0xC0, 0xB0, 0xB5, 0x28, 0x56, 0x94, 0x09, 0x4C, + 0x59, 0x9C, 0x99, 0x36, 0x21, 0xC9, 0xC5, 0x78, 0xA9, 0xC8, 0x96, 0x6D, 0x4B, 0xDC, 0xF8, 0x5D, + 0xE2, 0xCA, 0x5F, 0x64, 0x17, 0xFA, 0x8B, 0xB9, 0xE9, 0xF9, 0x1C, 0x8A, 0x0D, 0x29, 0x45, 0xE4, + 0x7A, 0x37, 0x02, 0x99, 0x01, 0x7B, 0x2D, 0x4F, 0x97, 0x87, 0x9A, 0xDA, 0xCA, 0x7A, 0x3E, 0x57, + 0xFE, 0x56, 0xD3, 0x87, 0xF8, 0xA6, 0x8D, 0x6A, 0xEB, 0x1E, 0xE8, 0xFB, 0xBA, 0x31, 0xFD, 0x3C, + 0x15, 0xCA, 0x15, 0x87, 0x36, 0xC6, 0x3C, 0xC2, 0x41, 0x93, 0xC2, 0xCB, 0x3B, 0x7F, 0x63, 0x99, + 0x22, 0x86, 0x15, 0xE9, 0x9E, 0x60, 0x68, 0x23, 0x6B, 0x0E, 0x97, 0xCB, 0x07, 0x32, 0x91, 0x66, + 0x20, 0x7A, 0xA9, 0x24, 0x9A, 0x63, 0x82, 0xA9, 0x2E, 0x92, 0xAC, 0x4B, 0xC9, 0xE5, 0xB7, 0x02 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)(digest[7] + (ushort) header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (4 * kidx) % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 53537. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_53537.cs +// + +namespace KeyCMF_053537 +{ + static const BYTE Keytable[] = + { + 0x89, 0x48, 0x1F, 0x0A, 0xB3, 0x61, 0x8E, 0xA9, 0x9B, 0xF2, 0xD3, 0x1C, 0x52, 0xF9, 0xE5, 0xDD, + 0xC3, 0xC1, 0x38, 0xB8, 0xC3, 0xD1, 0x5F, 0x04, 0x7A, 0x28, 0x50, 0xEC, 0x4D, 0xFA, 0xA3, 0x54, + 0x56, 0x8F, 0x0B, 0x51, 0x08, 0x98, 0x38, 0x80, 0x97, 0x47, 0x54, 0xE9, 0x90, 0x55, 0x86, 0x96, + 0x06, 0xB1, 0xA7, 0x9D, 0xD0, 0x17, 0x55, 0xDF, 0xE1, 0xDD, 0x5D, 0xAF, 0x1C, 0xE1, 0xC1, 0x3C, + 0x2A, 0x2E, 0xE2, 0xB8, 0xA0, 0x1C, 0x8D, 0x86, 0xEB, 0x4F, 0x1A, 0x1F, 0x92, 0xD2, 0x21, 0xA4, + 0x84, 0xD1, 0xB2, 0x0B, 0xBD, 0x5F, 0x95, 0x30, 0x3D, 0x81, 0x8B, 0x14, 0xDA, 0xFA, 0xA9, 0xD2, + 0x29, 0xF6, 0x56, 0x63, 0xC7, 0x6C, 0x99, 0x67, 0x2F, 0xD2, 0xDF, 0x86, 0x25, 0xC6, 0xDF, 0x18, + 0x85, 0xE0, 0x91, 0xC5, 0x6C, 0x38, 0x08, 0x45, 0xCE, 0x60, 0x2F, 0x49, 0x75, 0x85, 0xE2, 0x08, + 0x93, 0x85, 0xBD, 0xF5, 0xD9, 0x2A, 0xDD, 0x83, 0x49, 0xAF, 0xE2, 0x66, 0xAC, 0xB5, 0x9F, 0xD8, + 0xB7, 0x6A, 0xCD, 0x08, 0x16, 0x9F, 0xA3, 0xA6, 0x3F, 0x68, 0xBD, 0x87, 0xEC, 0xE5, 0x7D, 0x3D, + 0x60, 0x8D, 0x6C, 0x23, 0xB3, 0x6D, 0x72, 0xE6, 0x4B, 0x55, 0x3E, 0x62, 0x7B, 0x0A, 0x70, 0x2F, + 0x2C, 0x9D, 0xA0, 0xC6, 0xC5, 0x1E, 0x21, 0x20, 0x0D, 0xFE, 0x47, 0xC7, 0x0A, 0x3E, 0x4A, 0x3F, + 0x5B, 0x42, 0xEE, 0x75, 0xB7, 0x39, 0x1B, 0xAC, 0x29, 0x85, 0x47, 0x3C, 0x55, 0x21, 0x47, 0xC1, + 0x43, 0xFC, 0xD8, 0xA1, 0x3E, 0xEF, 0x66, 0xF0, 0xA7, 0xB2, 0x52, 0x91, 0x96, 0x08, 0x37, 0x46, + 0x92, 0xD4, 0xE8, 0xA0, 0x19, 0x92, 0x84, 0x08, 0x81, 0x0E, 0x91, 0xFE, 0x7D, 0x0B, 0xE3, 0xDF, + 0x27, 0xA5, 0xDF, 0x03, 0x70, 0x1E, 0xC5, 0xA8, 0x05, 0xBE, 0xA5, 0xF6, 0x11, 0x08, 0x04, 0xE8, + 0x80, 0x50, 0x36, 0x24, 0x0D, 0xD1, 0x97, 0x99, 0x99, 0x92, 0xCB, 0x8C, 0x83, 0x42, 0x5A, 0xC2, + 0x9E, 0x51, 0xCC, 0xF5, 0x69, 0xEC, 0x78, 0x3F, 0x3E, 0x7B, 0xE6, 0x98, 0x1F, 0xCD, 0x58, 0xAE, + 0xE4, 0x30, 0xB2, 0x62, 0x15, 0xA9, 0xB9, 0xFC, 0x4D, 0xA6, 0x52, 0xE5, 0x03, 0x65, 0x5F, 0xA9, + 0xCE, 0x6C, 0x50, 0xEA, 0xC5, 0xEE, 0x15, 0xA3, 0xE3, 0x97, 0xD6, 0xB0, 0x3B, 0xBC, 0x4B, 0xFC, + 0x29, 0xC3, 0xC1, 0x15, 0xE1, 0x97, 0x96, 0xBF, 0xBC, 0xC0, 0x55, 0xBA, 0xEC, 0xCE, 0x50, 0xCE, + 0x55, 0xCB, 0x46, 0x64, 0x18, 0xD8, 0x2E, 0x02, 0x7D, 0xD6, 0x91, 0x9B, 0x20, 0x2A, 0xA9, 0x3B, + 0x66, 0x71, 0x9A, 0xCE, 0xA3, 0xB0, 0xD6, 0xF2, 0x4D, 0xFD, 0xC7, 0xB7, 0x5B, 0x01, 0x42, 0xA8, + 0x8B, 0x52, 0x60, 0x28, 0x40, 0x14, 0x54, 0x93, 0x5C, 0xDC, 0xA1, 0x61, 0xE1, 0x9C, 0xEC, 0xEA, + 0xD1, 0x44, 0x6A, 0x59, 0x1C, 0xA6, 0xDF, 0x83, 0xE1, 0x5F, 0x79, 0xD8, 0x98, 0xD0, 0xFD, 0xAD, + 0x5B, 0x40, 0xAB, 0x3A, 0xB6, 0x89, 0x31, 0x8C, 0x8A, 0x1F, 0x68, 0x40, 0xDF, 0x7E, 0x6C, 0x6A, + 0xB7, 0x80, 0x54, 0x14, 0x94, 0xAB, 0x6C, 0x34, 0x8F, 0x61, 0xD6, 0x40, 0xD9, 0x09, 0x11, 0x67, + 0x8F, 0xC2, 0xAE, 0xE0, 0xC0, 0xBD, 0xE7, 0x4F, 0x19, 0xAE, 0xEC, 0x9A, 0xDB, 0x2B, 0xED, 0x60, + 0x8A, 0xDD, 0x1B, 0xE1, 0x45, 0x02, 0x96, 0x01, 0xF5, 0xEF, 0x3D, 0x5B, 0x0A, 0xE0, 0xA4, 0xA3, + 0xAE, 0xE5, 0xD7, 0xCC, 0xD6, 0xF2, 0x24, 0xFF, 0x41, 0xFD, 0x7A, 0x83, 0x5E, 0xC7, 0xC1, 0x88, + 0xFD, 0xB3, 0xFC, 0x5B, 0xA4, 0xE3, 0x93, 0x10, 0xB1, 0xBE, 0x38, 0x5C, 0x0E, 0xA6, 0xB9, 0x71, + 0x52, 0x1B, 0xB1, 0x3D, 0x8A, 0x16, 0xCE, 0xB2, 0x96, 0x02, 0xD5, 0x7B, 0x7B, 0x88, 0x06, 0x12 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod((digest[13] * 2) - length, 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 54011. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_54011.cs +// + +namespace KeyCMF_054011 +{ + static const BYTE Keytable[] = + { + 0x6E, 0xA2, 0x64, 0x89, 0xD2, 0xCA, 0x24, 0xFE, 0x29, 0xBC, 0xDE, 0xAB, 0x82, 0x77, 0xAE, 0x0B, + 0x86, 0xA0, 0x18, 0xD0, 0x9D, 0xCF, 0xF5, 0x86, 0x1E, 0x48, 0xDE, 0xC1, 0x5F, 0x59, 0x08, 0xED, + 0x9F, 0x67, 0xCD, 0xBC, 0x69, 0x40, 0xA9, 0x8F, 0xB2, 0x38, 0xBF, 0x07, 0xE0, 0x0E, 0x23, 0x0C, + 0xE1, 0xE4, 0x61, 0xAB, 0xD5, 0x6C, 0x9D, 0x52, 0x2D, 0x81, 0xBA, 0xD6, 0x4E, 0x23, 0x8F, 0xE0, + 0x51, 0x3E, 0x26, 0xF5, 0x34, 0xF3, 0xB9, 0x75, 0xFF, 0x57, 0x96, 0x19, 0x3A, 0x4D, 0x02, 0x16, + 0x2B, 0x40, 0x87, 0x7F, 0x3E, 0x13, 0xD4, 0xA2, 0x53, 0xC4, 0x8D, 0x49, 0x85, 0xD3, 0x6C, 0x36, + 0xE0, 0x6B, 0x49, 0x9F, 0x96, 0xC2, 0xC3, 0xDE, 0x25, 0x77, 0x39, 0xD8, 0xE5, 0x94, 0x4E, 0x2D, + 0x41, 0x7B, 0x44, 0x97, 0x4C, 0xA8, 0x32, 0x49, 0x66, 0x56, 0xBE, 0xA0, 0xD5, 0xA8, 0x6E, 0xB3, + 0x4B, 0xF1, 0x4F, 0x26, 0x5D, 0x9D, 0xED, 0xE4, 0x31, 0x68, 0xB9, 0x25, 0x3B, 0xDB, 0x14, 0x91, + 0x80, 0x51, 0x34, 0x34, 0x9A, 0x61, 0xDA, 0xE8, 0x77, 0xCA, 0x4F, 0xA0, 0xD9, 0x6D, 0x0E, 0x47, + 0xB6, 0xCA, 0xCE, 0xAE, 0x47, 0x69, 0x87, 0xBA, 0xA2, 0x6A, 0xE1, 0xB2, 0x14, 0xC1, 0x7D, 0x61, + 0xA8, 0x6D, 0x8F, 0xF9, 0x2B, 0x38, 0x04, 0x92, 0x4D, 0x5A, 0x5B, 0xB6, 0x0D, 0x83, 0x96, 0x4D, + 0x0D, 0x2F, 0x12, 0x2A, 0x1D, 0x7E, 0xA3, 0x3F, 0xE9, 0xA8, 0xF5, 0x18, 0xE1, 0x3F, 0x84, 0x13, + 0x61, 0xC3, 0xFD, 0x30, 0xE4, 0x36, 0x72, 0x67, 0x50, 0x7F, 0x04, 0xDB, 0xAB, 0x15, 0x0F, 0x73, + 0x90, 0xBC, 0xF1, 0x0E, 0x19, 0x7B, 0xD9, 0x13, 0x78, 0x7F, 0x3F, 0x73, 0xBF, 0xA4, 0xA0, 0xC8, + 0x86, 0xE7, 0x3F, 0x83, 0x31, 0xC3, 0x8A, 0x75, 0x71, 0x75, 0xD5, 0xFF, 0x90, 0x37, 0xCF, 0x75, + 0x92, 0xD8, 0xB8, 0x32, 0x0D, 0xBC, 0x0A, 0xF0, 0x0E, 0x41, 0xDF, 0x46, 0x17, 0xD8, 0x79, 0xCC, + 0xC3, 0xA0, 0x30, 0x71, 0xE2, 0x4A, 0xC7, 0x78, 0xEF, 0x44, 0x58, 0x0D, 0x52, 0x81, 0xD7, 0xA9, + 0x7B, 0x38, 0xE3, 0x0A, 0xA1, 0xAF, 0x72, 0x6D, 0x74, 0xFE, 0x13, 0x8C, 0x0C, 0x65, 0x9A, 0x89, + 0xB9, 0x50, 0x6E, 0x65, 0x28, 0xAD, 0x14, 0x5E, 0x55, 0x13, 0x8E, 0x2F, 0xEB, 0x04, 0xBB, 0x5B, + 0x2D, 0x18, 0x5B, 0x91, 0x2B, 0xE6, 0x92, 0x70, 0x85, 0x35, 0x92, 0x1C, 0x01, 0xAB, 0xF9, 0x14, + 0x3B, 0xB8, 0x49, 0x7B, 0x10, 0xCF, 0xAE, 0xCC, 0xFB, 0x30, 0xCF, 0x06, 0xA5, 0xF1, 0xC2, 0x40, + 0xCA, 0x25, 0xFA, 0xE2, 0xC8, 0x18, 0x9C, 0xED, 0xEE, 0x5A, 0xB4, 0x64, 0x78, 0x34, 0x4C, 0xA4, + 0x1E, 0xF7, 0x22, 0xEC, 0x08, 0x74, 0x25, 0x4D, 0xAC, 0xD6, 0xF0, 0x82, 0x66, 0xC9, 0xB9, 0x69, + 0x5B, 0x91, 0x5A, 0x54, 0x6B, 0x79, 0x4D, 0x3E, 0xBD, 0x0B, 0xC8, 0x70, 0x6B, 0x08, 0xA7, 0x07, + 0x09, 0xCB, 0xE1, 0xB9, 0x0C, 0x74, 0x16, 0x85, 0xA3, 0xB4, 0xD6, 0x3B, 0x22, 0x8B, 0xD8, 0x88, + 0x27, 0xE8, 0x7A, 0xF2, 0xB7, 0x18, 0x48, 0xD5, 0x39, 0x75, 0x59, 0x5A, 0x47, 0x57, 0xA0, 0xDA, + 0xB9, 0x23, 0xBD, 0xC4, 0x91, 0xA9, 0xA8, 0xBA, 0x20, 0x09, 0x89, 0x51, 0xDB, 0x42, 0x04, 0xF6, + 0xCC, 0xD4, 0xD4, 0x8A, 0xAA, 0x6B, 0x17, 0x78, 0xFC, 0x85, 0x5B, 0xED, 0x97, 0x85, 0xDC, 0x92, + 0xE0, 0xCF, 0x4E, 0x36, 0x45, 0x0B, 0x96, 0x11, 0x12, 0x08, 0x98, 0x60, 0x96, 0xA9, 0x11, 0xFC, + 0xAA, 0x7A, 0x18, 0xF1, 0x26, 0x65, 0x9E, 0xBC, 0x91, 0x7B, 0x0C, 0xB7, 0xB0, 0x70, 0x63, 0xBD, + 0x17, 0x60, 0xC2, 0x66, 0x56, 0x37, 0xC0, 0xE6, 0x99, 0x5F, 0xBF, 0x6A, 0x77, 0x7A, 0x39, 0x9F + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + uint increment = kidx % 61; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) ((digest[7] + header.m_dataCount) & 511); + + for (int i = 0; i != length; ++i) + { + kidx += (uint) header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 54052. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_54052.cs +// + +namespace KeyCMF_054052 +{ + static const BYTE Keytable[] = + { + 0x60, 0x03, 0x09, 0x34, 0xBC, 0x31, 0x93, 0x6B, 0x72, 0x44, 0x43, 0xD1, 0xC7, 0x57, 0xA7, 0x0D, + 0x26, 0x55, 0xB0, 0xF8, 0x15, 0x41, 0x4E, 0xBB, 0xED, 0xAB, 0x49, 0x4C, 0x58, 0x18, 0x95, 0x23, + 0x85, 0xFA, 0x92, 0xEB, 0x56, 0x6B, 0x61, 0xC4, 0x60, 0x67, 0xDB, 0x4E, 0x6C, 0x3B, 0x94, 0x43, + 0xFF, 0x7D, 0xF1, 0xA6, 0x28, 0x09, 0x12, 0x52, 0x73, 0xC6, 0xF3, 0x85, 0x49, 0x33, 0xEC, 0x5D, + 0x31, 0xFF, 0x59, 0x52, 0x2E, 0xCE, 0x95, 0xEC, 0xCC, 0x52, 0x3D, 0xBC, 0xCD, 0x5F, 0xC9, 0x9B, + 0x05, 0xC8, 0xD2, 0xA3, 0x61, 0x09, 0x9B, 0xDF, 0x0A, 0xE5, 0x0B, 0x27, 0xF9, 0x0E, 0x2A, 0xEA, + 0xC2, 0x1F, 0x43, 0x0E, 0xF2, 0xF9, 0xC2, 0x7A, 0x30, 0x52, 0x22, 0x1E, 0xB0, 0x25, 0x97, 0x1B, + 0x86, 0xA1, 0x26, 0x1F, 0x8A, 0x49, 0x1D, 0x47, 0xC9, 0xA7, 0x46, 0xCA, 0xF3, 0x07, 0xCB, 0xD1, + 0x54, 0x6B, 0xE6, 0x00, 0x3E, 0xEE, 0x46, 0x82, 0xE6, 0xF1, 0x99, 0x64, 0x92, 0x42, 0xCB, 0x19, + 0x85, 0x3B, 0xC8, 0x8D, 0xC2, 0xDB, 0x04, 0xC4, 0x10, 0x4B, 0x9B, 0xB0, 0xF2, 0x36, 0x4E, 0x6F, + 0x65, 0x7B, 0x1C, 0xA1, 0x62, 0x3D, 0x7C, 0x62, 0x55, 0x0E, 0xC8, 0x7B, 0xD6, 0xBA, 0xB2, 0xFB, + 0x07, 0xD9, 0x45, 0x04, 0xF0, 0x47, 0xE7, 0xC3, 0xF7, 0x02, 0x52, 0x35, 0x0D, 0x97, 0xC3, 0x19, + 0xC0, 0x8F, 0x92, 0x10, 0xB1, 0x6B, 0xB8, 0x8D, 0xD0, 0x78, 0x46, 0x79, 0x6D, 0xA6, 0x61, 0x39, + 0x1D, 0xF2, 0x35, 0x15, 0x3D, 0x80, 0x0E, 0x5D, 0x7F, 0x88, 0x83, 0xC3, 0xBD, 0x7F, 0x32, 0x35, + 0x94, 0x73, 0x19, 0xDE, 0x74, 0x9C, 0x12, 0xDA, 0x75, 0x10, 0x73, 0xB2, 0x91, 0x31, 0x17, 0x63, + 0xAD, 0xA7, 0x66, 0x74, 0x21, 0x06, 0x26, 0x90, 0x23, 0x0E, 0xE7, 0xDB, 0xDC, 0xA4, 0xF5, 0x3F, + 0x0F, 0x43, 0x84, 0x13, 0x77, 0x5C, 0x23, 0xED, 0x8F, 0x0E, 0x4B, 0x99, 0xB4, 0x47, 0xB9, 0x17, + 0xC7, 0x42, 0xEC, 0xCF, 0x66, 0xDD, 0x07, 0xBC, 0xD0, 0x7F, 0xEE, 0x10, 0xF6, 0x81, 0x43, 0xC5, + 0x2A, 0x50, 0xF2, 0xF6, 0x0A, 0xD1, 0x1D, 0x44, 0x70, 0xD5, 0x63, 0x19, 0x8A, 0xB7, 0xB9, 0x90, + 0x0C, 0x04, 0xE5, 0xBB, 0xA8, 0xC0, 0x3A, 0x3B, 0x03, 0x41, 0x0B, 0xCF, 0x80, 0xB4, 0x0A, 0xDC, + 0x40, 0x70, 0xF0, 0x60, 0xB3, 0x59, 0x37, 0x45, 0x9D, 0x61, 0xE7, 0x95, 0x3C, 0x42, 0x0F, 0x40, + 0x67, 0x52, 0x87, 0x01, 0xCA, 0xA5, 0x21, 0x64, 0x6F, 0xEF, 0x9C, 0xDA, 0x2E, 0x3D, 0x8D, 0xE7, + 0x18, 0x84, 0xC3, 0x73, 0x48, 0xBA, 0x93, 0xE4, 0xBF, 0x9F, 0xF9, 0x0B, 0x97, 0x6B, 0x6B, 0xEF, + 0xA0, 0xDD, 0x5B, 0x35, 0x09, 0x9A, 0xBF, 0x0F, 0xEE, 0x2F, 0xF8, 0x78, 0x32, 0xD0, 0x70, 0xA0, + 0x2A, 0x2E, 0xD8, 0x9C, 0xF3, 0xD7, 0xC0, 0xB6, 0x25, 0x22, 0x2D, 0x03, 0x0A, 0xF5, 0xC1, 0x1E, + 0xA1, 0xDE, 0x3F, 0x95, 0x80, 0xF6, 0xC8, 0x74, 0xFA, 0x56, 0xDC, 0x09, 0xD7, 0x0C, 0x56, 0x4A, + 0x53, 0x00, 0x4E, 0x49, 0x7C, 0x5C, 0x6F, 0xAF, 0x5F, 0xD0, 0xE5, 0xCF, 0x99, 0x81, 0xD8, 0xAE, + 0x21, 0x1F, 0xC5, 0x88, 0x01, 0xF6, 0x22, 0x0B, 0xD6, 0xAB, 0x0A, 0xBD, 0xDC, 0xBC, 0x73, 0x9D, + 0xDA, 0xA4, 0x0F, 0xB6, 0x64, 0x06, 0x43, 0xF2, 0x8A, 0xD5, 0xD2, 0x97, 0xDE, 0x26, 0xE3, 0xC2, + 0x4F, 0x83, 0x7B, 0x2B, 0xED, 0x49, 0xFF, 0x33, 0xE7, 0x1F, 0x96, 0xE1, 0xB1, 0x45, 0xE4, 0x50, + 0xF1, 0xC3, 0x3C, 0x7B, 0xE9, 0x78, 0x3D, 0x2F, 0x82, 0xD1, 0x71, 0xCF, 0xBC, 0x22, 0x51, 0x4B, + 0x6A, 0xA2, 0xFF, 0x28, 0x04, 0xF5, 0x9D, 0x48, 0xF8, 0x26, 0x81, 0x01, 0x55, 0x27, 0xF5, 0x29 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + buffer[i] ^= digest[SignedMod(i + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 54255. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_54255.cs +// + +namespace KeyCMF_054255 +{ + static const BYTE Keytable[] = + { + 0x1D, 0x02, 0xFF, 0xF4, 0x74, 0x36, 0xA3, 0xCB, 0x39, 0x11, 0x04, 0xDD, 0xA1, 0xFD, 0xA6, 0xD6, + 0x5B, 0xBB, 0x45, 0x69, 0x5F, 0x3E, 0xBA, 0x2A, 0xC9, 0xAF, 0xF6, 0x34, 0x1A, 0x78, 0xA1, 0x36, + 0x8D, 0xBE, 0xEE, 0x94, 0xE0, 0x49, 0xCC, 0x3C, 0xD3, 0xAD, 0x0F, 0x1F, 0x9D, 0x41, 0x28, 0xD5, + 0xD4, 0xB6, 0x09, 0x53, 0xDD, 0xC5, 0xE1, 0x04, 0x53, 0x8D, 0x13, 0xBD, 0xBB, 0x2E, 0x56, 0xE0, + 0x67, 0xE1, 0x26, 0x1C, 0xEC, 0x90, 0x12, 0x40, 0x2E, 0xAD, 0x45, 0x52, 0x98, 0xC4, 0x91, 0x9B, + 0xF7, 0xA1, 0x9E, 0x8A, 0x8F, 0x7D, 0x83, 0x78, 0xED, 0x45, 0x02, 0xCF, 0x94, 0xF9, 0x7F, 0xC1, + 0xC2, 0x41, 0x14, 0x52, 0x10, 0xB0, 0x0F, 0xA9, 0x49, 0xE1, 0xE3, 0xFD, 0xE3, 0xFC, 0xE4, 0x49, + 0x55, 0x64, 0xD8, 0x83, 0xEE, 0xD1, 0x03, 0x7B, 0x8C, 0x32, 0xFE, 0x21, 0xB9, 0xCE, 0xF7, 0xEC, + 0x72, 0x67, 0x25, 0xD5, 0x51, 0x70, 0x26, 0xBA, 0x9D, 0x85, 0x30, 0x14, 0xE6, 0xC7, 0x57, 0x15, + 0xDA, 0x2A, 0xEA, 0xD7, 0x55, 0xDC, 0xAB, 0xB7, 0x50, 0xAD, 0xD9, 0x2B, 0xFD, 0x3E, 0xF3, 0xAC, + 0xB8, 0xBD, 0x2F, 0xB4, 0xA6, 0xC9, 0x4A, 0x7D, 0x63, 0x4F, 0x70, 0xA0, 0xC1, 0x64, 0x85, 0x18, + 0x71, 0x99, 0x89, 0xDE, 0x97, 0x87, 0xA3, 0x09, 0x66, 0xA2, 0xF1, 0x76, 0x22, 0x95, 0x03, 0xBC, + 0x09, 0xBB, 0xFE, 0x72, 0x61, 0x85, 0x0C, 0x97, 0x55, 0xD3, 0x07, 0x3A, 0x5C, 0x57, 0xB6, 0xD1, + 0xE0, 0xEF, 0x76, 0x3D, 0x74, 0x18, 0xBA, 0x37, 0x94, 0x03, 0xCE, 0x97, 0xDE, 0xEB, 0xB9, 0x34, + 0x90, 0x2A, 0x13, 0x11, 0xE0, 0xC8, 0x7C, 0x5D, 0xF7, 0xBE, 0xB2, 0x22, 0x7E, 0xBA, 0x08, 0xB2, + 0xF7, 0xEC, 0x9B, 0x2E, 0x01, 0xBC, 0x56, 0xA7, 0x84, 0x52, 0x34, 0x06, 0xC6, 0x73, 0x2B, 0xF0, + 0x5B, 0xB5, 0xEB, 0xC1, 0x43, 0x5E, 0x8F, 0xB4, 0x0E, 0x06, 0x4D, 0x9C, 0x42, 0xE4, 0x87, 0x0F, + 0x8B, 0x7C, 0x8E, 0x8F, 0xCD, 0xA6, 0x98, 0xBD, 0x85, 0xD8, 0x92, 0xB4, 0x90, 0x1C, 0x95, 0xE0, + 0x4B, 0x87, 0xC6, 0xE6, 0x8C, 0xD1, 0x0B, 0xB7, 0x86, 0x33, 0x31, 0xD4, 0x30, 0x91, 0x06, 0xC6, + 0xA2, 0x9E, 0x06, 0xD3, 0xE5, 0x4D, 0x66, 0x51, 0x71, 0xDF, 0x21, 0x20, 0x90, 0x2C, 0x76, 0xDA, + 0x71, 0x50, 0xFD, 0x71, 0xA0, 0x44, 0x4E, 0xAB, 0x3B, 0x93, 0x72, 0xA1, 0x4F, 0xF5, 0xB1, 0xEF, + 0x78, 0x63, 0x1D, 0x13, 0xBA, 0x76, 0x03, 0x42, 0x67, 0x2C, 0x32, 0xB9, 0xFB, 0x06, 0x9B, 0x50, + 0x26, 0x21, 0xF6, 0x9A, 0xC9, 0x0A, 0x9A, 0x30, 0xCA, 0x0A, 0x5D, 0x1E, 0x8F, 0x58, 0x29, 0x81, + 0x2E, 0x60, 0xD0, 0xF5, 0x65, 0x55, 0xE6, 0xDC, 0x74, 0x56, 0x8B, 0x81, 0x45, 0x37, 0x0F, 0x0D, + 0x6B, 0xDF, 0x15, 0xDF, 0xD7, 0x38, 0x71, 0xD2, 0x16, 0xC1, 0x40, 0x2D, 0xCD, 0xB7, 0x1B, 0x7C, + 0xBB, 0x5B, 0x50, 0x1B, 0xE9, 0xE0, 0xE3, 0xF2, 0xED, 0x25, 0xB4, 0x18, 0x03, 0xF3, 0x93, 0x70, + 0x8F, 0x06, 0x72, 0x82, 0xA5, 0xE8, 0x63, 0x9C, 0x6E, 0x1D, 0x87, 0x3D, 0x1F, 0x05, 0xBD, 0x72, + 0x98, 0x47, 0xD3, 0x55, 0xB2, 0xDC, 0xFC, 0xF7, 0x20, 0x65, 0x66, 0xC3, 0xD2, 0x11, 0x8C, 0xD8, + 0x51, 0xDC, 0x35, 0xA9, 0xFA, 0x6D, 0x42, 0xF1, 0xCB, 0xE6, 0x90, 0x68, 0x4B, 0xA0, 0xCB, 0xA8, + 0x2B, 0x18, 0x09, 0x4F, 0xF4, 0x2E, 0x3A, 0xB3, 0x60, 0xCF, 0xB7, 0xF1, 0x0F, 0x99, 0xE5, 0x08, + 0x65, 0x69, 0x5D, 0x81, 0xD1, 0x49, 0x87, 0x52, 0xFD, 0x7E, 0x98, 0xC7, 0x54, 0x33, 0x52, 0xA4, + 0xF7, 0x8D, 0xDF, 0x0A, 0x29, 0xFC, 0x90, 0xC4, 0x82, 0x73, 0xB4, 0xCA, 0xD4, 0x05, 0xC3, 0x78 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(i + kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 54983. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_54983.cs +// + +namespace KeyCMF_054983 +{ + static const BYTE Keytable[] = + { + 0xA1, 0x81, 0xCD, 0x19, 0x0B, 0x13, 0xE6, 0xC8, 0xBB, 0x73, 0x66, 0xD1, 0x79, 0x64, 0x06, 0x96, + 0xA1, 0x13, 0x57, 0x3C, 0xB4, 0x6D, 0x18, 0x5C, 0x8A, 0x14, 0x59, 0x66, 0x59, 0x7E, 0x5C, 0x65, + 0x25, 0xDF, 0x78, 0x05, 0xA7, 0x18, 0x93, 0xEB, 0xD6, 0x44, 0x19, 0xA5, 0x3A, 0x73, 0x57, 0xCB, + 0x2A, 0xBB, 0x8D, 0x83, 0xA1, 0x6D, 0x01, 0xFB, 0x9B, 0x38, 0xBE, 0x0C, 0xF0, 0xCA, 0x16, 0xAB, + 0xF7, 0x63, 0xCE, 0xAB, 0x6A, 0xA1, 0x3D, 0x51, 0x69, 0x75, 0xBA, 0x03, 0x87, 0x01, 0x5C, 0x9C, + 0x12, 0x85, 0xD0, 0x21, 0xB7, 0xE4, 0x83, 0x4E, 0x39, 0xFE, 0xAE, 0x54, 0x57, 0x80, 0xA6, 0x73, + 0xF0, 0x10, 0xDB, 0xEF, 0xD3, 0xC9, 0x17, 0x8A, 0xD6, 0xA8, 0x90, 0xAD, 0xFB, 0xE6, 0x05, 0x70, + 0x4F, 0xDF, 0x78, 0xD7, 0xEA, 0x59, 0x24, 0xBF, 0xA0, 0x9E, 0x19, 0x32, 0xD3, 0x29, 0xDE, 0x07, + 0x23, 0x03, 0xFE, 0x7F, 0xDC, 0x02, 0xEB, 0xBD, 0x7E, 0x5A, 0xC0, 0x9A, 0x1D, 0x89, 0x04, 0x8D, + 0xED, 0xCD, 0x90, 0xD1, 0x7D, 0xC2, 0x19, 0x59, 0xEF, 0xFB, 0x97, 0xAA, 0x2D, 0x2F, 0x3C, 0x97, + 0x5A, 0xDD, 0x03, 0x76, 0x0E, 0x95, 0x30, 0xEF, 0x6D, 0x3D, 0xF0, 0x76, 0xE3, 0x49, 0x27, 0x98, + 0xBA, 0xF2, 0x5C, 0x47, 0xED, 0xAB, 0x84, 0x8D, 0x45, 0xCE, 0x57, 0x10, 0x95, 0x54, 0x01, 0xF5, + 0x24, 0xBD, 0x4C, 0x47, 0xD7, 0x27, 0xAB, 0xBA, 0xEE, 0xFF, 0x00, 0xC1, 0xDD, 0x3C, 0x55, 0xA0, + 0x25, 0xDD, 0x93, 0xBF, 0x62, 0x1B, 0xA1, 0x3B, 0x28, 0x4D, 0xD6, 0xF1, 0xA5, 0xD8, 0x9E, 0x8E, + 0x16, 0x30, 0x94, 0x84, 0xE8, 0xC8, 0x68, 0xE3, 0x15, 0x80, 0xEE, 0xDA, 0x51, 0xDB, 0xA0, 0x70, + 0x81, 0xFE, 0x87, 0x29, 0xF2, 0x3A, 0x63, 0x0E, 0xB5, 0xFC, 0x51, 0xC4, 0x55, 0xB9, 0x46, 0xA3, + 0x59, 0xBA, 0xC3, 0x5B, 0xA9, 0x7F, 0x92, 0x97, 0x25, 0x20, 0x39, 0x82, 0xAA, 0x90, 0xCF, 0x0A, + 0x08, 0x89, 0x89, 0x07, 0xFC, 0xFB, 0x52, 0x14, 0xD7, 0x71, 0xEB, 0x0F, 0x5A, 0x5D, 0x84, 0x7A, + 0x72, 0xB3, 0x07, 0x95, 0x90, 0x1E, 0x0D, 0x03, 0xF0, 0xC6, 0x01, 0xC0, 0x48, 0x83, 0x67, 0xC3, + 0x6B, 0x7F, 0xD6, 0x15, 0xB9, 0xF0, 0xD3, 0xCD, 0x65, 0x5A, 0x38, 0x65, 0x2D, 0xB9, 0x82, 0xC3, + 0xB7, 0x90, 0x49, 0xCF, 0x67, 0x15, 0x71, 0xAC, 0x93, 0x53, 0x7A, 0xFA, 0x97, 0x03, 0xBD, 0xA0, + 0xD6, 0x1E, 0x3E, 0x5D, 0x54, 0xE3, 0xA9, 0xC3, 0xCC, 0x5C, 0x33, 0xAA, 0x83, 0x00, 0x14, 0xF1, + 0x7E, 0xBD, 0xE9, 0x3A, 0x2E, 0xF2, 0x5B, 0xFF, 0x6E, 0x03, 0xFD, 0x2D, 0x69, 0x1C, 0x56, 0x4E, + 0x28, 0xF2, 0x74, 0xF9, 0x17, 0xEC, 0xDB, 0xF8, 0x0F, 0x2B, 0xDA, 0x2D, 0xBA, 0x3F, 0x0A, 0xEC, + 0xBA, 0x1A, 0x76, 0xF2, 0x91, 0x99, 0xE5, 0xDA, 0xE4, 0x97, 0xDC, 0xE7, 0x72, 0x34, 0x8E, 0x0E, + 0x9E, 0x66, 0xD6, 0xE3, 0xF6, 0x88, 0x5F, 0xD3, 0xFF, 0xC9, 0xAD, 0x6F, 0xD2, 0xF6, 0xEE, 0x60, + 0x30, 0xBD, 0xF4, 0xC2, 0xC0, 0x30, 0x42, 0xBB, 0x28, 0xCA, 0xFE, 0x0A, 0x78, 0xAC, 0x59, 0x5E, + 0xDC, 0x7D, 0x30, 0x9B, 0xE1, 0x05, 0x1F, 0x04, 0xDA, 0xE7, 0x99, 0x8B, 0x99, 0x46, 0x5D, 0xFA, + 0xBF, 0xCF, 0x22, 0xE9, 0xE6, 0x24, 0xBC, 0x14, 0xE0, 0x5D, 0x84, 0xC2, 0x23, 0xFE, 0xF1, 0xB3, + 0xB4, 0xF2, 0x02, 0xF0, 0xC5, 0x2A, 0xD6, 0x57, 0x60, 0x49, 0xB1, 0xBA, 0xB7, 0x20, 0x46, 0x04, + 0xF3, 0xCC, 0xF6, 0x51, 0xDC, 0x2D, 0x97, 0xE2, 0xD8, 0xF1, 0xE1, 0xA3, 0x2D, 0x61, 0x33, 0xF6, + 0xBA, 0x2C, 0xB1, 0xC7, 0x63, 0x9D, 0x41, 0x04, 0x79, 0x82, 0x7A, 0x65, 0x20, 0x6D, 0xA2, 0x27 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (header.m_buildVersion * length); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(header.m_buildVersion + kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 55290. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_55290.cs +// + +namespace KeyCMF_055290 +{ + static const BYTE Keytable[] = + { + 0x86, 0xF0, 0x47, 0x12, 0xB7, 0xA2, 0x78, 0x57, 0xE3, 0x20, 0x8E, 0x5A, 0xF4, 0x0B, 0xE1, 0xD4, + 0x72, 0x99, 0xE3, 0xA7, 0x6E, 0x42, 0x04, 0x16, 0x5C, 0x05, 0x40, 0xE7, 0x19, 0x78, 0x83, 0xF1, + 0x8E, 0x1A, 0xA4, 0x22, 0x4C, 0xA7, 0xB6, 0xE0, 0xD0, 0x46, 0xB6, 0x9D, 0x4F, 0xA1, 0x77, 0x72, + 0x2B, 0x23, 0x37, 0x03, 0xB6, 0x52, 0x47, 0x86, 0x22, 0xB0, 0x70, 0x4C, 0x74, 0x75, 0xF3, 0x42, + 0x40, 0x51, 0x03, 0x92, 0xA1, 0x10, 0xDD, 0x20, 0xF7, 0x4E, 0xDD, 0x5C, 0x4E, 0x72, 0x33, 0x2D, + 0x80, 0x8E, 0x52, 0x5E, 0xC3, 0xD8, 0x5F, 0xF2, 0x89, 0x49, 0xA8, 0x59, 0x13, 0xE4, 0x20, 0xA5, + 0x73, 0x4A, 0xFE, 0xA9, 0xC3, 0x15, 0x6F, 0xF4, 0x5E, 0x37, 0xC9, 0x32, 0x97, 0x66, 0x2E, 0xBA, + 0x19, 0x80, 0x64, 0xB8, 0x8C, 0xF6, 0x5D, 0xB8, 0x94, 0x7E, 0x94, 0x57, 0xD5, 0x87, 0x42, 0xF9, + 0xF4, 0xC3, 0x6E, 0x9C, 0xE5, 0x94, 0xAA, 0xD5, 0x5A, 0x8C, 0x7D, 0x5A, 0x60, 0x22, 0x36, 0x50, + 0xD1, 0xE6, 0x14, 0x09, 0xAD, 0xAC, 0x5A, 0x22, 0xF6, 0x66, 0x92, 0x79, 0x8B, 0x23, 0x7B, 0x14, + 0x1E, 0x32, 0xF6, 0x96, 0xD7, 0xEE, 0x24, 0x5B, 0xFD, 0x79, 0xAE, 0xC8, 0x5A, 0xCD, 0xAA, 0xC5, + 0x23, 0x28, 0x54, 0xEB, 0x5C, 0x7F, 0x99, 0x18, 0x19, 0xFE, 0x3D, 0xC9, 0x28, 0xE2, 0xE0, 0x0F, + 0xF5, 0xAA, 0xC0, 0x46, 0xA1, 0x03, 0x60, 0xDD, 0x1B, 0x8C, 0x57, 0xC8, 0x70, 0xCB, 0x8D, 0x25, + 0x59, 0x07, 0xF3, 0xC2, 0xE2, 0x6E, 0xF2, 0x97, 0x32, 0x0E, 0xEC, 0xDB, 0xCE, 0xF2, 0x0F, 0xB9, + 0x5A, 0x83, 0x5A, 0xB3, 0xD3, 0xDC, 0x55, 0x27, 0xDD, 0x75, 0x21, 0x24, 0x11, 0xFB, 0xE6, 0xAB, + 0x4E, 0x52, 0xA8, 0xD1, 0xBA, 0x58, 0x0B, 0x36, 0x31, 0xD5, 0x13, 0x48, 0xBD, 0xDB, 0xBE, 0x88, + 0x08, 0x15, 0x4C, 0xC9, 0x57, 0x36, 0xDA, 0xEE, 0x6A, 0x4E, 0x06, 0x3D, 0x17, 0x09, 0xB0, 0x4F, + 0xBD, 0x33, 0xCC, 0xC2, 0x9E, 0xC2, 0x37, 0xED, 0x78, 0x81, 0x73, 0xD0, 0xA7, 0x58, 0x46, 0xDA, + 0x9D, 0xFE, 0x64, 0x2D, 0x33, 0x57, 0x7C, 0xB6, 0x6D, 0x5E, 0xBC, 0x02, 0x36, 0xAE, 0x58, 0x6A, + 0xAA, 0xDE, 0xEA, 0x3D, 0x1B, 0x2A, 0xD9, 0x9D, 0xE4, 0x5B, 0xD8, 0xB6, 0xAC, 0x89, 0xE5, 0x39, + 0xF3, 0x03, 0x8D, 0x52, 0xBB, 0x60, 0x51, 0x94, 0x3A, 0xC8, 0x39, 0xFE, 0x0E, 0x06, 0xDC, 0x66, + 0x2F, 0xB9, 0x02, 0xFA, 0xF1, 0xDE, 0x65, 0x38, 0x38, 0x4B, 0xA8, 0x38, 0x5E, 0xB2, 0x34, 0xC0, + 0x06, 0x39, 0x36, 0xBF, 0x6D, 0xFB, 0x69, 0x60, 0x47, 0x62, 0x54, 0x31, 0x52, 0xE1, 0xF6, 0xF4, + 0x03, 0xB7, 0x9D, 0x9C, 0x3E, 0x4A, 0x13, 0xA6, 0x61, 0x92, 0x42, 0xE9, 0x6C, 0x7B, 0x73, 0xBD, + 0x7C, 0xC9, 0x97, 0x32, 0xEE, 0x78, 0xAF, 0xDD, 0x82, 0xBF, 0x8A, 0xF7, 0x72, 0x12, 0x1B, 0x8D, + 0x5D, 0xE1, 0x0E, 0xF5, 0x12, 0x1C, 0x2F, 0xD3, 0xED, 0x18, 0x6D, 0x8B, 0x2A, 0xED, 0x04, 0x55, + 0xF1, 0x74, 0x96, 0xC8, 0xF1, 0xE3, 0x17, 0x47, 0x97, 0x80, 0xAF, 0x24, 0x29, 0x48, 0xA7, 0x04, + 0xCB, 0x4E, 0x58, 0xE4, 0x2D, 0x71, 0x51, 0x32, 0x9D, 0x8E, 0x43, 0x0A, 0xB1, 0x13, 0x7B, 0x65, + 0xC8, 0x2B, 0xCF, 0x79, 0x7D, 0x36, 0xDE, 0x2A, 0x4B, 0xE2, 0x28, 0xCC, 0x17, 0xDF, 0xAC, 0x59, + 0xB1, 0xAC, 0xFB, 0x55, 0x08, 0x6A, 0x2C, 0x26, 0x50, 0x2D, 0x77, 0x54, 0x7F, 0x50, 0x80, 0x18, + 0xAB, 0xC9, 0x16, 0x2B, 0x70, 0x65, 0x0E, 0x5A, 0xCE, 0x77, 0x27, 0xCB, 0xC1, 0x8A, 0xB2, 0x94, + 0xD9, 0xD7, 0x36, 0x10, 0x9D, 0xAB, 0xF2, 0x8B, 0x03, 0x14, 0x1C, 0xA8, 0xB2, 0xF1, 0x5E, 0xCF + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(digest[7] * Keytable[0]) & 511]; + uint increment = header.m_buildVersion * (uint)header.m_dataCount % 7; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(kidx - 0x49, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 55918. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_55918.cs +// + +namespace KeyCMF_055918 +{ + static const BYTE Keytable[] = + { + 0x62, 0xFC, 0xF8, 0xA1, 0xD5, 0x4A, 0x71, 0x22, 0xB9, 0x7A, 0x93, 0x45, 0xB1, 0x9D, 0x06, 0xE0, + 0xFF, 0xDF, 0x6D, 0x80, 0xA4, 0xD9, 0xF2, 0xEE, 0x39, 0x96, 0x60, 0xB8, 0x85, 0x49, 0x28, 0x4E, + 0x1E, 0x43, 0x20, 0x90, 0xEB, 0xC4, 0xFC, 0x2E, 0x78, 0x60, 0x87, 0xF1, 0x8B, 0x2D, 0xB1, 0x61, + 0x15, 0x22, 0x97, 0xD7, 0x14, 0x0F, 0xA6, 0x67, 0xCF, 0x8E, 0x88, 0x4B, 0xFF, 0xCD, 0xA4, 0xC3, + 0x55, 0x94, 0x8F, 0x0D, 0x84, 0x45, 0x3B, 0xDC, 0xCD, 0x04, 0x10, 0xAD, 0xF5, 0x1C, 0x1B, 0x40, + 0xE3, 0x88, 0x38, 0x74, 0x5A, 0xFC, 0x79, 0x5C, 0x7A, 0x98, 0x26, 0xF9, 0x6F, 0x4D, 0x8A, 0x51, + 0xDD, 0xB8, 0xED, 0xEA, 0xF5, 0x67, 0x4B, 0xD7, 0x2D, 0x5C, 0xB8, 0x50, 0x20, 0x82, 0x88, 0x49, + 0x64, 0xC6, 0x30, 0xA5, 0xD4, 0x52, 0x03, 0x49, 0x95, 0xAA, 0xC5, 0x4A, 0x0E, 0xD5, 0xB3, 0x4B, + 0x2D, 0xA3, 0x75, 0xB1, 0xFF, 0x2F, 0x8A, 0x3C, 0x25, 0x76, 0x8B, 0x9F, 0xB0, 0x83, 0x1B, 0x87, + 0xB7, 0xAD, 0x98, 0x9E, 0x67, 0x3A, 0x68, 0xF4, 0xBE, 0xAB, 0x16, 0xDF, 0x4F, 0xAA, 0xFE, 0x33, + 0x22, 0x34, 0x71, 0xF6, 0xD4, 0x33, 0x5E, 0x1A, 0x0A, 0x6D, 0xC6, 0x96, 0xD0, 0x58, 0xDC, 0x5F, + 0x84, 0xB4, 0x56, 0x77, 0x26, 0x76, 0xF3, 0x53, 0x15, 0xC0, 0x6E, 0xD8, 0x1C, 0x70, 0xBB, 0x3B, + 0x33, 0x25, 0xC9, 0x72, 0xFD, 0x37, 0x3B, 0xD4, 0x28, 0xD4, 0x7E, 0x44, 0xDA, 0x0D, 0x3A, 0xE9, + 0x83, 0xFE, 0x2F, 0xC9, 0xFA, 0xDF, 0x4A, 0xEC, 0xF9, 0x3F, 0xC8, 0xF8, 0x00, 0x92, 0x4E, 0xC0, + 0x2E, 0x83, 0x45, 0xCF, 0xD9, 0xD9, 0x05, 0xEF, 0x04, 0x70, 0x1B, 0xCE, 0x00, 0xC8, 0xDB, 0x02, + 0x61, 0x5A, 0x21, 0x17, 0xD4, 0x89, 0x8A, 0xB0, 0x0F, 0xB0, 0x76, 0x64, 0xE3, 0xBF, 0x42, 0xB4, + 0x41, 0x8E, 0x88, 0xB7, 0x3E, 0x4D, 0xFA, 0x28, 0x1D, 0xBA, 0x60, 0x1D, 0xD2, 0x61, 0x3B, 0x32, + 0x8A, 0x44, 0xCB, 0x2D, 0xB9, 0xB3, 0x04, 0x2E, 0x59, 0x68, 0x7A, 0xF7, 0x76, 0x47, 0xE4, 0xB0, + 0xA3, 0x5B, 0x9B, 0xA6, 0x7F, 0xB0, 0x14, 0xE3, 0x91, 0xB0, 0x4C, 0x89, 0x23, 0xE5, 0x24, 0x95, + 0x52, 0x4F, 0x7F, 0x6D, 0xB5, 0xE9, 0x0C, 0xF2, 0x37, 0x1B, 0x86, 0xDE, 0x63, 0x79, 0xE2, 0xB5, + 0xA5, 0x46, 0x59, 0x17, 0x2E, 0xE2, 0x61, 0x36, 0x0E, 0x14, 0x47, 0x61, 0x60, 0xF4, 0xFC, 0xB8, + 0xF4, 0x90, 0xAF, 0xDF, 0x47, 0xB0, 0xBE, 0xA4, 0x10, 0xC1, 0x19, 0x05, 0x82, 0x9E, 0x60, 0x07, + 0xD2, 0xA1, 0xB6, 0xD3, 0x1A, 0xBB, 0xFD, 0xC6, 0x43, 0x53, 0x06, 0x6F, 0x3A, 0xEE, 0x91, 0xD1, + 0xA3, 0x6D, 0xCD, 0x39, 0x6E, 0x60, 0x5B, 0x9C, 0x70, 0x83, 0x2A, 0x89, 0xFD, 0xC0, 0x99, 0x3C, + 0xF6, 0x7C, 0x36, 0x80, 0xBD, 0xFE, 0xD8, 0x66, 0xE3, 0x3E, 0x1C, 0x95, 0x84, 0x0A, 0x18, 0xB8, + 0x30, 0x96, 0xC4, 0x1D, 0xDC, 0xB1, 0xD7, 0xEC, 0xE7, 0x13, 0x27, 0xBA, 0xD0, 0x03, 0x2A, 0xF3, + 0xB1, 0xC9, 0x69, 0x82, 0x92, 0x85, 0xEE, 0x61, 0x6F, 0xAF, 0x85, 0x9A, 0xE6, 0xB4, 0xFA, 0x33, + 0x08, 0xAA, 0x4D, 0xA5, 0x86, 0x49, 0x1B, 0x30, 0xEE, 0x60, 0xB5, 0xDC, 0x57, 0x03, 0xFA, 0x09, + 0x01, 0x4C, 0xEF, 0x14, 0x81, 0xC9, 0x2F, 0x7E, 0x62, 0x18, 0x02, 0x7D, 0x21, 0xC6, 0xD6, 0x4F, + 0xA5, 0xA3, 0x78, 0xDE, 0xA3, 0x07, 0xA1, 0x3C, 0x0F, 0x03, 0x96, 0xB7, 0x92, 0xC4, 0xB9, 0xB3, + 0xEA, 0x2E, 0x8D, 0xA6, 0xCD, 0x87, 0x69, 0x0D, 0xDC, 0x72, 0x15, 0xB3, 0x74, 0x92, 0xC5, 0xB4, + 0x52, 0x63, 0x65, 0x06, 0x67, 0x62, 0xD0, 0x7E, 0x67, 0x47, 0x30, 0xEC, 0xCB, 0x14, 0xF6, 0xB3 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (header.m_buildVersion * length); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 0x6E; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(header.m_buildVersion + kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 56957. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_56957.cs +// + +namespace KeyCMF_056957 +{ + static const BYTE Keytable[] = + { + 0xD2, 0x6B, 0xBE, 0xC4, 0x3E, 0x79, 0x3B, 0x91, 0x44, 0x52, 0x40, 0x07, 0xE9, 0xC7, 0x7B, 0xA0, + 0x4F, 0x70, 0xFC, 0x24, 0xBB, 0xA6, 0x54, 0x65, 0x87, 0xCB, 0x6E, 0x5F, 0xCD, 0x09, 0xEC, 0x2D, + 0xE2, 0xB2, 0x74, 0xCB, 0xDA, 0x50, 0x64, 0xD2, 0xBD, 0x4A, 0x20, 0x36, 0xE5, 0x74, 0x5E, 0x85, + 0x25, 0x01, 0xE4, 0x78, 0x92, 0x44, 0xEF, 0xC2, 0xE5, 0x2D, 0x7E, 0xF8, 0x91, 0xE0, 0x59, 0xA7, + 0xAB, 0xEF, 0x0A, 0x6D, 0x8A, 0x11, 0xC9, 0xB3, 0x17, 0xD9, 0x89, 0xFA, 0x04, 0x6E, 0xDE, 0xC3, + 0xEF, 0x78, 0xB9, 0x0A, 0xD7, 0x53, 0xCF, 0xC0, 0x93, 0xA2, 0x00, 0x4A, 0x3E, 0xC7, 0x03, 0x89, + 0x81, 0xEF, 0x1E, 0xE5, 0xF1, 0x43, 0x29, 0x07, 0x93, 0x14, 0x2D, 0x2D, 0xA0, 0xFD, 0xAE, 0x6C, + 0x30, 0x3F, 0xCC, 0x6A, 0x65, 0x52, 0x7F, 0x5F, 0xA8, 0x31, 0x8A, 0x92, 0xDC, 0xDB, 0x20, 0x80, + 0x5B, 0x82, 0xA8, 0x65, 0xC1, 0x59, 0xF8, 0xD6, 0x2F, 0x97, 0x85, 0xBD, 0xEE, 0xF1, 0x2A, 0xC6, + 0x8E, 0x28, 0x9C, 0xA6, 0xE1, 0x77, 0xF4, 0x72, 0xAA, 0xDE, 0x93, 0x38, 0xF3, 0xB2, 0xB1, 0xAE, + 0x92, 0x95, 0xB9, 0xA0, 0xAB, 0x75, 0x5C, 0xA5, 0x38, 0x61, 0xB6, 0x76, 0xA7, 0x2D, 0x1C, 0x0B, + 0xA7, 0x74, 0xF5, 0x24, 0xA6, 0xF3, 0x5D, 0xA6, 0x36, 0x0F, 0x2E, 0x57, 0xE2, 0x72, 0x75, 0x9A, + 0x42, 0x3A, 0x90, 0xB8, 0x2C, 0xAA, 0x57, 0xE5, 0xCE, 0x4C, 0xCD, 0x8D, 0xCF, 0xB6, 0x66, 0x0F, + 0x88, 0xE0, 0xDD, 0x92, 0x52, 0xB2, 0xB5, 0xC8, 0x1B, 0xC3, 0x41, 0xEF, 0x89, 0x78, 0xEA, 0x09, + 0xE5, 0x59, 0x66, 0x9D, 0x52, 0x2D, 0x06, 0xDF, 0xCE, 0x3F, 0xB0, 0x57, 0x19, 0x2C, 0xF8, 0x8A, + 0x27, 0x32, 0x67, 0x3F, 0x76, 0xF7, 0x52, 0xC1, 0xAF, 0x82, 0x1D, 0xF7, 0x4F, 0x78, 0x53, 0x9D, + 0x36, 0x40, 0x13, 0x70, 0xED, 0x67, 0x70, 0x25, 0xBE, 0xF7, 0x05, 0xDB, 0xA5, 0x27, 0xB8, 0xA8, + 0xD7, 0xF6, 0x9F, 0x11, 0x20, 0xAD, 0x98, 0x82, 0xD8, 0xDB, 0x4A, 0x8F, 0xE7, 0xA4, 0x45, 0xEE, + 0x39, 0x9C, 0x9E, 0xB7, 0xF5, 0xE6, 0xD3, 0x9D, 0x78, 0x80, 0xEB, 0xEA, 0xEF, 0x55, 0xCC, 0x9F, + 0xFD, 0x97, 0xF3, 0xF1, 0x1B, 0x92, 0x5E, 0x51, 0x12, 0x4E, 0xAD, 0x50, 0xCC, 0x2A, 0x4F, 0xE8, + 0x48, 0x96, 0x71, 0x70, 0xE5, 0x80, 0x6E, 0x26, 0x3A, 0x9B, 0x8F, 0x6A, 0xAF, 0xE4, 0x33, 0xF4, + 0x53, 0xD5, 0xC7, 0x1D, 0x30, 0xC2, 0x73, 0x38, 0x99, 0x05, 0x44, 0x38, 0x3D, 0x2B, 0xA1, 0x06, + 0x55, 0xCF, 0x0D, 0x12, 0xCC, 0xFF, 0xEA, 0x4E, 0xEB, 0x23, 0xA4, 0x8E, 0x5E, 0xAA, 0x6E, 0x5C, + 0x73, 0x79, 0x9E, 0x81, 0x19, 0x7B, 0xE0, 0xF9, 0x17, 0xA7, 0x2E, 0x25, 0xEA, 0x97, 0x93, 0x5D, + 0x5C, 0x41, 0x2C, 0xC3, 0xBA, 0xF5, 0x49, 0x64, 0x07, 0x9F, 0x15, 0x58, 0x35, 0x8D, 0xC1, 0x28, + 0x97, 0x33, 0x16, 0xF6, 0x32, 0x92, 0x86, 0xD6, 0x22, 0x77, 0x37, 0xDE, 0x99, 0x22, 0x50, 0x82, + 0x5E, 0x36, 0x6B, 0x1D, 0xDB, 0xE4, 0xDC, 0xDF, 0xD6, 0xB9, 0x4A, 0xD8, 0x2B, 0xBC, 0x36, 0x14, + 0xFF, 0xF6, 0xD0, 0x33, 0xA8, 0x64, 0xBA, 0xA7, 0x58, 0x1A, 0x45, 0x83, 0xB0, 0x4A, 0x4E, 0x0F, + 0xDF, 0x26, 0x1B, 0xC0, 0x95, 0x9B, 0xC2, 0x52, 0xB3, 0x21, 0x51, 0x38, 0xFD, 0x37, 0xF2, 0x4D, + 0x25, 0x4A, 0x8E, 0xD7, 0x2C, 0x98, 0xA4, 0x23, 0xBB, 0xAB, 0x76, 0x5A, 0x2E, 0xC8, 0xF4, 0xF1, + 0xF1, 0x15, 0xC5, 0x21, 0x39, 0x50, 0xFE, 0x7A, 0x5E, 0xBA, 0x3F, 0x90, 0x27, 0xAF, 0x55, 0xA3, + 0xF2, 0xF7, 0x4D, 0x2B, 0x92, 0xDC, 0xF6, 0x76, 0x77, 0xAD, 0xBD, 0x20, 0x23, 0x62, 0x84, 0xFA + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + int kidx = 2 * digest[5]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 57230. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_57230.cs +// + +namespace KeyCMF_057230 +{ + static const BYTE Keytable[] = + { + 0xA9, 0x43, 0xDB, 0x83, 0x4E, 0x2C, 0x99, 0xFB, 0x35, 0x7B, 0x3E, 0xFB, 0xE2, 0x00, 0xB7, 0xBC, + 0x66, 0x3D, 0x5B, 0x4D, 0x8D, 0x30, 0x1B, 0x37, 0x26, 0x8B, 0x85, 0xD8, 0xD9, 0x98, 0x88, 0xC1, + 0x1F, 0xC5, 0xFD, 0xA8, 0x0B, 0xFA, 0xCD, 0x94, 0x0C, 0x8C, 0x79, 0x86, 0x1C, 0xB2, 0xB4, 0x41, + 0xF9, 0x3F, 0x87, 0xC5, 0xCB, 0x4F, 0xCF, 0x11, 0x40, 0x82, 0xD1, 0xF5, 0x0B, 0x93, 0x44, 0x7B, + 0x99, 0xB9, 0x38, 0x40, 0x5B, 0x05, 0xAE, 0xBA, 0xC9, 0x62, 0x4C, 0x76, 0x66, 0x09, 0x69, 0x6C, + 0xD3, 0x19, 0x93, 0x08, 0x3F, 0xAB, 0x00, 0xF0, 0xCE, 0xE8, 0xE1, 0x90, 0xB1, 0x4F, 0x1E, 0xF6, + 0xD6, 0x2D, 0x8B, 0xF4, 0xD9, 0xDE, 0xCD, 0x2A, 0x00, 0x6A, 0xD6, 0x01, 0x96, 0x7E, 0xC5, 0xE1, + 0xE6, 0x53, 0xBB, 0x43, 0x38, 0x0F, 0x34, 0xA2, 0x9F, 0x6E, 0x53, 0xC0, 0xDE, 0x50, 0x22, 0x0B, + 0x0F, 0x63, 0xAF, 0x19, 0xA0, 0xB2, 0xA7, 0x16, 0xF6, 0x1C, 0x29, 0x52, 0x7B, 0x38, 0x2C, 0xEC, + 0x2A, 0x54, 0xC6, 0xA1, 0xA9, 0x87, 0x4F, 0xD7, 0x04, 0x5A, 0x99, 0xF9, 0x39, 0x29, 0x6D, 0xA8, + 0xA2, 0x86, 0x17, 0xBE, 0x41, 0x23, 0xA3, 0x76, 0x11, 0xAF, 0xF9, 0x85, 0x6F, 0x6A, 0x75, 0x43, + 0xEF, 0x77, 0x43, 0x2C, 0x1A, 0x31, 0x80, 0xF2, 0xF8, 0xF6, 0x26, 0x3D, 0xCF, 0xB0, 0x63, 0x8D, + 0xB7, 0xFB, 0xDD, 0x1B, 0x54, 0x5B, 0x7A, 0x4A, 0x46, 0xDD, 0xD0, 0x51, 0x42, 0xE1, 0xE8, 0x4D, + 0xA8, 0xF6, 0xC2, 0x21, 0xED, 0x9B, 0x0A, 0x8D, 0x9C, 0xF8, 0xFB, 0x07, 0x55, 0x00, 0x21, 0x1A, + 0x12, 0x8A, 0xF1, 0x0A, 0x3A, 0x1A, 0x5A, 0xB4, 0x25, 0x87, 0x18, 0x76, 0x52, 0x05, 0x94, 0x1D, + 0x26, 0x08, 0x9C, 0x1C, 0x72, 0x73, 0x19, 0x52, 0x96, 0xCF, 0x38, 0xCA, 0xFB, 0xCA, 0x0A, 0x73, + 0x36, 0x3D, 0xE3, 0x4F, 0x82, 0x19, 0xDD, 0xB6, 0x24, 0x75, 0x75, 0xD4, 0x48, 0xB1, 0x53, 0x56, + 0x89, 0xCE, 0xE9, 0xC9, 0xA0, 0xE5, 0x58, 0x77, 0x19, 0xA9, 0x64, 0xFC, 0x27, 0x05, 0x5D, 0x14, + 0x5D, 0xC0, 0xB8, 0x59, 0xB4, 0x42, 0x65, 0x18, 0x7E, 0x0F, 0x0E, 0x09, 0x0A, 0x9A, 0x9B, 0xAE, + 0x67, 0xF5, 0x9B, 0x6C, 0xE7, 0xB7, 0xE8, 0x35, 0x3A, 0x99, 0xF6, 0xF8, 0x28, 0x19, 0x01, 0x71, + 0x48, 0x0D, 0x0E, 0x6E, 0xBE, 0x8D, 0x81, 0xBE, 0x8E, 0x87, 0xCC, 0xFC, 0x25, 0xD8, 0xFC, 0xB2, + 0xB8, 0x44, 0x21, 0xA3, 0x62, 0xEF, 0x0C, 0x65, 0x2B, 0xF6, 0x66, 0x48, 0x1F, 0x9E, 0xD6, 0x36, + 0x3E, 0xC9, 0xA1, 0xFE, 0x12, 0x32, 0x7C, 0x7C, 0x47, 0x3F, 0xD8, 0x8A, 0xE8, 0x70, 0x43, 0x72, + 0x2B, 0x1C, 0x56, 0xFF, 0xA2, 0x62, 0xE5, 0xBB, 0xB3, 0x16, 0xDF, 0x8A, 0x11, 0x26, 0xD7, 0xE8, + 0x03, 0x6C, 0xDB, 0x49, 0x9E, 0x0F, 0xC2, 0x16, 0xA9, 0x66, 0x28, 0x61, 0x74, 0xAA, 0x50, 0x69, + 0x04, 0xF4, 0xF9, 0xD0, 0xAA, 0xC4, 0x9A, 0xC1, 0x95, 0x90, 0x8D, 0x69, 0x07, 0x34, 0x00, 0xB7, + 0xE1, 0x05, 0xCE, 0x5F, 0x5F, 0x3A, 0x75, 0xB0, 0x3D, 0x21, 0xBD, 0x63, 0x58, 0xFE, 0x16, 0x4A, + 0x34, 0xA4, 0x98, 0xEC, 0x5E, 0x3E, 0xE8, 0x96, 0xCE, 0xDE, 0x7C, 0x3E, 0xE9, 0x3E, 0xF4, 0x9C, + 0x70, 0x4C, 0x2B, 0x91, 0x40, 0xC2, 0x10, 0xD9, 0xE1, 0xE7, 0x83, 0x0D, 0xCD, 0x33, 0x40, 0x60, + 0x29, 0xD5, 0x96, 0x34, 0xAA, 0x84, 0x30, 0xC7, 0x48, 0x56, 0x5D, 0x1B, 0xC3, 0xE7, 0xE6, 0x87, + 0x17, 0xAF, 0xCF, 0xBF, 0x3C, 0x63, 0xA5, 0x43, 0x0F, 0x1A, 0x95, 0x49, 0x24, 0x8E, 0xC2, 0xF6, + 0x4A, 0xE1, 0x73, 0xD8, 0xBE, 0xE5, 0x94, 0x89, 0xB4, 0xA9, 0x09, 0xCF, 0x57, 0x91, 0xD2, 0x8D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[398]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + int kidx = 2 * digest[5]; + int increment = 2 * digest[5] % 29; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_entryCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 57796. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_57796.cs +// + +namespace KeyCMF_057796 +{ + static const BYTE Keytable[] = + { + 0xB4, 0x61, 0xB3, 0x1A, 0xF1, 0x67, 0x43, 0xF9, 0x2B, 0x2C, 0x42, 0x5B, 0xBE, 0x37, 0xF1, 0x33, + 0x12, 0xE1, 0x7F, 0x60, 0x8D, 0x49, 0x89, 0xD0, 0x65, 0x96, 0xF3, 0xDB, 0x8C, 0xCC, 0xD7, 0xC8, + 0xBD, 0xC8, 0x01, 0xD5, 0x79, 0xFE, 0x8A, 0x63, 0xE2, 0xFF, 0x99, 0x60, 0xE0, 0x5B, 0xB8, 0x89, + 0xEE, 0xC2, 0xF3, 0x41, 0x3B, 0x2C, 0xB1, 0x25, 0x5D, 0xC0, 0x69, 0x37, 0x37, 0xA1, 0x8B, 0xF4, + 0x06, 0x77, 0xC8, 0x90, 0xF4, 0x12, 0xE2, 0x68, 0xD7, 0xB7, 0x88, 0x83, 0x98, 0xE0, 0xD8, 0x39, + 0x28, 0x5A, 0x1E, 0xA2, 0x58, 0xDD, 0x17, 0x44, 0x5F, 0xB7, 0xFF, 0x90, 0xDE, 0xF6, 0x68, 0xD9, + 0x92, 0xD3, 0x27, 0x6C, 0xEE, 0x2E, 0x74, 0x26, 0x7E, 0xAC, 0xBD, 0xFD, 0xBF, 0x14, 0x53, 0xAE, + 0x3B, 0x3A, 0xEC, 0xCC, 0xCF, 0x72, 0x25, 0x4E, 0x32, 0xEB, 0xA3, 0x52, 0x98, 0xA7, 0xA0, 0x20, + 0x2E, 0xEB, 0x7E, 0x5D, 0xE2, 0xC6, 0xB4, 0x77, 0x96, 0x9B, 0x16, 0xEA, 0x0D, 0x8B, 0x7B, 0x25, + 0x7C, 0x0F, 0x84, 0x9D, 0x44, 0x9B, 0x58, 0xE5, 0x41, 0xE1, 0xCF, 0x7C, 0x06, 0xF2, 0xED, 0x29, + 0x93, 0x26, 0x2A, 0x13, 0x3A, 0xDB, 0x31, 0x53, 0xCA, 0x3B, 0x54, 0x67, 0xA3, 0xD8, 0x73, 0x30, + 0xDB, 0x56, 0xD5, 0x7F, 0x22, 0xC7, 0xBA, 0xBA, 0xF9, 0x48, 0x9E, 0x97, 0x6A, 0x7C, 0x68, 0x3C, + 0x91, 0xC8, 0xBC, 0x48, 0x05, 0xBB, 0xA0, 0x14, 0x52, 0xAC, 0x45, 0xC7, 0xD9, 0xAB, 0xC2, 0x0A, + 0xAB, 0x62, 0xA8, 0x3F, 0xE0, 0x38, 0x2C, 0x04, 0x1E, 0xCA, 0xAB, 0xDD, 0x34, 0x7E, 0x3A, 0xB0, + 0xC1, 0x77, 0xA8, 0x1A, 0xB8, 0x32, 0xF2, 0xB0, 0x47, 0x66, 0xEA, 0x49, 0x0C, 0x3F, 0x56, 0x83, + 0xA4, 0x97, 0x4C, 0xAA, 0xE1, 0xB4, 0x1C, 0x09, 0xD7, 0x37, 0xA3, 0xF2, 0xF3, 0x56, 0xC9, 0x52, + 0x0B, 0x3C, 0xCE, 0x1F, 0x9E, 0xF1, 0x2D, 0x34, 0x4D, 0x23, 0x08, 0xC0, 0x78, 0x33, 0xF5, 0xF3, + 0x6A, 0xC6, 0x06, 0x4E, 0x12, 0x64, 0xC4, 0x3A, 0xB5, 0xB0, 0xAB, 0xF4, 0x3B, 0x27, 0x50, 0xAB, + 0x63, 0x37, 0x12, 0x2E, 0x0C, 0x27, 0x68, 0x92, 0x74, 0x08, 0xB2, 0xFD, 0x80, 0x10, 0xDC, 0x26, + 0xCF, 0xAC, 0x8A, 0x18, 0x3D, 0x31, 0x65, 0x85, 0x48, 0xEC, 0x78, 0x55, 0x76, 0xAB, 0xD2, 0x1F, + 0x78, 0x3F, 0x8F, 0x9F, 0x80, 0xDE, 0x2B, 0x28, 0x79, 0xE5, 0xB8, 0xCA, 0xCC, 0xED, 0xD6, 0xB3, + 0x92, 0x5B, 0x8C, 0x82, 0x70, 0x95, 0xE0, 0x43, 0x5F, 0xD1, 0xF1, 0x35, 0x2D, 0xB3, 0x07, 0x17, + 0xDE, 0x48, 0x70, 0x5D, 0x00, 0xC2, 0x7E, 0xEB, 0x33, 0x13, 0x4C, 0x67, 0xD1, 0xA6, 0x78, 0xB6, + 0x6B, 0xD3, 0x19, 0x0D, 0xFA, 0xA4, 0xB9, 0x51, 0x1B, 0x68, 0xA3, 0xA4, 0x8D, 0xF2, 0x03, 0xC1, + 0x89, 0xD9, 0xCE, 0x48, 0xEA, 0x37, 0xE8, 0xEF, 0x10, 0x7E, 0xB9, 0x5F, 0xE4, 0x12, 0xBF, 0xCF, + 0xD7, 0x15, 0x81, 0x8F, 0x78, 0xB6, 0xAC, 0x8D, 0xEC, 0xF3, 0x80, 0xF2, 0xFF, 0xBB, 0xDB, 0xCE, + 0xFA, 0xC8, 0x9D, 0xE8, 0x84, 0xF7, 0xD1, 0x26, 0x35, 0x1F, 0xC9, 0x19, 0x0C, 0x70, 0x69, 0x34, + 0xC0, 0x89, 0x23, 0x34, 0x46, 0x6C, 0xD9, 0xCA, 0xA3, 0x29, 0xC0, 0x5A, 0xED, 0x20, 0x22, 0x3F, + 0xA4, 0xEC, 0x4C, 0x88, 0x8D, 0xAE, 0x0C, 0xAD, 0x53, 0xEF, 0xC1, 0x9B, 0xBE, 0xDB, 0x68, 0xD1, + 0x49, 0xC5, 0x0D, 0x67, 0xF9, 0x7E, 0xDC, 0x83, 0x6C, 0x30, 0xDC, 0x4C, 0x93, 0x44, 0x85, 0x5F, + 0xEB, 0x80, 0xB7, 0xF9, 0x4B, 0xB7, 0x58, 0x6F, 0x75, 0x2E, 0x6C, 0x87, 0x30, 0xBE, 0x7C, 0x8E, + 0x5B, 0x49, 0xD2, 0x9F, 0xB8, 0x6C, 0x1F, 0x3D, 0xF9, 0x3F, 0x0B, 0x8C, 0x8B, 0xBF, 0x7F, 0x3B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += header.m_buildVersion * (uint) header.m_dataCount % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[digest[7] * Keytable[0] & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 452; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 57979. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_57979.cs +// + +namespace KeyCMF_057979 +{ + static const BYTE Keytable[] = + { + 0x5A, 0x6B, 0x24, 0xD1, 0x29, 0x31, 0xDB, 0x8A, 0x9E, 0x4E, 0xE7, 0x85, 0xA2, 0x09, 0x77, 0x34, + 0x21, 0x73, 0x90, 0x52, 0xCB, 0x25, 0xB3, 0xA0, 0xC9, 0x79, 0xA6, 0xEB, 0x6F, 0x5A, 0x62, 0x62, + 0x48, 0x37, 0x1C, 0x3C, 0x2E, 0x8B, 0xD6, 0xB0, 0xCC, 0x06, 0xF2, 0x64, 0xF7, 0xD6, 0x01, 0x91, + 0x10, 0x55, 0xAB, 0xBA, 0x88, 0x74, 0x2C, 0x00, 0xE9, 0x14, 0x39, 0x85, 0xD2, 0x2C, 0x53, 0x8C, + 0x69, 0x66, 0x9A, 0xE0, 0x88, 0x21, 0xAD, 0x70, 0xF7, 0xD9, 0x46, 0xA3, 0xEE, 0x81, 0x37, 0x2C, + 0x55, 0x27, 0x3A, 0x26, 0xF2, 0xEA, 0x36, 0xF0, 0xA6, 0x9C, 0xEC, 0x66, 0x7D, 0x47, 0xD3, 0xE9, + 0xE6, 0xFB, 0x00, 0xB7, 0x93, 0xCA, 0xC3, 0xA4, 0x0C, 0x02, 0x1C, 0x48, 0xE1, 0x78, 0x09, 0xF8, + 0xC8, 0x26, 0x68, 0xE9, 0xAC, 0x54, 0xF6, 0xA4, 0x74, 0x7B, 0x21, 0xFE, 0x00, 0xDC, 0x5E, 0x5B, + 0x12, 0x66, 0xCD, 0xB7, 0xCF, 0x2F, 0xBA, 0x51, 0x89, 0x62, 0xF5, 0x0F, 0x40, 0xD4, 0x18, 0x2B, + 0xA3, 0x60, 0xE0, 0x86, 0x1D, 0xDE, 0x72, 0x21, 0xD1, 0xC5, 0x11, 0xFE, 0xBA, 0x81, 0x22, 0x4D, + 0x73, 0x21, 0x03, 0x0D, 0x4C, 0x8F, 0xD6, 0xFE, 0x80, 0x39, 0xFE, 0x7B, 0x97, 0x63, 0x6B, 0xA2, + 0x15, 0x0F, 0xE0, 0xE2, 0xE4, 0x5C, 0xF0, 0x4D, 0xB8, 0x74, 0x32, 0xD2, 0x52, 0x3B, 0x40, 0x7D, + 0x64, 0x37, 0xE7, 0xCF, 0xAA, 0x04, 0x34, 0xA8, 0x50, 0xCE, 0x5F, 0x98, 0x62, 0x1D, 0x29, 0x48, + 0x57, 0x4E, 0x94, 0x26, 0x8E, 0x05, 0xE1, 0x1E, 0x37, 0x27, 0x46, 0xA8, 0x55, 0x13, 0x86, 0x45, + 0xD9, 0xEB, 0xC3, 0xED, 0x42, 0xCB, 0xF1, 0xE0, 0x70, 0x83, 0x97, 0x5B, 0xEA, 0x35, 0x12, 0x19, + 0x45, 0x82, 0xA3, 0x8C, 0x42, 0x26, 0x17, 0x34, 0x21, 0x2B, 0x6A, 0xAD, 0x64, 0x74, 0x69, 0xFF, + 0x57, 0x55, 0xD3, 0x80, 0x75, 0xA8, 0x99, 0xE3, 0xC8, 0x4F, 0xE4, 0x80, 0xA8, 0xB0, 0x3A, 0x91, + 0x69, 0x63, 0xA0, 0xFC, 0x73, 0xF5, 0xB2, 0xEB, 0xA3, 0x46, 0x8E, 0x34, 0x54, 0xB4, 0x87, 0x54, + 0x20, 0x06, 0xDE, 0xEF, 0x2A, 0x27, 0xB8, 0x6A, 0x18, 0x60, 0x29, 0x55, 0xE4, 0x5C, 0x04, 0x4B, + 0x4B, 0x72, 0x50, 0xE7, 0x21, 0x46, 0x47, 0x18, 0x24, 0xF0, 0xAD, 0x76, 0xB5, 0x14, 0xB9, 0x74, + 0x9F, 0x52, 0x9A, 0x0A, 0x36, 0xC0, 0x54, 0x5E, 0xA2, 0x68, 0x89, 0xD7, 0xF5, 0xD0, 0xBB, 0x44, + 0xFE, 0xD6, 0xF0, 0x71, 0xEE, 0x10, 0x09, 0x52, 0x09, 0x89, 0x90, 0x06, 0x17, 0x74, 0xB4, 0x27, + 0x10, 0x27, 0x17, 0x95, 0x72, 0x24, 0xCA, 0xA7, 0xFE, 0x15, 0xAD, 0x46, 0x37, 0xB9, 0xFC, 0x77, + 0x07, 0x3F, 0xAF, 0x71, 0x8F, 0x67, 0x43, 0x7F, 0xF8, 0xE2, 0x8B, 0x33, 0xBE, 0x49, 0xE2, 0x38, + 0x51, 0x96, 0x36, 0xAE, 0x86, 0x63, 0x30, 0x55, 0x5A, 0x21, 0x12, 0x6D, 0x0B, 0x0D, 0xAA, 0xB3, + 0xF2, 0x94, 0x95, 0x22, 0x50, 0x8F, 0xED, 0x06, 0x33, 0x6B, 0x3C, 0x78, 0x93, 0x8B, 0xE4, 0x35, + 0x3A, 0x4F, 0x99, 0xC7, 0xA1, 0xF6, 0x02, 0xE9, 0xBA, 0xC5, 0x6E, 0x66, 0x24, 0xD2, 0xB1, 0xF6, + 0x96, 0xEA, 0x87, 0x6D, 0x65, 0x3A, 0x2A, 0x89, 0xD1, 0xC1, 0xAF, 0x6F, 0xE3, 0xBD, 0xAE, 0xF0, + 0xAF, 0xB9, 0x25, 0x4C, 0x13, 0x15, 0xBE, 0x68, 0xB5, 0x19, 0x99, 0x07, 0x72, 0x7A, 0xBB, 0x2D, + 0xB6, 0xFC, 0xBC, 0xE6, 0xB2, 0xAA, 0x6C, 0xEA, 0x50, 0xCB, 0x2C, 0x9C, 0x99, 0xFE, 0xD9, 0x53, + 0xF0, 0x2F, 0x81, 0x92, 0x59, 0x15, 0xBE, 0x0B, 0x05, 0xF0, 0x13, 0x4A, 0x5F, 0x12, 0x2E, 0x6A, + 0xBC, 0xF8, 0x92, 0x1A, 0x41, 0xAB, 0xFB, 0x3F, 0x31, 0x37, 0x1B, 0x31, 0xCF, 0x73, 0x35, 0x23 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = 4 * kidx % header.m_buildVersion; + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 2u * digest[5]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_entryCount + digest[header.m_entryCount % SHA1_DIGESTSIZE]; + buffer[i] ^= digest[(header.m_buildVersion+i) % SHA1_DIGESTSIZE]; + } + return buffer; + } +} + +// +// Key+IV provider for build 58155. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_58155.cs +// + +namespace KeyCMF_058155 +{ + static const BYTE Keytable[] = + { + 0x9D, 0xC3, 0x5F, 0xC2, 0x45, 0xAB, 0x7C, 0x1F, 0x56, 0x1F, 0xF2, 0x0A, 0xFD, 0x37, 0x17, 0x3F, + 0x59, 0x7D, 0xE8, 0x5F, 0x60, 0x7E, 0xF7, 0xA2, 0x04, 0xAA, 0x05, 0x2B, 0xA4, 0xAB, 0xB0, 0x75, + 0xCC, 0xBA, 0xFF, 0xEB, 0x6F, 0x68, 0xFE, 0xC0, 0xBE, 0xC1, 0xE2, 0x1C, 0x1F, 0xA7, 0xAA, 0x18, + 0x66, 0xCB, 0x85, 0x8D, 0xC7, 0x7E, 0xDF, 0xEF, 0x77, 0xFC, 0x01, 0x48, 0xA4, 0x82, 0x88, 0xE5, + 0x1D, 0x54, 0xEF, 0xFF, 0x3B, 0x96, 0xC6, 0x3D, 0x3E, 0x7C, 0x26, 0x40, 0x46, 0x83, 0x58, 0x43, + 0x3C, 0x4C, 0xFC, 0xA3, 0x60, 0x69, 0xA1, 0xD1, 0xE9, 0xB1, 0xC2, 0xA1, 0x3E, 0x21, 0x81, 0xF3, + 0x37, 0x34, 0x75, 0xE9, 0x87, 0x86, 0x36, 0x8D, 0x38, 0x76, 0x7D, 0xE3, 0x7C, 0x13, 0x20, 0xC4, + 0x7E, 0xD6, 0xEA, 0x3F, 0x99, 0xFC, 0xA3, 0x59, 0x5F, 0x84, 0x5E, 0x4E, 0x37, 0x79, 0xE3, 0x50, + 0xB0, 0x8A, 0x43, 0xAB, 0xF2, 0x8B, 0x37, 0x05, 0x75, 0x0F, 0xD1, 0x90, 0xCE, 0x62, 0xF3, 0xDE, + 0x51, 0x62, 0xB6, 0x94, 0xBF, 0x88, 0x93, 0x3E, 0x31, 0xD1, 0x3F, 0xDB, 0x4F, 0x97, 0x89, 0xE4, + 0x1C, 0x67, 0x5B, 0x34, 0xD9, 0x67, 0xFF, 0x27, 0x3B, 0xB8, 0x9D, 0xA2, 0x90, 0xE5, 0x66, 0xAF, + 0x45, 0x3D, 0x35, 0xEC, 0x9D, 0x90, 0x5E, 0x4E, 0x43, 0x7D, 0x34, 0x63, 0x5C, 0x41, 0x8B, 0x44, + 0xD2, 0x31, 0x2A, 0x92, 0xD6, 0x9F, 0x67, 0x43, 0xDA, 0xB6, 0x4F, 0x9F, 0x96, 0x76, 0x46, 0x78, + 0xAF, 0x7C, 0x79, 0xBE, 0x06, 0x34, 0x67, 0xE1, 0x60, 0x16, 0x17, 0x77, 0x19, 0x5B, 0xF9, 0x74, + 0xAA, 0xA5, 0xCE, 0x48, 0x92, 0xD1, 0x87, 0x4B, 0xCB, 0xA7, 0x96, 0x7D, 0xAC, 0x65, 0xAE, 0xAD, + 0x39, 0x26, 0x59, 0xA1, 0x84, 0x6A, 0x15, 0x3E, 0x34, 0x05, 0x12, 0xA8, 0x72, 0x95, 0x21, 0xA9, + 0x9E, 0xB2, 0x73, 0x80, 0x07, 0xC0, 0x36, 0x08, 0x5E, 0x22, 0x46, 0xCC, 0x91, 0xA2, 0x0F, 0x9A, + 0x41, 0x98, 0xBB, 0x48, 0x38, 0x58, 0xFF, 0x01, 0x18, 0x4C, 0xAC, 0xAC, 0x31, 0x6C, 0xBB, 0xE6, + 0x9A, 0x4E, 0x72, 0x70, 0xF8, 0x24, 0xB0, 0xF0, 0x8D, 0x23, 0x43, 0xA8, 0xF7, 0xD5, 0x42, 0xB0, + 0xE3, 0x26, 0xAA, 0xCE, 0x34, 0x98, 0x48, 0xFE, 0xFB, 0x72, 0x71, 0x36, 0xF2, 0x2B, 0xED, 0xBE, + 0x6F, 0x9B, 0x70, 0xD6, 0x8B, 0xAF, 0xD8, 0x17, 0xCB, 0x20, 0x67, 0x9D, 0x2C, 0xC4, 0xBD, 0x84, + 0xF7, 0x2D, 0x38, 0xCA, 0x1A, 0x3D, 0xA2, 0xFB, 0x20, 0x79, 0x8E, 0x9C, 0xC2, 0xD0, 0xAD, 0x46, + 0x34, 0x9E, 0xCA, 0xE6, 0x1B, 0x63, 0x42, 0x3D, 0xD1, 0xF5, 0x81, 0x96, 0x49, 0xEF, 0xDE, 0x77, + 0x52, 0x9B, 0x3B, 0x7C, 0xF9, 0xEF, 0x71, 0x06, 0x0D, 0xA9, 0x8F, 0x7E, 0x79, 0x09, 0x08, 0xDD, + 0x5D, 0x26, 0xD5, 0x32, 0x9F, 0xEB, 0x61, 0x6F, 0x88, 0x73, 0x99, 0x78, 0x65, 0x44, 0xC8, 0xB6, + 0x88, 0x7B, 0x31, 0x93, 0xF8, 0xC6, 0x68, 0x3E, 0xB5, 0x41, 0xA0, 0x5A, 0x1A, 0x2D, 0x76, 0x5A, + 0xCA, 0x23, 0x40, 0xA3, 0x25, 0x67, 0xD0, 0x9A, 0x0E, 0xEA, 0xE3, 0x46, 0x85, 0x9F, 0x68, 0x14, + 0x49, 0x20, 0x32, 0x69, 0x78, 0xAB, 0xAC, 0xDD, 0x5C, 0xD2, 0x83, 0xD9, 0x9C, 0xB7, 0x8D, 0xA8, + 0x3F, 0xB8, 0xA3, 0x63, 0x9C, 0x12, 0x8B, 0x1B, 0x30, 0x63, 0x7A, 0xDF, 0x77, 0x4E, 0x27, 0xEC, + 0xFE, 0x2D, 0xF9, 0x3F, 0xF4, 0x3F, 0xCA, 0x3F, 0x42, 0xCE, 0x50, 0xDD, 0xEE, 0xA1, 0xA0, 0xF6, + 0x76, 0xDA, 0xA2, 0xFA, 0x38, 0x33, 0x4B, 0x18, 0x83, 0x5F, 0xCB, 0x3F, 0x73, 0xC4, 0x93, 0x1F, + 0xBA, 0x5A, 0x94, 0x81, 0xE7, 0xB2, 0x69, 0x69, 0x8E, 0x75, 0xA4, 0x3D, 0x0C, 0x18, 0x42, 0x32 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 61; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (digest[7] + (uint) header.m_dataCount) & 511; + uint increment = (uint)header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + uint digestIdx = header.m_buildVersion; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + buffer[i] ^= digest[SignedMod(digestIdx, SHA1_DIGESTSIZE)]; + ++digestIdx; + } + return buffer; + } +} + +// +// Key+IV provider for build 58625. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_58625.cs +// + +namespace KeyCMF_058625 +{ + static const BYTE Keytable[] = + { + 0x91, 0x42, 0xF4, 0x03, 0xD9, 0xD7, 0x95, 0x94, 0x80, 0x5C, 0xB7, 0xB4, 0xD2, 0xC5, 0x42, 0x97, + 0x98, 0xE7, 0x26, 0x8A, 0x64, 0xE6, 0xD2, 0xD5, 0x4F, 0x0C, 0xB5, 0xC6, 0x49, 0x0E, 0x00, 0xFC, + 0x8A, 0x3B, 0xB3, 0x55, 0x7A, 0x01, 0xB7, 0xCF, 0xE5, 0x40, 0xE8, 0xB5, 0xD7, 0x79, 0x95, 0x28, + 0xBD, 0x86, 0xEF, 0x5C, 0x0C, 0x43, 0xCC, 0xD3, 0xCE, 0xA4, 0x8B, 0x42, 0x3D, 0x63, 0xEE, 0x4B, + 0xDC, 0xF0, 0xFE, 0x61, 0xED, 0x00, 0x38, 0x78, 0x26, 0x7B, 0x8B, 0x97, 0x58, 0x7D, 0xB3, 0x8D, + 0xFA, 0xDE, 0x0A, 0xA6, 0x1F, 0xC9, 0xC4, 0xBB, 0xCA, 0x8F, 0x32, 0x62, 0x3E, 0x35, 0xEF, 0x25, + 0xCA, 0x52, 0x1C, 0x85, 0x12, 0x36, 0x90, 0x10, 0x04, 0x7E, 0x0F, 0xB1, 0xE4, 0x22, 0x96, 0x3C, + 0x3B, 0xE0, 0xC8, 0xD9, 0xDA, 0x31, 0xF0, 0xD1, 0x4E, 0x5A, 0xAB, 0x3B, 0x62, 0xDE, 0x95, 0xA8, + 0x41, 0xB6, 0xA9, 0xE4, 0x79, 0x61, 0x87, 0x1C, 0x74, 0xBF, 0x90, 0xC8, 0x19, 0x06, 0x9B, 0xE7, + 0x33, 0x5D, 0x1A, 0x0F, 0xBE, 0x5E, 0x38, 0xBE, 0xD6, 0xE7, 0x2A, 0xBB, 0x20, 0x68, 0x56, 0xB5, + 0xA7, 0x1E, 0x73, 0x8E, 0xEA, 0x92, 0x6E, 0xEA, 0xFD, 0xA1, 0x50, 0xD5, 0xA3, 0xE9, 0x53, 0x54, + 0xC7, 0x01, 0x8D, 0x60, 0xCD, 0xE6, 0x09, 0xDB, 0xF4, 0x10, 0x43, 0x6E, 0xD4, 0xC9, 0xBF, 0xF7, + 0xAC, 0x7B, 0x85, 0x18, 0xFE, 0xFC, 0x1F, 0xB7, 0x7A, 0x36, 0xD6, 0x0F, 0x27, 0xB6, 0x1D, 0x7B, + 0x7C, 0x37, 0xB9, 0xD4, 0xC7, 0x91, 0xAC, 0x1B, 0x45, 0xE6, 0xD4, 0x6F, 0xF9, 0xF1, 0xD9, 0xC3, + 0xB9, 0xA8, 0x03, 0x88, 0x88, 0x60, 0xFB, 0xEE, 0x4F, 0x96, 0x44, 0xC0, 0x41, 0xFC, 0x6E, 0xA2, + 0x6D, 0x87, 0x8E, 0x89, 0x01, 0xF1, 0x1B, 0x3F, 0xD0, 0x9B, 0x0F, 0x1D, 0xA6, 0x28, 0x1C, 0xBC, + 0x37, 0x4B, 0xF1, 0x44, 0x96, 0x2B, 0xF7, 0x2E, 0xCE, 0x55, 0xF0, 0x22, 0x97, 0x9A, 0x9E, 0x79, + 0x4F, 0x35, 0x3D, 0xE2, 0xD9, 0x6B, 0x78, 0x92, 0xE8, 0x1A, 0x08, 0x65, 0xFA, 0x9D, 0x16, 0x4E, + 0x47, 0xAE, 0x93, 0xEE, 0x9E, 0x84, 0x1C, 0x86, 0x22, 0x6F, 0x03, 0x6A, 0x72, 0xDC, 0x4A, 0x00, + 0x1D, 0x7C, 0xDB, 0x31, 0x34, 0xFB, 0x68, 0xE3, 0x5C, 0x7C, 0xAF, 0xB6, 0x6D, 0x54, 0x32, 0xCC, + 0xF3, 0xFB, 0xC0, 0x95, 0x22, 0xDE, 0xE3, 0xC0, 0x7D, 0xAB, 0x86, 0x24, 0x86, 0x3C, 0xF0, 0x4B, + 0x16, 0x78, 0x89, 0x2D, 0x7A, 0x6B, 0x8E, 0x8A, 0x24, 0x17, 0x12, 0x80, 0xA6, 0x7E, 0x5E, 0x55, + 0xED, 0xE3, 0xD2, 0x5E, 0x66, 0xA9, 0xD6, 0x2E, 0xFF, 0xBA, 0x4B, 0xA5, 0x4E, 0xFD, 0x70, 0x4F, + 0x5E, 0x64, 0xA6, 0x99, 0xF6, 0x64, 0x62, 0xB5, 0xB8, 0xE0, 0xB9, 0x0B, 0xC6, 0x2E, 0xA1, 0x13, + 0xA2, 0xAD, 0x8A, 0xAF, 0xC8, 0xCB, 0x47, 0x18, 0xC0, 0x89, 0x4F, 0xE1, 0x62, 0xE9, 0x28, 0x33, + 0xDF, 0x12, 0xAF, 0x3F, 0xAD, 0x6D, 0x19, 0x11, 0x53, 0x07, 0x38, 0x70, 0x37, 0x8B, 0x2E, 0x50, + 0xF3, 0xE3, 0x81, 0x34, 0xA5, 0x4F, 0x6A, 0x4C, 0xF7, 0x17, 0x98, 0x81, 0xD8, 0xDA, 0x9E, 0x8F, + 0x94, 0x94, 0x54, 0xE5, 0xB2, 0x92, 0x58, 0x6B, 0x4B, 0x76, 0xEA, 0x0D, 0xD0, 0x8A, 0x70, 0x25, + 0x74, 0x49, 0x54, 0xBA, 0x9E, 0x15, 0x15, 0x06, 0xF2, 0x4B, 0x96, 0x7A, 0x07, 0x91, 0xF9, 0xDE, + 0xC2, 0x47, 0x0D, 0x9E, 0x58, 0x34, 0xF2, 0xDD, 0xCF, 0x35, 0x7F, 0xA0, 0xAE, 0x15, 0x08, 0x60, + 0x1E, 0x18, 0xB4, 0x76, 0x39, 0xA3, 0x26, 0xF3, 0x8B, 0x29, 0x54, 0x06, 0xBB, 0xF8, 0x17, 0x7C, + 0xC8, 0xF5, 0x85, 0x95, 0xBC, 0x1E, 0x58, 0x73, 0x5A, 0x47, 0xF9, 0x51, 0x19, 0xF3, 0xE4, 0xA8 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + uint okidx = kidx; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + if ((digest[6] & 1) != 0) kidx += 37; + else kidx += okidx & 61; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 59008. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_59008.cs +// + +namespace KeyCMF_059008 +{ + static const BYTE Keytable[] = + { + 0x3B, 0x2F, 0x20, 0x3A, 0xAF, 0x14, 0xEE, 0x7F, 0x06, 0x32, 0xD4, 0xC2, 0x82, 0x28, 0xCC, 0xDB, + 0xF5, 0xCD, 0xBF, 0x6A, 0x4A, 0x8A, 0xB9, 0x38, 0xDF, 0x53, 0x01, 0x2F, 0xE0, 0xDB, 0x93, 0x7E, + 0x56, 0x17, 0x13, 0x70, 0xA1, 0xC7, 0x8D, 0xF9, 0x91, 0x5D, 0x1A, 0x1C, 0xA0, 0x18, 0xED, 0xE8, + 0x9C, 0x05, 0xC6, 0xE2, 0x09, 0x6C, 0xC1, 0x25, 0xC7, 0xB6, 0x70, 0xDD, 0x95, 0xEB, 0x53, 0x68, + 0xD8, 0xAE, 0x35, 0x30, 0x73, 0x25, 0x90, 0x9F, 0xEF, 0xCB, 0xD6, 0x24, 0xC4, 0xB5, 0x9B, 0x35, + 0x94, 0x4C, 0xC5, 0xD7, 0xA4, 0x1F, 0xB2, 0x42, 0x72, 0x53, 0x29, 0x8C, 0x08, 0x19, 0x02, 0x1C, + 0xD0, 0x01, 0x10, 0x5B, 0xD6, 0x4A, 0xBA, 0xE8, 0x33, 0xC8, 0x3A, 0x94, 0xD6, 0xE0, 0x8A, 0x23, + 0x1B, 0xA1, 0x1D, 0x3A, 0xD9, 0x0E, 0xE6, 0x02, 0xA1, 0xDB, 0x69, 0x13, 0x21, 0x09, 0xB7, 0x98, + 0xB2, 0xDA, 0x77, 0x31, 0x2B, 0x54, 0xA5, 0x1D, 0x40, 0x4A, 0x8A, 0x41, 0xC8, 0xEE, 0x8D, 0xF5, + 0xFF, 0x15, 0xAF, 0xF6, 0xCA, 0xCF, 0x46, 0x89, 0x31, 0xCC, 0xA8, 0x96, 0x47, 0x59, 0xB2, 0x78, + 0xF6, 0xAE, 0x0B, 0x3D, 0xF7, 0x07, 0x42, 0x8C, 0xAF, 0x42, 0x28, 0x67, 0x27, 0x59, 0x10, 0xC5, + 0x8D, 0x23, 0x93, 0x36, 0x8F, 0x32, 0x7F, 0x64, 0x8E, 0x21, 0x83, 0x0F, 0x15, 0xC4, 0x31, 0x04, + 0x1D, 0xF7, 0xF6, 0xA5, 0x5A, 0xAD, 0xFC, 0x5A, 0x4A, 0x70, 0xFD, 0xDD, 0x78, 0x48, 0x7C, 0x11, + 0x86, 0x13, 0xE3, 0x9B, 0xD4, 0x2A, 0x20, 0x30, 0xCF, 0xA1, 0xAC, 0xE1, 0x35, 0x5D, 0x86, 0xB6, + 0xBE, 0xDB, 0xDB, 0x3A, 0x1B, 0x29, 0xEA, 0x52, 0x6D, 0x16, 0xF1, 0xD8, 0x45, 0xA9, 0x95, 0xFB, + 0xA9, 0x64, 0x45, 0xD5, 0x3E, 0xAC, 0x09, 0xAF, 0x22, 0xE9, 0x77, 0x4A, 0x28, 0x52, 0x19, 0xAD, + 0x8D, 0xFD, 0x34, 0x6C, 0x12, 0xDD, 0x26, 0xBE, 0xB1, 0xA4, 0x62, 0xC0, 0xFB, 0x48, 0xFB, 0x03, + 0xD6, 0x4A, 0x96, 0x46, 0x97, 0xAD, 0xA7, 0xAC, 0x17, 0x3C, 0xFA, 0x25, 0xE6, 0xC3, 0xFC, 0x01, + 0x9F, 0xA3, 0xDD, 0xEE, 0x35, 0xFF, 0x50, 0x38, 0x51, 0x01, 0x59, 0xF0, 0x24, 0x30, 0x54, 0xEA, + 0x96, 0x11, 0x02, 0x02, 0x9D, 0xBD, 0x7F, 0x48, 0x52, 0x52, 0x0B, 0xFC, 0xF5, 0xD3, 0xA0, 0x35, + 0x13, 0x35, 0x2D, 0x04, 0x43, 0x43, 0x32, 0xF4, 0x86, 0x8A, 0xA3, 0xD1, 0x2E, 0x51, 0x60, 0x19, + 0x25, 0xA3, 0x39, 0x15, 0x62, 0xEA, 0x20, 0x57, 0x0D, 0x60, 0x32, 0xA6, 0x28, 0x56, 0xBD, 0x91, + 0xC7, 0x2F, 0xBD, 0x55, 0xBC, 0x1A, 0x66, 0xD2, 0x0A, 0x7E, 0xAA, 0x78, 0xA9, 0x93, 0xBC, 0x84, + 0x1F, 0xB6, 0x35, 0x7E, 0xEF, 0xC3, 0x10, 0xB4, 0x60, 0x45, 0xB4, 0xE0, 0xB8, 0xB8, 0x97, 0x2D, + 0xD7, 0xF9, 0xB4, 0x58, 0x92, 0xBF, 0x91, 0xDA, 0x01, 0x07, 0xC7, 0x08, 0x38, 0xBE, 0xF9, 0x44, + 0xE6, 0x47, 0x47, 0xE7, 0xE0, 0x65, 0x3F, 0xE7, 0x0A, 0xBE, 0x74, 0x58, 0x6B, 0x8D, 0xDF, 0x23, + 0x37, 0x15, 0x79, 0xFF, 0x9B, 0x1D, 0x9B, 0x66, 0x87, 0x91, 0xD4, 0xC3, 0x84, 0x5F, 0xBB, 0xC1, + 0x0C, 0x3E, 0xB7, 0xDA, 0x2A, 0xCD, 0x5F, 0x5A, 0xE7, 0x45, 0x71, 0x99, 0xCA, 0x62, 0x43, 0x07, + 0xD8, 0x9F, 0x9F, 0x36, 0xF6, 0x54, 0xBA, 0x84, 0x0F, 0xAB, 0xF8, 0x66, 0xDC, 0x84, 0xBA, 0x2B, + 0xC3, 0x49, 0x74, 0x7A, 0x19, 0x93, 0xC2, 0x0E, 0x88, 0xC5, 0x80, 0x4C, 0xE4, 0xB4, 0x85, 0xA8, + 0xF0, 0x08, 0x35, 0x0B, 0xDF, 0x68, 0x6A, 0xE0, 0x5F, 0x69, 0x7B, 0xAA, 0xA3, 0x41, 0x7F, 0xA4, + 0xBA, 0x77, 0x7C, 0xAD, 0x9F, 0xC2, 0x03, 0x00, 0xDE, 0x6C, 0x39, 0x19, 0x1C, 0xDA, 0xC7, 0x0A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint)length; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(4 * kidx, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = 2u * digest[5]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += header.m_buildVersion * (uint)header.m_dataCount % 7u; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 59573. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_59573.cs +// + +namespace KeyCMF_059573 +{ + static const BYTE Keytable[] = + { + 0x77, 0xFF, 0xF5, 0x20, 0xF2, 0x2C, 0x44, 0x43, 0x15, 0x5D, 0x48, 0x1A, 0xDF, 0x6A, 0x0A, 0xD2, + 0xC5, 0x1E, 0xB3, 0x30, 0x4E, 0xA9, 0xAB, 0xFF, 0xC1, 0xC8, 0x9B, 0x71, 0xAC, 0x57, 0xE9, 0x43, + 0x30, 0xC9, 0x5B, 0x67, 0x9C, 0x69, 0x06, 0xAF, 0x14, 0x14, 0x0C, 0x39, 0xB9, 0xF2, 0xBB, 0x29, + 0x8F, 0x31, 0xF5, 0xD9, 0x2B, 0x32, 0x07, 0x51, 0xF4, 0xA3, 0x8E, 0xF0, 0xC2, 0xCF, 0xEF, 0x9D, + 0x24, 0xF5, 0xF9, 0x29, 0xB5, 0x00, 0x37, 0xCC, 0x15, 0x14, 0x79, 0x9A, 0x3B, 0x33, 0xEC, 0xE3, + 0xE9, 0x93, 0xD3, 0xFA, 0xA0, 0xD7, 0x5B, 0xC0, 0xD6, 0x27, 0x72, 0x1D, 0xAB, 0x5E, 0x9D, 0xAB, + 0xC8, 0xEE, 0x1E, 0xC6, 0x59, 0x90, 0x43, 0xBA, 0x58, 0xC1, 0x1E, 0x3A, 0x0F, 0x26, 0x85, 0x49, + 0x8E, 0xE8, 0x1C, 0xFE, 0x0F, 0xCD, 0x2B, 0x2C, 0xEF, 0xB2, 0x0E, 0xA9, 0x1D, 0x6E, 0x2C, 0xFB, + 0xC1, 0x04, 0x24, 0x13, 0x80, 0xC4, 0x1F, 0x18, 0x0C, 0x4A, 0x62, 0xB6, 0xDC, 0x70, 0xDA, 0x60, + 0x21, 0x65, 0x56, 0x2B, 0x1F, 0x1A, 0x70, 0xAA, 0x66, 0xD2, 0xBC, 0xEB, 0xDB, 0x13, 0x18, 0xAB, + 0xCF, 0x0D, 0x01, 0xE9, 0xCA, 0x1F, 0x5D, 0x1A, 0x1F, 0xCD, 0x6D, 0xD7, 0xDF, 0xF9, 0x81, 0xA0, + 0x09, 0x4D, 0xA0, 0x75, 0xAA, 0xBF, 0x32, 0x3A, 0x06, 0x42, 0xB0, 0x1B, 0xD7, 0x7F, 0x11, 0xDF, + 0x4E, 0xEF, 0xC5, 0x5B, 0xB0, 0xF9, 0xB5, 0x24, 0x69, 0x50, 0x45, 0x1F, 0xB7, 0xEF, 0xC2, 0x17, + 0xD2, 0xDA, 0x13, 0x98, 0xAB, 0xE6, 0x3D, 0xDE, 0xCA, 0x37, 0xE9, 0x6F, 0x35, 0xC8, 0xE0, 0x68, + 0xBA, 0x85, 0x36, 0x59, 0xDA, 0x44, 0x2F, 0x52, 0xB4, 0xDA, 0xA2, 0xCC, 0x2D, 0x40, 0xDD, 0x21, + 0x30, 0x60, 0x55, 0x86, 0x98, 0x67, 0x02, 0x86, 0x28, 0x0A, 0x67, 0xD5, 0x2B, 0x16, 0xEB, 0xEF, + 0xD7, 0xCA, 0x67, 0x59, 0x07, 0x23, 0x46, 0x32, 0x1A, 0x45, 0x53, 0xE5, 0x86, 0xF3, 0x30, 0xEF, + 0x8E, 0xD7, 0xBE, 0xAF, 0xD3, 0xCA, 0x9E, 0x87, 0x77, 0x71, 0x85, 0x69, 0x5C, 0x0A, 0xAA, 0xC8, + 0xD5, 0x4B, 0x4D, 0x9C, 0x5F, 0xA2, 0x8B, 0x98, 0xE1, 0x47, 0xBC, 0x46, 0x94, 0xDE, 0x4A, 0xF4, + 0xB1, 0x53, 0xC8, 0xD4, 0xF9, 0x69, 0x72, 0x5F, 0x4F, 0x67, 0x9F, 0x5D, 0xEF, 0xAA, 0x4A, 0x13, + 0x57, 0xEF, 0xF9, 0x79, 0x9A, 0x52, 0x03, 0xC7, 0xAD, 0xFA, 0x28, 0xA4, 0xE8, 0xEA, 0x53, 0x5E, + 0xD8, 0x94, 0xE4, 0xB8, 0x15, 0x27, 0x80, 0x83, 0xEA, 0xB0, 0x8A, 0xCF, 0x67, 0xCD, 0x70, 0xF3, + 0x87, 0x02, 0x17, 0x29, 0x91, 0xC9, 0xBD, 0x89, 0x84, 0x1C, 0x8B, 0x24, 0x31, 0xEF, 0x97, 0x5D, + 0xBC, 0x75, 0x5A, 0x43, 0x50, 0xD9, 0xF9, 0xF5, 0x39, 0xB9, 0x5D, 0xE1, 0x32, 0xA0, 0xBF, 0x98, + 0x7B, 0x6D, 0xBC, 0x7B, 0x35, 0x7C, 0xD0, 0x52, 0xA3, 0x68, 0x75, 0x92, 0x4A, 0xE6, 0x3F, 0x86, + 0x49, 0xA1, 0x8F, 0x5D, 0x6A, 0xAA, 0x9D, 0xE3, 0x86, 0x87, 0x3E, 0xC8, 0x3E, 0x8D, 0xC1, 0x4C, + 0x5A, 0x38, 0x01, 0x90, 0x56, 0x32, 0x66, 0x50, 0x98, 0x76, 0xD2, 0x1F, 0xB7, 0xE6, 0xD8, 0x43, + 0x8A, 0x46, 0x6D, 0x57, 0x4B, 0xAE, 0xD7, 0x20, 0x91, 0xD2, 0xC7, 0x12, 0x09, 0xFA, 0xAF, 0x8F, + 0x65, 0xC2, 0x63, 0x0E, 0x35, 0xE5, 0x53, 0x63, 0x3B, 0x6F, 0xBC, 0x33, 0xFF, 0xA4, 0x3D, 0x21, + 0x4D, 0x19, 0xA0, 0x5C, 0x55, 0x81, 0x6C, 0x02, 0x56, 0x21, 0xE1, 0x55, 0x40, 0x1A, 0xB9, 0xDE, + 0x74, 0x3D, 0x35, 0x50, 0x71, 0x9D, 0x29, 0x4F, 0x7C, 0x76, 0x62, 0xBE, 0x1B, 0x69, 0x1B, 0xEB, + 0x33, 0xEC, 0x45, 0xCB, 0xA1, 0x74, 0xE8, 0x3B, 0xF9, 0xA7, 0x62, 0x4F, 0x5F, 0xFE, 0x7C, 0x7C + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint)length; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint increment = Keytable[header.m_buildVersion & 511]; + uint kidx = increment; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_entryCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 60038. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_60038.cs +// + +namespace KeyCMF_060038 +{ + static const BYTE Keytable[] = + { + 0x5E, 0x3E, 0x8A, 0xFC, 0xC1, 0x27, 0xD1, 0x11, 0xAE, 0x7D, 0x3D, 0x86, 0x94, 0x99, 0x8E, 0xA4, + 0xE3, 0x0D, 0xAB, 0x20, 0xF7, 0xA3, 0x55, 0x9A, 0xC1, 0x1F, 0x00, 0xF6, 0xF4, 0x51, 0x66, 0x50, + 0xD9, 0xF6, 0xC4, 0x81, 0xEE, 0x73, 0x6A, 0xE7, 0xC4, 0x2F, 0x97, 0x82, 0x17, 0xF4, 0xDF, 0xDB, + 0xE3, 0xB7, 0xF0, 0xC2, 0x20, 0x12, 0x48, 0xD2, 0x8B, 0xBC, 0x73, 0x1C, 0xD9, 0x3B, 0x8C, 0xEC, + 0x26, 0x67, 0x96, 0x81, 0x34, 0xF6, 0x13, 0x92, 0x84, 0x2D, 0xB9, 0xCE, 0xF5, 0x81, 0x75, 0xB1, + 0x2B, 0x51, 0x26, 0xDB, 0x3D, 0x7D, 0x3B, 0x06, 0x2C, 0xBC, 0xFF, 0x18, 0x57, 0x42, 0x93, 0x44, + 0xAA, 0x57, 0x54, 0x3C, 0x06, 0xB0, 0x7F, 0x24, 0x11, 0x39, 0x18, 0x3B, 0x03, 0x75, 0xEC, 0x49, + 0x42, 0x20, 0xF0, 0x0A, 0xEC, 0x61, 0x33, 0x6D, 0xDA, 0xE9, 0x0E, 0x75, 0x51, 0x67, 0xE2, 0x7F, + 0x55, 0xD2, 0x2F, 0xD2, 0x02, 0xE5, 0x57, 0x26, 0xBC, 0x58, 0x7B, 0x3F, 0x9F, 0x48, 0xE6, 0x1F, + 0x2F, 0xD1, 0xC5, 0x0D, 0xEE, 0x53, 0xC5, 0xD2, 0x6D, 0x24, 0x0A, 0x1C, 0x34, 0x4E, 0xF9, 0x9C, + 0xAC, 0x6B, 0x29, 0x74, 0xC9, 0x87, 0x84, 0x83, 0x89, 0x20, 0x40, 0xD8, 0x0A, 0x7C, 0xF3, 0xC5, + 0x8B, 0x59, 0x43, 0xA5, 0x32, 0x22, 0x2A, 0xDB, 0x8D, 0x78, 0x09, 0xF1, 0xA7, 0x32, 0x77, 0x80, + 0x78, 0x7D, 0x22, 0x23, 0xC2, 0x50, 0xEE, 0x01, 0x15, 0x42, 0xB2, 0xD0, 0x11, 0x13, 0x4C, 0x42, + 0x6C, 0x5B, 0x52, 0x22, 0xA1, 0x07, 0xBE, 0xF0, 0xA7, 0xD2, 0xF3, 0x28, 0xC6, 0xEF, 0xF8, 0xB0, + 0x4D, 0x05, 0x2B, 0x04, 0xAE, 0xC9, 0x12, 0x53, 0xC7, 0x8B, 0x75, 0x14, 0xE4, 0xED, 0x53, 0xF1, + 0x88, 0xFA, 0xB5, 0xA5, 0xA2, 0x14, 0xD8, 0xE7, 0xBA, 0xE6, 0x2C, 0x2F, 0x27, 0xA6, 0x08, 0x93, + 0x3B, 0x13, 0x96, 0x74, 0xE4, 0x0D, 0xA2, 0xD5, 0xC8, 0x14, 0xD4, 0x8D, 0x2D, 0x70, 0xDE, 0xE8, + 0x64, 0x2A, 0x8D, 0x4E, 0x9B, 0xF8, 0xF4, 0x75, 0x14, 0xBE, 0xD2, 0x62, 0xBE, 0x94, 0x97, 0xFB, + 0x5F, 0x9B, 0x28, 0x62, 0xBA, 0x42, 0x6B, 0x75, 0xD2, 0xD6, 0xCD, 0x30, 0xB7, 0x62, 0x15, 0x18, + 0xB4, 0x0A, 0x2A, 0xBE, 0x4F, 0x8E, 0x3B, 0x8B, 0xD1, 0x81, 0x2F, 0x37, 0x6B, 0x70, 0x2A, 0x0D, + 0xD9, 0x84, 0xF0, 0x9D, 0xC8, 0x3E, 0x88, 0x5C, 0x80, 0xDE, 0xF3, 0x8F, 0x9C, 0xBC, 0x37, 0x4A, + 0x06, 0x84, 0xC2, 0x49, 0xAB, 0xED, 0xCC, 0xCA, 0x9A, 0x95, 0x5C, 0x50, 0x36, 0x32, 0x85, 0x2C, + 0x5F, 0x06, 0xCE, 0x33, 0x00, 0x26, 0xA8, 0x1E, 0x97, 0x50, 0x08, 0x9E, 0x71, 0x44, 0xAD, 0xB5, + 0x52, 0x39, 0xA7, 0xB0, 0x62, 0x94, 0xFC, 0x3E, 0x75, 0xD9, 0x56, 0x02, 0xE9, 0x5A, 0x5F, 0x43, + 0x4E, 0xC7, 0x94, 0xD9, 0x64, 0xCF, 0x1C, 0x3F, 0x0C, 0x6A, 0x78, 0x1B, 0xB4, 0xB3, 0x75, 0x7A, + 0x3D, 0xB7, 0x3F, 0x65, 0xA5, 0x0C, 0x11, 0xAA, 0xEC, 0xC6, 0xB4, 0x96, 0x61, 0xFB, 0x38, 0x33, + 0x4C, 0x0D, 0xD9, 0x37, 0x71, 0x2B, 0xC4, 0x46, 0x90, 0x65, 0xC3, 0x2A, 0x2E, 0xB3, 0x4E, 0x79, + 0x00, 0x34, 0xC5, 0x09, 0x83, 0xD2, 0x00, 0x8E, 0x39, 0x56, 0x89, 0x70, 0x31, 0x7A, 0x9D, 0x37, + 0x4D, 0x95, 0xA3, 0x93, 0x11, 0x3A, 0x9B, 0xF7, 0xA3, 0x3F, 0x34, 0xAA, 0x65, 0x55, 0x18, 0x01, + 0xBB, 0xF9, 0x3E, 0xCF, 0x63, 0xA8, 0x32, 0x7D, 0x3F, 0xC1, 0x3A, 0x1A, 0x60, 0xB6, 0xD0, 0x69, + 0xCD, 0x12, 0xCA, 0x65, 0x3C, 0x2E, 0xFC, 0x05, 0xA5, 0x5A, 0xD8, 0xA2, 0x2B, 0x2A, 0xC4, 0xE5, + 0x2A, 0x9A, 0x96, 0x7A, 0x8F, 0xC2, 0x80, 0x57, 0x42, 0xAC, 0xBC, 0x6C, 0xE1, 0x30, 0x3C, 0x14 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (header.m_buildVersion * length); + uint increment = kidx % 61; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) ((digest[7] + header.m_dataCount) & 511); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 60360. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_60360.cs +// + +namespace KeyCMF_060360 +{ + static const BYTE Keytable[] = + { + 0xE1, 0x89, 0x88, 0x7A, 0xCA, 0xC1, 0xA2, 0x53, 0x00, 0xF1, 0xED, 0xA0, 0x83, 0xB0, 0x8D, 0xB2, + 0xA4, 0xEE, 0x2F, 0x9A, 0x1E, 0x6C, 0x69, 0x30, 0x41, 0x0D, 0x67, 0x53, 0x9A, 0xE9, 0xC1, 0x27, + 0xBD, 0xFD, 0x3F, 0x3E, 0x92, 0x8F, 0x63, 0xD2, 0xC8, 0x29, 0x26, 0x02, 0x05, 0x5E, 0xD9, 0xD9, + 0xBE, 0x6A, 0xFD, 0xD2, 0xAE, 0xF7, 0x41, 0x25, 0x8F, 0xAE, 0xC3, 0xAB, 0x66, 0xEB, 0xE4, 0x9C, + 0xC6, 0x83, 0x2A, 0x89, 0x3E, 0xC2, 0x4E, 0xBD, 0x89, 0xE0, 0x7E, 0x4B, 0x76, 0xA7, 0xD3, 0x18, + 0xEF, 0x78, 0x7E, 0x43, 0xD1, 0x69, 0x2D, 0x78, 0x64, 0x72, 0xFA, 0xFD, 0x51, 0x65, 0x79, 0x70, + 0x38, 0x20, 0x3B, 0xF2, 0x6A, 0xCE, 0x3C, 0xEB, 0x88, 0xAF, 0xD9, 0x74, 0x41, 0x6F, 0xB5, 0x1F, + 0x78, 0xDA, 0x58, 0x2A, 0xB0, 0xEF, 0x5D, 0x39, 0x97, 0x02, 0xCA, 0x51, 0x1B, 0x4E, 0x58, 0x65, + 0xC4, 0x03, 0x01, 0xDD, 0xA7, 0xA9, 0x41, 0xE6, 0x0E, 0x67, 0x7D, 0x2C, 0x69, 0xE3, 0x52, 0x2B, + 0x1E, 0x1D, 0x4C, 0xA6, 0xF8, 0x21, 0x03, 0xDA, 0x7E, 0x84, 0xF8, 0x15, 0x98, 0x22, 0xBA, 0x82, + 0xAC, 0xBA, 0x8D, 0x87, 0xE1, 0xC3, 0xA3, 0x32, 0xDE, 0x0F, 0x75, 0x1D, 0x5E, 0x8E, 0x85, 0xA4, + 0xD4, 0x68, 0x7B, 0x3B, 0x73, 0x7E, 0xDF, 0x40, 0x98, 0x5E, 0xD2, 0x82, 0x82, 0x68, 0xAF, 0xC4, + 0x50, 0x71, 0x32, 0x5B, 0x6C, 0x93, 0x67, 0xCA, 0xF8, 0xB3, 0x80, 0x1F, 0xE8, 0x27, 0x72, 0x4D, + 0x1C, 0x16, 0x08, 0xAF, 0x54, 0x67, 0x8C, 0x40, 0x8A, 0xEF, 0x46, 0x4C, 0x64, 0x77, 0x7F, 0x01, + 0x9D, 0xBC, 0xCC, 0xCD, 0x51, 0xDB, 0xA4, 0x25, 0xF4, 0xA2, 0x0F, 0xF6, 0xE3, 0x82, 0x73, 0x61, + 0xF2, 0x66, 0x88, 0xBE, 0xF3, 0x35, 0xD0, 0xD3, 0x11, 0xD9, 0xBA, 0xF9, 0x5A, 0x8D, 0x6B, 0xC9, + 0x6F, 0x79, 0x5C, 0xE7, 0x52, 0x89, 0x66, 0x64, 0xE0, 0x40, 0x8A, 0xDD, 0x1D, 0x29, 0xEF, 0xEF, + 0x8A, 0x60, 0x30, 0x66, 0x99, 0xA1, 0x3E, 0x15, 0x4D, 0x23, 0xB0, 0x2B, 0x46, 0x7D, 0x59, 0xC4, + 0x82, 0x7F, 0x41, 0x5F, 0x93, 0xDB, 0xB4, 0xCD, 0x60, 0x1D, 0xF7, 0x48, 0x80, 0x18, 0x5D, 0xF8, + 0x7D, 0xBD, 0x1F, 0xF4, 0xB5, 0x29, 0xD7, 0x45, 0x16, 0x1C, 0xFD, 0xF0, 0x33, 0xA6, 0xF5, 0x55, + 0xEC, 0xCC, 0x06, 0x5E, 0x58, 0x64, 0xFF, 0x19, 0x6E, 0xAB, 0x8B, 0xAC, 0x89, 0xD1, 0x5A, 0xD1, + 0x07, 0xCA, 0x19, 0x98, 0x41, 0xBA, 0x29, 0x61, 0x3C, 0xFB, 0xA4, 0x93, 0xB8, 0x5B, 0xFD, 0xE4, + 0xB9, 0xAF, 0x29, 0x83, 0x75, 0xF0, 0xB3, 0xF5, 0x51, 0x94, 0x92, 0xA2, 0xC0, 0xFF, 0x52, 0x24, + 0xCB, 0xB4, 0xCA, 0x3A, 0xF8, 0xBB, 0xEF, 0x9A, 0x45, 0xAD, 0x6F, 0x09, 0x8E, 0x59, 0x58, 0x61, + 0xCA, 0x75, 0x62, 0x36, 0x03, 0x5D, 0x14, 0xF5, 0x39, 0xA0, 0x11, 0x06, 0x01, 0x54, 0x62, 0x91, + 0x2F, 0xE8, 0xBF, 0x0A, 0xF2, 0xFF, 0x58, 0x1E, 0xD4, 0x80, 0x44, 0x6D, 0x46, 0x59, 0x96, 0x20, + 0xDB, 0xA0, 0x59, 0x31, 0x2E, 0x57, 0x6E, 0x8C, 0xDA, 0xA5, 0x78, 0xC6, 0x98, 0xF5, 0xE3, 0x5C, + 0x1B, 0xFC, 0x96, 0xCE, 0x42, 0x92, 0xEA, 0x45, 0xEA, 0xBC, 0x04, 0x6B, 0x53, 0x85, 0x92, 0x01, + 0x69, 0xA5, 0xFB, 0x70, 0x3D, 0xCB, 0x2B, 0xC1, 0xF0, 0xFE, 0xB3, 0xAE, 0x0D, 0x9B, 0x08, 0x33, + 0x2A, 0x28, 0x15, 0x87, 0x43, 0x8D, 0x37, 0xEA, 0xE5, 0x3B, 0xD3, 0x03, 0x1C, 0xCF, 0x93, 0xA6, + 0x89, 0x7B, 0xD6, 0x83, 0x01, 0x62, 0x9C, 0xC5, 0x8C, 0x14, 0xE2, 0x8D, 0xD0, 0x4A, 0x10, 0x41, + 0x56, 0xA5, 0x31, 0x2C, 0x1A, 0xA6, 0xEB, 0x9D, 0xBD, 0x86, 0xBF, 0xC3, 0x2C, 0xEB, 0xFC, 0xD0 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + uint increment = kidx % 61; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += increment; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) ((digest[7] + header.m_dataCount) & 511); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 60547. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_60547.cs +// + +namespace KeyCMF_060547 +{ + static const BYTE Keytable[] = + { + 0x90, 0x7B, 0x7B, 0x12, 0x86, 0x3A, 0xE2, 0x80, 0x39, 0xCD, 0x45, 0xF0, 0x81, 0x6D, 0x65, 0x8D, + 0xBF, 0x98, 0x50, 0x8C, 0xE4, 0x63, 0xBD, 0x15, 0x03, 0x74, 0xE3, 0xD3, 0x27, 0x58, 0x3E, 0xC5, + 0x6A, 0xF5, 0x4C, 0x6F, 0x95, 0x98, 0xE1, 0x22, 0x0E, 0x63, 0x93, 0xBC, 0xE3, 0xBA, 0x32, 0x94, + 0x3A, 0x72, 0xBC, 0x41, 0x60, 0x44, 0x29, 0x5D, 0xC7, 0x71, 0xCB, 0xC4, 0x37, 0x8D, 0x08, 0x96, + 0x06, 0xB2, 0xCD, 0x03, 0xFE, 0x01, 0x65, 0x3A, 0x1C, 0xA5, 0x4F, 0x37, 0xFB, 0xB9, 0x45, 0x48, + 0x7A, 0x55, 0xAA, 0xDB, 0xBB, 0x70, 0x91, 0x3B, 0x63, 0xD6, 0x27, 0x4C, 0x1E, 0x9C, 0xBB, 0xD5, + 0x6F, 0x12, 0x97, 0xA5, 0x29, 0x06, 0xC1, 0xF2, 0x69, 0x70, 0x03, 0xA0, 0xCD, 0x24, 0x5A, 0xCE, + 0x3B, 0x59, 0x04, 0x17, 0xDA, 0x93, 0xDC, 0x22, 0x37, 0x9C, 0x41, 0xDE, 0x9A, 0xE4, 0xCB, 0xDA, + 0x6F, 0xCF, 0xF0, 0x18, 0xCB, 0xE1, 0xC2, 0x51, 0x6E, 0x3D, 0xA4, 0x61, 0x5A, 0xB5, 0x16, 0x13, + 0x33, 0x11, 0x8D, 0x28, 0x2F, 0xB1, 0x78, 0x57, 0xD1, 0x02, 0xBF, 0x00, 0xE5, 0x3F, 0x22, 0x94, + 0x87, 0x97, 0x39, 0x01, 0xC1, 0x3F, 0x06, 0x21, 0xDB, 0x6D, 0xF9, 0x70, 0x41, 0x9C, 0x33, 0xF9, + 0x94, 0x32, 0x3C, 0x77, 0x5B, 0x77, 0x88, 0x6C, 0x97, 0x03, 0x4D, 0x50, 0x94, 0xF4, 0x70, 0xA7, + 0xAC, 0xBA, 0x6A, 0x89, 0x81, 0x9C, 0xF0, 0xA9, 0xA4, 0x8A, 0x92, 0xB7, 0x9B, 0x6E, 0xB9, 0xE7, + 0x72, 0x72, 0x70, 0xCB, 0x4C, 0x41, 0x7D, 0xF8, 0x7C, 0xA2, 0x12, 0x8C, 0xCA, 0xE5, 0x39, 0x32, + 0x59, 0x34, 0xC4, 0xA2, 0xE5, 0x87, 0xD3, 0x97, 0xA1, 0xD5, 0x27, 0x62, 0x72, 0x6C, 0xD6, 0xE1, + 0x2F, 0xEF, 0xAB, 0x9B, 0x4A, 0x70, 0xF3, 0xC9, 0x11, 0xA8, 0x69, 0xE3, 0x72, 0x0A, 0x35, 0x55, + 0x29, 0x0B, 0x0D, 0x8B, 0xED, 0x4A, 0xDF, 0xBC, 0x2A, 0x6F, 0x3F, 0x79, 0xE7, 0xB5, 0x92, 0x38, + 0xE1, 0xD8, 0xB3, 0xEC, 0x64, 0x3B, 0xCA, 0x2D, 0xF1, 0x26, 0x82, 0x4D, 0xA6, 0x17, 0x77, 0x4D, + 0x38, 0x1B, 0xE6, 0x0A, 0x3F, 0xA7, 0x8C, 0x88, 0x72, 0x99, 0x21, 0x82, 0xD0, 0x98, 0x88, 0x4B, + 0x7B, 0x54, 0x3C, 0x75, 0xF8, 0xDF, 0xF3, 0xC8, 0xC2, 0x40, 0x63, 0xB8, 0xD2, 0x39, 0x70, 0xBA, + 0x7F, 0x77, 0x11, 0x89, 0xFA, 0x4F, 0x96, 0xDC, 0x7A, 0xB8, 0x03, 0x6A, 0x78, 0x95, 0x24, 0x81, + 0xD3, 0x89, 0xB5, 0x16, 0x4B, 0x6C, 0xC6, 0xE2, 0xED, 0x95, 0xB8, 0x1F, 0x3A, 0x72, 0x85, 0x89, + 0x5C, 0x5A, 0xCA, 0x22, 0x7C, 0x8A, 0x39, 0xA1, 0xD6, 0x49, 0x30, 0x0C, 0xFB, 0x43, 0x6D, 0x02, + 0x38, 0x7B, 0xB9, 0x4F, 0x04, 0x96, 0xC6, 0xEB, 0xE8, 0x9F, 0x0E, 0x58, 0x48, 0x85, 0x15, 0xE0, + 0x84, 0xB3, 0xFB, 0xA4, 0xF3, 0x4E, 0x02, 0x32, 0x30, 0xBF, 0xC5, 0xE1, 0x7E, 0x53, 0xEB, 0xAF, + 0x1A, 0xDC, 0x5C, 0xB2, 0xC5, 0xA2, 0x8C, 0xEA, 0xB0, 0x06, 0x6D, 0xB9, 0xCB, 0xE2, 0x9F, 0x60, + 0x96, 0xE4, 0x1E, 0x31, 0xEB, 0x3C, 0xC3, 0x2B, 0x01, 0x8E, 0x1E, 0x11, 0x1E, 0x16, 0x97, 0x75, + 0x2A, 0x7C, 0xD8, 0xB1, 0x03, 0x9F, 0x79, 0xCF, 0x31, 0x6B, 0x76, 0x5C, 0x48, 0x60, 0xB6, 0x4E, + 0xF1, 0x33, 0xB3, 0x41, 0xD9, 0x08, 0x23, 0x6B, 0x13, 0xD3, 0x51, 0x53, 0x16, 0x2A, 0x28, 0x58, + 0x47, 0x6C, 0xBE, 0xB1, 0x98, 0x45, 0x38, 0xB5, 0xDA, 0x24, 0x03, 0xEA, 0x7A, 0x59, 0x8B, 0x46, + 0x59, 0x7B, 0x99, 0x04, 0xE0, 0x94, 0x39, 0xF3, 0x1B, 0x65, 0x3C, 0x22, 0x7C, 0x6D, 0x9B, 0x87, + 0x0B, 0x48, 0xE6, 0xD6, 0x4A, 0x0C, 0x26, 0x4D, 0x01, 0x4B, 0x35, 0x83, 0x0D, 0x86, 0x37, 0x68 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)(header.m_buildVersion * header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[digest[7] * Keytable[0] & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 60993. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_60993.cs +// + +namespace KeyCMF_060993 +{ + static const BYTE Keytable[] = + { + 0x6C, 0xC3, 0x9E, 0xC8, 0x2C, 0xD9, 0xFB, 0x34, 0x4E, 0xF2, 0xBE, 0xAB, 0xA9, 0xBD, 0x44, 0x22, + 0x9E, 0x6E, 0x71, 0xC9, 0x9B, 0xB9, 0x33, 0x1D, 0x8D, 0xE4, 0xDE, 0x32, 0x43, 0xBA, 0xAC, 0x23, + 0xEE, 0x45, 0x14, 0xDC, 0x6F, 0x55, 0x8A, 0xDE, 0xA5, 0x3B, 0xDB, 0x34, 0x1E, 0xE6, 0xF9, 0x1E, + 0x67, 0xAD, 0x5A, 0x33, 0x27, 0x16, 0xF4, 0xE1, 0x28, 0xDD, 0x88, 0x4F, 0x88, 0xC5, 0x7D, 0x15, + 0x56, 0x86, 0xFA, 0x30, 0x7D, 0x73, 0xB2, 0xFD, 0xAE, 0xE3, 0xB9, 0xAC, 0x50, 0x78, 0x61, 0x57, + 0x25, 0xC3, 0x69, 0xCF, 0x73, 0xC3, 0x58, 0xAA, 0xB9, 0xCE, 0xCB, 0x22, 0x68, 0x1F, 0x3F, 0x83, + 0x00, 0x44, 0xE2, 0xA9, 0xDA, 0xC5, 0x55, 0x45, 0xDC, 0xC0, 0xEA, 0x37, 0x49, 0x3D, 0x86, 0xAE, + 0x9D, 0x7B, 0xFD, 0xF1, 0xBD, 0x68, 0xDF, 0x89, 0xA2, 0x3D, 0x22, 0xFA, 0x6F, 0xFE, 0x14, 0x8E, + 0x0E, 0xD4, 0xD1, 0x85, 0x61, 0x6F, 0xAC, 0x46, 0x76, 0x0A, 0x95, 0xBA, 0xEC, 0xC1, 0xC7, 0x24, + 0xBC, 0x73, 0x0A, 0xA0, 0xDA, 0xBC, 0x9F, 0x79, 0xCA, 0x37, 0x87, 0xEE, 0xDF, 0x95, 0xDA, 0xDA, + 0x7A, 0x32, 0x80, 0x1A, 0x45, 0x74, 0xD5, 0xDE, 0xF6, 0x88, 0x13, 0x05, 0x70, 0x36, 0x7C, 0xBA, + 0x28, 0xE5, 0xEA, 0x52, 0xCC, 0xB1, 0xC6, 0x35, 0x6B, 0xC3, 0x41, 0x3F, 0xCB, 0x5B, 0xAA, 0x96, + 0xA1, 0x67, 0x5A, 0xA1, 0xA8, 0xE1, 0x8B, 0xF6, 0x96, 0xB4, 0x74, 0x86, 0x1E, 0xF0, 0x29, 0xE9, + 0x25, 0x63, 0xB4, 0xEB, 0xFD, 0xA0, 0x1D, 0x06, 0x66, 0x65, 0xDE, 0x7D, 0xA0, 0x50, 0x3B, 0x3B, + 0xD9, 0xEE, 0xC8, 0xE6, 0x43, 0xA7, 0x09, 0x60, 0xEB, 0x86, 0x55, 0xAE, 0xDE, 0x61, 0x0D, 0xFD, + 0x44, 0x40, 0x3B, 0x82, 0xFA, 0xDB, 0x1F, 0x57, 0xE4, 0x64, 0xCC, 0x00, 0x71, 0xB0, 0x41, 0xCC, + 0x10, 0x02, 0x12, 0x8F, 0x96, 0xC8, 0x04, 0x30, 0x20, 0xBD, 0x27, 0x16, 0xCC, 0x4E, 0xD3, 0x98, + 0x16, 0xF5, 0xBA, 0xEE, 0x3C, 0x23, 0x25, 0x8C, 0xAC, 0xE9, 0x36, 0xA7, 0xEA, 0x5C, 0x1A, 0xA5, + 0x3F, 0x40, 0x5C, 0x5A, 0x7C, 0xE6, 0x9E, 0x1A, 0x40, 0xE5, 0x44, 0x05, 0xC7, 0x6F, 0xED, 0x57, + 0x67, 0xBF, 0x66, 0x0F, 0xE3, 0x2A, 0xF1, 0xD7, 0x75, 0xFA, 0xD1, 0xF5, 0x65, 0x06, 0x16, 0xB6, + 0x61, 0x8D, 0x9F, 0xF7, 0x5A, 0x51, 0xD2, 0x6C, 0xC3, 0xCF, 0x9E, 0xA6, 0xB6, 0xED, 0xBE, 0xDF, + 0x34, 0xC3, 0xEE, 0xC8, 0x7F, 0x66, 0x7D, 0xA3, 0xFC, 0xCC, 0xE6, 0x8F, 0xC8, 0xB3, 0x88, 0xE2, + 0x8D, 0x28, 0x4D, 0x80, 0x54, 0x2B, 0x47, 0xC5, 0x91, 0x6F, 0x98, 0x35, 0x44, 0x16, 0x61, 0xA8, + 0xF4, 0x5C, 0x7C, 0x41, 0x69, 0x50, 0xC8, 0x3F, 0xD1, 0x55, 0x02, 0xA6, 0x12, 0x9B, 0x3A, 0x44, + 0xFB, 0xF4, 0x45, 0x31, 0x27, 0x20, 0x37, 0x1C, 0x4D, 0x8A, 0x61, 0xDB, 0xE5, 0x98, 0x71, 0x9A, + 0x43, 0xFC, 0x93, 0x93, 0x7E, 0xF4, 0x8A, 0x31, 0x1B, 0xDF, 0x4A, 0xE3, 0x6A, 0x00, 0x2C, 0x96, + 0x1F, 0x69, 0xE8, 0xE0, 0x94, 0x74, 0x7D, 0xC5, 0x07, 0xC1, 0x2F, 0x86, 0x4D, 0x44, 0xC8, 0x81, + 0x8D, 0xFC, 0xED, 0xFC, 0xAB, 0xAB, 0xF9, 0x75, 0x1F, 0x8D, 0x51, 0xE7, 0xE0, 0xB4, 0x78, 0x28, + 0x9F, 0x78, 0xBE, 0xAC, 0x3A, 0xD2, 0x72, 0x14, 0x73, 0x7C, 0x50, 0xAF, 0x19, 0xCB, 0xC7, 0x77, + 0x7F, 0x66, 0xFE, 0x48, 0x39, 0x8A, 0x8A, 0x4A, 0x4B, 0x1E, 0x90, 0x9B, 0xC2, 0x38, 0x56, 0x8D, + 0xFA, 0x01, 0xF2, 0xC9, 0xE4, 0x5D, 0x8C, 0xAD, 0x03, 0x62, 0x98, 0xD5, 0x7E, 0xF4, 0x90, 0x32, + 0x09, 0x32, 0xFD, 0xC2, 0xEF, 0xA4, 0x0A, 0x77, 0x6D, 0x27, 0x15, 0xB1, 0x36, 0x1A, 0x9F, 0x73 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)length; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(uint) header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 61542. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_61542.cs +// + +namespace KeyCMF_061542 +{ + static const BYTE Keytable[] = + { + 0xC4, 0x3E, 0x25, 0x41, 0x84, 0x5F, 0x19, 0x0D, 0xCC, 0x10, 0x44, 0x7D, 0xF8, 0xE3, 0x32, 0xAD, + 0x61, 0xBE, 0x0D, 0x9A, 0x3C, 0x3A, 0x1D, 0xFC, 0x2A, 0x92, 0x79, 0x1F, 0x7C, 0xA1, 0x84, 0xD1, + 0x55, 0x3E, 0xD8, 0xB0, 0xED, 0x0C, 0xF0, 0xEE, 0x50, 0x97, 0x78, 0x60, 0xFB, 0x0A, 0x80, 0x74, + 0xA6, 0xC0, 0xEA, 0x16, 0xA4, 0x07, 0xC5, 0x56, 0xCF, 0xD9, 0x7F, 0x66, 0x26, 0x45, 0x23, 0xA7, + 0x21, 0x70, 0x09, 0x77, 0x3A, 0x45, 0x4A, 0xE8, 0x53, 0xD8, 0x33, 0xFA, 0x80, 0x93, 0x78, 0xF0, + 0x1F, 0xCC, 0xCF, 0xF0, 0xF2, 0x39, 0xE5, 0x47, 0x33, 0x35, 0x92, 0x0B, 0x08, 0xA2, 0x6B, 0x92, + 0xC5, 0x8F, 0xDA, 0x7D, 0xF4, 0x85, 0xBD, 0xE4, 0xD0, 0xE1, 0xFD, 0x19, 0xFB, 0xFB, 0x7A, 0x56, + 0x01, 0xE7, 0xF1, 0x94, 0x32, 0xDD, 0x0E, 0x04, 0xF6, 0xDE, 0xCF, 0x11, 0xE5, 0x03, 0xAB, 0x45, + 0x57, 0xF8, 0x5B, 0xC2, 0xD8, 0xDA, 0x2A, 0x2A, 0xCB, 0x1A, 0x55, 0x1B, 0x6E, 0x7D, 0x0B, 0x0B, + 0x82, 0x38, 0x46, 0x0D, 0xBD, 0xC4, 0x3C, 0x2A, 0x14, 0xCE, 0x81, 0x38, 0xD1, 0x5E, 0x64, 0x75, + 0x7E, 0xDB, 0x31, 0x55, 0xD8, 0x6C, 0x98, 0x7E, 0x5D, 0x8E, 0x57, 0xA0, 0x95, 0xBE, 0x93, 0x9E, + 0x8E, 0x56, 0xA4, 0x80, 0xCF, 0x7C, 0x2E, 0x08, 0x19, 0xD7, 0x5C, 0x60, 0x7E, 0xA0, 0x58, 0x12, + 0xB1, 0xF5, 0x7A, 0xDD, 0xDE, 0x80, 0xCF, 0x54, 0xF2, 0x92, 0x60, 0x04, 0x68, 0x80, 0x9F, 0x00, + 0x2C, 0x26, 0x59, 0x65, 0x3D, 0x91, 0xE8, 0xC7, 0xF8, 0x41, 0xC3, 0x04, 0x98, 0xBE, 0x98, 0xF1, + 0xD7, 0x49, 0xEA, 0x56, 0x3D, 0xE1, 0xBA, 0xBD, 0xC5, 0x4C, 0xB7, 0x54, 0x08, 0x30, 0x17, 0xA0, + 0x57, 0xE5, 0xBB, 0xEB, 0x2C, 0xEC, 0x8F, 0xB1, 0xC0, 0xD3, 0x4E, 0x5F, 0xE1, 0x5C, 0xFB, 0xA9, + 0xB3, 0x3B, 0x4A, 0xE8, 0xE7, 0x83, 0x28, 0xDC, 0x78, 0x61, 0xA7, 0x30, 0x80, 0x94, 0x67, 0xC8, + 0x64, 0x43, 0x81, 0xB6, 0x2A, 0xF7, 0x1F, 0x7C, 0x28, 0xEF, 0x5D, 0xFA, 0x62, 0x3E, 0x42, 0x5B, + 0x9D, 0x05, 0x43, 0x77, 0x49, 0x94, 0x0B, 0x77, 0x80, 0xA7, 0x5F, 0x29, 0xE1, 0x6F, 0x5B, 0x40, + 0x72, 0xB3, 0xA2, 0x28, 0x46, 0x46, 0x09, 0xE7, 0xF3, 0xA8, 0x8D, 0x3B, 0xBC, 0x97, 0x4A, 0x7B, + 0xA2, 0xCF, 0xFA, 0x68, 0x59, 0x79, 0x7A, 0xFB, 0x5F, 0xB2, 0x6A, 0x8C, 0xD0, 0x74, 0x81, 0xA3, + 0x1C, 0x69, 0x25, 0xD9, 0x94, 0xD8, 0xB8, 0xB3, 0x97, 0x25, 0x3C, 0xA2, 0x09, 0x04, 0x4A, 0x35, + 0x85, 0xE5, 0x0C, 0xA4, 0xEB, 0xFD, 0x52, 0x0B, 0xD2, 0x7A, 0x01, 0x95, 0xA7, 0xA6, 0x18, 0x68, + 0x87, 0x1F, 0x21, 0x19, 0xA0, 0x0E, 0xA3, 0x93, 0xE7, 0xD7, 0x4E, 0xA9, 0xE4, 0xA5, 0x70, 0xBB, + 0x2F, 0xE6, 0xF5, 0x48, 0x07, 0x6D, 0xD1, 0x7B, 0x0F, 0xDA, 0xEF, 0x08, 0x25, 0x7C, 0x5E, 0xA5, + 0x16, 0x2D, 0x4B, 0x1E, 0xF5, 0xF8, 0x28, 0xCC, 0x8A, 0x8C, 0x74, 0xEF, 0xA0, 0x26, 0x47, 0xA4, + 0xEA, 0x1C, 0xA6, 0x60, 0x6D, 0xAE, 0x15, 0xAE, 0x7B, 0x12, 0x4D, 0x75, 0xE4, 0x5A, 0x42, 0x15, + 0x21, 0x8C, 0xDB, 0x81, 0x0B, 0xA2, 0x14, 0x6F, 0xB6, 0x0F, 0xB0, 0x0C, 0x21, 0x67, 0xE2, 0xA0, + 0x78, 0x31, 0x21, 0xE8, 0x8D, 0x45, 0x63, 0xE4, 0x59, 0x7B, 0x65, 0xD3, 0x64, 0xA2, 0x59, 0x9D, + 0xE8, 0x2A, 0xB2, 0x95, 0xB7, 0x36, 0xFC, 0xAB, 0x01, 0x71, 0xFB, 0xF2, 0xDA, 0x4D, 0x3B, 0x3B, + 0xB9, 0xE8, 0xE6, 0xD6, 0xB3, 0xB3, 0x80, 0x70, 0x04, 0x6B, 0x8D, 0xAF, 0x5D, 0xDA, 0xCB, 0xFC, + 0x77, 0x4C, 0x01, 0xD1, 0x6C, 0x21, 0x40, 0xBD, 0x20, 0x44, 0x69, 0x98, 0xA5, 0x95, 0xE0, 0x28 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint) SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_entryCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 62065. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_62065.cs +// + +namespace KeyCMF_062065 +{ + static const BYTE Keytable[] = + { + 0x6F, 0x7F, 0xDF, 0xF0, 0x90, 0x83, 0x31, 0x29, 0xDF, 0x8B, 0x67, 0x77, 0xE1, 0x2B, 0xFE, 0xDF, + 0x13, 0xFF, 0x06, 0x52, 0xBC, 0x43, 0x61, 0x26, 0xB1, 0xC0, 0x5B, 0x0D, 0xD0, 0x7A, 0x09, 0x01, + 0x66, 0xB5, 0x22, 0xF0, 0x9D, 0x2B, 0x6B, 0x87, 0xF7, 0x56, 0x5F, 0x6E, 0x3B, 0xBB, 0x59, 0x87, + 0x04, 0xEA, 0x10, 0xE8, 0x90, 0x30, 0x36, 0xDF, 0xB4, 0x47, 0x98, 0x19, 0xE1, 0x12, 0x5D, 0x54, + 0x62, 0xE2, 0x52, 0x3B, 0xC8, 0x7D, 0x1E, 0x58, 0x0E, 0xC7, 0x5C, 0xE2, 0xF3, 0x19, 0x92, 0xFB, + 0x86, 0xD7, 0xFB, 0xF1, 0xA6, 0x42, 0x7B, 0xD0, 0x98, 0x02, 0xDB, 0xC4, 0x88, 0x36, 0xD3, 0x89, + 0x96, 0xE6, 0x40, 0x46, 0x16, 0x64, 0x98, 0xF2, 0x5E, 0xE8, 0x60, 0x55, 0x76, 0x90, 0x6D, 0xF5, + 0x9B, 0x6B, 0xD3, 0xA5, 0x80, 0x59, 0x08, 0x76, 0x5D, 0x59, 0xCA, 0xC7, 0x70, 0x9E, 0xDB, 0x8C, + 0x0A, 0x31, 0x75, 0x97, 0x81, 0x3A, 0xAF, 0x74, 0x42, 0x2E, 0xD8, 0x11, 0x4C, 0xC9, 0xA1, 0xC6, + 0x1A, 0x1C, 0x40, 0xDB, 0xA9, 0xA5, 0xA8, 0x9D, 0xF2, 0xCB, 0x9E, 0x79, 0xAD, 0x82, 0x3B, 0x46, + 0xF6, 0xD2, 0x34, 0xC0, 0x3B, 0x14, 0x7D, 0xAD, 0x2D, 0x52, 0x31, 0x1B, 0xCC, 0x0A, 0xE1, 0x23, + 0xD3, 0xBE, 0x3B, 0x6D, 0x1A, 0xE4, 0x03, 0xDE, 0x8C, 0xDA, 0x13, 0x56, 0xF6, 0x89, 0x70, 0x6D, + 0x1E, 0xA6, 0xC8, 0xA0, 0xF0, 0xBE, 0x59, 0xA7, 0xEB, 0x27, 0x0C, 0x12, 0x28, 0xBF, 0xE2, 0x96, + 0x23, 0x07, 0x50, 0xCB, 0xFF, 0x5F, 0x69, 0x4D, 0xA7, 0x3C, 0x86, 0x54, 0x41, 0x06, 0x7E, 0x0C, + 0x92, 0xA4, 0x71, 0xAA, 0x13, 0xB4, 0x0B, 0x2D, 0x0B, 0xC2, 0xA4, 0x83, 0x55, 0x92, 0x1F, 0x44, + 0x5D, 0xBD, 0x82, 0x6E, 0x4E, 0xB6, 0xE7, 0xED, 0x09, 0x8C, 0x19, 0x6A, 0xAD, 0x70, 0x51, 0x29, + 0x44, 0xB6, 0xF8, 0xBC, 0x08, 0x33, 0x95, 0x84, 0xB5, 0x19, 0x44, 0xB6, 0x52, 0x40, 0xA4, 0xC9, + 0x8B, 0xB7, 0xF8, 0x72, 0x9A, 0x71, 0xB1, 0x0A, 0xB0, 0xB5, 0x25, 0x7E, 0x4B, 0xFD, 0x28, 0x0C, + 0xA4, 0xA7, 0xE8, 0x77, 0x57, 0x22, 0xF2, 0xFA, 0x8E, 0x38, 0x0E, 0xA7, 0xDF, 0x52, 0xA0, 0x64, + 0xAA, 0xCC, 0xFD, 0xCB, 0x31, 0x13, 0x5B, 0x51, 0xAD, 0xCB, 0x23, 0x2B, 0xBC, 0xBF, 0x5B, 0x35, + 0xE8, 0x25, 0xE6, 0x3F, 0x82, 0x0A, 0xC2, 0x6A, 0x84, 0x68, 0xC3, 0xC4, 0xFC, 0x46, 0x2E, 0xA3, + 0x8B, 0x92, 0x1C, 0xAF, 0x5C, 0xCC, 0x7B, 0x21, 0x20, 0xF8, 0x4F, 0x75, 0x27, 0xBB, 0xC8, 0x1B, + 0xE4, 0x79, 0x87, 0xF4, 0x6E, 0x00, 0xC4, 0xE9, 0x4E, 0xC3, 0x5A, 0x9D, 0x56, 0x10, 0x8D, 0xD6, + 0x24, 0xFC, 0xDE, 0x3C, 0x23, 0x74, 0x1F, 0xD9, 0x6C, 0x92, 0xBE, 0x45, 0x22, 0x85, 0xE1, 0xF7, + 0xCC, 0x36, 0x10, 0x68, 0xA1, 0x33, 0x2E, 0x7E, 0xD0, 0xBE, 0xA5, 0xE7, 0x40, 0x33, 0xAF, 0xB4, + 0x97, 0xA6, 0xB8, 0x58, 0xB4, 0x01, 0x82, 0x21, 0x90, 0x62, 0x33, 0x8F, 0x57, 0x29, 0xA7, 0x77, + 0x1F, 0x5D, 0xAB, 0xC6, 0xE1, 0x57, 0xD9, 0x11, 0x08, 0x52, 0x4F, 0x93, 0x00, 0x34, 0x05, 0x05, + 0x55, 0x1A, 0x03, 0xE7, 0x19, 0xDC, 0x75, 0x71, 0x13, 0x8A, 0x54, 0x3C, 0x04, 0x32, 0x7E, 0x56, + 0x70, 0x38, 0xBE, 0x92, 0x24, 0xD0, 0x54, 0x14, 0x4F, 0x45, 0x71, 0xB3, 0xAE, 0xBE, 0x21, 0x6A, + 0xA2, 0x0E, 0xEB, 0xBD, 0x8E, 0xF9, 0x99, 0x83, 0xA8, 0x39, 0xDA, 0xB9, 0x26, 0x0B, 0x4E, 0x9F, + 0x89, 0x1B, 0x28, 0x77, 0x59, 0xD7, 0x80, 0x46, 0x82, 0xFB, 0xF0, 0x5D, 0x86, 0xA7, 0xE6, 0xF3, + 0xE4, 0x0F, 0x8F, 0x8A, 0x98, 0x48, 0x63, 0xD7, 0x46, 0x80, 0x0B, 0xD3, 0xB9, 0xDB, 0x9A, 0xD5 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 62591. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_62591.cs +// + +namespace KeyCMF_062591 +{ + static const BYTE Keytable[] = + { + 0x60, 0x50, 0x91, 0xB6, 0x7D, 0xB3, 0xFD, 0xD7, 0x7F, 0x8D, 0xD9, 0x4A, 0x20, 0xA7, 0x10, 0x12, + 0xEA, 0x76, 0x65, 0x99, 0x97, 0xA1, 0xDB, 0x7C, 0x3F, 0xA8, 0xCC, 0x2D, 0x27, 0xEF, 0x83, 0x87, + 0x8F, 0xC3, 0x39, 0x66, 0x79, 0x8A, 0x6B, 0xEE, 0x3B, 0xDB, 0x66, 0xB6, 0x24, 0x3E, 0x4F, 0xE9, + 0x91, 0x58, 0xAB, 0xD3, 0xB4, 0x4A, 0xD6, 0x47, 0x2F, 0x72, 0xB9, 0xC9, 0x8C, 0x24, 0xF9, 0x27, + 0xA8, 0xBE, 0x10, 0x6F, 0x79, 0x3C, 0xBF, 0xF9, 0x4C, 0xCF, 0xD6, 0xE8, 0xFC, 0x19, 0x68, 0x1E, + 0x31, 0x4E, 0x47, 0xF2, 0x82, 0x6A, 0x4A, 0x58, 0xAB, 0x5D, 0x40, 0xE4, 0xA5, 0xA4, 0x61, 0x29, + 0x1B, 0xD5, 0x83, 0x09, 0x46, 0x76, 0xBE, 0x0C, 0xD6, 0xB6, 0x74, 0x4B, 0x90, 0x96, 0x0A, 0x46, + 0x2F, 0x50, 0xA9, 0xA4, 0x1C, 0x22, 0xD6, 0xA5, 0xE4, 0x88, 0x14, 0x6D, 0xAC, 0x95, 0xB1, 0xDB, + 0x9A, 0x70, 0x71, 0x0E, 0x4F, 0x44, 0x80, 0x74, 0x8E, 0x9C, 0x32, 0xA8, 0xA3, 0x88, 0x9F, 0xF3, + 0x2F, 0x4F, 0x78, 0xE7, 0x5B, 0x16, 0x1B, 0x72, 0xF8, 0xC5, 0xC8, 0xAB, 0x24, 0x7F, 0xBA, 0xA5, + 0xBC, 0xDE, 0x57, 0x9B, 0xE5, 0xA1, 0x48, 0x4E, 0xF1, 0xB5, 0x3A, 0x5B, 0xAE, 0x15, 0xE1, 0xF9, + 0x58, 0xBA, 0x90, 0x0F, 0xB9, 0x59, 0x4D, 0x14, 0x52, 0xCF, 0x1E, 0xDE, 0x6A, 0xD9, 0x0B, 0xB5, + 0xE1, 0x48, 0xD3, 0x77, 0x6F, 0xAF, 0x8B, 0x89, 0x08, 0xC8, 0xEE, 0x6E, 0xBC, 0xD3, 0x15, 0xD9, + 0x5F, 0x56, 0x3A, 0x68, 0xCF, 0x12, 0xE1, 0xE0, 0x35, 0x53, 0xDD, 0x77, 0xCE, 0x51, 0x65, 0x64, + 0x9E, 0x62, 0x05, 0x13, 0xC1, 0xFE, 0x0A, 0x3F, 0xF1, 0x4C, 0xDE, 0xE5, 0x63, 0x50, 0x31, 0x03, + 0x4F, 0x74, 0xCC, 0xFA, 0xE9, 0x4C, 0xE5, 0x91, 0xA5, 0x00, 0xFF, 0x3D, 0x82, 0x6A, 0xE0, 0x0D, + 0x4A, 0x5E, 0xC0, 0xD9, 0x66, 0x76, 0x6F, 0x3B, 0x6A, 0x61, 0xB0, 0x77, 0xAF, 0xC8, 0x52, 0xD3, + 0x2B, 0x50, 0xA0, 0x28, 0x4D, 0xA1, 0xD6, 0xB7, 0x6B, 0x31, 0x4D, 0x30, 0x8F, 0x79, 0xBE, 0xC1, + 0x4E, 0x99, 0xF5, 0xE5, 0x2C, 0x26, 0xAE, 0x0D, 0x53, 0x84, 0xA0, 0x1C, 0xFD, 0x68, 0x8D, 0x5F, + 0x05, 0x1C, 0xCE, 0x47, 0xCC, 0x45, 0x26, 0xF2, 0x5A, 0xBA, 0xC5, 0x18, 0x92, 0xB9, 0xA5, 0x5B, + 0x2F, 0xA6, 0xB3, 0x39, 0x02, 0x76, 0xF9, 0x3E, 0xEE, 0xD8, 0xD7, 0x07, 0xA4, 0x45, 0x9A, 0x91, + 0x1F, 0xF6, 0xF6, 0xD2, 0x19, 0xCA, 0x38, 0x35, 0x63, 0xA6, 0x1D, 0x55, 0xC2, 0x4E, 0xFB, 0xB3, + 0x8C, 0x74, 0x70, 0x24, 0x58, 0xE5, 0x2A, 0xCB, 0x0D, 0xA4, 0x71, 0x05, 0x79, 0xC7, 0x65, 0xD9, + 0x3E, 0xDC, 0x9A, 0x6C, 0x5D, 0x53, 0xD3, 0x3D, 0xE7, 0x4E, 0xEE, 0x8B, 0x0B, 0xFD, 0x8D, 0x2D, + 0x8E, 0xFA, 0xCB, 0xDB, 0xBB, 0x9B, 0x7C, 0xCD, 0x09, 0x56, 0x61, 0xB4, 0xCA, 0x15, 0x78, 0x4A, + 0x88, 0xB6, 0xF2, 0x27, 0x29, 0x0F, 0x94, 0xA8, 0x70, 0x65, 0x42, 0x7C, 0x28, 0xCA, 0xEC, 0xBC, + 0xCF, 0xAE, 0xA8, 0xF6, 0xEA, 0x6D, 0xAB, 0x37, 0x8A, 0x1B, 0x91, 0x81, 0x90, 0x8D, 0x1C, 0x17, + 0x91, 0x75, 0xC4, 0xA4, 0xB2, 0xE9, 0x90, 0x32, 0xF3, 0x30, 0x9B, 0x59, 0x91, 0x94, 0xBC, 0xB2, + 0xFC, 0x5B, 0x56, 0xC7, 0x69, 0xA9, 0xA2, 0xE2, 0x2D, 0x45, 0x6F, 0x23, 0x4B, 0x09, 0x78, 0xC6, + 0xE4, 0xF3, 0x63, 0xFB, 0x8F, 0x38, 0xF3, 0xF3, 0x1B, 0x5E, 0x95, 0x3A, 0xD5, 0x2F, 0x6A, 0x17, + 0x9E, 0x25, 0x71, 0x46, 0x86, 0x89, 0x7E, 0x8D, 0xC3, 0x30, 0xAC, 0xBD, 0x74, 0x29, 0xB0, 0x5E, + 0x83, 0xD6, 0xEE, 0x0C, 0x75, 0xCF, 0xCD, 0x64, 0x95, 0xE4, 0xEE, 0x88, 0xAD, 0x1A, 0xE0, 0xBD + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(uint) header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) (header.m_buildVersion * header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 62906. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_62906.cs +// + +namespace KeyCMF_062906 +{ + static const BYTE Keytable[] = + { + 0x34, 0x93, 0x4E, 0x7E, 0x28, 0xBE, 0xCD, 0x81, 0x3C, 0xCB, 0x45, 0x33, 0x1C, 0x1C, 0xCB, 0x8D, + 0xCE, 0x94, 0x5F, 0x9B, 0x2B, 0x47, 0xDC, 0x47, 0x60, 0x15, 0xD3, 0x48, 0xAB, 0xC8, 0xFF, 0x38, + 0x88, 0x4D, 0x9D, 0xE4, 0xE1, 0xFD, 0xF9, 0xA5, 0x73, 0x0D, 0x4C, 0x42, 0xCB, 0x53, 0x07, 0xE8, + 0xB3, 0xB5, 0x10, 0x2B, 0x5E, 0x8B, 0x8E, 0x4E, 0x3F, 0x30, 0xEE, 0xB5, 0x28, 0x37, 0x2A, 0xBF, + 0x76, 0xD0, 0x4D, 0x94, 0xD4, 0x0F, 0x68, 0xF6, 0x14, 0x53, 0x90, 0x5B, 0x16, 0x4C, 0x77, 0xCD, + 0x2F, 0x15, 0x96, 0x18, 0x69, 0x86, 0x47, 0xF5, 0xB3, 0xD3, 0xE0, 0x19, 0xC3, 0x6B, 0x8A, 0x39, + 0x4A, 0x66, 0x7F, 0xF0, 0x06, 0x05, 0x6A, 0x5F, 0x91, 0x24, 0x8E, 0xB3, 0x7A, 0x26, 0x3A, 0xED, + 0xF1, 0xA7, 0x0A, 0x27, 0xB5, 0x9F, 0x3D, 0x8D, 0xD8, 0x99, 0x20, 0x3A, 0x44, 0x3A, 0x80, 0x01, + 0xB2, 0x61, 0x91, 0x58, 0xF5, 0x62, 0x41, 0x31, 0x95, 0x74, 0x23, 0xB4, 0x84, 0xF2, 0x6E, 0x91, + 0xF8, 0xF6, 0xDB, 0xC6, 0x04, 0x4A, 0x36, 0xF4, 0x60, 0xF3, 0xE7, 0x21, 0x09, 0x5D, 0x4B, 0x68, + 0x89, 0x23, 0x63, 0x49, 0x8A, 0x4F, 0x99, 0x61, 0x60, 0x2E, 0x4D, 0x7C, 0x6C, 0x9A, 0x20, 0xE5, + 0xD8, 0x5E, 0xE5, 0xAF, 0x98, 0x64, 0x47, 0x21, 0x2C, 0x66, 0x5B, 0x6B, 0x03, 0xDE, 0x2F, 0x17, + 0x93, 0xC8, 0x58, 0xFD, 0xF3, 0xCB, 0x6B, 0x47, 0xB1, 0xB5, 0x17, 0x61, 0x91, 0x36, 0xB9, 0xB0, + 0x13, 0x31, 0xAB, 0x82, 0xC8, 0xFE, 0x49, 0x80, 0xCF, 0x7C, 0xA2, 0x9B, 0xFF, 0x85, 0xA0, 0xD9, + 0xA3, 0x0F, 0xB8, 0xA1, 0x55, 0x0C, 0xF7, 0x89, 0xC7, 0x46, 0xC3, 0xAE, 0x7C, 0x9C, 0x64, 0x1F, + 0xED, 0xB0, 0x65, 0x3D, 0x7A, 0x5C, 0x72, 0xB6, 0x76, 0xB2, 0xA1, 0xAA, 0x0F, 0x59, 0x82, 0x1A, + 0x23, 0x72, 0xED, 0xBE, 0x1C, 0x5A, 0x6C, 0x44, 0x98, 0x09, 0x55, 0x33, 0x0D, 0x3E, 0xDF, 0x24, + 0x7E, 0x69, 0xA6, 0x48, 0x5B, 0x3B, 0x75, 0xAD, 0x4C, 0x1B, 0xD4, 0x50, 0x98, 0x10, 0x5A, 0xFF, + 0xB0, 0xEF, 0x4F, 0xF4, 0x47, 0xE5, 0x74, 0x4C, 0x79, 0xC0, 0x82, 0x5A, 0x1A, 0xA9, 0xD3, 0x6D, + 0x04, 0x49, 0x74, 0x5B, 0x1F, 0x3B, 0x9E, 0x8D, 0x1A, 0x1B, 0x25, 0xD0, 0xC9, 0xA3, 0x59, 0xDE, + 0x55, 0xC1, 0x87, 0xB0, 0x91, 0xCD, 0x78, 0xD5, 0x28, 0x60, 0xB3, 0x23, 0x3C, 0x21, 0x92, 0x5E, + 0xDF, 0xBD, 0xE0, 0x33, 0xDB, 0xB4, 0xD8, 0xD5, 0xEA, 0x5D, 0x92, 0xEB, 0x65, 0x4F, 0x8B, 0x81, + 0x5F, 0xB6, 0x21, 0xB8, 0xC0, 0x6F, 0x06, 0x67, 0xA9, 0xCA, 0x73, 0x50, 0x66, 0x2B, 0x58, 0x83, + 0x71, 0x9B, 0x7C, 0x9B, 0xFF, 0x32, 0xF8, 0xB3, 0x1C, 0xE8, 0x6F, 0xF5, 0xBD, 0x00, 0x5D, 0x4B, + 0x9D, 0x53, 0x58, 0x95, 0x5D, 0xCB, 0x58, 0xD8, 0xFF, 0x50, 0x35, 0x33, 0x43, 0xD7, 0x09, 0x0E, + 0x64, 0xA2, 0x01, 0x75, 0x5E, 0xC1, 0x99, 0x38, 0xAB, 0x91, 0x71, 0xCC, 0xEB, 0x72, 0xF8, 0xE2, + 0x73, 0x43, 0x41, 0x02, 0xA4, 0x2E, 0xA0, 0x96, 0x89, 0xB7, 0x5D, 0xD9, 0x81, 0x89, 0x1E, 0xED, + 0x2D, 0xB3, 0x4A, 0xDD, 0x5C, 0xDF, 0x0E, 0x33, 0x4A, 0x80, 0x94, 0x99, 0xAC, 0xE9, 0xB6, 0x3C, + 0x1F, 0x99, 0xD7, 0x61, 0x6C, 0xA0, 0x6E, 0x00, 0xF8, 0x46, 0x17, 0xD0, 0x52, 0xF2, 0xAE, 0x77, + 0xA3, 0x2E, 0xC3, 0x58, 0x24, 0x90, 0x26, 0x2B, 0xE4, 0x9E, 0xF7, 0xE9, 0x60, 0xAF, 0x8D, 0x5F, + 0xCF, 0x6D, 0xAD, 0x41, 0x03, 0xBF, 0xF6, 0x7E, 0x49, 0xAC, 0x55, 0x42, 0xA6, 0xC8, 0x40, 0x51, + 0x30, 0x8F, 0x17, 0x7A, 0xA6, 0x8B, 0x34, 0x0D, 0x45, 0x1C, 0x2B, 0x2E, 0x73, 0xB7, 0x92, 0x2F + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(uint) header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) (header.m_buildVersion * header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint okidx; + uint kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte) (digest[SignedMod(kidx + header.m_entryCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 63372. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_63372.cs +// + +namespace KeyCMF_063372 +{ + static const BYTE Keytable[] = + { + 0xDA, 0x66, 0x51, 0x4E, 0x68, 0xA5, 0xDB, 0xE9, 0xF1, 0xC6, 0x54, 0xA0, 0x6A, 0x28, 0x00, 0x72, + 0xAB, 0x78, 0x7E, 0xDF, 0xF2, 0x0D, 0xE3, 0x09, 0xD8, 0x28, 0xC6, 0x8B, 0x85, 0x39, 0x76, 0xBF, + 0xF1, 0xBC, 0x14, 0xFD, 0x74, 0x73, 0x40, 0xFA, 0xDA, 0x15, 0x50, 0x01, 0xF4, 0x9E, 0x83, 0x6D, + 0xCA, 0x0A, 0xD8, 0xDC, 0xD9, 0xED, 0xF4, 0x01, 0x6F, 0x1F, 0x41, 0x8E, 0xA9, 0x2C, 0xD4, 0x2F, + 0xC3, 0x8F, 0xFB, 0xF0, 0xAD, 0x85, 0xE8, 0x0A, 0xF7, 0x73, 0x22, 0x00, 0xC7, 0x87, 0x90, 0x5D, + 0x86, 0xCA, 0x4C, 0x2E, 0xC4, 0x0D, 0x7F, 0x4F, 0xD4, 0x5F, 0x9E, 0xC6, 0x17, 0xE4, 0xEE, 0x53, + 0x20, 0x86, 0x62, 0x67, 0xA3, 0x1B, 0x8C, 0xB6, 0x83, 0x48, 0xC3, 0x0E, 0xF5, 0x3E, 0xFD, 0x4A, + 0x4D, 0x30, 0x52, 0x03, 0xA3, 0x3F, 0x2A, 0xE4, 0x9B, 0xDD, 0xD5, 0x7E, 0xC1, 0x46, 0xAC, 0x1A, + 0x49, 0x72, 0x6F, 0x9B, 0xE5, 0x98, 0xF5, 0x10, 0x8E, 0x3F, 0x73, 0xC4, 0x26, 0xC3, 0x60, 0x36, + 0xAF, 0x1C, 0x15, 0x8D, 0x3A, 0xB2, 0xAB, 0xCE, 0xEB, 0xA0, 0x71, 0x25, 0xFB, 0xC0, 0xB4, 0xDD, + 0x18, 0x11, 0x1B, 0xF2, 0x5D, 0xD1, 0x20, 0xFA, 0xE8, 0x7B, 0xEC, 0x18, 0xBD, 0xEF, 0x2C, 0x71, + 0xFB, 0xC3, 0xFE, 0xFD, 0xA5, 0x43, 0xAA, 0x72, 0xA4, 0x98, 0xF1, 0x61, 0xD8, 0x9B, 0x82, 0x8B, + 0x60, 0x99, 0xD0, 0x70, 0x81, 0xDD, 0x38, 0xB1, 0x2C, 0x01, 0xA5, 0x6B, 0x7A, 0x58, 0xD5, 0xC5, + 0x2E, 0x05, 0xD4, 0x16, 0xAB, 0x64, 0x25, 0xF6, 0x0F, 0xEA, 0x84, 0x97, 0x46, 0xB9, 0xEB, 0x92, + 0x66, 0x74, 0x21, 0x2D, 0x23, 0xE5, 0x80, 0x15, 0x0B, 0x44, 0xDE, 0xCC, 0x38, 0x25, 0x01, 0x84, + 0x32, 0x01, 0x74, 0xDE, 0xFB, 0xF6, 0xFE, 0x62, 0x78, 0xC3, 0xBF, 0xEE, 0x50, 0xE2, 0x8F, 0x20, + 0x82, 0x8C, 0x71, 0xBA, 0xE0, 0xDD, 0x80, 0x9C, 0x0C, 0x9D, 0x12, 0x61, 0xA0, 0xE3, 0xC5, 0xEC, + 0x61, 0xD9, 0xF5, 0x91, 0xE1, 0x2D, 0xE6, 0x4A, 0xC6, 0xE3, 0x97, 0x86, 0xA4, 0x76, 0xD5, 0x29, + 0x8B, 0x54, 0x0A, 0x39, 0x37, 0xFC, 0x72, 0xB2, 0x58, 0xA4, 0xD9, 0x9F, 0x55, 0x22, 0x9F, 0x83, + 0xD3, 0xE2, 0x2C, 0x09, 0xC7, 0xCE, 0x1B, 0x77, 0xCE, 0x05, 0xB5, 0x7E, 0x28, 0x3D, 0x46, 0xAF, + 0xCA, 0xCE, 0x33, 0x4E, 0x2A, 0x4C, 0xD8, 0x8B, 0xF2, 0xFC, 0xB0, 0x93, 0x5A, 0xF7, 0x08, 0xD5, + 0x1A, 0x6D, 0x67, 0x58, 0x0E, 0x5B, 0x09, 0x04, 0x2F, 0xF5, 0x39, 0x8A, 0xB9, 0x19, 0x43, 0x5A, + 0x69, 0xC9, 0x56, 0x0C, 0xE1, 0x83, 0x4D, 0x71, 0x27, 0x62, 0xF7, 0xC5, 0xFC, 0x4C, 0xF5, 0x9C, + 0x34, 0x5E, 0x07, 0x03, 0xC1, 0xF6, 0x2B, 0x03, 0x24, 0x1F, 0x9C, 0xBF, 0x47, 0x41, 0xE9, 0x13, + 0xD0, 0x0C, 0xE5, 0x83, 0x81, 0x45, 0xAC, 0xA8, 0xFB, 0x76, 0xD6, 0x19, 0x25, 0xA6, 0xD0, 0xDE, + 0x5C, 0xFF, 0x8D, 0x44, 0xBE, 0xC1, 0x4C, 0x8D, 0x2E, 0xA0, 0x4E, 0xA0, 0xB7, 0xC0, 0xA3, 0x36, + 0x58, 0x41, 0x3D, 0xD7, 0x04, 0xC3, 0x58, 0x5B, 0x61, 0xB3, 0xAD, 0xE3, 0x3D, 0x0F, 0x30, 0xD4, + 0x2E, 0xE6, 0x52, 0x69, 0x86, 0x40, 0x08, 0x53, 0x96, 0x91, 0x1F, 0x72, 0xAA, 0x7C, 0x4C, 0x8B, + 0x06, 0xEC, 0xD8, 0xE2, 0xD5, 0x45, 0x52, 0xB1, 0x90, 0xC3, 0xFA, 0xC9, 0x0D, 0x1E, 0x3F, 0x8D, + 0x6B, 0xD5, 0xCB, 0x72, 0x1C, 0xAD, 0x2D, 0xC9, 0x1F, 0x50, 0xBB, 0x43, 0xD0, 0x73, 0xEF, 0x50, + 0xBE, 0x69, 0xD4, 0xED, 0x5D, 0x8E, 0xC6, 0x1A, 0x09, 0x96, 0xDD, 0xFD, 0xF5, 0xBA, 0x66, 0xF4, + 0xFA, 0x15, 0x0E, 0x2E, 0xE8, 0x70, 0xFF, 0x03, 0xE4, 0xB6, 0x0A, 0x64, 0x2B, 0xBF, 0x7D, 0xB2 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod((2 * digest[13]) - length, 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount + digest[SignedMod(header.m_entryCount, SHA1_DIGESTSIZE)]; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 63568. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_63568.cs +// + +namespace KeyCMF_063568 +{ + static const BYTE Keytable[] = + { + 0x69, 0x3A, 0xD8, 0xEF, 0x4E, 0x52, 0xD6, 0xB3, 0x65, 0x70, 0x91, 0x4C, 0x14, 0x67, 0xAC, 0x74, + 0x57, 0x81, 0x0C, 0x43, 0xE4, 0xCA, 0xD3, 0x39, 0xFA, 0x6A, 0xE6, 0xC8, 0xDA, 0x49, 0xAC, 0x39, + 0x48, 0xFD, 0x52, 0x6D, 0x5A, 0x88, 0xD7, 0x24, 0x63, 0x9E, 0x78, 0x9D, 0x72, 0x26, 0x8A, 0xAB, + 0x29, 0x03, 0x9B, 0xDA, 0xF4, 0x96, 0xA9, 0x16, 0x04, 0x58, 0x7F, 0x65, 0x1D, 0x33, 0xA7, 0x1D, + 0xFC, 0x4B, 0x1C, 0x66, 0x31, 0x99, 0xE4, 0x18, 0x42, 0x01, 0x93, 0x18, 0x31, 0xFF, 0x5F, 0x88, + 0xD5, 0x72, 0x2A, 0x07, 0x40, 0x25, 0x1E, 0xB1, 0x12, 0x93, 0x37, 0xDC, 0xB0, 0xDA, 0xF2, 0x04, + 0x8E, 0x61, 0x14, 0xA6, 0x76, 0x42, 0xA7, 0xB6, 0x26, 0xE8, 0xBB, 0x32, 0x66, 0xC7, 0xDB, 0x39, + 0xA6, 0x57, 0x88, 0x66, 0xA9, 0x18, 0x87, 0x93, 0xE5, 0x27, 0x89, 0x13, 0x46, 0xCA, 0xF8, 0xDB, + 0xA6, 0x55, 0xF3, 0x28, 0x4C, 0x8B, 0x75, 0x50, 0x14, 0x8A, 0x65, 0x53, 0x4E, 0x32, 0x74, 0x7E, + 0x63, 0x71, 0xC3, 0xE2, 0x05, 0x8C, 0x9A, 0x1E, 0x73, 0xBB, 0x8F, 0xE4, 0x12, 0x7E, 0x4A, 0x1F, + 0x56, 0x40, 0xAC, 0x8A, 0x96, 0x05, 0x11, 0xD5, 0x02, 0x23, 0x7F, 0x39, 0x2E, 0xF7, 0x56, 0xBE, + 0xF9, 0xED, 0x0C, 0xA4, 0x61, 0xC7, 0xD1, 0x9E, 0x31, 0x70, 0x78, 0xA8, 0x0C, 0x8B, 0x35, 0x6C, + 0x77, 0x4F, 0xF7, 0x0F, 0xCD, 0xA7, 0x10, 0xAB, 0x3E, 0x97, 0xC8, 0xE1, 0x61, 0xC7, 0x8C, 0xBF, + 0xAF, 0x59, 0x48, 0x14, 0x9A, 0x1D, 0xA7, 0x49, 0xD6, 0x50, 0xD3, 0xA0, 0x63, 0xF4, 0x7A, 0x06, + 0x06, 0xF8, 0x98, 0xCA, 0x51, 0x40, 0xB4, 0x0A, 0x0C, 0x29, 0x56, 0x76, 0x09, 0x2D, 0x65, 0xF0, + 0x13, 0x61, 0x13, 0xA2, 0xC5, 0xB2, 0xED, 0xA2, 0x58, 0x6C, 0x58, 0x9C, 0xCF, 0xE9, 0x3C, 0xB3, + 0x9D, 0xFA, 0x36, 0x35, 0x6E, 0x06, 0x8F, 0x05, 0xE3, 0x2D, 0x95, 0x71, 0x31, 0x87, 0x12, 0xF1, + 0xB2, 0x7A, 0x33, 0x5B, 0xE2, 0xB7, 0x61, 0xDA, 0x90, 0xC3, 0x9B, 0x56, 0xCA, 0xF8, 0x0B, 0xE8, + 0x62, 0xD2, 0x46, 0x33, 0x1F, 0x7E, 0x9F, 0x10, 0x52, 0x75, 0x05, 0x88, 0xB1, 0xC0, 0x4D, 0x7A, + 0x07, 0x2A, 0x68, 0x94, 0x53, 0xA3, 0x37, 0x80, 0xC8, 0x8F, 0x53, 0xF8, 0xB8, 0x0F, 0x22, 0xD2, + 0xE9, 0x06, 0x41, 0x3E, 0x4F, 0x21, 0x23, 0x4D, 0x9E, 0x74, 0x0F, 0x38, 0x6A, 0xF4, 0x0B, 0x0F, + 0x79, 0x20, 0x01, 0xF2, 0x54, 0xB9, 0x42, 0x78, 0xB3, 0x77, 0xBD, 0x71, 0xB6, 0xA4, 0xD0, 0x01, + 0xB5, 0xFA, 0x4E, 0xEC, 0x8A, 0x51, 0x57, 0x24, 0xED, 0xC1, 0x23, 0x80, 0x6C, 0xAB, 0x0D, 0x85, + 0xCC, 0xD7, 0xE4, 0xE2, 0x40, 0x99, 0xEB, 0xB3, 0xCE, 0x58, 0x21, 0x5A, 0xC8, 0xD8, 0xC4, 0x47, + 0x69, 0xB4, 0xDC, 0x90, 0xAA, 0xEA, 0x83, 0xCD, 0xE8, 0xE9, 0x89, 0xAA, 0x80, 0x87, 0xCB, 0x5B, + 0xF4, 0x83, 0x3A, 0xF3, 0x07, 0x6F, 0x27, 0xCF, 0x4A, 0xEF, 0x67, 0x18, 0xAD, 0x00, 0xF3, 0xAD, + 0x36, 0xD7, 0x79, 0xB0, 0xE5, 0x85, 0x20, 0x6E, 0xAA, 0x6C, 0xB0, 0x5B, 0x20, 0xD9, 0xF0, 0xBA, + 0xC0, 0x59, 0x9F, 0xEC, 0x69, 0xD8, 0x0A, 0xB1, 0x01, 0xEF, 0xD3, 0x17, 0x55, 0xF5, 0x18, 0xC0, + 0x3F, 0xB1, 0x9F, 0xD1, 0xEE, 0xBB, 0x9A, 0x4E, 0x30, 0xB9, 0xF2, 0x6C, 0x13, 0xED, 0x3D, 0x47, + 0xF5, 0x04, 0xBE, 0xCB, 0xAF, 0x86, 0x16, 0xEC, 0x21, 0x2D, 0xAA, 0x56, 0xDB, 0x1E, 0xFC, 0x5D, + 0x72, 0xF9, 0xBB, 0xB3, 0x96, 0x9B, 0x67, 0x24, 0x1F, 0x49, 0xBD, 0x66, 0xFB, 0xEE, 0x60, 0xC3, + 0x10, 0xE3, 0x4D, 0x98, 0xA8, 0xBB, 0xB8, 0x20, 0x33, 0x03, 0x36, 0xE1, 0xF8, 0x59, 0x74, 0xD4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (header.m_buildVersion * length); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod((2 * digest[13]) - length, 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 63778. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_63778.cs +// + +namespace KeyCMF_063778 +{ + static const BYTE Keytable[] = + { + 0xBD, 0x5E, 0x95, 0x73, 0x20, 0x4F, 0x5B, 0xB9, 0xC4, 0xDC, 0x48, 0xCC, 0x51, 0xC2, 0x92, 0x09, + 0xA4, 0xB5, 0x7A, 0x06, 0x89, 0x97, 0xA2, 0x46, 0x40, 0xFE, 0x97, 0x23, 0x10, 0xAE, 0x46, 0xDE, + 0x98, 0x1A, 0x11, 0x88, 0xEE, 0x30, 0xA0, 0x0A, 0x90, 0xCC, 0x99, 0xCA, 0x1C, 0xD9, 0xC6, 0xF5, + 0x1F, 0xA0, 0x01, 0xDB, 0x3A, 0xBF, 0x88, 0x48, 0x66, 0xB5, 0x89, 0x5A, 0x2F, 0x6F, 0xBB, 0xBF, + 0x0E, 0x8E, 0x07, 0x9E, 0x4C, 0xD1, 0x0E, 0x8A, 0x43, 0x0D, 0x80, 0x26, 0x82, 0xA8, 0x56, 0xD6, + 0x76, 0x67, 0x62, 0xA0, 0x0B, 0xBF, 0xC3, 0x81, 0x1A, 0x85, 0xB5, 0xAA, 0x0B, 0x3F, 0x45, 0x79, + 0x97, 0xB0, 0x10, 0x5C, 0xF6, 0x33, 0x20, 0x08, 0xE9, 0x46, 0x54, 0xA6, 0x6A, 0x05, 0x6C, 0x00, + 0x2A, 0x34, 0x60, 0xB3, 0xCC, 0x19, 0xC7, 0xD2, 0x89, 0x87, 0x5C, 0x87, 0xAF, 0x72, 0xC2, 0x7A, + 0x06, 0x84, 0xEB, 0x45, 0x8A, 0x4C, 0x4E, 0x79, 0x2E, 0xE2, 0xD2, 0x40, 0x06, 0x3E, 0x71, 0x79, + 0xC9, 0xEC, 0x50, 0xFD, 0x68, 0x2C, 0xC3, 0xFC, 0x9E, 0xD1, 0xA9, 0x27, 0xD4, 0x22, 0x9B, 0x67, + 0xD9, 0xDF, 0xB3, 0x40, 0x0A, 0xA9, 0xDD, 0xA1, 0xEC, 0x35, 0x35, 0xBC, 0xA9, 0x7D, 0x17, 0x9B, + 0x5D, 0x29, 0xB6, 0x2D, 0xB4, 0x63, 0xE4, 0xF9, 0x54, 0x24, 0x75, 0x4A, 0xB1, 0xA2, 0xB5, 0x0D, + 0xC9, 0xD1, 0x99, 0xD7, 0x05, 0xC7, 0x37, 0xD1, 0x6A, 0x89, 0x07, 0x1E, 0xA3, 0x24, 0x8A, 0x95, + 0x7D, 0xE6, 0x07, 0xCD, 0x7E, 0x43, 0xAF, 0x61, 0x22, 0xC2, 0x56, 0x3A, 0x5A, 0x62, 0x6F, 0x61, + 0xDC, 0x28, 0xA4, 0xDD, 0x72, 0xE1, 0xA6, 0x83, 0x4B, 0x70, 0x4F, 0x0F, 0x03, 0xEF, 0x01, 0x51, + 0xBD, 0xF0, 0x07, 0x08, 0x66, 0x8B, 0x38, 0x1F, 0x32, 0xFF, 0xFA, 0x12, 0x63, 0xD0, 0x95, 0x5B, + 0x1D, 0xA4, 0x33, 0x63, 0x92, 0x4C, 0x26, 0x02, 0x36, 0x6A, 0xFE, 0x2A, 0xCD, 0x8D, 0x7E, 0x63, + 0x87, 0x30, 0xFB, 0x54, 0x69, 0xC0, 0xFB, 0xDE, 0x80, 0x0E, 0xF2, 0x34, 0x79, 0x9A, 0x27, 0x18, + 0xFF, 0x3D, 0xCF, 0x25, 0x59, 0xDA, 0xA1, 0x7A, 0xC0, 0x99, 0xA3, 0x9F, 0x70, 0x28, 0xFD, 0x1A, + 0xCC, 0x9D, 0xA7, 0x9B, 0x43, 0x75, 0x22, 0xDA, 0x30, 0x6C, 0x1B, 0x99, 0x57, 0x11, 0xA8, 0x1B, + 0x5E, 0x4F, 0x89, 0x8B, 0x5B, 0xE9, 0x81, 0xC4, 0xEA, 0x0E, 0x9D, 0xFD, 0x71, 0x3D, 0xE9, 0x25, + 0x30, 0xA8, 0x80, 0x36, 0xAD, 0xF8, 0x16, 0x4C, 0x21, 0xEC, 0x4A, 0xE9, 0x57, 0x36, 0x49, 0x23, + 0x82, 0xEF, 0x86, 0xCA, 0x72, 0x3C, 0x15, 0x9E, 0xF0, 0x74, 0x8E, 0x7D, 0x29, 0x23, 0xE6, 0x0B, + 0xD4, 0x24, 0xDE, 0x85, 0xAE, 0x85, 0xC6, 0x1B, 0x5C, 0xFC, 0xC8, 0x2F, 0x64, 0x36, 0xA4, 0x18, + 0xEF, 0xE8, 0x37, 0x36, 0x84, 0x66, 0xDC, 0x9D, 0xDF, 0x1E, 0xA0, 0x06, 0x18, 0x52, 0xC5, 0xB4, + 0x14, 0x9D, 0xFB, 0x64, 0x64, 0xC2, 0x09, 0x47, 0x68, 0x98, 0xD2, 0xBD, 0xE7, 0x04, 0x5C, 0xA3, + 0x40, 0xE1, 0x24, 0xC9, 0x4A, 0x90, 0x7B, 0x18, 0x71, 0x1B, 0xF9, 0xF9, 0x17, 0x16, 0x7F, 0x9C, + 0xCB, 0xBB, 0x33, 0x1A, 0x96, 0xC9, 0x3E, 0xCF, 0xE7, 0xDB, 0xBF, 0x6C, 0x56, 0x51, 0xAE, 0xF8, + 0x9D, 0x71, 0x38, 0xA3, 0x28, 0x11, 0x94, 0x65, 0xD8, 0xAA, 0xBE, 0x93, 0x9E, 0x38, 0x8F, 0x05, + 0xF3, 0xC8, 0x94, 0x3A, 0xF6, 0xDF, 0x47, 0x4B, 0xD1, 0x89, 0xCE, 0x18, 0x6A, 0x10, 0x58, 0xE8, + 0x62, 0x13, 0x95, 0x42, 0x2C, 0x84, 0x0C, 0xB1, 0xBF, 0x8D, 0x31, 0x10, 0xB5, 0x6C, 0x4D, 0xE8, + 0x10, 0x46, 0x9E, 0xF5, 0x9C, 0x61, 0xE3, 0xB5, 0xD7, 0xAE, 0xAD, 0x1A, 0xF1, 0xC3, 0x81, 0x33 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint)length; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod((2 * digest[13]) - length, 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 63869. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_63869.cs +// + +namespace KeyCMF_063869 +{ + static const BYTE Keytable[] = + { + 0x9E, 0x7F, 0x61, 0x85, 0x44, 0x1D, 0x18, 0xAF, 0xE3, 0x7E, 0x63, 0x97, 0xBF, 0x3C, 0x88, 0x3A, + 0x4F, 0xB8, 0xFC, 0x0C, 0x82, 0xA1, 0x9B, 0x63, 0x2A, 0x91, 0xAC, 0x85, 0x96, 0xAE, 0x89, 0xDF, + 0x06, 0x62, 0xF5, 0x78, 0xB9, 0x19, 0xFB, 0xCB, 0xA5, 0xF9, 0x9D, 0x69, 0x5A, 0x30, 0xC2, 0xE6, + 0x45, 0x31, 0x9B, 0xAC, 0x2D, 0x1C, 0x7C, 0x40, 0x44, 0x94, 0x7B, 0xF7, 0xAE, 0x47, 0x50, 0xF2, + 0xFB, 0x30, 0x6A, 0xFE, 0xCB, 0x30, 0x6A, 0x40, 0x08, 0x1D, 0x88, 0x01, 0x57, 0xF9, 0x62, 0x87, + 0xEE, 0x76, 0x3D, 0xA9, 0x20, 0x3D, 0x01, 0xA4, 0x43, 0xC5, 0x35, 0x40, 0xA2, 0x40, 0x71, 0x5D, + 0x25, 0xE1, 0x9C, 0x91, 0xCE, 0xC8, 0xC6, 0x03, 0xEA, 0x0E, 0x23, 0x66, 0x8C, 0x7D, 0x90, 0xB9, + 0x59, 0xBA, 0x80, 0xCD, 0xF2, 0xB2, 0xA0, 0x6D, 0x96, 0x8E, 0x18, 0x5A, 0x42, 0x26, 0x87, 0x29, + 0x39, 0x6C, 0x1D, 0x4C, 0x67, 0xD0, 0xDA, 0xEC, 0x9D, 0xEB, 0xC3, 0xB0, 0x40, 0x86, 0xD4, 0xB3, + 0xC8, 0xB4, 0x00, 0x78, 0x82, 0x74, 0x1C, 0x79, 0x78, 0x90, 0x1E, 0x87, 0xC1, 0x37, 0x78, 0x17, + 0x44, 0x3A, 0x10, 0x3D, 0xC1, 0x27, 0xFE, 0x71, 0x23, 0x83, 0xD8, 0xAD, 0xF9, 0x9D, 0x9C, 0x30, + 0xAD, 0x87, 0xFC, 0x83, 0x46, 0x65, 0x26, 0xEC, 0xF1, 0x1A, 0x8C, 0x50, 0x7A, 0x1D, 0xD7, 0x62, + 0x20, 0xDC, 0xC1, 0xCF, 0xC7, 0x89, 0x6A, 0xCA, 0x27, 0x93, 0xA3, 0xC3, 0xAB, 0xB7, 0xC1, 0x3C, + 0x41, 0x6C, 0xDC, 0x37, 0xA6, 0x20, 0x4D, 0x35, 0x19, 0x28, 0x9B, 0x22, 0x54, 0xCA, 0x9F, 0xAD, + 0xF0, 0xA4, 0x3D, 0x5E, 0xD4, 0x59, 0xE4, 0xF6, 0xC4, 0x78, 0x78, 0x3D, 0x01, 0x27, 0xE1, 0xE4, + 0xFB, 0x44, 0xD9, 0xAB, 0xDB, 0x26, 0xE2, 0x3C, 0x76, 0x60, 0x8F, 0x05, 0xBD, 0x17, 0xE3, 0x66, + 0x97, 0x33, 0x2F, 0x68, 0x78, 0xAF, 0x7B, 0x7F, 0x00, 0xCA, 0xA2, 0xA6, 0x62, 0x7D, 0xE3, 0x8E, + 0xCF, 0xE2, 0xF7, 0x43, 0x55, 0xFC, 0x8A, 0xA8, 0xAC, 0xC1, 0xA1, 0xF2, 0x4C, 0x00, 0x85, 0x53, + 0xDA, 0xCE, 0x7E, 0x83, 0x49, 0x6F, 0x45, 0x19, 0xFB, 0x99, 0xD7, 0x77, 0x69, 0xB2, 0xEF, 0xA8, + 0x7C, 0x71, 0x88, 0x43, 0x0D, 0x58, 0x17, 0xD2, 0x47, 0x32, 0x27, 0x9F, 0x05, 0xCB, 0x01, 0x72, + 0xC7, 0x5C, 0x95, 0x8D, 0xF0, 0xB2, 0xFB, 0x43, 0x04, 0x9F, 0xF2, 0x22, 0x4C, 0xBF, 0xC9, 0xFF, + 0x35, 0x96, 0x35, 0x29, 0xC7, 0x25, 0xCA, 0xFF, 0x35, 0x60, 0x2F, 0x0C, 0x52, 0xCD, 0x1C, 0x12, + 0x31, 0xC5, 0xA2, 0xC5, 0x1C, 0xFC, 0x03, 0x2A, 0xAD, 0xC0, 0xFD, 0xFB, 0x03, 0x24, 0x17, 0x07, + 0xCD, 0x79, 0xC4, 0x27, 0x45, 0x08, 0x0B, 0xD8, 0x25, 0x79, 0xE0, 0xFB, 0xB4, 0x4C, 0xBA, 0x2A, + 0x01, 0xD2, 0x63, 0x79, 0x10, 0xD5, 0x9C, 0x75, 0x03, 0x4A, 0xC5, 0xA9, 0x2E, 0xE6, 0x8F, 0x2D, + 0x4E, 0x40, 0x30, 0xF3, 0x6F, 0x3A, 0x8D, 0x4C, 0xAF, 0x96, 0x8F, 0x81, 0x9B, 0xEC, 0xCA, 0x84, + 0xF0, 0x4B, 0xC6, 0xD1, 0x26, 0xBE, 0x1F, 0xFD, 0x30, 0x38, 0xC2, 0x16, 0x85, 0xF7, 0x8B, 0xAF, + 0x72, 0x53, 0xC2, 0x2F, 0x2D, 0xDD, 0xA6, 0x8C, 0xCD, 0x8F, 0x9E, 0x23, 0x35, 0x09, 0x32, 0xD3, + 0x2A, 0xF7, 0xA6, 0x1D, 0xE4, 0xF9, 0xE8, 0x31, 0x67, 0x2A, 0x42, 0x5A, 0xC2, 0xF3, 0xC9, 0x40, + 0x1C, 0x7B, 0xB4, 0xE1, 0xF1, 0x47, 0xB2, 0xF2, 0x1F, 0x74, 0x10, 0x4D, 0xB1, 0xF3, 0x3F, 0xB0, + 0xB2, 0x35, 0x68, 0xF3, 0xD3, 0xF0, 0xA1, 0x33, 0xDD, 0x39, 0x32, 0x08, 0xAB, 0xAF, 0x46, 0x36, + 0x0B, 0xE5, 0xDD, 0xC1, 0xBB, 0x2E, 0x15, 0x13, 0x27, 0x6C, 0x03, 0x8C, 0x79, 0x6B, 0x44, 0xE4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) header.m_entryCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[SignedMod((2 * digest[13]) - length, 512)]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 64346. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_64346.cs +// + +namespace KeyCMF_064346 +{ + static const BYTE Keytable[] = + { + 0x5C, 0x47, 0xC8, 0x5A, 0x8A, 0x36, 0x48, 0xAE, 0xDC, 0x79, 0xA7, 0xC0, 0xDD, 0xD1, 0xF0, 0x3E, + 0xED, 0x54, 0x09, 0xE7, 0xAC, 0xAE, 0xE4, 0x36, 0x07, 0xDE, 0x41, 0xEB, 0x76, 0x4E, 0x43, 0x3B, + 0xE8, 0xB7, 0x37, 0x12, 0x69, 0x68, 0x81, 0x02, 0x88, 0x30, 0xCB, 0xFC, 0xB5, 0x5E, 0x5F, 0xA1, + 0x2F, 0x17, 0x4C, 0x48, 0xB8, 0x05, 0xDF, 0x34, 0xE3, 0x2A, 0x97, 0x37, 0x97, 0x41, 0xD0, 0x0B, + 0x7E, 0xE2, 0xA8, 0x30, 0x23, 0xF6, 0x6B, 0x31, 0x4E, 0xDB, 0x0A, 0xC7, 0xBC, 0xA8, 0xC8, 0x5F, + 0x49, 0x06, 0xAE, 0x73, 0x8C, 0xA8, 0xB3, 0x3E, 0x02, 0xA5, 0x6E, 0x55, 0x4C, 0x9C, 0xD2, 0xF9, + 0x04, 0x3F, 0xD2, 0x66, 0x65, 0x26, 0xBF, 0x90, 0xB9, 0x89, 0xAC, 0xE9, 0xED, 0x4A, 0x2D, 0x69, + 0xDD, 0x16, 0x96, 0x5F, 0x01, 0x22, 0x3F, 0x25, 0x6B, 0x16, 0xD6, 0x32, 0xE7, 0x77, 0x95, 0xA4, + 0xAB, 0xDE, 0x89, 0xDA, 0x5B, 0xB4, 0xFA, 0x3E, 0x46, 0x2D, 0x98, 0xE3, 0x80, 0x25, 0x11, 0xDE, + 0xA8, 0x6B, 0x0F, 0x9C, 0xA0, 0x71, 0x7A, 0x4A, 0x37, 0x97, 0x2F, 0xD0, 0xBF, 0x84, 0x35, 0xFD, + 0x06, 0xE9, 0x5C, 0x1A, 0x20, 0x09, 0x7B, 0x36, 0x4B, 0x35, 0x4E, 0x9B, 0x08, 0x24, 0xC1, 0x35, + 0xD4, 0xA0, 0xA6, 0xD7, 0xBA, 0x59, 0xF7, 0x5C, 0xB5, 0xBD, 0x61, 0x33, 0x55, 0xF0, 0x12, 0x70, + 0x7B, 0x35, 0x74, 0xC5, 0x72, 0x91, 0x42, 0xB4, 0xBD, 0xAA, 0x58, 0xD2, 0xF3, 0x5C, 0x4B, 0xC4, + 0xD0, 0xFF, 0xA5, 0xD9, 0x3A, 0xD0, 0x68, 0x94, 0x3C, 0x4E, 0x8E, 0xC2, 0xB7, 0x2D, 0x19, 0x04, + 0x69, 0x6A, 0xAA, 0x52, 0x60, 0xD6, 0x3B, 0xE6, 0xDF, 0x0C, 0x88, 0xF8, 0x76, 0x4A, 0xE8, 0x0A, + 0x7C, 0x35, 0x35, 0x13, 0x5B, 0xA7, 0x73, 0x05, 0xA2, 0x28, 0x69, 0x6D, 0x4A, 0xCD, 0x3A, 0x7E, + 0x7B, 0x02, 0xCE, 0xF5, 0x60, 0x49, 0x55, 0x82, 0x1B, 0xFC, 0xCE, 0xB7, 0xD1, 0x73, 0xC7, 0x98, + 0xAA, 0x2A, 0xAE, 0xF3, 0xF3, 0x77, 0x76, 0x82, 0xD7, 0xAB, 0xBC, 0x96, 0x98, 0xA1, 0x2C, 0x64, + 0x82, 0x97, 0x79, 0x27, 0x1B, 0x05, 0x54, 0x0E, 0x39, 0xF2, 0xEB, 0x9C, 0x40, 0xC5, 0x41, 0x3A, + 0xC5, 0x17, 0xB5, 0xC6, 0x83, 0x55, 0x9E, 0x49, 0xF3, 0xEF, 0x3E, 0x5B, 0x1A, 0xE3, 0x8E, 0xDB, + 0x73, 0x98, 0x9C, 0xEA, 0xDE, 0x3A, 0x6A, 0xEC, 0xF0, 0x22, 0xDC, 0x20, 0x8E, 0x54, 0x10, 0xE6, + 0x14, 0x87, 0x91, 0xD9, 0x1B, 0xEB, 0x96, 0x36, 0xBD, 0xD3, 0xE9, 0x87, 0xD7, 0x9D, 0x94, 0x45, + 0x3D, 0xA2, 0x06, 0xD4, 0xD5, 0x60, 0x1B, 0xFA, 0x9E, 0xDD, 0xD4, 0x9F, 0x30, 0x27, 0x46, 0x34, + 0x9B, 0x1C, 0x33, 0x85, 0x35, 0x17, 0xDF, 0x8D, 0xF4, 0x87, 0xF6, 0x95, 0x6F, 0x98, 0xAD, 0xB1, + 0x37, 0x07, 0x97, 0xCC, 0xF2, 0xCF, 0x47, 0xC1, 0xBD, 0xAE, 0x78, 0x33, 0x71, 0x7B, 0x25, 0x6C, + 0x38, 0x9D, 0x7A, 0x65, 0xEE, 0xA1, 0x2D, 0x50, 0xC6, 0x82, 0xF3, 0xC4, 0x6E, 0x9F, 0x36, 0xBE, + 0x34, 0xA9, 0xEC, 0x43, 0x04, 0xC6, 0xA0, 0x15, 0x2D, 0x68, 0x79, 0xAD, 0x55, 0x22, 0x84, 0xD1, + 0x3E, 0xA3, 0x15, 0xFD, 0x35, 0xF9, 0xBF, 0x19, 0xE2, 0xFB, 0x6B, 0x95, 0x11, 0x0A, 0x68, 0xA8, + 0xBA, 0x42, 0xF6, 0xC1, 0x5D, 0x5E, 0x76, 0x20, 0x05, 0xC4, 0x86, 0x11, 0x3E, 0xBC, 0x22, 0xAC, + 0x44, 0x33, 0x30, 0x82, 0xB1, 0xC1, 0xA1, 0xC1, 0x8F, 0xB9, 0x38, 0x82, 0x78, 0x66, 0x10, 0x17, + 0x69, 0x4B, 0xBB, 0x9B, 0x60, 0x0F, 0x06, 0xF4, 0x3F, 0xC0, 0x56, 0x52, 0xC5, 0xE9, 0x3E, 0x6D, + 0xFC, 0x64, 0x24, 0x09, 0x8F, 0xC1, 0xB9, 0x24, 0x1D, 0x3C, 0x2A, 0x25, 0x17, 0x04, 0x3A, 0xAE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(uint) header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint okidx; + uint kidx = okidx = Keytable[(uint) header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx + header.GetNonEncryptedMagic(), SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 64719. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_64719.cs +// + +namespace KeyCMF_064719 +{ + static const BYTE Keytable[] = + { + 0xD0, 0x97, 0x48, 0x18, 0x80, 0x1F, 0x30, 0xCB, 0xBE, 0x2F, 0xF1, 0x9D, 0xD6, 0xAE, 0xC1, 0x22, + 0x4F, 0x34, 0x60, 0x3F, 0xFD, 0xB9, 0x41, 0x4A, 0xBE, 0x40, 0x6F, 0xE7, 0xCC, 0x3B, 0x13, 0x05, + 0x0E, 0x17, 0x2C, 0xF0, 0x36, 0x4B, 0x0F, 0x78, 0x91, 0xB8, 0xBD, 0x6C, 0x87, 0x70, 0xB8, 0xE5, + 0x6D, 0x07, 0xA5, 0xC8, 0x76, 0xD8, 0xAD, 0xC0, 0x2F, 0x77, 0x2B, 0x1A, 0x7C, 0x33, 0x26, 0x46, + 0x70, 0xD1, 0x01, 0x0D, 0x20, 0x56, 0x2A, 0x74, 0x28, 0x16, 0x6D, 0xFF, 0xA5, 0xC0, 0x53, 0x71, + 0x6C, 0x92, 0x3E, 0xBD, 0xBF, 0x9D, 0x95, 0x67, 0x20, 0x13, 0x05, 0xA8, 0x21, 0x2F, 0x5D, 0x48, + 0x79, 0xC8, 0x1D, 0x96, 0x36, 0x21, 0x27, 0xC2, 0x94, 0x9C, 0xC8, 0x2D, 0x3E, 0x06, 0x6D, 0x1F, + 0xAE, 0x61, 0x26, 0x91, 0x21, 0xA8, 0x0D, 0x92, 0x9F, 0xE5, 0x45, 0x9C, 0x0E, 0x41, 0xF0, 0x41, + 0xC6, 0xB8, 0x7E, 0x9B, 0xDC, 0xE6, 0xED, 0xED, 0x15, 0xE6, 0x6E, 0x9D, 0xEC, 0x39, 0xFE, 0x7C, + 0x4C, 0x68, 0x1D, 0x32, 0x89, 0xBD, 0x27, 0xA3, 0x05, 0xF5, 0x7B, 0x8E, 0xB0, 0xBD, 0xC4, 0xF1, + 0xD8, 0xF1, 0xC2, 0x2C, 0xAC, 0x52, 0xFC, 0x07, 0xE4, 0x0A, 0x88, 0x35, 0x0B, 0x39, 0x13, 0xAD, + 0x34, 0x4C, 0xB9, 0xDF, 0xF3, 0x3B, 0x36, 0x12, 0xC0, 0xCC, 0x0F, 0x7B, 0x7D, 0x9D, 0xFB, 0xF4, + 0xC4, 0x78, 0x7B, 0x46, 0xE9, 0x26, 0x2E, 0x25, 0x4F, 0xAB, 0x63, 0xD2, 0x18, 0x9D, 0x2E, 0x51, + 0x94, 0xFD, 0xAE, 0x18, 0x8E, 0x5A, 0xC7, 0x08, 0xDA, 0xC2, 0x01, 0x04, 0xDC, 0xCF, 0xB3, 0x3E, + 0x7B, 0x6D, 0x95, 0x17, 0x78, 0x6E, 0x6C, 0x8F, 0x56, 0x38, 0xE2, 0x40, 0x3C, 0xB8, 0xE1, 0xE1, + 0x69, 0xF0, 0xF5, 0xC0, 0xB6, 0xB7, 0xDD, 0x42, 0x41, 0xD2, 0x4D, 0xD3, 0x2C, 0x11, 0x4F, 0xC0, + 0x9A, 0x9A, 0xA4, 0xD4, 0x3C, 0xB5, 0xCB, 0x97, 0x85, 0x33, 0x22, 0xE3, 0xEE, 0x23, 0xFA, 0xE7, + 0x04, 0x3C, 0x86, 0xE1, 0xD3, 0xA8, 0x84, 0x08, 0x68, 0x29, 0x19, 0x6D, 0x7C, 0xAD, 0x8F, 0xB8, + 0xE9, 0xA2, 0x6A, 0xD5, 0xE9, 0xD8, 0xCD, 0x03, 0x7C, 0x20, 0x29, 0xF2, 0xD7, 0x69, 0x4C, 0x79, + 0x26, 0x43, 0x2A, 0xAD, 0x2A, 0xFD, 0x62, 0xEF, 0x0B, 0xB9, 0xAC, 0xA7, 0x2A, 0x98, 0x7A, 0x6E, + 0x7E, 0x36, 0x5D, 0x03, 0x36, 0x8F, 0x6D, 0x02, 0xB5, 0xAE, 0xD8, 0xAA, 0xB0, 0x72, 0x43, 0x58, + 0xA6, 0x86, 0x8E, 0x0A, 0xEE, 0x0C, 0x6E, 0x15, 0xC9, 0x1E, 0x53, 0xF3, 0x5D, 0xA2, 0x02, 0xBD, + 0x82, 0x88, 0x22, 0xA6, 0x5E, 0xE2, 0x8D, 0x72, 0xF8, 0x93, 0xDF, 0xA8, 0xB8, 0x4F, 0x2D, 0xA9, + 0x68, 0x1B, 0x6D, 0x93, 0x9C, 0x2F, 0x06, 0xC5, 0xB4, 0x8C, 0xFB, 0xC3, 0x31, 0xD4, 0x06, 0x78, + 0xAD, 0x74, 0x78, 0xF3, 0xFF, 0x42, 0x2C, 0xC0, 0xC5, 0x28, 0x79, 0xB1, 0x3E, 0x5F, 0xFE, 0x03, + 0xF0, 0xD6, 0xF2, 0xC7, 0x28, 0x4E, 0xD1, 0xED, 0xD6, 0xE9, 0xBB, 0xAE, 0x15, 0xF4, 0x0E, 0x3C, + 0x59, 0x6C, 0x2C, 0x33, 0x9C, 0x71, 0xE9, 0x8A, 0x62, 0xDF, 0x12, 0x3A, 0x84, 0xFB, 0xC0, 0x34, + 0x7F, 0x05, 0x79, 0x94, 0xCD, 0xB8, 0x44, 0x6D, 0x17, 0xBC, 0x41, 0x54, 0xE4, 0x0B, 0xFD, 0xF8, + 0xFB, 0x98, 0x60, 0x21, 0x5B, 0x77, 0x88, 0x35, 0x7B, 0xEC, 0xB2, 0x85, 0x27, 0xCE, 0xDA, 0x09, + 0xA4, 0x8D, 0x61, 0x81, 0xBF, 0x4F, 0xEB, 0xD7, 0x49, 0xE0, 0xA2, 0x96, 0xCF, 0x40, 0x9C, 0x2B, + 0x44, 0x0C, 0x3D, 0xBA, 0x8A, 0xA2, 0xEC, 0xA7, 0xB1, 0x75, 0x80, 0x5E, 0xFB, 0xC7, 0x18, 0x41, + 0x9B, 0xB8, 0xB5, 0x3B, 0x36, 0x4C, 0xF8, 0xA7, 0xD2, 0x3D, 0x5C, 0x07, 0xF0, 0x05, 0xC8, 0x11 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx; + kidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) (header.m_buildVersion * header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint okidx; + uint kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (digest[6] & 1) != 0 ? 37 : okidx % 61; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 65302. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_65302.cs +// + +namespace KeyCMF_065302 +{ + static const BYTE Keytable[] = + { + 0x2C, 0x5A, 0xE8, 0x5B, 0x7E, 0x8B, 0xA6, 0x90, 0xA1, 0xF8, 0xFF, 0x7A, 0x10, 0x63, 0x2B, 0x07, + 0xFF, 0xBD, 0x36, 0x86, 0x4E, 0x8D, 0x9B, 0x26, 0x40, 0x2B, 0xF8, 0x7E, 0x21, 0x0B, 0xD9, 0x17, + 0xB3, 0x75, 0xCA, 0x6E, 0x96, 0xEC, 0x9E, 0xE5, 0xE8, 0xCC, 0xC1, 0xEA, 0xD6, 0x91, 0x55, 0xD5, + 0x78, 0x40, 0x19, 0x1E, 0x02, 0x5B, 0xF5, 0x75, 0xDB, 0xA1, 0x17, 0x13, 0x13, 0xD0, 0xDA, 0x1F, + 0x7E, 0xE4, 0xFE, 0xDF, 0xB4, 0x59, 0x1A, 0x45, 0xAF, 0x70, 0xF2, 0xC7, 0xA9, 0xC9, 0x73, 0xB0, + 0xBD, 0x49, 0x75, 0xFE, 0x6D, 0x64, 0x29, 0x0E, 0x20, 0x32, 0x0D, 0x5D, 0x30, 0xCD, 0x3F, 0x97, + 0x08, 0x01, 0x1C, 0xB9, 0x3C, 0xFE, 0x89, 0xAB, 0xE8, 0x97, 0x1F, 0x0C, 0xA4, 0xD7, 0xC5, 0x6D, + 0x5E, 0xE6, 0xF8, 0xAA, 0xEB, 0x2B, 0x4E, 0x95, 0x06, 0x51, 0x79, 0x38, 0xD0, 0x53, 0xA9, 0x8F, + 0x75, 0x68, 0x1B, 0x05, 0x02, 0xD3, 0xAE, 0x0D, 0xF6, 0x3E, 0x0A, 0x51, 0x45, 0x5A, 0xE3, 0x12, + 0x13, 0x6A, 0xB2, 0x4C, 0x65, 0x99, 0x69, 0x87, 0xFA, 0x52, 0x37, 0xBC, 0x5B, 0xEF, 0xE9, 0x1C, + 0x30, 0x93, 0xB2, 0x08, 0xF8, 0x04, 0xF4, 0xE1, 0x6C, 0xD9, 0x2D, 0xF0, 0x6B, 0x4F, 0x95, 0x19, + 0xD3, 0x79, 0x1B, 0x67, 0x3A, 0x50, 0x35, 0xC5, 0x6C, 0x91, 0x95, 0x78, 0xA6, 0x03, 0x7E, 0x9B, + 0x2F, 0xC5, 0x3E, 0xE2, 0x48, 0xBA, 0x5B, 0x7F, 0x25, 0x2E, 0xDF, 0x38, 0xDA, 0x3F, 0x15, 0x4F, + 0x20, 0x41, 0x8D, 0xA5, 0xB2, 0xCD, 0x6C, 0x5B, 0x4F, 0xBE, 0x25, 0x0D, 0x9C, 0xA9, 0xEF, 0xA4, + 0x6A, 0x9E, 0x3B, 0x68, 0xE3, 0x33, 0xB1, 0x81, 0xA6, 0xD5, 0x87, 0x47, 0xAB, 0x00, 0xA6, 0x34, + 0x0B, 0xCF, 0x11, 0x5D, 0x54, 0x40, 0xC6, 0xB6, 0x4F, 0x8F, 0x82, 0x61, 0x90, 0x5E, 0x24, 0x18, + 0x11, 0x47, 0x47, 0x34, 0xD4, 0x8E, 0x1A, 0xBE, 0xF1, 0x6F, 0xD2, 0xF8, 0xD7, 0x2F, 0x2D, 0xEA, + 0x4E, 0x41, 0xA6, 0x04, 0x80, 0x78, 0x1D, 0x16, 0x02, 0xD8, 0x25, 0x3A, 0x22, 0xFE, 0x56, 0x11, + 0xB8, 0xF7, 0xF9, 0x8A, 0x81, 0x87, 0x3E, 0x85, 0xEE, 0x94, 0x04, 0x86, 0x57, 0x0B, 0xEC, 0x64, + 0xF2, 0xF6, 0xCC, 0xEA, 0xEF, 0x03, 0x91, 0x4B, 0x09, 0x52, 0x5E, 0xEF, 0x0A, 0xF1, 0x39, 0xB6, + 0x47, 0xCF, 0xCB, 0x8B, 0x99, 0x91, 0x4E, 0xA4, 0x65, 0x5A, 0x8E, 0x6C, 0x81, 0x57, 0x46, 0x2A, + 0x7B, 0x63, 0x6A, 0x94, 0xB6, 0x29, 0x33, 0x2F, 0x21, 0x85, 0xFC, 0xF4, 0x97, 0x3C, 0x22, 0xAF, + 0xD0, 0x01, 0x99, 0xA4, 0x46, 0x2A, 0x1E, 0x00, 0xA6, 0x1D, 0x40, 0x55, 0x68, 0xF2, 0x4D, 0x21, + 0x17, 0x52, 0xEB, 0xFF, 0x39, 0xC7, 0x24, 0x01, 0x45, 0x51, 0x1D, 0x93, 0xD5, 0x82, 0xC6, 0xD5, + 0x30, 0x8A, 0xA6, 0x90, 0x98, 0xBD, 0x94, 0x08, 0x66, 0x80, 0x7D, 0xF3, 0x54, 0x34, 0x19, 0x30, + 0xB8, 0x04, 0xF1, 0x53, 0x5B, 0x79, 0x0D, 0x76, 0x17, 0x83, 0xA3, 0xEE, 0x98, 0x5D, 0x5B, 0xA4, + 0xD6, 0xE1, 0xED, 0x1A, 0x02, 0xCE, 0x07, 0xBF, 0xCB, 0xF8, 0xC3, 0x06, 0x2C, 0x2A, 0xD1, 0x7F, + 0xF0, 0xDB, 0x95, 0x67, 0x6C, 0x2E, 0x34, 0xDF, 0x0D, 0xAF, 0x76, 0xD2, 0xE1, 0xD9, 0xA4, 0x5A, + 0x47, 0xBF, 0xFA, 0xCC, 0xFF, 0x1B, 0x88, 0x5E, 0xA0, 0x63, 0xA9, 0x1B, 0xEA, 0xB4, 0xBB, 0x55, + 0x4C, 0x6B, 0xCE, 0x53, 0xB0, 0xB2, 0xF4, 0x12, 0x82, 0xD6, 0x4B, 0xD1, 0xC9, 0x77, 0x4F, 0x41, + 0x4F, 0xDC, 0xD1, 0x0A, 0x28, 0xF2, 0x68, 0x90, 0xF6, 0xD3, 0xA2, 0x01, 0x7C, 0xB8, 0xF0, 0xA1, + 0x48, 0x9E, 0x64, 0xBB, 0x5E, 0xB7, 0x52, 0xEF, 0xB3, 0xDF, 0x1D, 0xA7, 0x28, 0xFC, 0x82, 0x63 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint okidx; + uint kidx = okidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint) SignedMod(okidx, 61); + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint okidx; + uint kidx = okidx = (uint) (digest[7] + (ushort) header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (digest[6] & 1) != 0 ? 37 : okidx % 61; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 65513. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_65513.cs +// + +namespace KeyCMF_065513 +{ + static const BYTE Keytable[] = + { + 0xF3, 0x2D, 0x7E, 0x01, 0x77, 0x67, 0x68, 0x52, 0x0B, 0xD7, 0x57, 0x5A, 0x9C, 0x04, 0x89, 0x25, + 0x61, 0x64, 0xF7, 0x5C, 0x0C, 0xEC, 0xC2, 0xE0, 0x67, 0x4C, 0xE9, 0xA5, 0x88, 0xB5, 0x95, 0x87, + 0x30, 0x9F, 0x6F, 0x9A, 0xC3, 0xFB, 0x61, 0x76, 0xF0, 0x21, 0x72, 0x26, 0x56, 0xED, 0x32, 0xC5, + 0xA6, 0xB6, 0x0E, 0xCF, 0x1A, 0xE9, 0x2F, 0x7F, 0xA0, 0x81, 0x65, 0x38, 0x8A, 0x4A, 0x18, 0x47, + 0x5A, 0x58, 0x7B, 0xC9, 0x59, 0x87, 0xC6, 0xE2, 0x0B, 0x0F, 0x9B, 0xC9, 0xF6, 0x76, 0x7C, 0x47, + 0xF4, 0xD0, 0x61, 0x10, 0x43, 0x52, 0x48, 0x03, 0x08, 0xF5, 0x9B, 0xD4, 0x58, 0x1B, 0xD0, 0x30, + 0x64, 0xD1, 0xBD, 0xCB, 0xE4, 0xFD, 0xAC, 0x90, 0x66, 0xEB, 0x78, 0xC4, 0xC1, 0x98, 0xA3, 0x5C, + 0xAC, 0x54, 0x4C, 0xB4, 0x14, 0xE4, 0xE3, 0x71, 0x7F, 0x6C, 0x8D, 0x91, 0xF9, 0xD2, 0x15, 0x5C, + 0x6D, 0x7E, 0x38, 0xF5, 0x41, 0xC2, 0xAC, 0xF7, 0x26, 0xA9, 0x48, 0xCB, 0x52, 0x39, 0xBD, 0x2A, + 0xD6, 0xD1, 0xD5, 0xA2, 0xBE, 0x9E, 0x8F, 0xBE, 0x0D, 0x12, 0x7B, 0xFE, 0xEB, 0xC4, 0xEF, 0x5B, + 0x78, 0x32, 0xE3, 0xF6, 0xEE, 0x60, 0x87, 0xB2, 0xBD, 0x82, 0x3D, 0x55, 0x8E, 0x62, 0x5A, 0xDB, + 0xFE, 0x6A, 0xE1, 0xC9, 0x0F, 0x11, 0x2E, 0x17, 0x79, 0x7F, 0xA0, 0xB4, 0x4D, 0x76, 0x40, 0x35, + 0xBC, 0x79, 0xA5, 0x33, 0xE6, 0x36, 0xB4, 0x83, 0x82, 0xFD, 0xBB, 0x4D, 0xE1, 0xB5, 0x61, 0x21, + 0xC0, 0xED, 0xE3, 0x95, 0xC8, 0xB1, 0x4C, 0xE0, 0xBC, 0xEF, 0xE4, 0x7B, 0xBD, 0xBC, 0x28, 0xF1, + 0x73, 0xF0, 0xA0, 0xF6, 0x1E, 0x1F, 0xC5, 0xA2, 0x84, 0xD7, 0x60, 0x32, 0xEA, 0x65, 0x84, 0x21, + 0x8E, 0x32, 0xDB, 0xAF, 0x43, 0x70, 0x55, 0x19, 0x01, 0xE9, 0x3B, 0xDA, 0xB4, 0x16, 0x62, 0xB6, + 0x91, 0x91, 0x46, 0x2A, 0xC1, 0x9E, 0x23, 0xF2, 0x43, 0xA7, 0xFF, 0xEA, 0xCB, 0x51, 0x80, 0x9F, + 0x05, 0xFD, 0x40, 0xCA, 0x71, 0xD6, 0x65, 0x54, 0xD7, 0x32, 0x44, 0x9D, 0xE5, 0x1E, 0x05, 0xB0, + 0xEB, 0x5A, 0x95, 0xED, 0xEB, 0xD1, 0x03, 0x75, 0xD8, 0xFD, 0xB6, 0x28, 0xBF, 0x35, 0x30, 0x38, + 0x80, 0x3B, 0x49, 0x46, 0x09, 0xE0, 0x8F, 0x11, 0x34, 0x2B, 0xE4, 0x0E, 0x14, 0x9D, 0xE1, 0xF3, + 0x91, 0x0F, 0x25, 0x74, 0x3D, 0x3C, 0x79, 0x54, 0xD4, 0x6B, 0xFF, 0xE7, 0xA8, 0x35, 0xB0, 0x15, + 0xC5, 0xC6, 0xAD, 0x52, 0xDB, 0xF8, 0x29, 0xF0, 0xEC, 0xD8, 0x7A, 0xE5, 0x68, 0xD0, 0x0B, 0xED, + 0xEC, 0x4A, 0x44, 0x13, 0xD0, 0x6F, 0x3C, 0x09, 0x52, 0x52, 0x1B, 0x54, 0xF0, 0xB0, 0xA0, 0xE6, + 0xFF, 0xF4, 0x70, 0x55, 0x30, 0x7E, 0x6A, 0x20, 0x75, 0x22, 0x95, 0xA1, 0x91, 0xF5, 0x16, 0xC6, + 0x43, 0xBD, 0x51, 0x92, 0x54, 0x5A, 0x18, 0x74, 0xDC, 0xF8, 0xA1, 0xD4, 0x76, 0x93, 0xD1, 0x8A, + 0x88, 0xF1, 0x6A, 0xD2, 0x8F, 0xCD, 0xBF, 0xB0, 0xD6, 0x37, 0xED, 0xDD, 0xFC, 0xCE, 0x7B, 0xCC, + 0xB5, 0x59, 0x13, 0x25, 0x75, 0xF2, 0x8F, 0xFB, 0x80, 0xD0, 0xDB, 0x02, 0xB6, 0x6F, 0xBC, 0x19, + 0x66, 0x20, 0x35, 0x80, 0x79, 0x45, 0x9D, 0x4B, 0x3F, 0x10, 0x10, 0xC4, 0xEC, 0x72, 0xAB, 0x66, + 0x5B, 0x8A, 0xAB, 0x1A, 0x04, 0x26, 0x7E, 0x89, 0x70, 0xD8, 0x13, 0x13, 0xAA, 0x69, 0xAF, 0x87, + 0x72, 0x1C, 0x24, 0x84, 0xE6, 0x96, 0x72, 0xEE, 0x11, 0x0E, 0xB3, 0x64, 0xC1, 0xA3, 0x15, 0x00, + 0x37, 0x3C, 0x08, 0x05, 0xF2, 0x79, 0x70, 0x36, 0xFC, 0x15, 0x95, 0xD5, 0x20, 0x49, 0x37, 0x33, + 0xF1, 0xC8, 0x44, 0x44, 0x91, 0xB4, 0x15, 0xF0, 0x04, 0x07, 0xDF, 0x6C, 0xDB, 0xD2, 0x69, 0x41 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = header.m_buildVersion * (uint) length; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint okidx; + uint kidx = okidx = header.m_buildVersion * (uint) length; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte) (digest[SignedMod(kidx + header.m_entryCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 66302. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_66302.cs +// + +namespace KeyCMF_066302 +{ + static const BYTE Keytable[] = + { + 0xBE, 0xBB, 0xB1, 0x1D, 0x81, 0x98, 0x89, 0x4B, 0x5D, 0x12, 0xD3, 0xE0, 0xC2, 0xBF, 0x79, 0xC6, + 0x8B, 0x4D, 0xC9, 0x0A, 0x66, 0x2E, 0xED, 0xED, 0x61, 0xC0, 0x9E, 0xF9, 0x2D, 0x19, 0x31, 0x62, + 0xFD, 0xAE, 0x57, 0x9F, 0x70, 0xAB, 0x2A, 0xBF, 0xAF, 0x61, 0xA1, 0x98, 0xA0, 0x6B, 0x6B, 0x29, + 0x4D, 0xAA, 0xDE, 0x7B, 0xCB, 0x5D, 0x04, 0xF2, 0xCA, 0xA8, 0xD6, 0xDA, 0x44, 0x97, 0xAF, 0xAD, + 0x81, 0x51, 0x89, 0x54, 0xC9, 0xDB, 0xA4, 0xCC, 0xB1, 0x14, 0xE1, 0x74, 0xC8, 0x9C, 0xEF, 0x5E, + 0x5F, 0x28, 0x0B, 0xBB, 0x15, 0x32, 0xA0, 0x76, 0x31, 0x34, 0x5D, 0x6E, 0x6D, 0x4E, 0x17, 0x80, + 0xC9, 0x2E, 0xF9, 0x4F, 0x71, 0x17, 0x01, 0x72, 0x27, 0x1F, 0xC3, 0xDB, 0x62, 0xBA, 0x16, 0x3E, + 0x44, 0x5D, 0xA6, 0xC2, 0x6C, 0xAB, 0xC0, 0x94, 0xFB, 0xBF, 0xA5, 0x88, 0xD9, 0x6B, 0x54, 0x81, + 0x84, 0x53, 0x7F, 0xC4, 0x44, 0x8F, 0xDA, 0xA5, 0x24, 0x0F, 0x35, 0xD8, 0x2E, 0x25, 0x01, 0x7E, + 0x99, 0x7E, 0x58, 0xC1, 0xBF, 0xA1, 0x75, 0x52, 0xA5, 0x5A, 0xA6, 0xE3, 0xCC, 0x93, 0x11, 0x99, + 0x86, 0xE3, 0x6B, 0x63, 0x20, 0x37, 0xE8, 0xAB, 0x67, 0x57, 0x0A, 0xD0, 0x75, 0x52, 0xAA, 0xF1, + 0x25, 0xD7, 0x77, 0x5A, 0xB2, 0x38, 0x67, 0x3D, 0x6C, 0x01, 0x05, 0x0A, 0xF2, 0xF0, 0x48, 0x8B, + 0xFA, 0x16, 0x2C, 0x61, 0x22, 0x43, 0x2C, 0x9F, 0x97, 0x66, 0x90, 0x14, 0x63, 0x5E, 0xD0, 0x33, + 0xD5, 0xB4, 0xD3, 0xE0, 0xCF, 0x54, 0xC6, 0xAD, 0x59, 0x0C, 0xDC, 0x1D, 0x4C, 0xCA, 0x1C, 0x1A, + 0xF2, 0xEB, 0x59, 0x41, 0x21, 0x51, 0x45, 0x50, 0x23, 0xEB, 0x41, 0x74, 0xC2, 0x5C, 0x5D, 0xD8, + 0x70, 0x36, 0x8C, 0xD5, 0x4A, 0xA8, 0x56, 0xE9, 0xED, 0x06, 0x5D, 0x97, 0xD8, 0x9C, 0x5F, 0x26, + 0x5A, 0xF4, 0x20, 0x8A, 0x62, 0x80, 0xB2, 0xD0, 0x89, 0x2E, 0x1A, 0x53, 0xE2, 0x57, 0x28, 0x90, + 0x81, 0x75, 0xEA, 0xC3, 0x26, 0xE4, 0xB7, 0x78, 0x80, 0x21, 0x2A, 0x27, 0x42, 0xDC, 0x18, 0x4F, + 0xB2, 0x2C, 0x1F, 0xD7, 0xD9, 0xA6, 0x44, 0x47, 0x01, 0x1B, 0xB4, 0xA6, 0x99, 0xA8, 0x25, 0x2A, + 0x98, 0xD4, 0xDF, 0x24, 0x08, 0xCE, 0x07, 0xE4, 0xE1, 0x43, 0x67, 0x61, 0xE1, 0x77, 0x23, 0x7B, + 0x57, 0x43, 0x45, 0x45, 0x92, 0x94, 0x02, 0x19, 0x21, 0x16, 0x16, 0x84, 0x08, 0x53, 0x3F, 0xFC, + 0xDD, 0x0D, 0x4B, 0xCD, 0x4D, 0x09, 0x5E, 0xB7, 0xDD, 0xDD, 0xDB, 0x32, 0x63, 0x90, 0x5D, 0xA3, + 0xBF, 0x0E, 0x9C, 0xBE, 0x13, 0xAF, 0xF3, 0xE1, 0x5A, 0x44, 0xBA, 0x8C, 0x87, 0xAB, 0x7A, 0x76, + 0xEC, 0x45, 0xD6, 0x1C, 0x76, 0xC7, 0x98, 0xA6, 0x58, 0xC9, 0x76, 0x12, 0x32, 0x22, 0xA6, 0x61, + 0xA6, 0x51, 0x30, 0x7C, 0x85, 0x94, 0x0F, 0xFC, 0x3D, 0x04, 0x31, 0xB5, 0xBD, 0x35, 0xBF, 0xE9, + 0xF3, 0xD7, 0xB3, 0xAB, 0x6D, 0xF0, 0x89, 0x5B, 0xCE, 0xB1, 0x3B, 0x53, 0x5C, 0xDB, 0xDF, 0xAE, + 0x25, 0x07, 0x27, 0xE5, 0xA1, 0xC0, 0x7D, 0x58, 0x92, 0xD5, 0x4E, 0x8F, 0x5D, 0x7C, 0x1B, 0xBA, + 0x50, 0xBD, 0x26, 0x29, 0xB0, 0xBD, 0x65, 0x5F, 0x97, 0xA5, 0xCE, 0xFC, 0xD8, 0x4B, 0xC6, 0xB8, + 0x58, 0x01, 0x3A, 0x52, 0xE7, 0x9B, 0x2E, 0x3D, 0xAD, 0xEB, 0x7D, 0xA3, 0x21, 0xD6, 0x15, 0x07, + 0x4D, 0x7B, 0x0E, 0x9F, 0x53, 0xF7, 0x47, 0x1E, 0xE8, 0xFA, 0x7F, 0xA8, 0xF8, 0x24, 0xD5, 0x60, + 0xD9, 0x96, 0x3D, 0x16, 0x35, 0x44, 0xE8, 0x67, 0xEC, 0x1C, 0x00, 0x9B, 0x5C, 0x12, 0xD6, 0x9C, + 0x6F, 0x16, 0xD4, 0x8E, 0x76, 0xF6, 0xFC, 0x5C, 0xC1, 0x40, 0xC0, 0xF7, 0x20, 0x86, 0x57, 0xCE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[SignedMod(header.m_buildVersion * length, 512)]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 66607. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_66607.cs +// + +namespace KeyCMF_066607 +{ + static const BYTE Keytable[] = + { + 0x42, 0xFF, 0x31, 0x78, 0xE8, 0xCF, 0xE4, 0xCD, 0xF8, 0xD2, 0x5C, 0x4B, 0x26, 0xA3, 0xCA, 0x9F, + 0x91, 0x86, 0x34, 0xBE, 0xA7, 0x80, 0x5B, 0xE9, 0x9C, 0x32, 0xBC, 0x8C, 0x70, 0x86, 0x54, 0x28, + 0x79, 0x13, 0xE9, 0x70, 0xE8, 0x5E, 0xAD, 0x37, 0x32, 0x85, 0xCE, 0x3A, 0x8F, 0x0B, 0x7F, 0x6A, + 0x9D, 0x02, 0xBB, 0x3D, 0x90, 0x7B, 0xA6, 0x1B, 0xE8, 0x04, 0xDF, 0xF2, 0xA8, 0x35, 0x7D, 0xC7, + 0x1A, 0xF9, 0xF2, 0x0D, 0xC0, 0x50, 0x75, 0xA2, 0x89, 0xB1, 0xB4, 0xD3, 0x66, 0x28, 0xD1, 0x86, + 0x2C, 0xC3, 0x33, 0xAA, 0x7E, 0xD4, 0x89, 0x43, 0xD3, 0x62, 0x1C, 0x84, 0x81, 0x0E, 0x07, 0xAD, + 0x03, 0xAF, 0x11, 0xB6, 0xED, 0xD7, 0x9F, 0x1A, 0xFF, 0xCF, 0x94, 0x18, 0xBC, 0xB7, 0x22, 0x5A, + 0xDD, 0xDD, 0xC2, 0xAA, 0x0A, 0x60, 0xEF, 0x17, 0x8C, 0x39, 0x15, 0x04, 0x96, 0x05, 0xCB, 0x25, + 0xFE, 0xBC, 0x56, 0x87, 0x57, 0x02, 0x7E, 0xAD, 0x47, 0x43, 0xA7, 0x73, 0x54, 0xC5, 0xBB, 0xA3, + 0xDB, 0x39, 0x13, 0x64, 0xA9, 0x3A, 0x34, 0x18, 0x72, 0x45, 0x0B, 0x48, 0xF1, 0x78, 0xF3, 0x7F, + 0x2C, 0xB4, 0x3A, 0x4F, 0x59, 0xCE, 0x44, 0xD4, 0x5F, 0x39, 0x42, 0x6C, 0xED, 0x10, 0x11, 0xE3, + 0xDD, 0xF8, 0x3B, 0x00, 0x67, 0x0E, 0xF3, 0x8E, 0x77, 0xD0, 0x4D, 0x5F, 0xFB, 0xF1, 0x37, 0x6E, + 0x84, 0x07, 0x32, 0x34, 0xA8, 0x0C, 0x91, 0xF3, 0x27, 0xFE, 0x78, 0xCF, 0x9E, 0x0C, 0x3D, 0x80, + 0xCF, 0xBC, 0x4A, 0xDA, 0x61, 0x49, 0xA8, 0xBF, 0x5E, 0x19, 0x75, 0xF1, 0xAE, 0xF7, 0xDA, 0x5F, + 0x75, 0x77, 0x4C, 0xED, 0xFF, 0xA3, 0x1D, 0x2A, 0xB1, 0xA9, 0x11, 0xC0, 0x93, 0xD6, 0x3D, 0x99, + 0x4C, 0x73, 0x81, 0x94, 0x43, 0x36, 0x8F, 0xF3, 0xB1, 0x65, 0xD0, 0x3C, 0x4F, 0x0A, 0xC0, 0xB2, + 0x2E, 0xFF, 0x88, 0x5A, 0x0D, 0x7D, 0xDF, 0x4B, 0x4E, 0xC4, 0x46, 0xDB, 0xF3, 0x67, 0x80, 0x1F, + 0xF2, 0xB5, 0xC6, 0xBC, 0x6F, 0x2F, 0xC9, 0x5B, 0x18, 0x88, 0x29, 0xA1, 0xF3, 0x0D, 0x68, 0x84, + 0xC7, 0x1A, 0x21, 0x54, 0xA8, 0x85, 0x73, 0x2C, 0x30, 0x61, 0x17, 0x1E, 0x6F, 0xAE, 0x28, 0x39, + 0xB1, 0x06, 0x58, 0xB2, 0xEA, 0x91, 0x10, 0x8A, 0x5B, 0x9A, 0x07, 0xC0, 0xD2, 0xCA, 0xAA, 0x65, + 0x61, 0xE0, 0x5B, 0xB2, 0xDF, 0x4D, 0xF3, 0x2E, 0xD3, 0xD4, 0x7C, 0x79, 0xFA, 0x44, 0x27, 0x15, + 0xA3, 0x73, 0x2A, 0xAB, 0x90, 0x42, 0x5D, 0xFD, 0x47, 0xBC, 0x9F, 0x9C, 0x04, 0x9C, 0x8D, 0xE0, + 0xF6, 0xA5, 0x12, 0xC7, 0x51, 0x50, 0xDC, 0x93, 0xE7, 0xD2, 0xE8, 0x13, 0x59, 0x90, 0x28, 0xA5, + 0xFF, 0x8A, 0x7F, 0x47, 0x50, 0x69, 0x4F, 0xF2, 0x71, 0x98, 0x04, 0x1B, 0xFC, 0x78, 0x0B, 0x38, + 0x00, 0x1A, 0x3E, 0x5B, 0xD2, 0x4C, 0xF9, 0xB7, 0x6A, 0x68, 0x10, 0xF3, 0x84, 0x36, 0x14, 0xD9, + 0x15, 0x6E, 0x4A, 0x7A, 0xDA, 0xAD, 0xDB, 0x06, 0x9D, 0x8C, 0xA7, 0x37, 0x5B, 0x9A, 0x36, 0xC6, + 0xA7, 0x5E, 0xAB, 0xB8, 0xFE, 0x3F, 0x7B, 0x5D, 0x3C, 0xF4, 0x06, 0x15, 0xAD, 0x9D, 0xCC, 0x53, + 0x5A, 0x3B, 0x8D, 0x42, 0x9D, 0xD0, 0xF1, 0x43, 0x2F, 0x28, 0x9F, 0xC7, 0x3E, 0x75, 0x2B, 0xAD, + 0xA8, 0xA3, 0x6E, 0x4F, 0x39, 0xCF, 0xDD, 0xAF, 0xDA, 0x32, 0x36, 0x73, 0xF9, 0x39, 0x46, 0x8A, + 0xC3, 0xAB, 0x2F, 0x57, 0x74, 0x3A, 0x25, 0x61, 0xCA, 0x94, 0x11, 0xA4, 0xD0, 0xB9, 0x0F, 0xED, + 0xD5, 0x92, 0x14, 0x94, 0x9B, 0xCB, 0xAD, 0x6E, 0x4B, 0xB8, 0x3B, 0xA1, 0x9F, 0x7E, 0x07, 0xC3, + 0x8D, 0xAB, 0xB0, 0x11, 0x34, 0x2E, 0xE4, 0x39, 0x5E, 0x25, 0x46, 0x64, 0x2E, 0x4E, 0xCF, 0xA9 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[SignedMod(length * Keytable[0], 512)]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(uint)header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 67071. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_67071.cs +// + +namespace KeyCMF_067071 +{ + static const BYTE Keytable[] = + { + 0x2A, 0xFC, 0x93, 0x65, 0x1F, 0x20, 0xCC, 0xCD, 0x0B, 0xC4, 0x1B, 0x20, 0xDF, 0xD8, 0x47, 0x22, + 0x4A, 0x0F, 0xB8, 0xDC, 0x1E, 0x2E, 0x4A, 0xF2, 0x33, 0xAC, 0xFE, 0x5A, 0x40, 0xFB, 0x8B, 0x97, + 0xED, 0xDB, 0xA3, 0x82, 0xA0, 0x45, 0xA3, 0x15, 0x4E, 0x6D, 0x1F, 0x72, 0xFB, 0xAB, 0x22, 0x45, + 0x3C, 0xD2, 0x86, 0xE0, 0x7A, 0x38, 0x08, 0xE6, 0x76, 0x9F, 0x93, 0x53, 0x40, 0xF4, 0x88, 0x4E, + 0x1A, 0x5E, 0x1B, 0x9D, 0xA3, 0xF9, 0x2B, 0x45, 0x99, 0x88, 0x10, 0x1F, 0xE9, 0x1E, 0xED, 0xC7, + 0xA7, 0xC9, 0x1A, 0x85, 0x7F, 0x4F, 0x9D, 0x79, 0xCE, 0x60, 0x07, 0x44, 0x3C, 0x1B, 0x64, 0x97, + 0xB7, 0x13, 0xEB, 0xC3, 0xD8, 0x8A, 0x17, 0x52, 0x42, 0x42, 0xD9, 0xCD, 0x75, 0x03, 0x15, 0xC7, + 0x86, 0x6C, 0xF8, 0xDE, 0xB8, 0x46, 0x02, 0xA5, 0xA8, 0x50, 0x27, 0xD3, 0x08, 0x84, 0xBE, 0xF3, + 0x4F, 0xEE, 0xDD, 0x6C, 0xB1, 0x50, 0x4B, 0x09, 0x2F, 0x39, 0x68, 0x72, 0x7D, 0x00, 0xC6, 0xBB, + 0x21, 0xCC, 0xF0, 0x32, 0xA0, 0x72, 0xC7, 0x52, 0x46, 0x67, 0x77, 0x88, 0xF5, 0x0D, 0x80, 0xC4, + 0xB2, 0xB7, 0x8C, 0x9F, 0x99, 0xE2, 0x96, 0xE4, 0x2F, 0x22, 0x7E, 0xD3, 0xF4, 0x2D, 0xF5, 0x37, + 0x7A, 0x07, 0x88, 0xD2, 0x21, 0x6C, 0x93, 0x98, 0x9C, 0x94, 0x97, 0xB0, 0x30, 0xC5, 0xE4, 0x3D, + 0x14, 0xB3, 0x4B, 0x6B, 0x81, 0x67, 0xA4, 0xE4, 0xAC, 0x69, 0x03, 0x13, 0xF3, 0xB5, 0x8B, 0x84, + 0x43, 0xFD, 0x01, 0xF1, 0x9A, 0x0E, 0xE0, 0xAA, 0x0C, 0xE9, 0xC4, 0x8F, 0xEC, 0xA9, 0x00, 0x7C, + 0x86, 0xBE, 0x5E, 0xC1, 0x45, 0x11, 0x6B, 0x4B, 0x0C, 0x75, 0xB5, 0x8B, 0xD9, 0xBC, 0xED, 0x01, + 0x4F, 0x64, 0xB7, 0x34, 0x30, 0x30, 0xE4, 0x0B, 0x1E, 0x9B, 0x61, 0x5E, 0x03, 0x37, 0x30, 0x2F, + 0xAF, 0xD8, 0x7B, 0x63, 0x1E, 0x87, 0x78, 0x07, 0x1E, 0xE5, 0xA0, 0x16, 0x53, 0x91, 0x3B, 0xC3, + 0xB6, 0x85, 0x82, 0x92, 0x71, 0xDD, 0x19, 0x0A, 0x46, 0x71, 0x32, 0x4E, 0x73, 0xAD, 0xE8, 0xD8, + 0x41, 0x70, 0x0D, 0x2F, 0x9E, 0x81, 0x81, 0x1B, 0x49, 0x8D, 0x67, 0x34, 0xEC, 0xCE, 0x06, 0xFE, + 0xF2, 0x74, 0xE6, 0x12, 0xBF, 0x3A, 0xA2, 0xD5, 0x0D, 0xCE, 0xA5, 0xD9, 0x27, 0x78, 0xDE, 0x69, + 0x87, 0xB8, 0xE7, 0x74, 0x79, 0xBA, 0xE3, 0x1F, 0xC1, 0x5B, 0x48, 0x74, 0x32, 0x28, 0x41, 0x6B, + 0x71, 0x3F, 0x6D, 0x3C, 0xF0, 0x07, 0xC1, 0x47, 0xC1, 0x53, 0x7A, 0x1F, 0x16, 0x15, 0x3A, 0x61, + 0xE1, 0xFB, 0x1F, 0x4E, 0xCA, 0xF0, 0xFD, 0x82, 0xC0, 0xF3, 0xDB, 0x22, 0x9A, 0x90, 0x6A, 0xB6, + 0x3C, 0xAD, 0xF3, 0x10, 0x48, 0x7E, 0x77, 0x86, 0x05, 0x65, 0x0D, 0x13, 0x87, 0x92, 0x0C, 0xB7, + 0x55, 0x25, 0x26, 0x1F, 0xB8, 0x74, 0xCB, 0x69, 0x19, 0xDB, 0xA6, 0x93, 0x70, 0xC6, 0x14, 0x02, + 0x65, 0xD0, 0x89, 0x2A, 0xC5, 0x26, 0x86, 0xEB, 0x0F, 0x38, 0x17, 0x20, 0xB3, 0x82, 0x43, 0xD3, + 0x62, 0xE1, 0xF4, 0x1F, 0xBE, 0x60, 0xBC, 0xD3, 0xCB, 0x21, 0x2A, 0x94, 0x04, 0x03, 0xE5, 0xBE, + 0x50, 0x4E, 0x1C, 0x1B, 0x40, 0x4B, 0x34, 0x62, 0x17, 0x32, 0x3F, 0xD7, 0xBB, 0x0F, 0x95, 0xBD, + 0x5B, 0xA5, 0x94, 0xAE, 0x57, 0x0A, 0x73, 0x04, 0x7E, 0x08, 0x08, 0xF4, 0xFC, 0x00, 0xC6, 0xE4, + 0x42, 0x44, 0xA3, 0x3E, 0x26, 0xE2, 0x2F, 0xAE, 0x37, 0x7D, 0x55, 0x9A, 0x7B, 0x4D, 0xE4, 0xF7, + 0x9B, 0x8C, 0xFD, 0x4D, 0x0A, 0xAB, 0xED, 0x45, 0xC9, 0xB3, 0x69, 0x4D, 0xB7, 0x86, 0x33, 0x99, + 0xC1, 0xB0, 0x63, 0x91, 0xE7, 0x6E, 0x12, 0xC6, 0xF1, 0x86, 0x49, 0xF9, 0xFE, 0xD0, 0x0D, 0xAE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(uint)header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)(header.m_buildVersion * header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)(header.m_buildVersion * header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 67664. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_67664.cs +// + +namespace KeyCMF_067664 +{ + static const BYTE Keytable[] = + { + 0x55, 0x90, 0xF6, 0x22, 0xA1, 0xA9, 0xAA, 0xFF, 0xC0, 0xE2, 0x73, 0x23, 0xFF, 0x29, 0xA7, 0x02, + 0x0B, 0xB5, 0xC1, 0x93, 0x20, 0x2C, 0x27, 0x04, 0xF8, 0x6D, 0x2B, 0x58, 0x66, 0x86, 0x4D, 0x2B, + 0x90, 0xBC, 0x60, 0x4B, 0xA7, 0x19, 0xE3, 0x28, 0x73, 0x7C, 0xC9, 0xCB, 0xCD, 0xF0, 0xF0, 0x1A, + 0x3B, 0x96, 0x31, 0xB3, 0x2C, 0x98, 0x57, 0xCB, 0x1D, 0xD2, 0x48, 0x0A, 0x35, 0xE7, 0x3E, 0xA2, + 0x3B, 0x0C, 0x09, 0x73, 0x0F, 0xEE, 0x74, 0x18, 0xD1, 0x48, 0xD1, 0x76, 0x48, 0x01, 0x19, 0xA2, + 0x50, 0x14, 0x1E, 0xF9, 0xF9, 0xF2, 0xE1, 0x9D, 0xFE, 0xAA, 0xB9, 0x14, 0xD5, 0xCB, 0x4C, 0x05, + 0xE8, 0x0F, 0x8A, 0x48, 0x61, 0x6F, 0xD8, 0x0C, 0xAD, 0x53, 0xF7, 0xD3, 0x09, 0xE3, 0x5C, 0xDF, + 0x16, 0x38, 0x75, 0x26, 0x09, 0x73, 0x9F, 0xE3, 0x34, 0x5C, 0x3C, 0x08, 0xDE, 0x45, 0x72, 0x52, + 0x9D, 0x30, 0xF4, 0x59, 0x50, 0xBE, 0xEA, 0x25, 0x58, 0x00, 0xC5, 0x4B, 0xD6, 0x57, 0x47, 0xAE, + 0x47, 0x8B, 0xC4, 0x0A, 0xC1, 0x51, 0x52, 0xE8, 0x32, 0xFD, 0x0D, 0x3E, 0xF0, 0x81, 0xDA, 0x70, + 0x13, 0xA3, 0x2A, 0x57, 0x46, 0xA5, 0x98, 0xEF, 0xE9, 0x68, 0xBD, 0xBA, 0x4C, 0x98, 0x48, 0x99, + 0x99, 0x6A, 0xA2, 0xA6, 0x69, 0x9E, 0x3E, 0xF8, 0x67, 0x5E, 0x64, 0x12, 0x15, 0xA5, 0xFE, 0xCC, + 0x40, 0x04, 0x62, 0x0E, 0xCD, 0xDE, 0x2A, 0xA8, 0xFA, 0x5C, 0x97, 0xD0, 0xA4, 0x68, 0xC8, 0x91, + 0xA3, 0x13, 0xA3, 0xAE, 0x4F, 0xE3, 0xE9, 0x4B, 0x9B, 0xF0, 0x60, 0x3D, 0x5A, 0xC6, 0xDE, 0xC5, + 0xA2, 0xFF, 0x08, 0xAE, 0xC6, 0xAB, 0x60, 0xC9, 0x0C, 0xDA, 0x2D, 0x05, 0x5F, 0x71, 0x9D, 0x22, + 0xB3, 0x84, 0x51, 0xD2, 0x0D, 0x66, 0x9D, 0xAB, 0x97, 0xB5, 0xEF, 0x28, 0x06, 0x43, 0x6A, 0x7B, + 0x30, 0x52, 0x22, 0x78, 0x9E, 0x60, 0xFA, 0xB9, 0xDD, 0xD1, 0xB3, 0x20, 0x3C, 0xD8, 0xEA, 0xC3, + 0xAB, 0xAB, 0x83, 0x0C, 0x8A, 0xDD, 0xBD, 0x7C, 0xD5, 0x91, 0x55, 0xDE, 0x9F, 0x23, 0x3F, 0x82, + 0xE0, 0x08, 0xC9, 0x72, 0x99, 0x54, 0x11, 0xB4, 0x1F, 0x55, 0x35, 0x8F, 0xF0, 0x7C, 0x4B, 0x4F, + 0xE8, 0x54, 0x4C, 0x3D, 0xC5, 0xAC, 0xB6, 0x2A, 0x06, 0x0F, 0xDE, 0x1B, 0x0C, 0xAD, 0x0D, 0x49, + 0x59, 0x43, 0xA5, 0x76, 0x0E, 0x20, 0x37, 0xB3, 0xF1, 0x2C, 0x86, 0x3B, 0x3A, 0xDF, 0x46, 0xFB, + 0xCF, 0x5D, 0x6C, 0xFA, 0x17, 0x41, 0xDA, 0x54, 0x34, 0xD2, 0x9B, 0xDA, 0x04, 0xB9, 0xA0, 0x91, + 0xFB, 0x03, 0x47, 0x22, 0x76, 0xC2, 0xA7, 0x42, 0x2F, 0xC5, 0x86, 0x8C, 0xF4, 0xD8, 0x52, 0x45, + 0xF0, 0x60, 0x72, 0x05, 0x6D, 0x9E, 0x06, 0xC8, 0xF6, 0xD6, 0x10, 0xAD, 0xA9, 0xA0, 0xFF, 0x3C, + 0xDD, 0x42, 0x5F, 0x23, 0x07, 0x9A, 0xE3, 0xE3, 0x3E, 0x1C, 0xD2, 0x29, 0x7E, 0xAC, 0xAD, 0x92, + 0x3F, 0xC5, 0xC8, 0x07, 0x92, 0xB2, 0x32, 0x38, 0x27, 0x73, 0x6C, 0x73, 0xC7, 0x39, 0xCF, 0xE5, + 0xFD, 0x8B, 0x3B, 0xB4, 0x32, 0xD0, 0x41, 0x0D, 0xB1, 0x00, 0x61, 0xC9, 0x1A, 0x4F, 0x03, 0xDC, + 0x59, 0x7C, 0x2E, 0x02, 0x2F, 0x36, 0x52, 0x25, 0x9C, 0x3C, 0x6D, 0x84, 0xE1, 0x91, 0xBF, 0x62, + 0x1F, 0x93, 0xCD, 0x4F, 0x27, 0x5C, 0x53, 0x49, 0xDE, 0xE4, 0xBC, 0x0B, 0xD9, 0x6C, 0x88, 0xA6, + 0x66, 0x35, 0xB5, 0x5B, 0x32, 0xFA, 0x9A, 0xC1, 0x19, 0xCF, 0x5B, 0xA7, 0x6E, 0x5A, 0xA2, 0x5C, + 0x1E, 0xBD, 0x9F, 0x09, 0xED, 0xDE, 0xDE, 0x28, 0xAA, 0x9E, 0x73, 0x26, 0xD2, 0xAE, 0xFA, 0xF4, + 0x87, 0xA8, 0xC8, 0x4D, 0xB2, 0x6F, 0x18, 0xAB, 0xD9, 0x78, 0x4A, 0xDC, 0x99, 0x91, 0x8B, 0xCF + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[(uint) header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 68126. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_68126.cs +// + +namespace KeyCMF_068126 +{ + static const BYTE Keytable[] = + { + 0x89, 0x4F, 0x13, 0x35, 0x02, 0xA1, 0xEB, 0x0D, 0x33, 0x07, 0xBC, 0x42, 0x38, 0xAC, 0xAC, 0x4A, + 0x17, 0x82, 0x1A, 0xE8, 0xE8, 0xDD, 0x44, 0x30, 0xB7, 0x96, 0x75, 0xF9, 0x35, 0x02, 0x8D, 0xD2, + 0x2F, 0xE9, 0x9A, 0xE5, 0x4A, 0xFE, 0x46, 0x1C, 0xCB, 0xBF, 0x1E, 0xEB, 0x59, 0x37, 0xBF, 0xC2, + 0x31, 0xB5, 0x66, 0x43, 0x86, 0x18, 0x02, 0xEA, 0x5C, 0xBE, 0xB1, 0x76, 0x50, 0xFB, 0x4D, 0x20, + 0xA3, 0x7D, 0x9A, 0x11, 0x62, 0xE3, 0x59, 0xD0, 0x74, 0xCF, 0x45, 0xF0, 0xDF, 0xFA, 0xE1, 0xA1, + 0xE4, 0x9B, 0xEA, 0x8A, 0x08, 0x8B, 0xAE, 0x2D, 0x13, 0xA0, 0x2C, 0x0F, 0x03, 0x0E, 0x3D, 0x3E, + 0x9F, 0x2C, 0x94, 0x31, 0x5D, 0x26, 0x5E, 0x3C, 0xE7, 0x60, 0x99, 0x21, 0x14, 0x29, 0xA6, 0x8F, + 0xAB, 0x27, 0x43, 0xBA, 0x63, 0x08, 0x7D, 0xA5, 0xE5, 0x9E, 0xB1, 0xF0, 0xB4, 0xBC, 0xC7, 0x44, + 0xE3, 0x1C, 0x71, 0xF7, 0xCB, 0x7A, 0x20, 0xDB, 0xD9, 0x51, 0x30, 0xF4, 0x12, 0xD8, 0x66, 0x1A, + 0x5B, 0x8C, 0x53, 0xB2, 0x66, 0x18, 0x48, 0x78, 0xE5, 0xE9, 0x49, 0x6C, 0xBD, 0xA5, 0x88, 0xEC, + 0x2F, 0x06, 0xF1, 0xB3, 0x24, 0x15, 0x1F, 0x27, 0x0B, 0x62, 0x5F, 0x05, 0x69, 0x26, 0xC0, 0x37, + 0xA8, 0xF4, 0xCB, 0xAD, 0x80, 0x49, 0xFE, 0xEA, 0xFA, 0xA2, 0xB2, 0x1E, 0xB9, 0x3A, 0xCB, 0xE8, + 0x1A, 0xCF, 0x6D, 0xFD, 0xBB, 0xFE, 0x60, 0x65, 0x3B, 0x70, 0x99, 0xC4, 0x0B, 0xCB, 0x6D, 0x38, + 0xAB, 0x38, 0x6C, 0x60, 0xA3, 0x2C, 0x86, 0x74, 0xA8, 0x08, 0x4B, 0xFD, 0xF5, 0x51, 0xAA, 0x37, + 0xEE, 0xCD, 0x0B, 0x32, 0xEC, 0xF6, 0x37, 0xAD, 0x80, 0x5A, 0xB1, 0x3E, 0x5B, 0xB2, 0xFE, 0x7D, + 0xC4, 0x6D, 0x04, 0x9F, 0x7C, 0x72, 0x0E, 0xC6, 0xDF, 0xA2, 0x09, 0x0B, 0xE6, 0xCC, 0x2A, 0x3F, + 0x63, 0x28, 0xED, 0x1A, 0x61, 0x8C, 0xA4, 0xA6, 0xAC, 0xEE, 0x5C, 0xB1, 0x15, 0xAB, 0x76, 0xA7, + 0x77, 0xA8, 0xD5, 0x93, 0xC9, 0xCA, 0x38, 0x0F, 0x12, 0x8F, 0x4D, 0x92, 0x5C, 0xE8, 0x4F, 0x78, + 0x95, 0x52, 0xFF, 0xB6, 0x68, 0xBB, 0xE6, 0x57, 0x43, 0x9D, 0x49, 0x76, 0x74, 0xF2, 0x9E, 0x9E, + 0xEF, 0xEC, 0xB1, 0x90, 0x7D, 0x35, 0xA6, 0x37, 0x59, 0xC1, 0x1F, 0x75, 0x9E, 0x86, 0xB5, 0x62, + 0x14, 0x5D, 0x58, 0xF4, 0x62, 0x78, 0x02, 0x57, 0xCE, 0x7A, 0xFA, 0x25, 0x82, 0x76, 0x0E, 0xEA, + 0xD1, 0x37, 0x95, 0x45, 0xDE, 0x41, 0x2E, 0xED, 0xD4, 0x55, 0x3A, 0x8A, 0x1E, 0x7E, 0xEF, 0x05, + 0xBC, 0x6D, 0x2F, 0xA6, 0xEF, 0x1C, 0x76, 0x69, 0x55, 0x4D, 0x64, 0xBB, 0xAC, 0x46, 0x20, 0xCE, + 0xC9, 0x9C, 0x5D, 0x78, 0x9C, 0x23, 0x13, 0x11, 0x43, 0x2F, 0xED, 0x8D, 0x66, 0xAC, 0xB2, 0x19, + 0x51, 0xE4, 0x0B, 0xBA, 0x6F, 0x47, 0xDE, 0xFB, 0x77, 0x61, 0x14, 0x50, 0x65, 0x97, 0xF2, 0xB9, + 0xAA, 0x24, 0x74, 0xA1, 0xA6, 0x22, 0xCB, 0x05, 0x7B, 0x85, 0xAC, 0x4A, 0x76, 0x0B, 0x8D, 0xE6, + 0x8C, 0xFB, 0xEA, 0x50, 0x62, 0xBE, 0xCB, 0x2B, 0xF8, 0x2D, 0x9C, 0xDA, 0xBB, 0x26, 0x23, 0x1B, + 0x0E, 0x29, 0xAA, 0x9C, 0xD8, 0x93, 0x35, 0xD6, 0x69, 0x2D, 0x9E, 0x38, 0x7C, 0xDE, 0x60, 0x43, + 0x29, 0x5C, 0x71, 0xD1, 0x08, 0x12, 0x04, 0x6E, 0x5A, 0x2F, 0x42, 0xD5, 0x02, 0x9C, 0xBF, 0x38, + 0x07, 0xD6, 0x29, 0xC1, 0xF3, 0xD3, 0x06, 0xBE, 0xD9, 0x50, 0xC3, 0xC8, 0x9B, 0xD2, 0xF6, 0x6C, + 0xD7, 0x7C, 0x99, 0xE2, 0xE4, 0xD5, 0x61, 0xE1, 0x97, 0x04, 0xA5, 0xD0, 0x97, 0xEE, 0x93, 0x71, + 0x30, 0xCB, 0xF9, 0xB2, 0x99, 0x89, 0x21, 0x20, 0x4C, 0x71, 0x14, 0x54, 0x15, 0x1A, 0xB3, 0x15 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(uint)header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(uint)header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 68780. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_68780.cs +// + +namespace KeyCMF_068780 +{ + static const BYTE Keytable[] = + { + 0xA0, 0x18, 0x1B, 0x6F, 0x84, 0xB6, 0x9A, 0x3F, 0x55, 0x24, 0x8D, 0xBD, 0x04, 0xAF, 0xD6, 0xD5, + 0x6F, 0x71, 0xC4, 0x49, 0x52, 0xCF, 0x41, 0x4E, 0xC0, 0xD9, 0xE9, 0x4B, 0x21, 0x0B, 0xD3, 0x07, + 0x4A, 0x29, 0xE6, 0x2B, 0x22, 0xCA, 0x70, 0x94, 0xE2, 0x06, 0x99, 0xDB, 0x1F, 0x59, 0x19, 0xF0, + 0xD3, 0x70, 0x29, 0xEC, 0x9A, 0x96, 0xCC, 0xEF, 0x04, 0x6F, 0xDE, 0xE7, 0x6B, 0x44, 0xD4, 0xA3, + 0x62, 0x83, 0x50, 0x31, 0x8C, 0x21, 0x0E, 0x41, 0x44, 0xFC, 0x21, 0x4B, 0x88, 0x18, 0x55, 0x1D, + 0xAE, 0x36, 0x2E, 0x7E, 0xB4, 0xD6, 0x75, 0x39, 0x44, 0xC9, 0xE3, 0xF2, 0xA9, 0x95, 0xE0, 0x20, + 0xB7, 0x1E, 0xF6, 0x6F, 0xBD, 0xDA, 0x74, 0x46, 0x40, 0x13, 0x21, 0xD1, 0x51, 0xCA, 0x0B, 0x71, + 0xD8, 0x72, 0x94, 0x88, 0x46, 0x8F, 0x66, 0xF8, 0xDB, 0x12, 0xE5, 0x42, 0xCA, 0xB4, 0xD7, 0x05, + 0x71, 0x8B, 0xF9, 0xD2, 0x33, 0xC5, 0xC8, 0xBC, 0x2E, 0x25, 0x9C, 0x6C, 0x02, 0xCB, 0xDB, 0xD3, + 0xF4, 0x7E, 0x54, 0xFB, 0x0C, 0xD2, 0x40, 0x2D, 0xB8, 0x6E, 0x12, 0xBC, 0x5D, 0x8C, 0x32, 0x87, + 0x97, 0xD3, 0xB4, 0x73, 0xEE, 0xF9, 0x4C, 0x2A, 0x6A, 0x4D, 0x81, 0x07, 0x6D, 0xB3, 0xF5, 0xE9, + 0xAF, 0x13, 0xB9, 0x0E, 0x5C, 0xE1, 0x7A, 0x05, 0xE7, 0x94, 0x91, 0x40, 0x09, 0xA3, 0x32, 0x4C, + 0x0B, 0x30, 0x9B, 0x28, 0x89, 0xEC, 0xB6, 0x37, 0x36, 0xDF, 0x89, 0x51, 0x15, 0x25, 0xD6, 0xE1, + 0x4D, 0x42, 0xD6, 0x90, 0x2C, 0x66, 0xEC, 0x4F, 0x96, 0x95, 0xCD, 0xBD, 0xDB, 0x91, 0x77, 0x6F, + 0x20, 0xBD, 0xF5, 0x91, 0x40, 0x85, 0x02, 0x39, 0x4E, 0x0D, 0x40, 0x45, 0x25, 0x2E, 0x0D, 0x2C, + 0x4A, 0x6E, 0x3C, 0xB1, 0xD2, 0x14, 0xDD, 0x6C, 0x87, 0xF4, 0xA1, 0x8A, 0x21, 0xCF, 0x51, 0x75, + 0x61, 0xFD, 0x20, 0x1D, 0x7E, 0xF8, 0x1B, 0xD4, 0x02, 0x62, 0xE8, 0x7E, 0x94, 0x2A, 0x76, 0x73, + 0x8B, 0x3A, 0xF5, 0xDE, 0x10, 0x5F, 0xC6, 0x8E, 0x99, 0xBC, 0x73, 0x15, 0x87, 0x8A, 0x71, 0xA5, + 0x10, 0x18, 0xA3, 0xF7, 0x33, 0xBD, 0x62, 0x90, 0x7E, 0xB1, 0x32, 0xC7, 0xAF, 0xA2, 0xDE, 0xE5, + 0x39, 0x6E, 0x05, 0x34, 0xC5, 0xBE, 0xF5, 0x13, 0x5D, 0x9F, 0xB7, 0x13, 0xAE, 0xA3, 0xA8, 0xC6, + 0xEB, 0xDA, 0x83, 0x95, 0xDA, 0x3C, 0x25, 0xD0, 0x8E, 0xC4, 0x0F, 0x0C, 0x23, 0xF7, 0x2C, 0x67, + 0x98, 0xF3, 0xF4, 0xD9, 0x05, 0x2C, 0x02, 0x55, 0xE3, 0x64, 0xFB, 0x90, 0xAD, 0x3D, 0xCD, 0x31, + 0x1D, 0xF8, 0xEC, 0x5A, 0x81, 0x76, 0x59, 0x9B, 0xDE, 0x57, 0xB9, 0x9F, 0xF0, 0x95, 0x12, 0xEE, + 0x35, 0xFA, 0x16, 0x76, 0x79, 0x93, 0x34, 0xEA, 0xDC, 0x6B, 0x21, 0xF6, 0xC7, 0x08, 0x04, 0xD4, + 0xFD, 0xC7, 0xCB, 0xE6, 0xA1, 0xED, 0xF0, 0xCF, 0x41, 0x5B, 0x3D, 0xEE, 0xDF, 0xC5, 0x6D, 0x6C, + 0x8D, 0xB8, 0x65, 0x5F, 0x91, 0x13, 0x5B, 0x4C, 0xD6, 0x67, 0x57, 0x9D, 0x01, 0x79, 0x35, 0x2B, + 0x9B, 0xAB, 0xBC, 0x67, 0xD4, 0x37, 0x4A, 0x45, 0x1D, 0x8A, 0xA7, 0x12, 0x38, 0x1E, 0xF6, 0xE6, + 0xA8, 0xE4, 0xAC, 0x26, 0x59, 0xCD, 0x35, 0x26, 0x0D, 0xB3, 0xBC, 0x5A, 0x66, 0xF4, 0xDB, 0x41, + 0x49, 0x76, 0x3B, 0x33, 0x14, 0x68, 0x73, 0xDF, 0xA9, 0x62, 0x8F, 0x90, 0x7F, 0xA4, 0xE6, 0xF1, + 0x1F, 0xDE, 0x0A, 0x7C, 0x32, 0x02, 0x91, 0x14, 0x60, 0x8D, 0x12, 0x6C, 0x7E, 0x11, 0x1C, 0x4C, + 0xFC, 0xD5, 0xF2, 0x27, 0x35, 0x55, 0x96, 0x94, 0x8D, 0x88, 0x08, 0xB7, 0x00, 0x59, 0x01, 0xD0, + 0x89, 0x27, 0x2D, 0xB5, 0x76, 0x38, 0x61, 0x7C, 0x43, 0x49, 0xDD, 0x3F, 0x0A, 0xCD, 0xD6, 0x1B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 69340. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_69340.cs +// + +namespace KeyCMF_069340 +{ + static const BYTE Keytable[] = + { + 0xAB, 0xD8, 0x24, 0x4F, 0x30, 0x91, 0xD3, 0x13, 0x33, 0x52, 0x84, 0x5A, 0xFB, 0x99, 0xC9, 0x6C, + 0x6D, 0xAD, 0x41, 0xCB, 0x3A, 0x09, 0x6E, 0x9C, 0x3D, 0x9B, 0xAB, 0x89, 0xF2, 0x2D, 0xB6, 0x0F, + 0x2B, 0x55, 0xFC, 0x47, 0x3D, 0x91, 0x74, 0x60, 0xBD, 0xE5, 0x50, 0x2A, 0xD4, 0x22, 0x66, 0x6F, + 0xEC, 0x07, 0x82, 0xB9, 0x64, 0x8F, 0xB4, 0x3E, 0xF4, 0x4A, 0x80, 0x24, 0x4C, 0x9A, 0x72, 0xE2, + 0xC9, 0x85, 0xF9, 0x45, 0x07, 0x42, 0xF3, 0xB2, 0x23, 0x18, 0x82, 0xDB, 0x3A, 0x5E, 0xC5, 0x7E, + 0x12, 0x71, 0x34, 0xB1, 0xD5, 0x72, 0x83, 0x68, 0x58, 0xB8, 0xAA, 0xE0, 0x89, 0xC0, 0x21, 0x4B, + 0x37, 0x60, 0xE2, 0x17, 0xF7, 0xCA, 0x77, 0x87, 0x9C, 0xAC, 0x9F, 0xED, 0xF7, 0x5E, 0x4B, 0xC5, + 0x76, 0xAB, 0x27, 0x23, 0xB9, 0x7E, 0x26, 0xAE, 0xB8, 0xB7, 0xA2, 0x32, 0x46, 0xE0, 0xA8, 0x85, + 0xC1, 0x0D, 0x72, 0x6A, 0x43, 0x8D, 0x5D, 0xBA, 0x77, 0xDE, 0x65, 0x18, 0x8E, 0xDC, 0xDB, 0x94, + 0x6E, 0x02, 0x44, 0xA6, 0xA2, 0xD4, 0xC9, 0xE8, 0x2B, 0x48, 0x5D, 0x97, 0x6A, 0x22, 0x1C, 0x58, + 0x97, 0xB7, 0x71, 0x9B, 0xC5, 0x6A, 0xEC, 0xE1, 0x31, 0x72, 0xB2, 0xF9, 0x8A, 0xEE, 0xC6, 0x36, + 0x46, 0x6E, 0x61, 0xDD, 0x78, 0xEF, 0x6A, 0xAD, 0xCF, 0x2F, 0xCD, 0x1C, 0xCA, 0xED, 0x53, 0xE2, + 0x90, 0x23, 0x00, 0xCD, 0xAA, 0x97, 0xA4, 0xA0, 0x60, 0x63, 0x9A, 0xD2, 0xB6, 0xEB, 0x5C, 0x61, + 0x34, 0x7F, 0x26, 0x71, 0x79, 0x2D, 0xE0, 0x56, 0x90, 0xB0, 0x61, 0xFA, 0xA3, 0x0C, 0x3B, 0x8F, + 0x57, 0x7F, 0x95, 0x5F, 0x9D, 0x23, 0xEE, 0x91, 0x1D, 0x15, 0x5A, 0xB9, 0x6F, 0xED, 0xF3, 0x67, + 0xA0, 0x0B, 0x7B, 0xD4, 0x22, 0x62, 0x62, 0xD4, 0xD0, 0x71, 0xF5, 0xE4, 0x06, 0xF4, 0xCF, 0xB0, + 0xD5, 0x05, 0xC9, 0x49, 0x56, 0x54, 0xFE, 0xD5, 0x5F, 0xF1, 0xAD, 0xE2, 0xA5, 0x08, 0x37, 0x68, + 0xD5, 0x7A, 0xD0, 0x18, 0xC5, 0x8D, 0xA3, 0x64, 0x9F, 0xFE, 0x20, 0x77, 0x03, 0x77, 0xA1, 0x11, + 0x5F, 0x95, 0x8A, 0x53, 0x05, 0xCB, 0x0E, 0x02, 0x03, 0x6B, 0xFF, 0xC8, 0xD1, 0x11, 0xE4, 0x9D, + 0xE0, 0x18, 0x4C, 0x28, 0x67, 0x9A, 0x7C, 0xB9, 0x9D, 0x14, 0x6B, 0x7D, 0xCD, 0xB8, 0xD9, 0xC2, + 0xC9, 0x1F, 0x44, 0x42, 0xAF, 0x82, 0xD3, 0x19, 0x76, 0x90, 0x87, 0xAF, 0x62, 0x8D, 0x42, 0x03, + 0x56, 0x7E, 0x41, 0xDB, 0xC1, 0x5A, 0x4C, 0x05, 0x93, 0x3C, 0x0F, 0x20, 0xC1, 0x51, 0xE0, 0x86, + 0xBA, 0xFA, 0xA2, 0x8E, 0xFA, 0x66, 0xDD, 0x04, 0xA2, 0xB6, 0x35, 0xD5, 0xBB, 0x33, 0x7A, 0xE0, + 0x1B, 0x46, 0xC6, 0xB1, 0x53, 0x88, 0x80, 0xFD, 0xB1, 0x05, 0x5D, 0xAE, 0x51, 0x8C, 0x2B, 0xAF, + 0xB1, 0xC7, 0x78, 0xDF, 0x03, 0x91, 0x9C, 0xC2, 0x20, 0xB0, 0x47, 0x1F, 0xFB, 0x01, 0x49, 0xA8, + 0x02, 0x89, 0x31, 0x05, 0x6A, 0xF3, 0xD3, 0xDC, 0x8B, 0xC0, 0x62, 0xA9, 0x2F, 0xA8, 0x2F, 0x3F, + 0xFA, 0xEC, 0xAF, 0xB2, 0x75, 0xAC, 0x0A, 0x3F, 0x0E, 0xCF, 0x8F, 0x53, 0x4A, 0xFD, 0x85, 0xFC, + 0xDF, 0x2D, 0x3B, 0xB7, 0x42, 0x8A, 0x47, 0x2A, 0xC1, 0xFE, 0x84, 0xC2, 0xCC, 0x31, 0x38, 0x1A, + 0xB6, 0xCD, 0xCD, 0x15, 0x81, 0xEF, 0xE1, 0xCE, 0xCB, 0x98, 0x09, 0x8B, 0x0D, 0x6F, 0xAA, 0x28, + 0x15, 0x33, 0xEF, 0x92, 0x42, 0x02, 0x4C, 0xEC, 0x15, 0xAD, 0x26, 0x20, 0xF0, 0x5B, 0xF6, 0x3D, + 0x71, 0x36, 0xD5, 0x85, 0x74, 0xE2, 0x39, 0xA1, 0xA4, 0xED, 0xD0, 0xA8, 0x44, 0xF4, 0xF0, 0x8F, + 0x90, 0x50, 0x8E, 0x7E, 0x2B, 0xE4, 0x6A, 0xE4, 0x6F, 0xFB, 0xC9, 0x6E, 0x78, 0x42, 0xA8, 0xAE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx + header.GetNonEncryptedMagic(), SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 69939. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_69939.cs +// + +namespace KeyCMF_069939 +{ + static const BYTE Keytable[] = + { + 0x74, 0x7C, 0x6C, 0xB9, 0x79, 0x86, 0x32, 0x73, 0x14, 0x0E, 0xBB, 0x52, 0xD2, 0x2B, 0x9B, 0x40, + 0x8A, 0xAE, 0x83, 0x13, 0x70, 0xA4, 0xC9, 0x1E, 0xDE, 0x96, 0x54, 0xDD, 0x54, 0x66, 0xBD, 0x5A, + 0x3B, 0x10, 0xBB, 0x47, 0xA1, 0x0F, 0x06, 0x18, 0x48, 0x73, 0xF7, 0xEE, 0xFB, 0x6C, 0xDB, 0xB1, + 0x7A, 0xB1, 0xFA, 0x0A, 0xC8, 0x3E, 0x58, 0x5F, 0x11, 0xB4, 0x09, 0x79, 0x6E, 0xF4, 0xF5, 0x09, + 0x58, 0xE7, 0x8E, 0xB1, 0x86, 0x09, 0x24, 0x8A, 0x6A, 0xBC, 0x1E, 0x9D, 0x52, 0x03, 0x5F, 0x5D, + 0x0F, 0x1E, 0xA8, 0x2C, 0x38, 0x02, 0x5D, 0xC8, 0x75, 0x35, 0x8F, 0x27, 0xBB, 0x29, 0x05, 0x94, + 0xE4, 0x1E, 0xCB, 0xB4, 0xB3, 0x3E, 0xAD, 0x3A, 0x76, 0xD8, 0xFD, 0x2A, 0xBF, 0x6F, 0xB7, 0x42, + 0x66, 0xFC, 0x6E, 0xB1, 0xDD, 0xCC, 0xE1, 0x52, 0x7A, 0xA2, 0xC2, 0x63, 0xB9, 0x36, 0x8F, 0x9A, + 0xD7, 0x5B, 0x36, 0x2D, 0xBC, 0x57, 0xCC, 0x44, 0x4A, 0x57, 0xBA, 0x45, 0x1D, 0x8F, 0x57, 0x22, + 0x7F, 0x27, 0x5B, 0x1A, 0xEE, 0xD6, 0xA7, 0x4E, 0x69, 0xCD, 0x23, 0xA7, 0xFD, 0x8C, 0x79, 0xC3, + 0xB5, 0x5F, 0x75, 0x4C, 0xC1, 0x0F, 0x7C, 0xCB, 0xE7, 0xBA, 0x6B, 0xF6, 0x65, 0x38, 0x0C, 0x4D, + 0x5D, 0x4F, 0xA9, 0x0A, 0x98, 0x9D, 0xBB, 0x01, 0x4D, 0xF6, 0xF8, 0xB0, 0x9E, 0x41, 0x36, 0x17, + 0x4D, 0xD7, 0x44, 0x8F, 0xB3, 0x39, 0xF8, 0xE2, 0x52, 0x24, 0x14, 0x95, 0x3C, 0x44, 0x5A, 0x82, + 0x5B, 0xA6, 0xD4, 0x8D, 0xB3, 0x1E, 0xC4, 0x52, 0x02, 0x26, 0xF0, 0xD7, 0xF8, 0x5A, 0x8C, 0xF9, + 0xA8, 0x55, 0x81, 0x25, 0x1F, 0x6B, 0xFA, 0x7B, 0xB7, 0x11, 0x39, 0xF6, 0x18, 0xAD, 0x21, 0x94, + 0x4C, 0x38, 0xE8, 0x09, 0xD4, 0xF4, 0x29, 0x28, 0x58, 0x9D, 0x3B, 0x13, 0x28, 0x5A, 0xB2, 0xAD, + 0x33, 0x73, 0x56, 0x3A, 0x0D, 0x6A, 0x20, 0x79, 0xBC, 0x5F, 0x7D, 0xB9, 0xFE, 0xB1, 0x2E, 0x2B, + 0xB2, 0x54, 0xA3, 0xF3, 0x54, 0xD9, 0x1F, 0x4E, 0xD1, 0x7A, 0x4A, 0x34, 0x2E, 0x72, 0xF6, 0xC0, + 0xF1, 0xD0, 0x5F, 0x79, 0x68, 0xA6, 0xFA, 0x5C, 0x99, 0xB1, 0xF5, 0x85, 0xDE, 0xC6, 0xA1, 0xF6, + 0x3E, 0x2D, 0x5E, 0xFE, 0x7F, 0x27, 0xA6, 0xF8, 0x00, 0x7F, 0x36, 0x20, 0xA6, 0xBC, 0x34, 0x21, + 0xBD, 0xBA, 0xFD, 0x0E, 0x8A, 0x00, 0x41, 0x82, 0xA3, 0x46, 0xA4, 0x9B, 0xDC, 0x88, 0x4A, 0xD4, + 0x97, 0x5F, 0xA4, 0xF7, 0xF3, 0xD9, 0x17, 0x51, 0x49, 0xC9, 0xB1, 0x01, 0x08, 0xC3, 0xE7, 0x08, + 0x5F, 0x53, 0x53, 0xFA, 0x9F, 0x1E, 0x9B, 0xFA, 0x5C, 0x58, 0x08, 0x75, 0x33, 0xC2, 0x33, 0x97, + 0xEF, 0x03, 0x4F, 0x4C, 0x67, 0xDC, 0x07, 0xCE, 0x36, 0xFD, 0x49, 0x03, 0x22, 0x21, 0x9D, 0x54, + 0x53, 0xA0, 0x28, 0x4B, 0xB7, 0xC8, 0x7F, 0x46, 0x04, 0x67, 0x89, 0xBD, 0x94, 0xFC, 0xD0, 0x18, + 0x7C, 0xB6, 0x0A, 0xC0, 0x6E, 0xA9, 0xF1, 0xEE, 0xB9, 0x60, 0x65, 0x03, 0x8E, 0xAF, 0x06, 0x03, + 0x6D, 0x11, 0xA3, 0x01, 0xFF, 0xE0, 0x10, 0x46, 0x10, 0xF9, 0xF3, 0xA7, 0x4F, 0xFD, 0xD2, 0x42, + 0x9B, 0xF2, 0x8C, 0xFB, 0xAD, 0xA6, 0xE0, 0x06, 0xF9, 0x8E, 0x0E, 0xD7, 0x92, 0xF3, 0x70, 0x00, + 0xEB, 0xC1, 0x60, 0x8E, 0x86, 0xCB, 0x8D, 0xB9, 0x96, 0xF4, 0x78, 0x0A, 0xD6, 0x77, 0x98, 0x6F, + 0x8C, 0xE5, 0xAF, 0xA1, 0x5B, 0x4B, 0x4C, 0x46, 0x15, 0xF3, 0x2A, 0x1A, 0x80, 0xEC, 0x7E, 0xCE, + 0x62, 0x2A, 0xF3, 0xAF, 0xA9, 0xFD, 0xBB, 0x80, 0x88, 0x0C, 0xAB, 0xA5, 0x96, 0xCD, 0x88, 0x92, + 0x9F, 0x08, 0x26, 0x6C, 0xAC, 0x98, 0x96, 0xC8, 0xB2, 0x7A, 0xC4, 0xE7, 0x4C, 0x08, 0x13, 0x93 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)(header.m_dataCount + digest[header.m_dataCount % SHA1_DIGESTSIZE]) % 17; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 70250. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_70250.cs +// + +namespace KeyCMF_070250 +{ + static const BYTE Keytable[] = + { + 0x4B, 0xFA, 0xBB, 0x77, 0x48, 0x36, 0xB3, 0x0A, 0xC8, 0xC1, 0xFE, 0xA4, 0x5C, 0x45, 0x06, 0x62, + 0x18, 0x70, 0xE3, 0x37, 0xFA, 0x5D, 0xCA, 0xAB, 0xA3, 0x56, 0xA8, 0x3E, 0x94, 0x80, 0x13, 0xCD, + 0xA6, 0x1A, 0x4C, 0x73, 0x18, 0xFD, 0xBA, 0xF3, 0x9D, 0xD1, 0xAD, 0xF0, 0x10, 0x16, 0x76, 0x0B, + 0xBC, 0xBF, 0xF4, 0x52, 0xE6, 0xFA, 0x5C, 0x46, 0xBD, 0x17, 0x7A, 0x60, 0x8C, 0xC8, 0x1F, 0x68, + 0xB3, 0x1E, 0x03, 0x3C, 0xC6, 0x84, 0x11, 0xE3, 0x41, 0xBC, 0xE7, 0xC0, 0xDB, 0x7B, 0x38, 0x4B, + 0xCF, 0xEB, 0xAB, 0x40, 0x1C, 0x87, 0x31, 0xD4, 0xE0, 0x19, 0x29, 0xF2, 0x0F, 0x86, 0x50, 0xDF, + 0x93, 0x3A, 0xC4, 0xEE, 0xFB, 0xB0, 0xBF, 0x15, 0xE7, 0x9A, 0x33, 0x29, 0x69, 0x92, 0xB8, 0x9F, + 0x8F, 0xE0, 0x9C, 0xBC, 0x21, 0x66, 0x19, 0xF9, 0x7B, 0x50, 0x21, 0x87, 0xCC, 0xF0, 0xC6, 0xDA, + 0x5E, 0x45, 0x42, 0xA2, 0xC9, 0xEA, 0x0D, 0xBE, 0xBE, 0x03, 0x76, 0x03, 0xCE, 0xAB, 0xD2, 0x21, + 0x3D, 0x40, 0x23, 0xB1, 0x67, 0x3E, 0x71, 0x32, 0xAB, 0xB2, 0x16, 0x42, 0xDB, 0xBF, 0x07, 0x72, + 0x15, 0xDB, 0xD4, 0x4E, 0xA9, 0x8B, 0x95, 0xF9, 0x5D, 0x52, 0xE8, 0xAB, 0xFB, 0xB4, 0xC2, 0x80, + 0xA4, 0xF8, 0x1A, 0x15, 0x3F, 0xFA, 0xD8, 0x80, 0x07, 0xCF, 0xA4, 0x52, 0x2E, 0x9D, 0xB9, 0x91, + 0xBB, 0x3A, 0x80, 0x17, 0xF5, 0x56, 0xFC, 0xA7, 0x8F, 0x7D, 0x57, 0x05, 0x24, 0xD9, 0xAE, 0xD4, + 0x06, 0xDC, 0x24, 0xCE, 0x3B, 0x93, 0x4D, 0xF3, 0x0E, 0x9E, 0xDB, 0x45, 0xD2, 0x86, 0x2E, 0xAC, + 0x1B, 0x43, 0x04, 0x30, 0xDB, 0x71, 0x15, 0x5F, 0xE8, 0x9E, 0x12, 0xF2, 0xCE, 0x75, 0x33, 0xA4, + 0xD2, 0x95, 0xF7, 0x6D, 0x58, 0x87, 0x13, 0x36, 0xAA, 0xE5, 0xA5, 0x2B, 0x63, 0xF1, 0x98, 0xFB, + 0x28, 0x7D, 0x1B, 0x09, 0x9C, 0x57, 0x81, 0x56, 0x01, 0x5F, 0x85, 0x6F, 0xED, 0xE0, 0x37, 0xEC, + 0xF7, 0xC7, 0xD1, 0xD9, 0x09, 0x39, 0xFF, 0xEF, 0xBB, 0x97, 0x3E, 0xD1, 0xBD, 0xE1, 0x81, 0x53, + 0x7F, 0x02, 0x07, 0xF5, 0x42, 0x50, 0x53, 0xE8, 0x71, 0x00, 0x8C, 0xFA, 0x14, 0x3B, 0xDB, 0xEE, + 0xC7, 0x75, 0x07, 0x62, 0x4B, 0x93, 0x9C, 0x1C, 0x9B, 0x43, 0x4F, 0xFF, 0xB8, 0x78, 0xEF, 0x1C, + 0xA7, 0xBD, 0xD5, 0xD8, 0x42, 0x41, 0xB8, 0x7D, 0xCC, 0xEC, 0x38, 0xE5, 0x3A, 0xA2, 0x0A, 0x5E, + 0x15, 0x86, 0x9D, 0xE4, 0x05, 0xB3, 0xDD, 0x31, 0x96, 0x5E, 0x6D, 0x5D, 0xF3, 0x08, 0x7F, 0xB0, + 0xAB, 0xE4, 0x01, 0x8D, 0xA1, 0x95, 0x6C, 0xB1, 0x32, 0x3E, 0xDD, 0x66, 0x9F, 0x5B, 0x07, 0xDE, + 0x5F, 0xCC, 0x4D, 0xBA, 0xB6, 0xE4, 0x06, 0x97, 0x63, 0x49, 0x1A, 0x9C, 0x3B, 0xBE, 0x20, 0xF3, + 0x2C, 0xA2, 0xC0, 0x6F, 0xEB, 0x16, 0x36, 0x9E, 0x18, 0xC5, 0x23, 0xD7, 0x00, 0xAF, 0xA6, 0xCB, + 0x2F, 0x49, 0x87, 0x27, 0xE6, 0xF3, 0x00, 0xA4, 0x6D, 0x0C, 0x08, 0xA0, 0xA5, 0xF2, 0xCC, 0x2F, + 0xEE, 0x6D, 0xB8, 0xDA, 0xF2, 0x70, 0x94, 0xED, 0x97, 0x43, 0xAF, 0x44, 0x3D, 0xCF, 0x53, 0xAA, + 0x3E, 0x3A, 0x03, 0xF1, 0x81, 0x0C, 0xDB, 0x0C, 0x7D, 0x81, 0xF8, 0x44, 0xB3, 0x63, 0x4F, 0xBA, + 0x1D, 0x2B, 0x64, 0x9D, 0xDE, 0x4C, 0x7A, 0xA6, 0x09, 0x37, 0x8A, 0x46, 0x41, 0x20, 0xF6, 0xE6, + 0xAF, 0xB1, 0xA8, 0x21, 0x4B, 0x18, 0xFC, 0x7B, 0x14, 0xA0, 0xA3, 0x58, 0x29, 0x84, 0xDE, 0x13, + 0x2F, 0x63, 0xFA, 0x2A, 0xEB, 0xEA, 0x8E, 0xAD, 0x0C, 0xC5, 0x5E, 0x98, 0xAF, 0xCB, 0x8D, 0x37, + 0xFA, 0x1E, 0x4F, 0x7E, 0xD9, 0xC0, 0x36, 0x5E, 0xFC, 0x1E, 0xC3, 0x07, 0x3E, 0x5F, 0x06, 0xCD + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)(header.m_buildVersion * header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 70665. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_70665.cs +// + +namespace KeyCMF_070665 +{ + static const BYTE Keytable[] = + { + 0x6D, 0x25, 0xAF, 0xD4, 0xFE, 0xE9, 0x01, 0xEF, 0x20, 0x9C, 0xE5, 0x15, 0x62, 0x0F, 0x7F, 0x32, + 0x41, 0x75, 0xD5, 0x45, 0xCB, 0x0F, 0xA7, 0x8B, 0x5E, 0x0B, 0x83, 0xE0, 0xB5, 0x93, 0xCE, 0xEF, + 0x93, 0x36, 0x94, 0x93, 0xE6, 0xE0, 0x0E, 0x73, 0x22, 0x6D, 0x29, 0x3F, 0x99, 0xC6, 0x7D, 0xB3, + 0x0A, 0x8B, 0x51, 0x70, 0x5F, 0xD9, 0xB4, 0xA6, 0x1B, 0x24, 0x76, 0xF0, 0xFF, 0x3F, 0x62, 0x98, + 0xDF, 0x05, 0x90, 0x04, 0x2A, 0x1E, 0xD6, 0xAC, 0x1C, 0x85, 0x33, 0x06, 0xF0, 0x02, 0x1F, 0x88, + 0x1D, 0xC2, 0xF2, 0xAD, 0xD2, 0x76, 0xD0, 0x97, 0x57, 0xBC, 0xB8, 0xAB, 0x06, 0xD7, 0x7A, 0x90, + 0x5F, 0xD6, 0x57, 0xD3, 0x92, 0x00, 0x99, 0x99, 0xAC, 0x50, 0x91, 0x2A, 0x96, 0x2E, 0x07, 0x89, + 0xD1, 0xEF, 0x3E, 0x79, 0x2E, 0x20, 0xE7, 0x93, 0x48, 0x4A, 0x88, 0x1A, 0xAB, 0x17, 0xAB, 0xC4, + 0x3A, 0xCB, 0xAD, 0xF6, 0xC7, 0xE8, 0x3F, 0xB9, 0x0A, 0xB7, 0x08, 0x09, 0xA7, 0xC6, 0x61, 0x11, + 0xB8, 0x8A, 0x89, 0x8C, 0x02, 0xCE, 0x7B, 0xB6, 0xDA, 0x77, 0x07, 0x71, 0xFF, 0xA5, 0xA8, 0xEA, + 0x96, 0x47, 0xBC, 0xF8, 0x9A, 0xCE, 0xD6, 0x73, 0x79, 0xC0, 0x3B, 0x6E, 0xEE, 0x83, 0xF8, 0xC3, + 0x26, 0x3D, 0xB6, 0xA1, 0x59, 0xF7, 0x32, 0x59, 0x64, 0x0F, 0x29, 0xA1, 0x20, 0x82, 0xB8, 0x51, + 0xBD, 0xAC, 0x64, 0x7F, 0x62, 0x87, 0x0B, 0x81, 0xE2, 0x00, 0xD5, 0x9D, 0xA6, 0x5A, 0x8A, 0xDC, + 0x92, 0x42, 0x02, 0xFB, 0x38, 0x74, 0x02, 0x02, 0xCF, 0xDC, 0x1B, 0xCE, 0x53, 0xEA, 0x5B, 0xD9, + 0xE6, 0x99, 0x14, 0x24, 0xD8, 0xC3, 0xE1, 0xE6, 0x20, 0xEE, 0x1A, 0x96, 0x51, 0x5B, 0x99, 0xFB, + 0x05, 0x87, 0x57, 0x93, 0x2C, 0x61, 0xBF, 0x06, 0xD7, 0xCA, 0xB2, 0x51, 0x7A, 0xE8, 0xEA, 0x81, + 0x97, 0xBB, 0x9E, 0x70, 0x1A, 0xDA, 0xE4, 0x72, 0x5E, 0x75, 0xEA, 0x99, 0xFF, 0x26, 0x20, 0xD8, + 0x03, 0xE3, 0xD3, 0xD6, 0x2E, 0x01, 0x44, 0xFF, 0x4F, 0x7A, 0x59, 0x4A, 0x10, 0xC2, 0xF2, 0x08, + 0xE7, 0x21, 0x77, 0x68, 0x16, 0x9B, 0x65, 0xF7, 0xEC, 0x6F, 0x99, 0xAE, 0xE8, 0x0C, 0xD4, 0xA5, + 0xC4, 0x29, 0xFC, 0xC1, 0xEA, 0x0F, 0xEC, 0x9A, 0x49, 0x74, 0xCC, 0x6F, 0x28, 0xE0, 0x49, 0x6C, + 0xCC, 0x31, 0x81, 0x82, 0x71, 0xF3, 0x1E, 0x72, 0x89, 0x35, 0x94, 0x52, 0x60, 0x3A, 0xA6, 0xE0, + 0xC1, 0x01, 0x9D, 0xC3, 0xF9, 0x35, 0xA0, 0x56, 0xC8, 0x13, 0x5D, 0x24, 0x76, 0x2F, 0xE5, 0x65, + 0xFF, 0x95, 0xC4, 0xDB, 0x92, 0x94, 0x57, 0x04, 0xB9, 0x97, 0xAF, 0x97, 0x2A, 0x25, 0xFA, 0xDD, + 0xFE, 0x0E, 0x4F, 0xA3, 0xD3, 0x2B, 0x33, 0xF2, 0x26, 0x74, 0x80, 0x17, 0xE1, 0x7A, 0x20, 0x57, + 0x38, 0xEF, 0xAF, 0xC9, 0x45, 0xAD, 0x35, 0xDB, 0x35, 0x03, 0xF4, 0xEB, 0x0A, 0x93, 0x03, 0x4D, + 0xF2, 0xDA, 0x10, 0xDA, 0xA1, 0xCA, 0x2A, 0x59, 0xAC, 0x0A, 0x9F, 0x76, 0x99, 0x3A, 0x1C, 0x6C, + 0x1C, 0xFB, 0x17, 0x41, 0x0A, 0x89, 0xB7, 0xD7, 0xF7, 0x27, 0x2F, 0xE2, 0x67, 0x8E, 0xF5, 0x49, + 0x27, 0xB7, 0xEF, 0x1C, 0xE7, 0xF9, 0x77, 0xD4, 0x31, 0x4B, 0xC2, 0xED, 0x7D, 0x93, 0x61, 0xB0, + 0xF9, 0x92, 0x6B, 0x0D, 0x97, 0x51, 0xA0, 0x34, 0xBA, 0x17, 0x31, 0x0C, 0xEE, 0xE3, 0xE2, 0xAB, + 0x38, 0xD0, 0x88, 0x57, 0x44, 0xCD, 0x51, 0xE7, 0x13, 0x28, 0xED, 0x17, 0x85, 0xD5, 0x47, 0xE3, + 0x96, 0xF5, 0x63, 0x91, 0xE6, 0x03, 0xCD, 0x38, 0x81, 0x6B, 0xCB, 0x2C, 0x81, 0xA4, 0x98, 0x41, + 0xDE, 0x2A, 0xCA, 0x1D, 0x93, 0x7D, 0xF1, 0xC5, 0x72, 0x02, 0x2A, 0x20, 0x58, 0x8E, 0x01, 0x4D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]) % 17; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 71213. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_71213.cs +// + +namespace KeyCMF_071213 +{ + static const BYTE Keytable[] = + { + 0xDC, 0x16, 0xEC, 0x6D, 0x4C, 0xFC, 0x14, 0xDC, 0x6E, 0xB8, 0x10, 0x25, 0x0A, 0xDB, 0x3D, 0x1B, + 0xB0, 0xED, 0x18, 0xB4, 0xF5, 0x57, 0xDC, 0x91, 0x53, 0xF6, 0x22, 0x60, 0xFE, 0x2B, 0xB9, 0x62, + 0x3D, 0x84, 0x7B, 0x1F, 0x83, 0x9E, 0x63, 0xDE, 0x88, 0xD5, 0x2C, 0x0C, 0xE2, 0x39, 0x2F, 0xE2, + 0xBC, 0x20, 0x71, 0xCE, 0x8D, 0x13, 0x7B, 0xE2, 0x06, 0x49, 0x5F, 0xCF, 0x78, 0x72, 0x9E, 0x7E, + 0x64, 0x6E, 0x04, 0x02, 0xC6, 0x23, 0x37, 0x90, 0xB9, 0xBE, 0x14, 0xEC, 0x3E, 0x8E, 0x94, 0x5F, + 0x6A, 0x9A, 0x17, 0xCA, 0xDC, 0x57, 0x0E, 0x75, 0xE8, 0xF3, 0xC0, 0x60, 0xE5, 0xB6, 0xD1, 0x5D, + 0xCF, 0x81, 0xAD, 0x18, 0x47, 0xAD, 0x36, 0x39, 0xCB, 0xBD, 0x5E, 0x96, 0x07, 0xC0, 0x0D, 0xBB, + 0x54, 0x81, 0xA8, 0x00, 0xE2, 0x32, 0x2E, 0x19, 0x4A, 0x4F, 0x51, 0xD1, 0x46, 0x3B, 0x5B, 0x8E, + 0x21, 0x28, 0xDD, 0x8E, 0xA3, 0x8E, 0x55, 0xAC, 0x88, 0x45, 0x16, 0x87, 0xF4, 0xF3, 0x9E, 0x82, + 0xA0, 0x3D, 0x2C, 0x57, 0x8B, 0xD9, 0x94, 0xAE, 0xF7, 0x53, 0xE8, 0xD7, 0xF8, 0xB9, 0x55, 0xD8, + 0x7A, 0x0F, 0x98, 0xAF, 0x1C, 0x47, 0x52, 0x00, 0x9E, 0xC8, 0x64, 0xD1, 0xDE, 0xC8, 0x1A, 0x46, + 0x15, 0xF4, 0x12, 0xD1, 0x7E, 0x8E, 0xEB, 0x70, 0x35, 0x98, 0x21, 0xEF, 0xDA, 0x40, 0x8D, 0xDF, + 0x44, 0xD7, 0x25, 0x0B, 0x97, 0x71, 0x6A, 0xED, 0xBA, 0x14, 0x0C, 0xA1, 0x31, 0x7F, 0x73, 0x96, + 0xEF, 0x82, 0xD2, 0xBD, 0x27, 0x09, 0x29, 0x7E, 0x17, 0xB4, 0xB5, 0xCC, 0x62, 0x4E, 0x51, 0xC6, + 0x3A, 0xBC, 0x0B, 0x00, 0x9F, 0x75, 0x75, 0x14, 0xB6, 0x13, 0x1E, 0xB2, 0x66, 0x46, 0x30, 0x94, + 0x34, 0x48, 0xCA, 0x69, 0x1E, 0xD3, 0x76, 0x95, 0x3F, 0x6F, 0x3C, 0x66, 0x8A, 0x87, 0xB9, 0x6D, + 0xB9, 0xEA, 0x46, 0x54, 0xD0, 0x7C, 0xCF, 0xBD, 0x6A, 0xAC, 0x5E, 0xD4, 0x72, 0xD5, 0x74, 0xE2, + 0xB4, 0xBC, 0xC7, 0xB8, 0x23, 0xE8, 0x68, 0xC7, 0x95, 0x87, 0xE8, 0xCB, 0xE2, 0xA8, 0x97, 0x89, + 0xE7, 0xFA, 0x9D, 0xD3, 0x53, 0x1D, 0xCB, 0x10, 0x5B, 0x3B, 0x05, 0x79, 0x3A, 0x09, 0x9C, 0xD2, + 0xBA, 0x64, 0xB7, 0xE3, 0x55, 0xD1, 0xB7, 0xF7, 0xAC, 0x8B, 0x5D, 0x05, 0xD6, 0xF8, 0x5C, 0x1E, + 0xB5, 0x9D, 0xAC, 0x48, 0x15, 0x16, 0x21, 0xA7, 0x6D, 0x89, 0x8C, 0x60, 0x35, 0x2E, 0x8A, 0x95, + 0x6B, 0xB1, 0x98, 0x91, 0x61, 0x88, 0x74, 0x2C, 0x13, 0xDB, 0x9C, 0x0A, 0xE1, 0x98, 0xEC, 0xF5, + 0xAB, 0xBA, 0x9E, 0x76, 0x78, 0xF3, 0x60, 0x4C, 0xFD, 0x43, 0x37, 0x36, 0x6C, 0x1D, 0xFC, 0xC8, + 0x17, 0xF1, 0x66, 0x18, 0x1A, 0xD0, 0x09, 0x1F, 0xFA, 0x60, 0xB9, 0xC5, 0xFC, 0x63, 0x45, 0x6C, + 0x83, 0xA7, 0x2B, 0x2A, 0xE2, 0xE1, 0x18, 0x4A, 0xA4, 0x6F, 0xA1, 0xA9, 0xD2, 0xDC, 0x26, 0xC7, + 0xD6, 0xD7, 0x71, 0xBD, 0xF6, 0xAA, 0x8F, 0x7A, 0x89, 0x28, 0x69, 0xEB, 0x41, 0x45, 0xAE, 0x9F, + 0x8E, 0x75, 0xDD, 0xCE, 0x10, 0xC4, 0x91, 0x2D, 0x0E, 0x4D, 0x6D, 0x45, 0x56, 0xF5, 0xAB, 0xA1, + 0xBF, 0x6D, 0x7D, 0xE0, 0x37, 0xB4, 0xBA, 0x55, 0x4F, 0xB9, 0x12, 0x67, 0xAB, 0x18, 0xCA, 0xA3, + 0xB2, 0xDE, 0xEE, 0x3B, 0x19, 0x42, 0xCF, 0x0F, 0x91, 0x92, 0xFE, 0x24, 0x81, 0x77, 0xC1, 0xE6, + 0xC7, 0xA3, 0x07, 0xC1, 0xF2, 0x43, 0x28, 0x34, 0x61, 0x9B, 0x70, 0x5F, 0x64, 0x29, 0xF3, 0x93, + 0x20, 0x29, 0x06, 0x24, 0x9D, 0x99, 0x4D, 0xED, 0xAF, 0x39, 0x04, 0x0D, 0x09, 0x09, 0x0F, 0xB4, + 0x62, 0x04, 0xD4, 0x6E, 0x60, 0x28, 0x23, 0xB2, 0x77, 0xFE, 0x64, 0xAA, 0x65, 0x8E, 0xB9, 0xFE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) length * header.m_buildVersion; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 71620. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_71620.cs +// + +namespace KeyCMF_071620 +{ + static const BYTE Keytable[] = + { + 0xDD, 0x5E, 0xA7, 0x40, 0x5F, 0x7F, 0x6E, 0x78, 0xAF, 0x1E, 0x39, 0x74, 0xF9, 0x09, 0x18, 0xDB, + 0x62, 0x20, 0x8F, 0xCE, 0x55, 0x58, 0xEC, 0x41, 0x8B, 0x09, 0x4A, 0xEE, 0x6A, 0xEA, 0x94, 0xFF, + 0xAA, 0x72, 0x9F, 0x94, 0x6F, 0x7B, 0x01, 0xC7, 0x8B, 0x9E, 0xC8, 0x53, 0xDA, 0xB4, 0x06, 0xAF, + 0x69, 0x9C, 0x69, 0xB4, 0xBF, 0x0E, 0x29, 0x52, 0x70, 0x4D, 0xCE, 0x3B, 0xCD, 0xC9, 0x8C, 0x6C, + 0xEC, 0x07, 0x65, 0xE0, 0xD6, 0xE3, 0xD7, 0x36, 0xD4, 0x6E, 0x8E, 0xFB, 0x4F, 0x1B, 0xDF, 0xF1, + 0x08, 0xA8, 0x52, 0x09, 0x5C, 0x46, 0xCE, 0x87, 0x52, 0xC9, 0x59, 0x12, 0xF3, 0x2C, 0x3B, 0x6D, + 0x8C, 0xEB, 0x2A, 0x3B, 0x91, 0xA1, 0x64, 0x49, 0x70, 0x85, 0x59, 0x9A, 0x0D, 0xE6, 0x51, 0xEC, + 0x84, 0x09, 0xFA, 0x79, 0x6B, 0xB1, 0x76, 0x29, 0xCC, 0xFB, 0x78, 0x00, 0xAA, 0xD1, 0xF0, 0x7E, + 0x9E, 0x65, 0x34, 0xBA, 0x50, 0x5D, 0xA1, 0xB3, 0x3F, 0x2A, 0xC6, 0xAF, 0x4C, 0x4F, 0x2D, 0xD6, + 0xAB, 0xBE, 0xEF, 0xFF, 0x8B, 0x8B, 0xAB, 0xE6, 0xE0, 0xAA, 0xBE, 0x83, 0xB7, 0x12, 0x88, 0x65, + 0xFA, 0x2E, 0xF2, 0x73, 0x0E, 0x9E, 0x16, 0x6E, 0x5F, 0x71, 0x2F, 0x02, 0xDA, 0x0D, 0xC8, 0x59, + 0x34, 0x9B, 0x3F, 0x2A, 0x55, 0x14, 0xC9, 0x73, 0x60, 0x24, 0xD1, 0x52, 0xBD, 0xCC, 0x54, 0x1B, + 0xFF, 0xA4, 0x4D, 0x60, 0x70, 0x5F, 0xD9, 0xBF, 0x7C, 0x52, 0xBA, 0x00, 0xA9, 0x1C, 0xEB, 0xCD, + 0x11, 0x48, 0xEA, 0x30, 0x58, 0x01, 0xFB, 0x60, 0xD7, 0x32, 0x7D, 0x95, 0xAD, 0x54, 0xD6, 0xCD, + 0xF6, 0x3A, 0x13, 0x85, 0x2C, 0x51, 0x8D, 0x7A, 0x92, 0x4B, 0x8E, 0xE8, 0x03, 0x4D, 0xE9, 0x54, + 0xC8, 0x41, 0x94, 0xB8, 0x15, 0x0D, 0xD5, 0x84, 0xAA, 0x9A, 0x24, 0x7C, 0xBF, 0xC1, 0x19, 0x49, + 0x80, 0x96, 0x26, 0xD2, 0xF8, 0x04, 0x55, 0x76, 0x06, 0x90, 0xE4, 0x3C, 0x5F, 0x7B, 0x65, 0x4E, + 0x61, 0xED, 0x28, 0x7A, 0xC8, 0xF8, 0xFC, 0x0D, 0xAD, 0x91, 0x1E, 0x3A, 0xF2, 0xBB, 0x1B, 0xFC, + 0xB3, 0xDF, 0xA1, 0x23, 0x54, 0xA6, 0xF4, 0x44, 0x7C, 0xF0, 0xE1, 0xC1, 0xBD, 0xB8, 0x13, 0x3F, + 0x21, 0x8B, 0x3B, 0xBE, 0xA2, 0x5E, 0xE7, 0x3D, 0xF9, 0x32, 0x2E, 0x4D, 0x33, 0x60, 0xA6, 0x30, + 0xAA, 0x27, 0x8D, 0x22, 0x9A, 0xCF, 0xEA, 0x11, 0x06, 0x07, 0xC7, 0x09, 0x3E, 0x8F, 0x1C, 0x33, + 0x19, 0xBF, 0xB1, 0xE0, 0x60, 0x69, 0x74, 0x3E, 0x69, 0xE7, 0x2C, 0x16, 0x0D, 0xDC, 0xE7, 0xA7, + 0x58, 0x18, 0x72, 0x87, 0x29, 0x3A, 0x1D, 0x10, 0x1D, 0xF0, 0x34, 0x4B, 0x19, 0x79, 0xDA, 0xFD, + 0x21, 0x16, 0x95, 0x8A, 0x0C, 0x78, 0xA3, 0xAC, 0xE8, 0x19, 0xEA, 0x39, 0xFC, 0xB3, 0x2F, 0xAA, + 0xC7, 0x5D, 0x79, 0x94, 0xBA, 0x8A, 0xCC, 0xA1, 0x7F, 0xA1, 0x1A, 0xBB, 0x81, 0xAA, 0xF0, 0x64, + 0x27, 0xA0, 0x95, 0x77, 0xE4, 0x03, 0x02, 0x4E, 0xB1, 0x5C, 0x2E, 0xFE, 0x07, 0x94, 0xC4, 0x73, + 0x8C, 0xA2, 0x60, 0xB5, 0x93, 0x70, 0xE3, 0xA8, 0x4B, 0xAC, 0xA5, 0x16, 0xB5, 0x62, 0xD4, 0x33, + 0xA1, 0x8D, 0xE3, 0xE6, 0x95, 0x07, 0x33, 0x4D, 0x8C, 0x9D, 0x14, 0x50, 0x80, 0x9A, 0xFD, 0xBE, + 0xCC, 0x6C, 0x33, 0x7E, 0xAB, 0xA5, 0x80, 0x73, 0x1D, 0xE4, 0xF5, 0x1A, 0x62, 0x8B, 0xE2, 0x1C, + 0x63, 0xD5, 0x32, 0x36, 0x65, 0x3A, 0xC9, 0x54, 0xBE, 0x4F, 0x4B, 0xEA, 0xEF, 0x46, 0xEA, 0xD0, + 0x08, 0x41, 0x28, 0x9C, 0x0E, 0xEC, 0x7A, 0x3A, 0x00, 0x18, 0x8A, 0x69, 0xDC, 0x04, 0x28, 0xCF, + 0x9D, 0x9E, 0x31, 0x0B, 0x62, 0x2D, 0x5D, 0xEE, 0x1A, 0x33, 0x24, 0xD5, 0xB6, 0x01, 0xA3, 0xC7 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 72127. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_72127.cs +// + +namespace KeyCMF_072127 +{ + static const BYTE Keytable[] = + { + 0x68, 0xA5, 0x46, 0x8A, 0x28, 0x2A, 0xDF, 0x3B, 0x92, 0xF6, 0xB9, 0xA8, 0xF1, 0x37, 0x79, 0xE8, + 0x56, 0x92, 0xD3, 0x81, 0x08, 0xB1, 0x01, 0x72, 0xA7, 0xF7, 0xC5, 0x1B, 0x70, 0x06, 0x40, 0x95, + 0xD1, 0xE7, 0x1D, 0x31, 0x7D, 0xEC, 0x30, 0x01, 0x0C, 0x96, 0xCC, 0xF0, 0x2A, 0x41, 0x4D, 0xD8, + 0xF4, 0x6A, 0x7A, 0x01, 0x4D, 0x2F, 0x62, 0x83, 0x6A, 0x7C, 0x91, 0xE2, 0x71, 0xD5, 0xBE, 0x96, + 0xB8, 0x7F, 0xED, 0x15, 0x42, 0xEA, 0xE9, 0x04, 0xFC, 0x40, 0xAB, 0xFA, 0xCD, 0xB4, 0xF2, 0x95, + 0x84, 0x44, 0xB7, 0x4B, 0x1F, 0xC1, 0xE2, 0x8D, 0x58, 0xAC, 0xE1, 0x24, 0x2C, 0xFB, 0xAC, 0x5F, + 0x57, 0x45, 0xA8, 0x93, 0xF7, 0x2F, 0x20, 0xB3, 0xAB, 0x92, 0xFE, 0x53, 0xB5, 0x1A, 0xC4, 0xEE, + 0xC7, 0xBA, 0x21, 0x6F, 0x66, 0x17, 0xDF, 0x8E, 0xC1, 0xBE, 0x8D, 0xA5, 0x9A, 0x14, 0x9D, 0xAC, + 0x0A, 0xFA, 0xF8, 0xE4, 0xDB, 0x02, 0xA5, 0xD4, 0x85, 0x9E, 0x03, 0x42, 0xC0, 0xB2, 0x12, 0x77, + 0x22, 0x64, 0x20, 0x4B, 0x3A, 0x64, 0xA9, 0x6A, 0x15, 0x02, 0x72, 0x5D, 0x8F, 0xA8, 0xDE, 0x5A, + 0xA2, 0x72, 0x98, 0x47, 0x94, 0xE6, 0x97, 0x39, 0xC4, 0x0C, 0x4C, 0xC0, 0x97, 0x45, 0x96, 0xD9, + 0xC0, 0x5F, 0x87, 0x6E, 0x77, 0xC5, 0x71, 0x16, 0xE1, 0xDD, 0x77, 0x1F, 0x79, 0x4A, 0x86, 0xA9, + 0xD8, 0x08, 0xCF, 0x54, 0x83, 0xF6, 0xD3, 0x16, 0xF8, 0xA8, 0xA1, 0xE6, 0x23, 0xB3, 0xA8, 0x22, + 0x36, 0x5A, 0xFA, 0xC4, 0xEE, 0x89, 0xA0, 0x3D, 0x42, 0xC7, 0xB8, 0x2F, 0x7E, 0xDF, 0x31, 0x2D, + 0xDA, 0x3B, 0xFF, 0x5D, 0xB8, 0xD1, 0x97, 0x0B, 0x96, 0x71, 0x45, 0xE0, 0x66, 0x21, 0xB4, 0x43, + 0x21, 0xCB, 0x43, 0xF6, 0xFB, 0x7B, 0x73, 0xC8, 0x65, 0xD2, 0x62, 0xEA, 0xE0, 0xFC, 0xEF, 0x85, + 0xB6, 0xD2, 0x2D, 0x95, 0xA8, 0x6B, 0xD4, 0x01, 0x7D, 0x36, 0x76, 0x85, 0x33, 0x35, 0x60, 0x96, + 0x79, 0x7C, 0xCF, 0xF4, 0xE4, 0x91, 0x91, 0xC8, 0x0E, 0x32, 0x4B, 0x94, 0xF0, 0x77, 0x67, 0x36, + 0x40, 0x71, 0xA9, 0x38, 0x83, 0x5F, 0xC5, 0x33, 0xFF, 0x63, 0x2B, 0x2D, 0x6F, 0x79, 0x35, 0xC5, + 0x0B, 0x33, 0x00, 0xA1, 0x94, 0x14, 0xFD, 0xB9, 0xD3, 0x4A, 0x02, 0x2B, 0xB6, 0x7E, 0xBF, 0x35, + 0x76, 0x54, 0x99, 0x8A, 0x74, 0x3E, 0xE5, 0xA9, 0x6F, 0x12, 0x7C, 0x5D, 0xCC, 0xD9, 0x3F, 0x53, + 0x8D, 0x5E, 0xC6, 0xEA, 0x49, 0x1C, 0x1C, 0x44, 0x12, 0x10, 0x2D, 0x42, 0x99, 0x2A, 0x98, 0x64, + 0x57, 0xC7, 0x1F, 0x64, 0x22, 0x97, 0x88, 0xD4, 0xF3, 0x53, 0x5C, 0x83, 0x8A, 0x2F, 0x3C, 0x52, + 0xE5, 0xF9, 0xC7, 0x51, 0x2E, 0xB4, 0xE2, 0x3C, 0x8E, 0xA1, 0xDA, 0x33, 0xE4, 0x3F, 0xDE, 0x4C, + 0xA7, 0xA1, 0x11, 0x34, 0xC4, 0x0F, 0xC7, 0xB8, 0x68, 0xC7, 0x33, 0x9A, 0x5D, 0xFD, 0x06, 0x9F, + 0xB4, 0x84, 0xFA, 0xE8, 0x23, 0xA9, 0xF5, 0x24, 0xD4, 0xBD, 0xA6, 0x74, 0xAC, 0x63, 0x37, 0x84, + 0x68, 0xCD, 0xCF, 0x44, 0xB1, 0x24, 0x94, 0x27, 0x48, 0xEF, 0x09, 0x6A, 0x6A, 0x3A, 0x5A, 0xD8, + 0x01, 0x67, 0xE0, 0x69, 0x82, 0x50, 0x94, 0x60, 0xB7, 0x64, 0x8E, 0x47, 0x81, 0x72, 0x30, 0x16, + 0xCE, 0x1D, 0x8E, 0xB7, 0x61, 0x4F, 0x28, 0x4C, 0x1D, 0xDD, 0x0F, 0xBC, 0x9B, 0x8B, 0x66, 0x3B, + 0xBC, 0xFF, 0xBD, 0xD7, 0x37, 0x7D, 0xA5, 0xEA, 0x33, 0x3C, 0xEB, 0xD5, 0x17, 0xA2, 0xE4, 0x5F, + 0xB8, 0xB2, 0x23, 0x4C, 0xA5, 0x88, 0xFC, 0x27, 0x1A, 0x78, 0xA2, 0xBC, 0xBC, 0xAC, 0x0A, 0xBD, + 0x8B, 0xBF, 0xC6, 0x13, 0xFD, 0x16, 0x6E, 0xEE, 0x1B, 0x3A, 0x43, 0x2A, 0x5B, 0x6A, 0x59, 0xAF + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint) (digest[SignedMod(7 + header.m_dataCount, SHA1_DIGESTSIZE)] & 511); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 73258. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_73258.cs +// + +namespace KeyCMF_073258 +{ + static const BYTE Keytable[] = + { + 0x29, 0xA8, 0x91, 0xA0, 0xDF, 0x85, 0x03, 0x56, 0x21, 0xDC, 0x3F, 0x78, 0x7C, 0xB3, 0xF0, 0x1B, + 0x50, 0x47, 0x18, 0x52, 0xE4, 0x7D, 0xB8, 0x1C, 0xAF, 0x74, 0x17, 0x6D, 0x5F, 0xD0, 0xB5, 0x0E, + 0xDC, 0x55, 0x4A, 0x10, 0x5E, 0xCB, 0x93, 0x04, 0xB0, 0x68, 0x9F, 0x33, 0x5C, 0x1D, 0x27, 0xED, + 0xE7, 0x67, 0x03, 0x6D, 0xE6, 0xCE, 0xE8, 0xE1, 0x8D, 0xAC, 0x07, 0xA7, 0x89, 0xBF, 0xD7, 0x44, + 0x0F, 0x51, 0xFE, 0x56, 0x7E, 0x2A, 0x7A, 0x6C, 0xB9, 0x75, 0xFF, 0xDC, 0xC3, 0x82, 0xFF, 0x68, + 0x51, 0x20, 0x65, 0x64, 0x4B, 0xA4, 0x7E, 0xA5, 0xE6, 0x2A, 0x29, 0xC1, 0xBE, 0xD8, 0xB5, 0x0C, + 0x5C, 0x14, 0x7C, 0xD0, 0xA0, 0xC2, 0xBB, 0x6F, 0x54, 0xF2, 0x2B, 0x35, 0x7E, 0xCE, 0xBE, 0x45, + 0x74, 0x77, 0x61, 0x3F, 0x12, 0x70, 0xEE, 0xAB, 0x2C, 0x44, 0x8D, 0x46, 0x42, 0xF5, 0x47, 0x56, + 0xF3, 0x8E, 0x38, 0x30, 0x12, 0xB6, 0x69, 0xC7, 0x2E, 0x7A, 0x84, 0xF3, 0x8F, 0x71, 0x5B, 0x4F, + 0x45, 0x7C, 0x99, 0x6D, 0x22, 0x8B, 0x5B, 0xEE, 0xF6, 0xB5, 0x12, 0x89, 0x25, 0xA7, 0x3C, 0x7D, + 0x0E, 0xC0, 0xC1, 0x70, 0xD3, 0x92, 0xE3, 0x6F, 0x34, 0x04, 0xEC, 0x1F, 0x04, 0x04, 0xBB, 0xE6, + 0xDC, 0x5C, 0xF1, 0xE1, 0x9E, 0xD7, 0x1A, 0x8D, 0x54, 0xD6, 0x43, 0x5C, 0x7D, 0xDE, 0xF5, 0xD1, + 0xD7, 0x26, 0x7E, 0x72, 0x56, 0xBD, 0x38, 0x28, 0xDC, 0xD8, 0x0F, 0x31, 0x57, 0x1E, 0xA4, 0x26, + 0xB0, 0xA8, 0xB4, 0x42, 0x17, 0x60, 0x2C, 0xD5, 0x3B, 0x59, 0x02, 0x0F, 0x5F, 0x2B, 0xC9, 0xE7, + 0x2F, 0x3C, 0x39, 0x6E, 0x19, 0xE3, 0x5E, 0x09, 0x30, 0xEB, 0x47, 0x5B, 0xFD, 0x24, 0xCA, 0x14, + 0x1C, 0x2A, 0x6F, 0xA1, 0xFC, 0x06, 0x24, 0x14, 0xC2, 0x70, 0xA4, 0x86, 0xDE, 0x46, 0xA8, 0x4A, + 0x1E, 0x34, 0xB5, 0x40, 0x50, 0x70, 0xE2, 0xCA, 0x87, 0x0F, 0xDB, 0x23, 0xF7, 0x4A, 0x0E, 0x67, + 0xC3, 0xB9, 0xE4, 0xA6, 0x08, 0x6B, 0x14, 0x6B, 0xB3, 0x94, 0x60, 0x31, 0xFC, 0x00, 0x3F, 0x37, + 0x91, 0x69, 0x61, 0x49, 0xBE, 0x31, 0xF9, 0x8C, 0xDD, 0xF4, 0xF9, 0x86, 0x52, 0xAA, 0x1E, 0x56, + 0x25, 0x0B, 0x50, 0x3B, 0xD8, 0x63, 0x4C, 0x66, 0xBE, 0x42, 0xFC, 0x23, 0x24, 0x26, 0xCE, 0xF7, + 0x57, 0x70, 0x7D, 0x03, 0x10, 0x48, 0x1B, 0x73, 0x40, 0xD5, 0xE3, 0x58, 0x18, 0x45, 0x19, 0x61, + 0x7E, 0x7F, 0x59, 0xF3, 0x0E, 0xF6, 0xA0, 0x94, 0x35, 0xF0, 0x7C, 0x31, 0x0B, 0x42, 0x39, 0xC8, + 0x2E, 0xD0, 0x88, 0x2C, 0xB1, 0x01, 0x47, 0xC6, 0x8B, 0xC6, 0x72, 0x25, 0xC7, 0x37, 0x3B, 0x2A, + 0x3C, 0xF2, 0x1D, 0xD5, 0x14, 0x7E, 0xC6, 0xE8, 0xC5, 0x56, 0x84, 0xD6, 0x18, 0x9D, 0xBF, 0xC4, + 0x21, 0xDF, 0xB6, 0xE5, 0x1B, 0x1D, 0x05, 0xAF, 0xA9, 0xD3, 0x09, 0xD3, 0xE0, 0x7B, 0x5D, 0xFE, + 0x25, 0xB9, 0x3F, 0x28, 0x3A, 0x03, 0x9B, 0x3A, 0x3A, 0x04, 0x1C, 0xE8, 0xBC, 0x64, 0x53, 0x79, + 0xA2, 0x94, 0x4C, 0x79, 0x77, 0x02, 0x86, 0x43, 0x63, 0x3A, 0x44, 0xFB, 0x2E, 0x0F, 0x35, 0x4A, + 0x06, 0xA6, 0x1D, 0x5A, 0x47, 0xB5, 0x55, 0x14, 0x7D, 0x34, 0x28, 0x2B, 0x1E, 0x6A, 0x31, 0x19, + 0x6D, 0x4D, 0x71, 0xC8, 0xFC, 0x57, 0x59, 0xA8, 0x37, 0xC3, 0x52, 0x91, 0x83, 0x6A, 0x4B, 0x09, + 0x10, 0xA6, 0x49, 0xF4, 0xA3, 0x57, 0x5E, 0x20, 0x9D, 0x92, 0xBA, 0x09, 0xF9, 0x4D, 0x83, 0xDB, + 0x49, 0x52, 0xD0, 0xAF, 0x76, 0xB3, 0x7D, 0xAD, 0xF8, 0xCF, 0x0A, 0x6D, 0x91, 0x7A, 0x74, 0x47, + 0xC5, 0x44, 0xA8, 0xFF, 0xE3, 0xAB, 0x2E, 0xCC, 0x1D, 0xF2, 0x22, 0x4C, 0xCB, 0x5E, 0xEC, 0x42 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)length * header.m_buildVersion; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 73677. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_73677.cs +// + +namespace KeyCMF_073677 +{ + static const BYTE Keytable[] = + { + 0x9B, 0xEF, 0xFE, 0xFB, 0xB5, 0x0F, 0xAC, 0x43, 0x46, 0x6B, 0xC5, 0x0B, 0x19, 0xC9, 0xD0, 0xD1, + 0x96, 0x0A, 0x59, 0xBA, 0x4B, 0xD5, 0x35, 0x3C, 0x8E, 0x56, 0x52, 0xF5, 0xC7, 0x51, 0xCB, 0xF5, + 0xF5, 0x45, 0x81, 0x33, 0x21, 0x4A, 0xD1, 0x6B, 0x77, 0x60, 0x7B, 0xBA, 0xFA, 0x3E, 0x55, 0xEF, + 0x64, 0x21, 0x26, 0x1E, 0x69, 0x7E, 0x06, 0xE0, 0x09, 0x0F, 0x3E, 0x36, 0x83, 0x2A, 0x65, 0xEF, + 0x61, 0x7C, 0xB6, 0xCC, 0x50, 0x0A, 0xE9, 0xF4, 0x42, 0x17, 0xBC, 0xA8, 0x68, 0x7C, 0xDF, 0x7C, + 0x4C, 0xF5, 0xF6, 0x20, 0xC4, 0x73, 0xE0, 0xD9, 0x5A, 0xCB, 0x49, 0xB1, 0x98, 0xB8, 0x9F, 0x14, + 0xE7, 0xFF, 0xD7, 0xD2, 0x54, 0xD4, 0x54, 0x4F, 0x4E, 0xA2, 0xEA, 0xE7, 0x8D, 0x96, 0x02, 0x5E, + 0xAD, 0xFB, 0x48, 0xCC, 0xD3, 0xDA, 0x98, 0x82, 0x22, 0x8C, 0x9D, 0x09, 0x1B, 0xC5, 0x55, 0x56, + 0xBB, 0xCB, 0x06, 0xC9, 0xF8, 0xC3, 0x27, 0x29, 0x80, 0x86, 0xC1, 0x16, 0xF2, 0xD1, 0x96, 0xCE, + 0x0D, 0xC0, 0x48, 0x2A, 0xC0, 0xBA, 0x1E, 0x46, 0xEA, 0xC1, 0x87, 0x28, 0xEC, 0x3E, 0xF1, 0x09, + 0x33, 0xCF, 0x20, 0x74, 0x7B, 0xEC, 0x94, 0x5E, 0xF8, 0xB5, 0x4F, 0x8C, 0x46, 0xCA, 0x9C, 0x65, + 0x5D, 0xFB, 0x46, 0x7F, 0xB9, 0xB4, 0x2C, 0x2D, 0xC4, 0xED, 0xEA, 0x04, 0x49, 0x20, 0xCC, 0xB9, + 0x5D, 0x8E, 0x50, 0x09, 0xC7, 0xB8, 0xB7, 0x5C, 0x2C, 0x09, 0xEB, 0x74, 0x7F, 0x30, 0xEC, 0x6D, + 0x94, 0xE0, 0x3B, 0xE0, 0x65, 0x7A, 0x9A, 0x76, 0xFE, 0x45, 0x87, 0x08, 0xD3, 0xAB, 0x23, 0xD5, + 0xB5, 0x24, 0x4B, 0x91, 0xAB, 0xC9, 0x1E, 0x38, 0x19, 0x04, 0x5F, 0x32, 0x86, 0x61, 0x31, 0x4C, + 0xBD, 0xBE, 0x39, 0x7D, 0x1D, 0x7B, 0x72, 0xC3, 0x62, 0xA3, 0xBD, 0x33, 0xA2, 0x1B, 0x49, 0xE0, + 0xDE, 0x8F, 0x48, 0x8C, 0x39, 0xC2, 0x33, 0xEF, 0x10, 0xBF, 0x35, 0x62, 0xDE, 0xD8, 0x4A, 0x48, + 0xFD, 0x08, 0x13, 0xFE, 0xB2, 0x29, 0x83, 0x91, 0xB4, 0xA1, 0x10, 0x98, 0xB0, 0xC1, 0x45, 0xA6, + 0x02, 0x0C, 0x63, 0x9C, 0xB4, 0xB3, 0x2E, 0x31, 0x88, 0xD3, 0x35, 0xC3, 0x10, 0x1D, 0x90, 0xD0, + 0x59, 0x64, 0x40, 0xCE, 0x70, 0x00, 0xF0, 0xD7, 0x5C, 0x30, 0xD0, 0x6D, 0xB9, 0x37, 0x97, 0xA1, + 0xEC, 0xFE, 0xEB, 0xEF, 0xD1, 0x8F, 0xA7, 0x0A, 0x0E, 0xD5, 0x75, 0x6B, 0xE5, 0x32, 0xE3, 0xB7, + 0x74, 0xA2, 0x1C, 0x0C, 0xA1, 0x10, 0x62, 0x37, 0x07, 0xCA, 0xF8, 0xF5, 0x43, 0xA8, 0x57, 0x81, + 0x72, 0x43, 0xE4, 0x0A, 0x20, 0x7D, 0x4D, 0xEA, 0x8B, 0x5E, 0x16, 0x60, 0x2D, 0x42, 0xC7, 0x39, + 0x3F, 0x44, 0x4B, 0x81, 0xF9, 0x07, 0x5C, 0xBE, 0xB0, 0xDE, 0xE9, 0x5A, 0xEB, 0xD2, 0x64, 0x69, + 0xF3, 0x85, 0x9A, 0xA3, 0x39, 0xC2, 0x14, 0x82, 0x0C, 0x1F, 0xA2, 0xC3, 0x28, 0xF7, 0x60, 0x87, + 0x8C, 0x4B, 0x58, 0x92, 0xAF, 0x20, 0x4D, 0xB3, 0xB3, 0xC4, 0x93, 0x8E, 0x91, 0xCB, 0x9A, 0x8B, + 0x0E, 0x59, 0x7A, 0x6E, 0x9C, 0x54, 0x48, 0x45, 0xE2, 0x3A, 0x52, 0xF6, 0x12, 0x22, 0xE0, 0x76, + 0xBD, 0x7C, 0xF4, 0x01, 0x92, 0xC2, 0xFA, 0xF7, 0x46, 0x6B, 0x51, 0xF9, 0x59, 0xE4, 0x81, 0x3D, + 0xF1, 0xBF, 0x4D, 0x21, 0xE5, 0x10, 0xC3, 0xD3, 0x7A, 0xFB, 0x50, 0x94, 0xB2, 0x33, 0xD4, 0xE9, + 0xF4, 0x04, 0x0C, 0x5D, 0xE1, 0x25, 0xEC, 0xEB, 0x15, 0x1E, 0x24, 0x9F, 0x5D, 0x6E, 0xE0, 0x05, + 0x42, 0x04, 0x39, 0x44, 0x30, 0xA4, 0xDB, 0xE5, 0x5B, 0x2A, 0x90, 0xC5, 0x43, 0x9E, 0x9E, 0x87, + 0xE5, 0xB0, 0x8E, 0xFC, 0xB9, 0x7C, 0xDC, 0xEB, 0xF6, 0x25, 0x85, 0x1D, 0xA3, 0x45, 0xEE, 0xC0 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 74102. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_74102.cs +// + +namespace KeyCMF_074102 +{ + static const BYTE Keytable[] = + { + 0x7A, 0x6A, 0xE9, 0xCF, 0xC7, 0xCB, 0x7B, 0x5F, 0xB1, 0x2B, 0x10, 0xC0, 0x7B, 0x3E, 0x02, 0xF5, + 0xF7, 0xFD, 0xD3, 0x6B, 0x86, 0x1F, 0x98, 0xC7, 0xAC, 0x22, 0x0B, 0x50, 0xF8, 0x11, 0x75, 0x46, + 0x77, 0xC7, 0xF7, 0x89, 0x08, 0xC1, 0x71, 0x7E, 0x4E, 0x06, 0x3D, 0x78, 0x9D, 0x21, 0x6B, 0x22, + 0x20, 0x40, 0x1B, 0x76, 0x85, 0x3D, 0xD8, 0x3B, 0xC6, 0x7F, 0x42, 0xF7, 0xA5, 0xF6, 0x29, 0x12, + 0xEE, 0x25, 0x96, 0x25, 0x90, 0x2A, 0xC7, 0x1C, 0x0A, 0x4D, 0xB9, 0xB2, 0x17, 0xED, 0x69, 0xB1, + 0xE4, 0x35, 0x6E, 0x97, 0x49, 0x93, 0xF4, 0x0D, 0x01, 0x94, 0x75, 0x03, 0x57, 0xDC, 0x14, 0xE6, + 0xE6, 0xF2, 0x20, 0x4D, 0x90, 0x6D, 0x10, 0x06, 0x71, 0x2D, 0x67, 0xFE, 0x75, 0x00, 0xAF, 0xE6, + 0x31, 0xE0, 0x64, 0x31, 0xF8, 0x94, 0xA6, 0xC8, 0x34, 0x73, 0xB0, 0x61, 0x20, 0x28, 0x54, 0x8A, + 0x52, 0x3E, 0xF9, 0x63, 0x39, 0x6C, 0xD1, 0xA8, 0xCC, 0x84, 0xF4, 0xA0, 0xFF, 0xAD, 0xC9, 0xBF, + 0xEE, 0x36, 0x08, 0xBE, 0x7A, 0x62, 0xA0, 0x64, 0x35, 0x27, 0x71, 0xFF, 0x50, 0x8B, 0x3E, 0x31, + 0xCF, 0xF9, 0x7D, 0xA3, 0xA0, 0x21, 0xEF, 0x40, 0xAC, 0x81, 0x1A, 0x29, 0x8F, 0x03, 0x70, 0x35, + 0x3D, 0x95, 0xB3, 0xBA, 0x52, 0x49, 0x25, 0x70, 0xB7, 0xBF, 0xF9, 0x9E, 0xB8, 0x6A, 0xF3, 0xDB, + 0x55, 0x39, 0xA4, 0x15, 0x97, 0x80, 0x9A, 0xED, 0x3C, 0x9D, 0xB6, 0xAB, 0x85, 0xA7, 0x3A, 0x56, + 0x6F, 0x6B, 0x06, 0xF3, 0xCE, 0xFE, 0xBE, 0x24, 0x33, 0x33, 0x30, 0x0E, 0x72, 0xBD, 0x26, 0xCF, + 0xE8, 0x30, 0x99, 0x2F, 0xC1, 0xEB, 0x1E, 0x83, 0x00, 0x83, 0x5B, 0xEF, 0xD6, 0x8F, 0x1F, 0xBE, + 0x2B, 0x04, 0xE9, 0x6F, 0xB7, 0x90, 0xC9, 0x28, 0xB9, 0x2F, 0x10, 0x86, 0xA0, 0xF2, 0x65, 0x5F, + 0xD7, 0xA4, 0xF3, 0x6E, 0x2F, 0xBB, 0xA4, 0x7C, 0xF6, 0x56, 0x2D, 0x6F, 0x68, 0xB0, 0xE0, 0xFE, + 0xD9, 0x94, 0xA0, 0x49, 0x11, 0x01, 0x9B, 0x64, 0xD9, 0x5B, 0x4B, 0xDD, 0x55, 0x3E, 0xE5, 0x71, + 0x1F, 0x0F, 0x14, 0x7E, 0x89, 0x76, 0x8E, 0xEF, 0x1B, 0x7B, 0xA4, 0x1B, 0x83, 0xA6, 0xE0, 0xCE, + 0x02, 0x55, 0xCB, 0x40, 0xAB, 0xEA, 0x45, 0xE5, 0x12, 0x28, 0x89, 0xF7, 0x02, 0xA2, 0xCD, 0x74, + 0x27, 0x66, 0x76, 0x69, 0x84, 0x1B, 0x81, 0xB6, 0xCF, 0x41, 0x44, 0x52, 0xAA, 0xE2, 0x45, 0x1C, + 0x6C, 0x6F, 0x61, 0x45, 0xD9, 0x1F, 0x99, 0xE3, 0x35, 0x18, 0x8B, 0x92, 0xFF, 0xA0, 0xCC, 0x72, + 0x6D, 0x61, 0xC9, 0x70, 0xF0, 0xCF, 0xCB, 0xE1, 0xF4, 0xA1, 0xBD, 0x41, 0x96, 0x89, 0x8B, 0xA4, + 0x87, 0x15, 0xA5, 0xD4, 0xE4, 0x45, 0x6C, 0x51, 0xBF, 0xA2, 0xA8, 0x2F, 0xD5, 0x6E, 0xD4, 0x43, + 0x06, 0x0A, 0x6D, 0x9F, 0x76, 0x13, 0x49, 0x9F, 0x06, 0xA7, 0x57, 0x7F, 0xDD, 0xF8, 0x5B, 0x2B, + 0x42, 0xD0, 0xA0, 0x23, 0x45, 0x57, 0xAF, 0x74, 0x91, 0x69, 0x32, 0xF5, 0x44, 0xE2, 0x89, 0x15, + 0x88, 0xFB, 0x74, 0xC1, 0x7E, 0xB0, 0x92, 0xE8, 0xF0, 0xFB, 0x51, 0x6B, 0xD3, 0x00, 0xE2, 0xE3, + 0x0A, 0xD5, 0x01, 0x4D, 0xB9, 0xCF, 0x81, 0xF6, 0x14, 0x2A, 0xFE, 0xFB, 0x42, 0x88, 0x17, 0xA0, + 0x15, 0xBD, 0x54, 0x78, 0x28, 0x57, 0x41, 0xD3, 0x1C, 0x6F, 0x3C, 0xD3, 0xD3, 0x9B, 0x62, 0xA3, + 0x7B, 0x4E, 0x12, 0xE0, 0xED, 0x13, 0x57, 0x43, 0x14, 0xC9, 0xCA, 0x6D, 0x96, 0xFE, 0x30, 0x71, + 0x19, 0xAA, 0xB6, 0x18, 0xF5, 0x23, 0x6D, 0x8F, 0x89, 0x79, 0xE8, 0xAF, 0xB1, 0xA2, 0x33, 0x27, + 0x6D, 0x78, 0xA3, 0x70, 0x32, 0x02, 0x41, 0xCE, 0xEF, 0x79, 0xB3, 0xF1, 0x3F, 0x3A, 0x57, 0x91 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[6] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 75428. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_75428.cs +// + +namespace KeyCMF_075428 +{ + static const BYTE Keytable[] = + { + 0x76, 0x36, 0xA8, 0xF1, 0x9D, 0xC4, 0x6E, 0x29, 0x1A, 0x59, 0x2D, 0x97, 0x3A, 0x55, 0x4C, 0xE1, + 0x65, 0x45, 0x4D, 0x84, 0xC2, 0xC8, 0x12, 0xC7, 0x09, 0x09, 0x9D, 0x7B, 0x84, 0xD6, 0x94, 0xD0, + 0xAA, 0x11, 0xAF, 0x79, 0xCE, 0x7E, 0x7A, 0x6B, 0xA4, 0x70, 0x0A, 0x45, 0xCD, 0xEC, 0x98, 0x79, + 0x0C, 0x95, 0xEC, 0x2D, 0x5F, 0x76, 0xDA, 0x65, 0x50, 0x7E, 0x4F, 0x86, 0x2A, 0x29, 0xAF, 0xF4, + 0x78, 0xF5, 0xD2, 0x50, 0xCF, 0xF4, 0x7B, 0x66, 0x15, 0xD1, 0x45, 0x48, 0xB4, 0x39, 0x62, 0x7C, + 0x5E, 0xD6, 0x7C, 0x69, 0x1D, 0x41, 0x71, 0x46, 0x41, 0x4D, 0xC9, 0xE0, 0xAC, 0x99, 0xF7, 0xE9, + 0x1E, 0xB2, 0x66, 0xB7, 0x97, 0xC6, 0x7F, 0xCD, 0xBF, 0xAC, 0xA8, 0x76, 0xBB, 0xD9, 0x19, 0x8F, + 0xE3, 0x6F, 0x85, 0x4F, 0xB9, 0x0C, 0x43, 0x1B, 0x95, 0x71, 0x48, 0xAA, 0xBA, 0x8E, 0x7B, 0xF3, + 0xA0, 0xB3, 0x4D, 0x06, 0x1C, 0x64, 0x48, 0xDA, 0x91, 0xF3, 0x34, 0x94, 0x20, 0x61, 0xFC, 0x61, + 0x7A, 0x9B, 0xAE, 0x90, 0x64, 0xE6, 0x8B, 0x62, 0x39, 0xDE, 0x86, 0x08, 0x94, 0xE0, 0xAD, 0x40, + 0xFE, 0x8F, 0x4D, 0x49, 0xAE, 0xCF, 0xF8, 0xA2, 0xD2, 0x57, 0x14, 0xC0, 0xBD, 0x3A, 0x1A, 0xBD, + 0xAD, 0x41, 0x45, 0x08, 0xF4, 0xC8, 0x11, 0x0B, 0xD2, 0x06, 0x75, 0x9A, 0xC8, 0xD7, 0x0D, 0xBF, + 0x4A, 0x0D, 0x38, 0xE6, 0x0B, 0xBF, 0x49, 0xA0, 0x83, 0x4C, 0xB4, 0xAD, 0xAA, 0x02, 0x34, 0x2D, + 0x6A, 0x84, 0x0B, 0x13, 0x7C, 0xE2, 0x22, 0x0C, 0x77, 0x19, 0x02, 0x1A, 0x1E, 0x2E, 0x1B, 0x27, + 0x2D, 0x04, 0x38, 0xCE, 0x9E, 0xED, 0x5C, 0x58, 0xCB, 0x71, 0x3E, 0x24, 0x13, 0x64, 0x28, 0xEB, + 0x14, 0x68, 0x2E, 0x12, 0x64, 0x42, 0xE5, 0x74, 0xEF, 0xD2, 0x34, 0xE8, 0xF2, 0x12, 0x86, 0x2B, + 0x6B, 0xEC, 0xA1, 0x01, 0x8A, 0x7B, 0xA3, 0x8C, 0x4E, 0xAB, 0x1D, 0x7D, 0x51, 0x6B, 0x64, 0x80, + 0x1C, 0xCE, 0x08, 0x56, 0x41, 0xEB, 0x65, 0x86, 0x44, 0x42, 0x9B, 0x0A, 0x29, 0x0D, 0x78, 0x45, + 0x41, 0x66, 0xD4, 0x33, 0xCE, 0xFF, 0x03, 0xA3, 0xD5, 0x89, 0xBF, 0x2D, 0xC4, 0x44, 0x88, 0x96, + 0xC0, 0x43, 0x3E, 0xC5, 0x9F, 0x78, 0xBF, 0x16, 0x13, 0x1B, 0x1A, 0x5D, 0xC0, 0x83, 0x42, 0x99, + 0x33, 0x6D, 0x2C, 0xCC, 0x36, 0x50, 0x7A, 0x57, 0x51, 0xF5, 0xC1, 0x6D, 0xC9, 0xD5, 0x0C, 0x21, + 0x56, 0x1E, 0x91, 0xF6, 0x93, 0x1E, 0xFA, 0xD2, 0x3B, 0x9F, 0x9C, 0x23, 0x66, 0xB9, 0x7E, 0xF1, + 0x02, 0x31, 0x80, 0x8A, 0xB2, 0xD7, 0x93, 0xA0, 0xDB, 0xF4, 0xAA, 0x1E, 0xBE, 0x9A, 0x50, 0x4B, + 0xDD, 0x18, 0x9B, 0x8D, 0x37, 0x83, 0xBD, 0x80, 0x30, 0xDE, 0x84, 0x41, 0xCF, 0x2C, 0x96, 0x05, + 0x0E, 0xB5, 0x8E, 0x80, 0xC8, 0x42, 0xEA, 0x01, 0xB0, 0xBB, 0xC6, 0x04, 0xFB, 0x59, 0xC4, 0xD0, + 0xD9, 0xC6, 0x3F, 0x41, 0x45, 0xFB, 0x31, 0x00, 0x3B, 0x7A, 0x3A, 0xE1, 0xC8, 0x83, 0x01, 0xA3, + 0xAB, 0x35, 0xA4, 0x3C, 0x10, 0x35, 0xFF, 0x2E, 0xC1, 0x6F, 0xA4, 0xC8, 0x7B, 0xD6, 0xA7, 0xE0, + 0x22, 0xD2, 0x20, 0x78, 0xCC, 0x23, 0xF2, 0x23, 0x8C, 0x1E, 0x4B, 0x74, 0x45, 0xCE, 0x8A, 0x6A, + 0x4A, 0xF1, 0x5E, 0x84, 0xF2, 0x4C, 0xCF, 0x15, 0x67, 0x59, 0x9C, 0xBA, 0x2A, 0x8A, 0x90, 0x4E, + 0x2B, 0x22, 0xB3, 0x94, 0x95, 0xE9, 0x5E, 0xDA, 0xFB, 0xE4, 0xF9, 0x4A, 0xCD, 0x04, 0xFB, 0xB3, + 0x9A, 0x31, 0x28, 0x57, 0x42, 0xFB, 0xEE, 0x67, 0x55, 0xA7, 0xBB, 0x45, 0x6E, 0xF0, 0x79, 0x8B, + 0xE2, 0xDB, 0x9E, 0x28, 0xDB, 0x36, 0xB2, 0xD9, 0x99, 0x0E, 0xD9, 0xD6, 0x49, 0x0D, 0x23, 0x07 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = (uint)(length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]) % 17; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 76333. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_76333.cs +// + +namespace KeyCMF_076333 +{ + static const BYTE Keytable[] = + { + 0x92, 0x25, 0x6E, 0x53, 0x93, 0x64, 0x2C, 0x1E, 0x6E, 0x03, 0x23, 0x5C, 0x89, 0x20, 0xBF, 0xA4, + 0xBD, 0x4C, 0x88, 0xE9, 0x40, 0x28, 0x6A, 0x54, 0xD6, 0xBC, 0x20, 0x01, 0x88, 0x80, 0x71, 0xF7, + 0x73, 0x1F, 0xC1, 0x65, 0x99, 0x7B, 0x18, 0x20, 0xF4, 0x9B, 0xEF, 0xD9, 0x6A, 0x94, 0x5C, 0xEE, + 0x36, 0x39, 0x12, 0xEF, 0x91, 0x5D, 0xDB, 0x79, 0xB7, 0xA7, 0xD6, 0x5F, 0xDF, 0x70, 0x54, 0x27, + 0xDF, 0x52, 0xD0, 0xBD, 0x67, 0x71, 0xE1, 0x8D, 0x29, 0xDA, 0x43, 0x92, 0x28, 0x13, 0x35, 0x18, + 0xD4, 0xC7, 0xEB, 0x97, 0x4D, 0xEA, 0x47, 0x1E, 0xDF, 0xCA, 0x39, 0x67, 0x8E, 0xAC, 0x3F, 0xD8, + 0x04, 0x08, 0x5B, 0x8A, 0x95, 0xC9, 0x7B, 0xD0, 0x5B, 0x13, 0x2F, 0x1B, 0x95, 0x56, 0xE9, 0x54, + 0x68, 0x1B, 0x01, 0x1E, 0x24, 0xBD, 0x11, 0xB0, 0x9C, 0x89, 0xC0, 0xE0, 0xD2, 0xDE, 0x87, 0x4D, + 0x50, 0x1C, 0x25, 0xA6, 0xC8, 0x8E, 0x0D, 0xE0, 0x6C, 0xBC, 0xA3, 0xC3, 0x58, 0x8F, 0x7C, 0x00, + 0xF9, 0x13, 0x40, 0xAE, 0x52, 0xDF, 0xDC, 0x22, 0x3D, 0xD3, 0x11, 0x64, 0x61, 0x08, 0x37, 0xBD, + 0x79, 0xAD, 0x9C, 0x19, 0x13, 0x2F, 0x5E, 0x98, 0x1C, 0xB5, 0x4D, 0xA3, 0x20, 0x40, 0x2E, 0x86, + 0xF9, 0x0C, 0x62, 0xF0, 0x6F, 0xB0, 0xF4, 0x14, 0x34, 0xE8, 0x04, 0xE3, 0x14, 0x73, 0x3E, 0x6C, + 0xE5, 0x97, 0x85, 0x48, 0x43, 0xE3, 0x08, 0x87, 0xC1, 0x49, 0xCE, 0xAE, 0xBD, 0x3F, 0x78, 0xA4, + 0xF2, 0xFE, 0xE1, 0x75, 0xC4, 0xEE, 0x0F, 0xBD, 0xA2, 0xE9, 0x6E, 0x20, 0x88, 0x49, 0xC7, 0xB8, + 0x73, 0xAD, 0x0F, 0x6B, 0x8C, 0x79, 0x89, 0x92, 0x27, 0x2D, 0xA8, 0x0D, 0x79, 0xAF, 0xB3, 0x02, + 0x1C, 0xE7, 0x06, 0x03, 0xAB, 0x33, 0xE0, 0x79, 0x46, 0x23, 0xA4, 0xCF, 0xD4, 0x31, 0xDF, 0x1F, + 0x1A, 0x0C, 0x87, 0xDC, 0x05, 0xB8, 0xEF, 0x90, 0xC6, 0xFF, 0x6A, 0x3F, 0xE8, 0xFB, 0x7C, 0x3F, + 0xE1, 0x9E, 0x0D, 0xEA, 0x7E, 0xC2, 0xAB, 0xB7, 0x88, 0x71, 0x4D, 0x12, 0xB3, 0x5D, 0x67, 0xDF, + 0xD1, 0x18, 0x47, 0x70, 0x80, 0x3C, 0xDC, 0x71, 0xD8, 0xDF, 0xEA, 0xD6, 0x38, 0x13, 0xB7, 0x5D, + 0x80, 0xB3, 0xD3, 0x3F, 0x16, 0x76, 0xE8, 0x66, 0xE2, 0x6F, 0xF2, 0xEC, 0xD8, 0xA3, 0x00, 0xEF, + 0xC7, 0xC1, 0xA3, 0x4F, 0x86, 0x2B, 0xF0, 0xE2, 0xE2, 0x5A, 0xBB, 0x95, 0xC5, 0x1D, 0x17, 0xD2, + 0xA1, 0x83, 0x16, 0xB9, 0x06, 0xF3, 0x81, 0xDA, 0x7C, 0x7A, 0xC6, 0x5D, 0x7E, 0x33, 0xE5, 0x19, + 0x79, 0x6C, 0x77, 0x68, 0x14, 0xC8, 0xC0, 0x39, 0x07, 0x22, 0xDA, 0x5A, 0xF1, 0x7C, 0x5B, 0xF7, + 0xCF, 0x3D, 0xBA, 0xF8, 0x44, 0x2A, 0x74, 0x4B, 0x0A, 0xB9, 0xFE, 0xA0, 0x6B, 0x8F, 0x1B, 0xF7, + 0x3A, 0x8A, 0x0B, 0xE0, 0xCC, 0x3F, 0x59, 0xE8, 0xF2, 0x50, 0x0B, 0x6D, 0xFF, 0xDA, 0xAA, 0x2B, + 0x28, 0xD1, 0xE7, 0xD1, 0x68, 0xAE, 0x77, 0x2F, 0xC1, 0xEC, 0x49, 0x1F, 0xEC, 0x33, 0x5D, 0x2D, + 0xEC, 0x4D, 0x5A, 0x39, 0xAE, 0x1E, 0x49, 0x14, 0xA1, 0x72, 0x32, 0x09, 0x3D, 0x6E, 0xD2, 0xC2, + 0xE0, 0x46, 0x2E, 0xD0, 0xB6, 0xC9, 0xFB, 0x0E, 0xFA, 0xC9, 0x7E, 0xF1, 0xB3, 0x75, 0x57, 0xDE, + 0x9E, 0xBF, 0x1C, 0xC7, 0x18, 0x2F, 0xCE, 0x7A, 0x11, 0x4A, 0xF5, 0xE4, 0xAA, 0x34, 0x47, 0x6B, + 0x03, 0xE8, 0x62, 0xE3, 0x23, 0xB5, 0x64, 0xF9, 0x5C, 0xE0, 0x61, 0x98, 0xC4, 0x3E, 0x09, 0x7B, + 0xE7, 0xA3, 0x95, 0x8E, 0x16, 0xF7, 0xC9, 0xBA, 0x05, 0x4E, 0x3F, 0x34, 0x3E, 0x22, 0xF3, 0x65, + 0xFC, 0xF9, 0xE3, 0x54, 0x51, 0x7A, 0xFB, 0xC5, 0x2A, 0x46, 0x97, 0xDC, 0x81, 0x67, 0x55, 0x67 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 77262. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_77262.cs +// + +namespace KeyCMF_077262 +{ + static const BYTE Keytable[] = + { + 0x41, 0x79, 0xCF, 0x5D, 0x63, 0xD6, 0x37, 0x97, 0x41, 0xC8, 0xB3, 0xF9, 0xC5, 0x88, 0x35, 0x23, + 0xFB, 0x70, 0xAA, 0xF0, 0xD9, 0x4F, 0x38, 0xF4, 0xE2, 0x70, 0xE5, 0x90, 0xED, 0x92, 0x75, 0xC7, + 0x81, 0xE0, 0xD0, 0x8C, 0x38, 0xD9, 0x06, 0xA3, 0x66, 0x18, 0x25, 0xDC, 0xBB, 0xC4, 0x8A, 0x72, + 0x91, 0x0F, 0x73, 0x5F, 0x58, 0xD6, 0xA0, 0x6B, 0xC4, 0x21, 0xD1, 0x0B, 0x79, 0x34, 0xAA, 0xB0, + 0x5D, 0xCE, 0xD6, 0x9C, 0xF3, 0xDE, 0x34, 0xD6, 0x3E, 0xF0, 0x62, 0x62, 0x7F, 0x52, 0xE5, 0x16, + 0x2C, 0x85, 0x62, 0x7B, 0x84, 0xE7, 0x6A, 0x90, 0xF7, 0xAE, 0xD9, 0x7B, 0x93, 0xAD, 0x45, 0x2C, + 0x26, 0x6A, 0x19, 0xC2, 0x94, 0xCE, 0x87, 0x86, 0x52, 0x42, 0x0B, 0xAE, 0xCC, 0x7D, 0x34, 0xCE, + 0x90, 0x4C, 0x8C, 0x00, 0x29, 0xDA, 0xA4, 0x66, 0x76, 0xD8, 0x03, 0x75, 0x1B, 0x4C, 0xAA, 0xA4, + 0x14, 0x6B, 0xA9, 0xA1, 0xA3, 0x13, 0x1A, 0x5B, 0x6B, 0xDC, 0x96, 0x05, 0x34, 0x7C, 0xCB, 0x25, + 0x91, 0x23, 0xDB, 0xD7, 0x68, 0x27, 0x86, 0x84, 0xB7, 0x4E, 0x8C, 0x03, 0x2D, 0x3E, 0x8A, 0x0D, + 0xFE, 0x3D, 0x51, 0x82, 0x73, 0xF8, 0xDB, 0x72, 0x5D, 0x6A, 0xC0, 0x35, 0x59, 0x5A, 0x8E, 0x23, + 0x26, 0x9D, 0x52, 0xE1, 0x6D, 0xAA, 0x28, 0xEC, 0x2A, 0xBF, 0xB0, 0xB1, 0xB9, 0x9D, 0xE5, 0xCA, + 0x16, 0x5A, 0x6F, 0x54, 0xA7, 0xF3, 0x1C, 0x64, 0x2E, 0x23, 0x91, 0x2F, 0xA6, 0xA0, 0x8F, 0x91, + 0x55, 0x31, 0x0C, 0x40, 0xD1, 0x30, 0xBF, 0xFC, 0xD4, 0xD9, 0x8E, 0xB0, 0xE7, 0x0E, 0x49, 0x48, + 0xB9, 0x72, 0xEE, 0x91, 0x29, 0xC5, 0x7A, 0x95, 0xBC, 0xDF, 0x83, 0x06, 0x2A, 0xA0, 0x4A, 0xE0, + 0xB6, 0xF3, 0x39, 0x0B, 0xCA, 0x70, 0xF9, 0x77, 0xFF, 0xF7, 0x16, 0x91, 0xFD, 0x2D, 0x2C, 0x4F, + 0x64, 0xC5, 0xBD, 0xB7, 0xBA, 0xC5, 0xD1, 0x88, 0x4E, 0x2A, 0x28, 0xBD, 0x15, 0x40, 0xEA, 0xC6, + 0x1A, 0xAE, 0x68, 0x83, 0x45, 0xC5, 0xC7, 0xBD, 0xE5, 0xFD, 0xCD, 0x1D, 0x29, 0xE5, 0x53, 0x31, + 0x92, 0xF1, 0xE8, 0xFE, 0xD3, 0x5A, 0x66, 0xA7, 0x7E, 0x86, 0x19, 0xF3, 0xE5, 0xA9, 0x81, 0x64, + 0xAD, 0x5E, 0x6E, 0xCD, 0x46, 0x14, 0x04, 0x69, 0x61, 0x17, 0x92, 0x54, 0x47, 0xFF, 0xE4, 0x73, + 0xB0, 0x30, 0xCC, 0xDC, 0xC3, 0x47, 0xC9, 0x2B, 0x86, 0x07, 0xDA, 0x07, 0xAA, 0x23, 0xF1, 0x91, + 0x5E, 0xBA, 0xA4, 0xF5, 0xBC, 0x2D, 0xBC, 0xA7, 0x0A, 0x4E, 0x6F, 0x04, 0xAD, 0x79, 0x70, 0x51, + 0x96, 0x41, 0xF0, 0x2E, 0x57, 0xBC, 0xC0, 0x01, 0xD6, 0xD1, 0x2B, 0x79, 0xD8, 0xA3, 0x14, 0x50, + 0x79, 0x57, 0x3E, 0xFA, 0xEB, 0x06, 0x95, 0x68, 0x85, 0x44, 0x66, 0x2E, 0xB8, 0x4D, 0x93, 0xF6, + 0x96, 0xAA, 0x69, 0xF7, 0xEA, 0x2F, 0x8F, 0x43, 0xF7, 0xD7, 0x04, 0xAD, 0xAA, 0xF9, 0xC0, 0xD2, + 0x88, 0x8C, 0x50, 0x97, 0xEC, 0xA8, 0xF7, 0x26, 0x19, 0x60, 0x0C, 0xB4, 0xB6, 0x37, 0x50, 0x5F, + 0x86, 0x29, 0x02, 0x2A, 0xCE, 0xE5, 0x78, 0xFA, 0x7B, 0xF0, 0x81, 0x45, 0x78, 0x9D, 0x88, 0x4B, + 0x73, 0x0B, 0xE9, 0xB1, 0xDE, 0x15, 0x73, 0x51, 0x86, 0xFF, 0xA9, 0xC2, 0xE5, 0xF8, 0xCF, 0xEF, + 0x5F, 0xCB, 0x86, 0xC0, 0x37, 0x9A, 0x64, 0x4A, 0xCF, 0x2E, 0x58, 0xE6, 0x8F, 0xDB, 0x0B, 0x99, + 0xE0, 0xF0, 0xE4, 0x34, 0x17, 0xEE, 0x17, 0x52, 0xD0, 0xDB, 0xFF, 0x68, 0x8D, 0xC7, 0xA1, 0x73, + 0x6B, 0x23, 0xA6, 0x47, 0x94, 0x45, 0x77, 0xCB, 0xB0, 0xD1, 0x43, 0xD7, 0x98, 0x2D, 0xF3, 0xDC, + 0xE5, 0xDE, 0x43, 0x8E, 0x34, 0x3D, 0xFB, 0xFB, 0x14, 0xAF, 0x94, 0x21, 0x8D, 0x56, 0xBA, 0xE3 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 78040. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_78040.cs +// + +namespace KeyCMF_078040 +{ + static const BYTE Keytable[] = + { + 0x50, 0x2A, 0xF2, 0x37, 0x3C, 0xEB, 0x23, 0x7B, 0x22, 0x9E, 0x41, 0x77, 0x7C, 0xA7, 0xD9, 0x33, + 0xCB, 0xB2, 0x83, 0xB8, 0xB9, 0x79, 0xCE, 0x69, 0x41, 0x2A, 0xC4, 0x27, 0x94, 0xA0, 0x7F, 0x6C, + 0x04, 0x80, 0xC0, 0xED, 0xE3, 0x5B, 0xA6, 0x07, 0xA5, 0x20, 0x10, 0x65, 0x01, 0x74, 0xA5, 0x7C, + 0x33, 0xD0, 0x77, 0xDB, 0x87, 0xC6, 0x05, 0x57, 0xC6, 0x9D, 0xA5, 0xBD, 0x05, 0xF0, 0x7B, 0x13, + 0x50, 0x38, 0x3D, 0x82, 0xCF, 0x34, 0x66, 0x12, 0xEB, 0x01, 0xF7, 0x79, 0xBC, 0x80, 0xFA, 0xDE, + 0x35, 0x0C, 0xAE, 0x8A, 0x12, 0x3C, 0xDF, 0xD0, 0x6E, 0x74, 0x9C, 0x00, 0x4F, 0xC7, 0x23, 0xAE, + 0x72, 0x6F, 0x41, 0xB6, 0x80, 0x3B, 0xC1, 0x18, 0x00, 0xBF, 0x38, 0x91, 0x90, 0x20, 0xE3, 0x9B, + 0xB7, 0x70, 0x8D, 0xFA, 0xB7, 0x96, 0x5D, 0x42, 0x74, 0x0A, 0x3D, 0x1C, 0x55, 0x6B, 0x4B, 0x5F, + 0xD1, 0x4A, 0x6F, 0x72, 0xCE, 0x78, 0xCB, 0x78, 0xF1, 0xD9, 0x43, 0x6E, 0xBA, 0x56, 0x18, 0x0A, + 0x5E, 0x56, 0xA7, 0xB4, 0x5D, 0xDF, 0x80, 0x3C, 0x9C, 0x63, 0x01, 0xFD, 0x9E, 0xE4, 0xFA, 0x9E, + 0x48, 0x80, 0xA1, 0x25, 0x2C, 0x06, 0x53, 0x2D, 0xC4, 0x83, 0xE8, 0x98, 0xBC, 0xC2, 0x82, 0x6A, + 0x57, 0xBE, 0x25, 0x80, 0x68, 0x96, 0xE4, 0x08, 0x1E, 0xD0, 0x78, 0x70, 0x3E, 0xD0, 0x24, 0x6B, + 0x00, 0x2E, 0x7E, 0x4B, 0x8B, 0xC5, 0x39, 0x1D, 0x0D, 0xC8, 0x45, 0x17, 0x7B, 0x09, 0x38, 0x0F, + 0x4E, 0xDF, 0xAC, 0x40, 0xEE, 0xFD, 0x80, 0xCD, 0x90, 0xFF, 0x1C, 0x5C, 0x20, 0xA0, 0xB3, 0x07, + 0x35, 0x6E, 0xD0, 0x1E, 0x50, 0x20, 0xC9, 0xA0, 0xA2, 0xD3, 0xAB, 0xFB, 0x89, 0x08, 0x31, 0xC2, + 0x37, 0x66, 0xEF, 0x28, 0xA0, 0xF0, 0x42, 0xC7, 0x46, 0xB7, 0x7D, 0xE3, 0xE3, 0xFF, 0x11, 0xF5, + 0x4B, 0x36, 0x13, 0x75, 0xD5, 0xA3, 0x56, 0x27, 0x40, 0x35, 0x1A, 0x71, 0x66, 0xED, 0x08, 0x6D, + 0xB2, 0xB6, 0x03, 0xF4, 0x43, 0x4A, 0x29, 0x63, 0x74, 0xEF, 0xC4, 0x62, 0x1B, 0x61, 0x41, 0x76, + 0xC9, 0x81, 0x56, 0xC7, 0x10, 0xD9, 0x3A, 0x95, 0x8A, 0x3D, 0xA5, 0x7C, 0x0B, 0xD2, 0x16, 0x3C, + 0xD0, 0x21, 0x55, 0x55, 0x6D, 0x38, 0x08, 0xDB, 0x5A, 0x3B, 0x0F, 0x6D, 0x90, 0xA3, 0x03, 0xFE, + 0x3E, 0x77, 0xE9, 0x9E, 0xD6, 0xD8, 0x66, 0x9D, 0x8C, 0xDD, 0x5A, 0x20, 0x82, 0x27, 0x66, 0x1E, + 0xD6, 0x24, 0xCB, 0xC7, 0x18, 0xC8, 0xB6, 0x93, 0x98, 0x6C, 0xC2, 0x38, 0x48, 0xCC, 0x88, 0xF4, + 0xAA, 0x00, 0x66, 0x5E, 0xF9, 0xFF, 0xD5, 0xDB, 0xD5, 0x51, 0xC6, 0xAD, 0xE9, 0xE3, 0x30, 0x3B, + 0x1B, 0x86, 0xE5, 0x3E, 0xC4, 0x8E, 0xF8, 0xB6, 0x19, 0x48, 0x0F, 0xFF, 0x1C, 0xAC, 0x7D, 0x97, + 0x10, 0x78, 0xD4, 0x2D, 0x25, 0xA7, 0xAC, 0x98, 0x40, 0xCE, 0xD7, 0xAD, 0xA6, 0xBA, 0x9B, 0xB2, + 0xC5, 0x8A, 0x26, 0x5E, 0xA2, 0x8F, 0x7A, 0xA3, 0xCE, 0xE7, 0x56, 0xAB, 0xB6, 0xF7, 0xAF, 0x6F, + 0x4E, 0x3E, 0xA3, 0x19, 0x59, 0x7C, 0x41, 0xF6, 0x73, 0x7A, 0x0A, 0x39, 0xEA, 0x5B, 0x29, 0x47, + 0xAD, 0xFD, 0x28, 0x93, 0x23, 0xA3, 0x9E, 0xC0, 0x35, 0x8A, 0x15, 0x80, 0x8E, 0x7E, 0x06, 0x76, + 0xAF, 0x76, 0x4B, 0x11, 0xFE, 0x77, 0x27, 0xDB, 0x24, 0xC1, 0x44, 0x62, 0xEA, 0x7B, 0xEA, 0xED, + 0xA6, 0x73, 0xC8, 0x80, 0xE8, 0xCB, 0x6A, 0xE7, 0x37, 0x9F, 0xD6, 0xD0, 0xC3, 0x24, 0x55, 0xFD, + 0x97, 0xEB, 0x49, 0x49, 0x16, 0x54, 0x1B, 0x69, 0x01, 0x56, 0xE9, 0x96, 0x06, 0x0B, 0x85, 0x5F, + 0x8B, 0x2B, 0x62, 0xC2, 0xE1, 0xC2, 0x51, 0x0C, 0x0A, 0x86, 0x1A, 0x49, 0x68, 0xC8, 0xE8, 0xB0 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[6] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 78777. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_78777.cs +// + +namespace KeyCMF_078777 +{ + static const BYTE Keytable[] = + { + 0x5E, 0xAA, 0xA4, 0x64, 0xAE, 0x1E, 0x7B, 0x4C, 0xDA, 0xCA, 0x2B, 0x48, 0xC8, 0x07, 0x0C, 0x9E, + 0xE2, 0xA3, 0x6A, 0x92, 0x95, 0x1B, 0xDC, 0xFA, 0xBF, 0x43, 0x73, 0x42, 0x41, 0xAF, 0xBE, 0x6A, + 0xD8, 0x1B, 0x0C, 0xCC, 0x4E, 0x22, 0x22, 0xEC, 0x7A, 0xE0, 0x90, 0x82, 0x91, 0xCF, 0xA8, 0x18, + 0xC5, 0x22, 0x59, 0x46, 0xEA, 0x26, 0x42, 0xD2, 0x82, 0x6A, 0xBD, 0x14, 0xE1, 0xAF, 0xA2, 0x47, + 0x1D, 0xF4, 0x6C, 0xC6, 0xC2, 0x3F, 0x00, 0xF5, 0x81, 0x05, 0x1B, 0x56, 0xF5, 0x52, 0x65, 0x00, + 0x3D, 0xD5, 0x0A, 0x2E, 0x58, 0x9D, 0x8B, 0xF7, 0x06, 0x06, 0x6B, 0x9A, 0x2B, 0x3F, 0x4E, 0xAD, + 0x61, 0x6D, 0x27, 0xA1, 0xBE, 0x25, 0xFB, 0xE7, 0x4A, 0x79, 0xA2, 0x90, 0x8A, 0x87, 0x2C, 0x6B, + 0xD8, 0x5E, 0x1E, 0xED, 0x8A, 0x7C, 0x31, 0xA5, 0xB1, 0x02, 0xC7, 0xFA, 0x42, 0x35, 0xED, 0xB9, + 0x68, 0x75, 0xB4, 0xEC, 0x9B, 0x32, 0x6F, 0xDC, 0x45, 0x5D, 0x66, 0x01, 0x65, 0xB7, 0x23, 0x69, + 0xD1, 0x4C, 0x0D, 0x48, 0x2E, 0x49, 0x8F, 0xED, 0x11, 0x42, 0x2C, 0x23, 0xFD, 0xDD, 0x46, 0xCC, + 0x3F, 0xAC, 0x6D, 0x4E, 0xCF, 0xC8, 0x98, 0xDA, 0xF3, 0xBB, 0x34, 0xBB, 0x3B, 0x26, 0x3B, 0xFC, + 0x31, 0x21, 0x82, 0x10, 0x04, 0xC2, 0x0F, 0x8C, 0x0E, 0xB0, 0x9B, 0x33, 0x41, 0x2F, 0x27, 0xCF, + 0x7B, 0xA5, 0x09, 0x86, 0x4B, 0x57, 0x39, 0xBD, 0x13, 0x28, 0x64, 0x69, 0x58, 0xFB, 0xBE, 0xCF, + 0x2D, 0xFB, 0x24, 0xF6, 0x3D, 0x3A, 0x60, 0xDE, 0x18, 0xD6, 0x24, 0xB5, 0x6A, 0x9D, 0xBA, 0x99, + 0x3D, 0x15, 0xEF, 0xD3, 0x50, 0x4D, 0x3C, 0xCF, 0xBD, 0xA7, 0x62, 0x24, 0x7B, 0x36, 0xDB, 0xA0, + 0xEC, 0xC9, 0x52, 0xF0, 0xB4, 0x0E, 0x9E, 0xE7, 0x45, 0xDD, 0x60, 0x0F, 0xC6, 0x7B, 0xD5, 0xB5, + 0x00, 0xB5, 0xBD, 0x70, 0x4A, 0xDE, 0x8D, 0xA8, 0xCA, 0xE5, 0x6C, 0xE6, 0xC5, 0x05, 0x53, 0xD9, + 0xE6, 0x40, 0x56, 0xAE, 0x45, 0xE2, 0xAE, 0x0C, 0xC9, 0x75, 0x3F, 0x48, 0x1C, 0x97, 0x19, 0xFE, + 0x7B, 0xD2, 0x4A, 0xA1, 0x43, 0xCB, 0x25, 0xEC, 0xE4, 0x07, 0xD9, 0x86, 0xB9, 0x62, 0xAF, 0x4A, + 0x66, 0xB2, 0xE6, 0x0E, 0x5B, 0xD3, 0xA2, 0x8D, 0xFE, 0x96, 0x85, 0x4E, 0xE3, 0x0C, 0x5A, 0xB0, + 0xEF, 0x8B, 0x88, 0xA7, 0x97, 0xC5, 0x29, 0xC1, 0x87, 0xB5, 0x1A, 0xE2, 0x6C, 0x03, 0x37, 0x71, + 0x5C, 0xF3, 0x78, 0xEB, 0x78, 0x26, 0xB8, 0xFC, 0xE0, 0x5A, 0xE6, 0x32, 0x62, 0x92, 0xC6, 0x37, + 0xA1, 0xF1, 0xB5, 0x58, 0x2F, 0xEF, 0xE4, 0x6A, 0x06, 0x94, 0xBB, 0x75, 0x85, 0x0F, 0xBE, 0xAE, + 0x2C, 0x2E, 0xED, 0x7A, 0x07, 0x7F, 0x7D, 0x26, 0xF1, 0x70, 0x4B, 0xB6, 0xA2, 0x94, 0x8D, 0x42, + 0xE1, 0x14, 0xB4, 0xA9, 0xA9, 0xDE, 0x33, 0x89, 0x1F, 0xA2, 0xAD, 0x50, 0xE2, 0x48, 0xDC, 0xF2, + 0xE0, 0xE9, 0x2D, 0xCE, 0x8A, 0xE8, 0x7B, 0xAC, 0x68, 0x75, 0xB0, 0x54, 0x6B, 0x53, 0x0E, 0x30, + 0x95, 0x01, 0x59, 0xFA, 0x09, 0xF7, 0xEB, 0x97, 0x19, 0x69, 0x6D, 0x98, 0x0A, 0x63, 0xBA, 0xF1, + 0x58, 0xE9, 0xEC, 0xCF, 0x05, 0xAD, 0x9E, 0x81, 0x07, 0x51, 0x9B, 0x39, 0x2C, 0xBF, 0x9E, 0xF4, + 0x2E, 0xAF, 0xB4, 0xF9, 0xAE, 0x31, 0xAB, 0xEE, 0xE6, 0x4C, 0xBA, 0x73, 0x49, 0x86, 0x98, 0x05, + 0xE5, 0x4D, 0x2C, 0x5A, 0xFB, 0x01, 0x3A, 0x1C, 0xCB, 0x3E, 0x35, 0x91, 0xEE, 0x83, 0xC2, 0x3D, + 0x3D, 0x1D, 0x70, 0xE0, 0x87, 0xF4, 0x92, 0xD1, 0xE7, 0x43, 0xF2, 0x9C, 0xF2, 0xF6, 0x37, 0x6B, + 0x72, 0x99, 0x3C, 0xC5, 0x7A, 0xE4, 0xD8, 0xD7, 0xF3, 0x7C, 0x7C, 0xFC, 0x72, 0x02, 0x0E, 0xD7 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[3] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 79605. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_79605.cs +// + +namespace KeyCMF_079605 +{ + static const BYTE Keytable[] = + { + 0x1D, 0xF0, 0xF4, 0x8D, 0xDF, 0xDC, 0xE5, 0x87, 0x99, 0x3A, 0xC1, 0x0A, 0x0E, 0x93, 0x5C, 0x86, + 0x2E, 0x7B, 0x08, 0x34, 0x7B, 0x87, 0xD0, 0xCA, 0x7D, 0x40, 0xF3, 0x17, 0x8F, 0x15, 0xE6, 0x67, + 0xB4, 0x0F, 0xA5, 0xB5, 0x80, 0xD4, 0xCC, 0x63, 0x15, 0xBF, 0xD1, 0xFA, 0x1C, 0x69, 0xD0, 0x24, + 0xC9, 0x21, 0x5F, 0xC9, 0x38, 0x06, 0xAE, 0x4F, 0xF6, 0x6F, 0xB9, 0xA7, 0x4A, 0x4C, 0x1F, 0xBD, + 0xEF, 0xD5, 0x84, 0x11, 0xE1, 0x7A, 0x1C, 0x3A, 0x44, 0xBA, 0x1D, 0xAE, 0x31, 0xA8, 0x1B, 0xE5, + 0x8B, 0x46, 0xAA, 0x8B, 0x8D, 0xCF, 0x3E, 0x43, 0x33, 0xD7, 0xE9, 0x05, 0x10, 0xEB, 0xD0, 0x30, + 0x55, 0x1A, 0x5B, 0x7E, 0x77, 0x27, 0xBA, 0x88, 0xCE, 0xD0, 0xA8, 0x03, 0x96, 0xA1, 0x5B, 0x88, + 0x85, 0xB4, 0x49, 0x5D, 0xC2, 0xE6, 0xA0, 0xD1, 0xBB, 0xAE, 0xC3, 0x7B, 0x9C, 0x9D, 0x73, 0x4B, + 0x49, 0xAF, 0x3F, 0x9E, 0x77, 0xE4, 0x04, 0xC6, 0x9B, 0x7F, 0xC9, 0x0C, 0x44, 0xF2, 0xBB, 0xF7, + 0x22, 0xC6, 0x0D, 0x65, 0x81, 0x4E, 0x14, 0x24, 0x52, 0x8A, 0xEB, 0xBF, 0x5E, 0x11, 0xED, 0x41, + 0xB4, 0x93, 0x87, 0xE1, 0xD7, 0xD8, 0x89, 0xD5, 0xE5, 0x38, 0x79, 0x72, 0x4D, 0xB5, 0xB7, 0x3F, + 0x73, 0xEF, 0xE6, 0x21, 0xC1, 0x95, 0xBD, 0x64, 0x8F, 0xA6, 0x7C, 0x13, 0xBE, 0x52, 0x43, 0x1B, + 0xE9, 0x29, 0x33, 0x63, 0x81, 0x75, 0xED, 0x36, 0x70, 0x4B, 0x45, 0x2D, 0xE4, 0x6D, 0x1E, 0xE9, + 0xFC, 0x62, 0xFC, 0x2F, 0x49, 0x6D, 0xF6, 0x9F, 0xAA, 0xB4, 0xD4, 0x25, 0x8C, 0x27, 0xCD, 0x59, + 0x4F, 0x1D, 0xE4, 0xCA, 0x1A, 0x0F, 0xBB, 0xE4, 0xFF, 0x88, 0x27, 0x66, 0xDB, 0x59, 0xBB, 0x63, + 0xA2, 0xC1, 0xAE, 0xD9, 0xAF, 0xC4, 0x1D, 0xDB, 0x43, 0xB2, 0x96, 0x9D, 0x9B, 0xDF, 0xB8, 0x28, + 0x0B, 0x74, 0xDB, 0x30, 0xD0, 0xF6, 0x66, 0x76, 0xCF, 0x8D, 0x03, 0x7A, 0xA2, 0x76, 0x43, 0x57, + 0x79, 0x5A, 0x7D, 0x23, 0x7B, 0xD3, 0x46, 0x3B, 0xA6, 0xCE, 0x71, 0x82, 0xF8, 0xD2, 0x85, 0xDB, + 0x29, 0x66, 0x5A, 0xBE, 0xC2, 0xAA, 0x23, 0xE5, 0x27, 0xC9, 0xE1, 0x1D, 0x99, 0x20, 0xDC, 0x68, + 0xEB, 0x63, 0x65, 0x18, 0x21, 0x4F, 0x2C, 0x58, 0xDE, 0x81, 0x5B, 0xBE, 0x7B, 0xBB, 0x85, 0x16, + 0x43, 0x81, 0x29, 0x44, 0xA3, 0xEC, 0xE5, 0xDF, 0xBB, 0x08, 0x3E, 0xF5, 0xC0, 0x5A, 0xB2, 0x82, + 0xAD, 0xAF, 0x4C, 0x78, 0x93, 0xA3, 0x45, 0x92, 0x20, 0x5A, 0xB4, 0xE2, 0x4E, 0x64, 0xA0, 0x45, + 0xB5, 0x71, 0x17, 0x2D, 0x64, 0x90, 0xBF, 0xDE, 0xD0, 0x30, 0xB1, 0xE8, 0x9C, 0x25, 0xB7, 0x71, + 0xBE, 0x0B, 0x45, 0x38, 0x6F, 0x4C, 0x8F, 0xF2, 0x65, 0xBD, 0x94, 0xCB, 0xF5, 0x46, 0x09, 0xE8, + 0xD3, 0x8A, 0xF9, 0xE8, 0x87, 0xB0, 0x74, 0x7F, 0xA5, 0x40, 0x0D, 0x6D, 0x73, 0xC1, 0xD0, 0xE0, + 0xF8, 0x58, 0x40, 0xB2, 0x4E, 0x27, 0xF2, 0xF7, 0xB5, 0x96, 0xC2, 0xFD, 0xD5, 0xB5, 0xB0, 0x3A, + 0x29, 0x8A, 0x21, 0xCE, 0x39, 0xE2, 0xF1, 0x03, 0x07, 0x4F, 0xBC, 0x52, 0x7B, 0xE0, 0xB8, 0x5E, + 0x1A, 0x08, 0xF1, 0xF5, 0x53, 0x77, 0x5A, 0xBC, 0x62, 0x8B, 0x8A, 0x6A, 0xAD, 0x63, 0x9E, 0xF8, + 0x01, 0x56, 0xA8, 0xAB, 0x88, 0x7D, 0x13, 0xC5, 0x58, 0x3C, 0x81, 0xEB, 0x92, 0x9A, 0x41, 0xB6, + 0xD0, 0xCC, 0x53, 0xDD, 0x33, 0xF8, 0x4E, 0xE0, 0xE7, 0xD6, 0x13, 0x99, 0xFB, 0xA9, 0x62, 0xF3, + 0xC9, 0x02, 0xC4, 0x20, 0xB6, 0x90, 0x11, 0x58, 0x06, 0xFB, 0x3C, 0x0A, 0xD8, 0xDA, 0x9E, 0x9D, + 0x26, 0x6D, 0x88, 0x01, 0x88, 0x19, 0x0D, 0x74, 0xE4, 0xC7, 0xE1, 0x74, 0xC2, 0x0A, 0x7F, 0x87 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[((2 * digest[13]) - length) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 80111. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_80111.cs +// + +namespace KeyCMF_080111 +{ + static const BYTE Keytable[] = + { + 0x50, 0x28, 0xEA, 0x47, 0xDA, 0xD7, 0x5B, 0x51, 0x2F, 0xA1, 0x3A, 0x92, 0x82, 0x92, 0x9E, 0x24, + 0x5F, 0x79, 0x66, 0x01, 0xAF, 0xAE, 0x68, 0x4F, 0x2C, 0xF1, 0xCC, 0xE4, 0x43, 0xEC, 0x98, 0x35, + 0xE4, 0x75, 0x3E, 0x77, 0x92, 0xE0, 0x77, 0x0F, 0x02, 0x35, 0x1E, 0x4E, 0xCF, 0xD2, 0x07, 0x1E, + 0x30, 0xD3, 0xC3, 0x1C, 0x02, 0xAF, 0x8C, 0x54, 0xCF, 0x65, 0x5B, 0x91, 0xBB, 0x43, 0x99, 0xE8, + 0x0C, 0x95, 0xF5, 0xC2, 0xBA, 0xB0, 0xD3, 0xD9, 0xAF, 0x65, 0x02, 0x03, 0xBE, 0xC2, 0xAD, 0x5C, + 0x44, 0x14, 0x54, 0xD4, 0x42, 0x70, 0x44, 0xDC, 0xF1, 0x55, 0x65, 0xDD, 0x1B, 0x0B, 0xE6, 0x0F, + 0x29, 0xCC, 0xE2, 0x79, 0x24, 0x19, 0xBC, 0x69, 0xAC, 0xC1, 0x50, 0xE5, 0x22, 0xF6, 0xA4, 0xF7, + 0x39, 0xF5, 0xCE, 0x94, 0x96, 0xE4, 0xC2, 0x79, 0x0B, 0x71, 0x30, 0x4A, 0x51, 0x44, 0xBD, 0x4C, + 0xFB, 0x97, 0xF6, 0x71, 0x27, 0x6F, 0xC5, 0x93, 0x20, 0x34, 0x66, 0xBC, 0xE1, 0x5A, 0xFC, 0x6D, + 0x88, 0xB5, 0x56, 0x7B, 0x6E, 0xD9, 0xC1, 0xE3, 0xDA, 0x2D, 0x37, 0xC0, 0xDB, 0x85, 0x5F, 0x9F, + 0xAE, 0x19, 0x13, 0x48, 0x36, 0xE2, 0x86, 0x9D, 0xB6, 0xDD, 0xAD, 0x0E, 0xAC, 0xB2, 0x80, 0x00, + 0x05, 0xF8, 0x6D, 0x17, 0x3C, 0x4E, 0x41, 0xDC, 0x56, 0x9E, 0xF8, 0xFE, 0x8F, 0x1F, 0x69, 0xCF, + 0x8B, 0x31, 0x1D, 0x66, 0x82, 0x48, 0x44, 0x66, 0x73, 0x7A, 0x64, 0x6C, 0x57, 0xAF, 0xD7, 0x4D, + 0x97, 0x36, 0x4B, 0x71, 0xBC, 0x25, 0xB8, 0x61, 0x24, 0xCE, 0xE3, 0xCE, 0xBF, 0x82, 0xBA, 0xAC, + 0xA5, 0xA9, 0x2A, 0x3B, 0x92, 0x66, 0x0D, 0xDB, 0xE3, 0x43, 0x1D, 0x4B, 0x70, 0x32, 0xD0, 0x8C, + 0xA9, 0xD5, 0x1E, 0x60, 0xD0, 0xBF, 0xE2, 0x87, 0xA7, 0x80, 0x88, 0xE9, 0x6E, 0x15, 0x95, 0x90, + 0x92, 0xBB, 0x49, 0x1B, 0xD8, 0x4D, 0x0C, 0xE9, 0x21, 0x46, 0x4D, 0x22, 0xD5, 0xC6, 0xA2, 0xC1, + 0xEF, 0xA2, 0x90, 0x3F, 0x5B, 0x4C, 0xEA, 0x5B, 0x5D, 0x17, 0xF8, 0x81, 0x9A, 0x6A, 0xDE, 0x7E, + 0x2A, 0x22, 0x65, 0x5A, 0x9A, 0x46, 0xB3, 0x90, 0xFD, 0x32, 0x6C, 0xB9, 0x4A, 0x03, 0x28, 0x6E, + 0xC9, 0x65, 0x14, 0xFB, 0xA7, 0xB0, 0x4F, 0xE4, 0x58, 0xA6, 0x83, 0x2F, 0x45, 0xE2, 0xA2, 0x3E, + 0x6B, 0xA0, 0xBC, 0x03, 0x0C, 0xD1, 0x8F, 0x84, 0x17, 0xBF, 0xF8, 0xC0, 0x30, 0x2C, 0xE7, 0xFF, + 0x79, 0x22, 0x42, 0xB0, 0x37, 0xBC, 0x28, 0x2A, 0x26, 0xBE, 0x2D, 0xAB, 0xFA, 0x47, 0xAF, 0x6B, + 0xC5, 0xAE, 0x21, 0xC2, 0xB4, 0x71, 0xC6, 0x52, 0x4B, 0xF3, 0xEF, 0xAA, 0x81, 0x4B, 0xD0, 0x4B, + 0xB6, 0xA4, 0xDF, 0x9C, 0xD3, 0xBF, 0x3D, 0xD7, 0xC1, 0xA2, 0xE7, 0x89, 0x99, 0x7E, 0x09, 0x44, + 0x7A, 0x64, 0x28, 0x14, 0x6D, 0x00, 0xE1, 0x42, 0x80, 0x19, 0xC0, 0x9C, 0xB2, 0x21, 0x0A, 0xDF, + 0x19, 0xE3, 0xAB, 0x81, 0xAD, 0x37, 0x5D, 0x05, 0x5D, 0xDA, 0x65, 0x38, 0xC7, 0x94, 0x13, 0xA5, + 0x74, 0x24, 0x4F, 0x55, 0xF8, 0x24, 0xDF, 0x40, 0xB1, 0xF7, 0x94, 0x73, 0x92, 0x1A, 0x53, 0x10, + 0x4E, 0xAF, 0x42, 0xBC, 0x23, 0x7E, 0xF0, 0x2E, 0x1D, 0x5C, 0x57, 0xD0, 0x96, 0x38, 0x75, 0x73, + 0xE5, 0x2B, 0x08, 0x1C, 0xD1, 0x7F, 0xC5, 0xDB, 0xC1, 0x9E, 0xCF, 0x2B, 0x7E, 0xF3, 0x21, 0x12, + 0x7F, 0x20, 0x3C, 0x5C, 0x5C, 0x21, 0x84, 0x13, 0x88, 0xF3, 0xFB, 0x8D, 0xB8, 0xC9, 0xBD, 0x5D, + 0xBC, 0x55, 0x36, 0xEA, 0xA8, 0x8B, 0x50, 0xC3, 0x1B, 0xB0, 0x2E, 0xDE, 0x96, 0x58, 0x3E, 0x0E, + 0x59, 0xD5, 0x36, 0x3E, 0xFF, 0x19, 0x3B, 0xE7, 0x6B, 0xC0, 0x5E, 0xA5, 0x5E, 0xB1, 0xAB, 0x6D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]; + buffer[i] ^= digest[SignedMod(header.m_buildVersion + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 80550. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_80550.cs +// + +namespace KeyCMF_080550 +{ + static const BYTE Keytable[] = + { + 0x87, 0xD3, 0x74, 0xCE, 0xEF, 0x52, 0x8A, 0x14, 0x22, 0x05, 0x10, 0xDB, 0xE8, 0xCC, 0xD5, 0x8F, + 0xEE, 0xB5, 0x66, 0x7C, 0x01, 0x27, 0x57, 0xCD, 0x5E, 0x18, 0x57, 0xCA, 0x9E, 0x48, 0xD8, 0x9C, + 0x63, 0x27, 0xE1, 0x7C, 0x81, 0x83, 0x4D, 0xF7, 0x0A, 0xF1, 0xB1, 0xC6, 0xDA, 0xB3, 0x0C, 0x79, + 0xCE, 0x9A, 0x15, 0xBA, 0xDA, 0x2D, 0xA8, 0x8A, 0x3D, 0x9B, 0x48, 0x3A, 0x1F, 0x25, 0x86, 0x52, + 0x9D, 0x45, 0x39, 0xF2, 0xB1, 0xC2, 0xB6, 0x04, 0x92, 0xCB, 0x46, 0x63, 0xB6, 0x7D, 0xE4, 0xA2, + 0xCB, 0x8D, 0x63, 0x1C, 0x26, 0xE6, 0x4B, 0x44, 0x76, 0x5A, 0x8C, 0xD3, 0x1C, 0xA5, 0xB7, 0x21, + 0x7A, 0x3E, 0xDF, 0x75, 0xCF, 0xE0, 0x70, 0x2A, 0xE0, 0xDE, 0x51, 0x4F, 0x20, 0x3A, 0x7E, 0x14, + 0xC6, 0xB5, 0x3E, 0xD3, 0xA8, 0x19, 0xE8, 0xD8, 0xC3, 0x2E, 0xF6, 0x64, 0xA5, 0x17, 0xDF, 0x84, + 0x54, 0x58, 0x1D, 0x2D, 0x86, 0x46, 0xF8, 0x64, 0xF0, 0xB9, 0xCA, 0x27, 0x75, 0xAB, 0x07, 0xC6, + 0x1C, 0x86, 0xF3, 0x95, 0x48, 0x4C, 0x1E, 0x8E, 0x1A, 0xAA, 0xE9, 0x8F, 0x85, 0xE9, 0x8A, 0xA0, + 0xAF, 0x3B, 0x97, 0x8C, 0x76, 0x13, 0x05, 0xD8, 0x35, 0x5B, 0xAC, 0x68, 0xF7, 0xA7, 0x8B, 0x6F, + 0xFB, 0xDA, 0xFB, 0x46, 0x94, 0xB1, 0xC2, 0x9C, 0xCF, 0x27, 0x10, 0xB5, 0x1D, 0x54, 0x72, 0xBD, + 0xE1, 0x77, 0xB7, 0xC5, 0x9B, 0x9A, 0xF2, 0x00, 0x7F, 0xF9, 0xAA, 0x67, 0xA9, 0x2E, 0x5E, 0xAD, + 0x1E, 0xF2, 0x63, 0x97, 0x40, 0x5B, 0xB2, 0x68, 0x36, 0x25, 0xBC, 0xDB, 0xD7, 0x91, 0x48, 0x7E, + 0xEF, 0x6A, 0x6F, 0x34, 0x4E, 0x7F, 0xD9, 0x69, 0x4A, 0xB2, 0xAA, 0xC2, 0xC2, 0x39, 0x0C, 0x94, + 0x34, 0x62, 0x09, 0x46, 0x8F, 0x5A, 0x0B, 0x16, 0xA1, 0xF8, 0x2C, 0x71, 0x66, 0x78, 0xD1, 0x4A, + 0xD4, 0x72, 0x47, 0x4B, 0x87, 0xAD, 0x64, 0x4E, 0xDC, 0x5A, 0x8F, 0x5C, 0x4B, 0x53, 0x98, 0x3C, + 0x5C, 0x40, 0x96, 0xDE, 0xE4, 0x29, 0xFF, 0x55, 0x3D, 0x5A, 0x4B, 0xA7, 0x8A, 0x83, 0xD8, 0x6F, + 0x64, 0x46, 0x5F, 0xD6, 0xD8, 0x2F, 0x60, 0x13, 0x10, 0x6B, 0x30, 0x6D, 0x83, 0x49, 0xD2, 0xD2, + 0xB4, 0x41, 0xD2, 0x4D, 0xAD, 0x07, 0xE8, 0x1A, 0x78, 0x47, 0xFC, 0x0A, 0x6E, 0xA1, 0x28, 0x50, + 0x03, 0x85, 0x85, 0x05, 0x32, 0x8E, 0x80, 0x3A, 0xC1, 0xD1, 0xB3, 0xDE, 0xF6, 0x02, 0x03, 0x68, + 0xBC, 0xF7, 0xAD, 0x39, 0x6C, 0xDA, 0x0D, 0x43, 0xA4, 0x15, 0x8E, 0x19, 0x14, 0xBE, 0xD6, 0xB4, + 0x81, 0xCA, 0x71, 0xDB, 0xDA, 0x9E, 0x62, 0xE5, 0x64, 0x28, 0xDA, 0x85, 0x15, 0xFA, 0xF7, 0xBE, + 0x91, 0x86, 0x6A, 0x7F, 0xC6, 0x92, 0xFE, 0x8B, 0x5D, 0xE8, 0xF8, 0x87, 0x88, 0x1D, 0xE3, 0x2B, + 0xC5, 0x79, 0x95, 0xDB, 0x62, 0x2B, 0xFD, 0x45, 0x6D, 0xB0, 0xB4, 0x92, 0x2C, 0x0D, 0xF8, 0x17, + 0xBB, 0x0C, 0xCB, 0x87, 0x77, 0xC2, 0xB3, 0x84, 0x99, 0x4B, 0x90, 0x01, 0x14, 0xF2, 0x77, 0x9A, + 0x4C, 0xCB, 0xC7, 0xA1, 0x5C, 0x3C, 0xEC, 0xE5, 0x43, 0x98, 0x6F, 0x5B, 0x6A, 0xE5, 0x48, 0x25, + 0x90, 0x36, 0x0C, 0x44, 0xED, 0x34, 0x53, 0x5C, 0x1F, 0xC9, 0x36, 0xC7, 0x30, 0xE6, 0x81, 0x08, + 0x72, 0x99, 0xCD, 0x76, 0xB3, 0x0E, 0x7D, 0xF8, 0xFB, 0x09, 0x89, 0x0A, 0x0A, 0xBC, 0xFD, 0xDE, + 0x57, 0xE5, 0x15, 0x83, 0xB5, 0x49, 0x4E, 0x17, 0x6C, 0x37, 0xC9, 0x5A, 0x6A, 0xB5, 0x17, 0x30, + 0x3C, 0x3E, 0x15, 0x54, 0x82, 0x7E, 0xCB, 0x01, 0x95, 0x77, 0x66, 0xBE, 0xB5, 0x4B, 0x2A, 0xA4, + 0xDE, 0xDA, 0x35, 0xA4, 0x35, 0x3F, 0x11, 0x23, 0x04, 0x41, 0xE7, 0x05, 0x0B, 0x53, 0x76, 0x85 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[((2 * digest[13]) - length) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 81410. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_81410.cs +// + +namespace KeyCMF_081410 +{ + static const BYTE Keytable[] = + { + 0xB3, 0x59, 0x6F, 0x0B, 0xE5, 0xA9, 0x6C, 0x21, 0xCD, 0x91, 0x44, 0x6E, 0x60, 0xBB, 0x13, 0xA0, + 0x74, 0x25, 0xEC, 0x52, 0x04, 0xBD, 0xA3, 0x61, 0x8B, 0x95, 0x29, 0xFE, 0x91, 0x5C, 0x31, 0x2A, + 0xA8, 0xCC, 0xEA, 0x5E, 0x46, 0x5D, 0xD1, 0xD9, 0xE6, 0x77, 0x11, 0xEB, 0x7D, 0x94, 0xF3, 0x2C, + 0xD0, 0xA8, 0x66, 0x23, 0xEB, 0xC1, 0x96, 0x0F, 0xA2, 0xEB, 0x83, 0x21, 0x56, 0x30, 0x80, 0x8B, + 0xEB, 0xEB, 0x1F, 0xA5, 0xC9, 0x6D, 0x89, 0x19, 0xA1, 0xFC, 0x8A, 0x09, 0x24, 0xA5, 0x47, 0xC3, + 0x65, 0x30, 0x59, 0xB1, 0x30, 0x64, 0x02, 0xB8, 0xD9, 0x32, 0x2F, 0x6B, 0x56, 0x39, 0xB9, 0x08, + 0xF5, 0x8F, 0x90, 0xFC, 0x69, 0x1E, 0x55, 0x1A, 0x89, 0x19, 0x50, 0xAD, 0xD5, 0xC2, 0x3B, 0xFB, + 0xC1, 0xFF, 0xA7, 0xBF, 0xFF, 0x93, 0x95, 0x44, 0xE3, 0x82, 0x28, 0x8B, 0x86, 0x3D, 0x45, 0x31, + 0x71, 0xFC, 0xC2, 0x43, 0x5A, 0xA2, 0x3E, 0x30, 0x1B, 0xA1, 0x35, 0xA4, 0x6F, 0x62, 0x2A, 0x96, + 0x6D, 0xE8, 0xA0, 0x6D, 0x06, 0xF3, 0xB0, 0xA0, 0xFA, 0x53, 0x85, 0x95, 0x53, 0x84, 0xCE, 0x74, + 0x61, 0xA7, 0x0D, 0x29, 0x63, 0x90, 0x39, 0x59, 0x48, 0x32, 0x07, 0x57, 0x1A, 0x33, 0x73, 0x91, + 0x0B, 0x9F, 0x3D, 0x2C, 0xE0, 0xF2, 0x22, 0x78, 0x88, 0x6E, 0x36, 0x12, 0x4F, 0x4B, 0x4C, 0x7F, + 0x58, 0x0C, 0xAD, 0x3B, 0xB5, 0x57, 0x90, 0x76, 0x36, 0x1C, 0x1A, 0x09, 0xA7, 0x2A, 0xDD, 0xE7, + 0xE3, 0x2D, 0x97, 0xFC, 0xA0, 0x04, 0x99, 0xC1, 0xA6, 0xA6, 0xB2, 0x61, 0xF4, 0x67, 0xDF, 0x6E, + 0x02, 0x7B, 0xB1, 0xC8, 0xF9, 0x76, 0x72, 0x1D, 0xC9, 0xA7, 0xBA, 0x57, 0x45, 0xBC, 0x56, 0xFF, + 0x6B, 0xC8, 0x67, 0xFA, 0x26, 0x44, 0x72, 0x3A, 0x9D, 0xD9, 0x12, 0x36, 0xBC, 0xFB, 0x8D, 0x59, + 0x0F, 0x45, 0x88, 0x71, 0x23, 0x4B, 0x60, 0x88, 0x1F, 0x93, 0x80, 0xD7, 0x55, 0x2E, 0x0D, 0x81, + 0xC8, 0x56, 0x4A, 0x93, 0x1C, 0xE7, 0x85, 0x41, 0x36, 0x37, 0xC7, 0xD5, 0xB0, 0x9F, 0x1C, 0xF3, + 0x67, 0x0C, 0xD7, 0x3E, 0x18, 0x9F, 0xB9, 0xB9, 0x3E, 0x54, 0x03, 0x4D, 0x23, 0xE9, 0x19, 0x18, + 0xF9, 0x59, 0x8E, 0x42, 0x38, 0x89, 0xDC, 0xD7, 0x66, 0xB1, 0x2F, 0x23, 0x7D, 0x6C, 0x36, 0xA6, + 0x04, 0x19, 0x75, 0xB8, 0xD5, 0xB9, 0x45, 0x5D, 0x36, 0xA5, 0xA4, 0x80, 0x96, 0x27, 0xDB, 0x14, + 0xBC, 0xFF, 0x28, 0x6B, 0xE8, 0x6E, 0xD9, 0xC3, 0xCE, 0x85, 0x42, 0x0F, 0xEB, 0x05, 0x47, 0x0E, + 0xE7, 0x37, 0x76, 0x04, 0x69, 0xB5, 0x4C, 0xDC, 0xA1, 0x76, 0x3E, 0x31, 0x9F, 0x5D, 0xCB, 0x7F, + 0x51, 0xD9, 0x17, 0x22, 0xD3, 0x9E, 0xA0, 0x9A, 0xE6, 0x2B, 0xF1, 0x76, 0x85, 0xE4, 0x20, 0x7F, + 0xCC, 0xF0, 0x2D, 0x48, 0xB9, 0x50, 0x33, 0x93, 0x16, 0x58, 0xBF, 0x62, 0xBC, 0xF9, 0xBF, 0x04, + 0xDE, 0x53, 0xA9, 0x8F, 0xA9, 0x27, 0xFE, 0x00, 0x03, 0xDC, 0x43, 0xAA, 0x1D, 0xDF, 0x75, 0x6A, + 0x56, 0xB5, 0xC1, 0x46, 0xF5, 0x3D, 0x31, 0x2B, 0x97, 0x29, 0x64, 0x62, 0x14, 0xCF, 0xCE, 0x76, + 0xCC, 0xF8, 0x39, 0x2F, 0x07, 0x62, 0x9F, 0xCC, 0x4F, 0xC7, 0x13, 0x86, 0x60, 0x8F, 0x3C, 0xBE, + 0x6F, 0xEA, 0x69, 0xA9, 0x2A, 0xDD, 0x26, 0xAA, 0x9C, 0x1D, 0x6E, 0xCE, 0x86, 0x1D, 0x91, 0x16, + 0x8C, 0x50, 0xD4, 0x4F, 0x4F, 0x84, 0x7B, 0x5B, 0xE4, 0x34, 0x02, 0x41, 0x3B, 0xBE, 0x71, 0x0E, + 0x31, 0xC6, 0x9A, 0xC1, 0xCB, 0x4D, 0xDE, 0x1D, 0xC8, 0x3E, 0x5C, 0x9E, 0xBC, 0x21, 0x16, 0x06, + 0x38, 0xB1, 0x42, 0x70, 0xFC, 0x30, 0xBF, 0xF0, 0x02, 0xB5, 0x2C, 0x3E, 0xC8, 0x02, 0x21, 0x53 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx; + kidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx; + kidx = (uint) (length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 82693. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_82693.cs +// + +namespace KeyCMF_082693 +{ + static const BYTE Keytable[] = + { + 0x1D, 0x84, 0x4B, 0x7B, 0x02, 0x90, 0x71, 0x22, 0xB4, 0x07, 0x3F, 0x39, 0xB2, 0xBC, 0x9A, 0x31, + 0x61, 0x12, 0x1D, 0x31, 0x69, 0x7D, 0x1A, 0x2B, 0x09, 0xF3, 0x76, 0x05, 0x6D, 0x69, 0xAF, 0x7B, + 0xB4, 0xFC, 0x32, 0xA9, 0x8A, 0x9C, 0xCD, 0x08, 0x76, 0x99, 0x30, 0xE9, 0xF1, 0x2D, 0x8F, 0x89, + 0xAB, 0xAD, 0xE5, 0x3F, 0xEF, 0xF9, 0x64, 0xBB, 0xCC, 0x76, 0x7E, 0x80, 0x85, 0xC5, 0x4D, 0x85, + 0x77, 0xCB, 0x62, 0xE9, 0xA2, 0x63, 0x33, 0xF0, 0xB1, 0x47, 0xA4, 0xA9, 0x1F, 0x6B, 0x45, 0xFC, + 0x09, 0x05, 0x59, 0x35, 0xC6, 0x7E, 0xC9, 0xCB, 0xF5, 0x53, 0x0D, 0xC1, 0x77, 0xB7, 0x87, 0x0D, + 0xD3, 0x08, 0xD5, 0x87, 0x64, 0xBA, 0x29, 0x49, 0x2C, 0x52, 0x24, 0xE7, 0xB1, 0x43, 0x78, 0x5D, + 0xCF, 0x3E, 0x95, 0x63, 0x05, 0xD3, 0x8E, 0x2B, 0xBB, 0x1C, 0x50, 0x5F, 0xF1, 0xDC, 0x22, 0x8F, + 0xE6, 0x49, 0x68, 0x3B, 0xE7, 0x17, 0x97, 0x0B, 0x4E, 0x64, 0x69, 0x94, 0x09, 0xA5, 0xF5, 0x36, + 0xEA, 0xAC, 0xAA, 0x07, 0x69, 0x06, 0x33, 0x71, 0x73, 0x3A, 0xC1, 0x7E, 0xEC, 0x28, 0xE8, 0x5E, + 0x5B, 0x1A, 0xCF, 0xB7, 0xED, 0xB6, 0x67, 0xA7, 0xA1, 0xFF, 0xFE, 0xC6, 0x77, 0x66, 0x35, 0x75, + 0xCE, 0x85, 0x9B, 0x30, 0x64, 0x06, 0xE2, 0x34, 0xA1, 0xB2, 0xD0, 0x7E, 0x22, 0x97, 0xD4, 0x02, + 0xD2, 0xB6, 0x1C, 0x86, 0x61, 0x7A, 0xC5, 0xCA, 0x08, 0x4C, 0x8B, 0x61, 0x18, 0xD3, 0xC7, 0xD8, + 0xEE, 0xC0, 0x52, 0x68, 0x2F, 0x44, 0xDE, 0xB2, 0x8A, 0x6F, 0xD9, 0xF3, 0x05, 0x53, 0x75, 0xEC, + 0x72, 0xBC, 0xE3, 0xEC, 0xCB, 0x16, 0xA1, 0xE8, 0x28, 0xFB, 0x0E, 0x4E, 0x31, 0x11, 0x1E, 0x76, + 0x09, 0x67, 0xB0, 0xD1, 0xFD, 0x1C, 0x02, 0x34, 0xD2, 0xAF, 0x60, 0x33, 0x7B, 0x28, 0x5F, 0x6F, + 0x17, 0x48, 0xCE, 0xC6, 0x93, 0xE6, 0x4F, 0xE3, 0xC1, 0x66, 0xC3, 0xD4, 0xAF, 0x1F, 0x54, 0xFD, + 0x28, 0xA4, 0xE6, 0x9C, 0xC7, 0x07, 0x81, 0x02, 0xF7, 0xE6, 0x77, 0x31, 0x34, 0x8C, 0x83, 0xEE, + 0xEF, 0xDD, 0x6D, 0x1A, 0xF0, 0x2E, 0x55, 0xE6, 0x35, 0x2B, 0x2A, 0x78, 0x22, 0x66, 0xCD, 0x9B, + 0x9C, 0x8A, 0xFC, 0x55, 0xC4, 0xBB, 0x12, 0xDD, 0x59, 0x74, 0xB2, 0x20, 0x7D, 0x30, 0x94, 0x33, + 0x4A, 0xCC, 0x16, 0x06, 0xFB, 0xE6, 0x0D, 0xE4, 0x86, 0x16, 0x98, 0x4A, 0x68, 0xBE, 0x91, 0xB9, + 0xB4, 0x47, 0x94, 0xA0, 0xD3, 0xB1, 0x16, 0x43, 0x3E, 0x1F, 0xBB, 0x7C, 0x66, 0xE5, 0x23, 0xCA, + 0x7D, 0x63, 0x76, 0x46, 0x6F, 0xCD, 0xEA, 0x69, 0x3A, 0x3F, 0x41, 0xC0, 0x3F, 0x15, 0x03, 0x71, + 0xFB, 0x49, 0xB5, 0xAE, 0x8A, 0x78, 0x6F, 0xCC, 0xE9, 0x17, 0x28, 0x27, 0x2D, 0x2F, 0xA6, 0x54, + 0x99, 0x53, 0xFF, 0x4A, 0x01, 0xE3, 0x56, 0x78, 0x67, 0xDA, 0x40, 0xE7, 0xD4, 0x84, 0x0C, 0x42, + 0xF7, 0x40, 0xE3, 0x5B, 0x09, 0x69, 0x13, 0xFC, 0x62, 0x0D, 0x79, 0x87, 0xEC, 0x71, 0x0A, 0xD3, + 0xF6, 0x31, 0x43, 0xB8, 0x1D, 0x71, 0x45, 0xB6, 0x06, 0x5E, 0x91, 0x27, 0x15, 0x5A, 0x21, 0x6D, + 0x7F, 0x65, 0x9C, 0x1D, 0x69, 0x2F, 0x80, 0x42, 0xEA, 0x3B, 0x0B, 0xA4, 0xCB, 0xC3, 0xA7, 0x53, + 0x3E, 0x1C, 0xAA, 0x8A, 0x4F, 0xA1, 0x69, 0xF9, 0x1B, 0xD4, 0xFF, 0xAF, 0xE0, 0x2E, 0x72, 0x00, + 0x3F, 0x04, 0xD5, 0xB6, 0xFE, 0x82, 0x8F, 0xE5, 0x3D, 0x99, 0xFD, 0xCE, 0x31, 0x32, 0x6A, 0xFF, + 0xDA, 0xA3, 0x9C, 0xC8, 0x2D, 0x43, 0x17, 0xB6, 0x4A, 0x7D, 0x7D, 0x61, 0xF4, 0xC1, 0x1D, 0x5D, + 0xF4, 0x85, 0x3F, 0x3B, 0xD3, 0x1B, 0x6A, 0x9F, 0x3D, 0xC7, 0x28, 0x8A, 0x5A, 0xFF, 0xAF, 0x58 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[3] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 82920. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_82920.cs +// + +namespace KeyCMF_082920 +{ + static const BYTE Keytable[] = + { + 0x5C, 0x39, 0x70, 0x51, 0x1F, 0xAE, 0x21, 0x90, 0xF6, 0x6A, 0x0C, 0x88, 0xF8, 0x97, 0x20, 0x82, + 0x36, 0xBF, 0x62, 0x28, 0xF7, 0x84, 0xC3, 0x15, 0x65, 0xE7, 0xD6, 0x0E, 0x23, 0xA3, 0xD8, 0x0E, + 0x01, 0xEA, 0x57, 0x23, 0xCD, 0xE2, 0x46, 0x7F, 0x9C, 0x60, 0x4B, 0xE4, 0x3A, 0x9C, 0xD3, 0x8A, + 0x9F, 0xB4, 0x09, 0x90, 0x49, 0xF1, 0x5E, 0x59, 0x34, 0x43, 0xC7, 0x23, 0x20, 0x3E, 0xE3, 0xBA, + 0x5E, 0x97, 0x7D, 0xEC, 0xFA, 0xFE, 0x51, 0x23, 0x53, 0xB3, 0xB7, 0x85, 0x16, 0xA3, 0xD7, 0x6F, + 0x4E, 0x8D, 0x7D, 0x1B, 0x32, 0x4F, 0xD0, 0x9A, 0xB8, 0xA6, 0x32, 0x09, 0x98, 0x9B, 0x4C, 0x88, + 0x38, 0x23, 0x1E, 0x2B, 0x07, 0xCE, 0x28, 0x8C, 0x1A, 0xCC, 0x09, 0x24, 0xD5, 0x5A, 0x48, 0x93, + 0x1B, 0xE1, 0x55, 0x67, 0x1D, 0x78, 0x76, 0xFE, 0xEC, 0xF7, 0xEE, 0x42, 0x17, 0xF8, 0x45, 0x46, + 0xE9, 0x7E, 0xF2, 0x70, 0x9E, 0x37, 0x52, 0xA9, 0x45, 0x2E, 0x5D, 0x77, 0x03, 0x69, 0xC7, 0x63, + 0xB4, 0x0E, 0xD8, 0xA8, 0x2B, 0x2F, 0xCC, 0xA4, 0x83, 0x98, 0x52, 0x83, 0x4A, 0xE6, 0xF6, 0xA4, + 0xD5, 0xEA, 0x57, 0x6E, 0x28, 0x7C, 0x25, 0xF5, 0xCD, 0x45, 0x11, 0x9F, 0x65, 0x91, 0x18, 0x57, + 0xA2, 0x3F, 0xEB, 0x39, 0x83, 0xD7, 0xCA, 0x5C, 0xB6, 0xBB, 0xC6, 0x03, 0x86, 0xA5, 0x83, 0x08, + 0xFA, 0x93, 0xAF, 0x19, 0xDE, 0x5A, 0x8A, 0xAC, 0xA8, 0x83, 0x94, 0x67, 0x95, 0x51, 0x16, 0x2A, + 0x5F, 0x84, 0x6D, 0x02, 0x47, 0x4E, 0x69, 0x0A, 0xA8, 0x3B, 0x1E, 0xC5, 0x08, 0xD9, 0xEE, 0x1D, + 0x42, 0xBD, 0xC4, 0x90, 0x5D, 0x64, 0x2B, 0x9F, 0x24, 0x98, 0x49, 0x02, 0x1F, 0x18, 0x26, 0x05, + 0x45, 0xEC, 0x1A, 0x74, 0x23, 0xD4, 0x44, 0x02, 0x93, 0x61, 0x66, 0x42, 0x2E, 0x9E, 0x74, 0x9A, + 0x23, 0x8F, 0xF9, 0x9F, 0x0D, 0xAA, 0x1A, 0xAB, 0x87, 0x45, 0xA0, 0x2E, 0x1E, 0xED, 0xCE, 0x7E, + 0x7D, 0x0B, 0xAC, 0x21, 0xB6, 0x35, 0xD3, 0x70, 0x83, 0x26, 0xF5, 0xB7, 0x59, 0xDF, 0xC9, 0x37, + 0xF2, 0x7B, 0x22, 0x98, 0xBC, 0xFF, 0x6E, 0xC6, 0xED, 0x30, 0xD7, 0xF4, 0xA7, 0xA3, 0xFC, 0xCF, + 0x66, 0xA5, 0xF7, 0x07, 0xBB, 0x41, 0xDF, 0xE5, 0x61, 0x94, 0x3D, 0xF7, 0x3B, 0x60, 0x92, 0x54, + 0xF8, 0xDE, 0x07, 0x89, 0x77, 0x86, 0x58, 0xF4, 0x54, 0x51, 0x7B, 0x5C, 0x17, 0x97, 0xAE, 0x84, + 0xC8, 0xFB, 0x78, 0xFC, 0x14, 0xDE, 0xB3, 0x1B, 0xD0, 0xDA, 0x7B, 0xE4, 0x83, 0x9F, 0x79, 0xCE, + 0x00, 0xF6, 0x21, 0xF2, 0xCF, 0x7E, 0x7B, 0x66, 0x81, 0x78, 0x93, 0x6C, 0x78, 0xBE, 0x19, 0xE2, + 0x48, 0x09, 0x3B, 0xBC, 0xC0, 0xFB, 0xBD, 0x1D, 0xA6, 0x6A, 0x1F, 0x11, 0x78, 0x8D, 0x1E, 0x82, + 0xE3, 0x6C, 0x4C, 0xE0, 0x69, 0xD2, 0xCF, 0x70, 0x68, 0xBA, 0xE4, 0x90, 0x40, 0xC3, 0x30, 0xCA, + 0xEE, 0x02, 0x9C, 0x1E, 0xBF, 0xF0, 0x4A, 0x27, 0xE8, 0x3F, 0xF9, 0xD4, 0x0C, 0x36, 0x7B, 0xF9, + 0xFC, 0x28, 0x7C, 0x90, 0x51, 0xEA, 0x1A, 0x3E, 0x20, 0xA0, 0x9F, 0x46, 0x03, 0xB8, 0x39, 0x83, + 0x56, 0x63, 0x14, 0x2C, 0x95, 0x9C, 0xE8, 0xD3, 0x50, 0x74, 0xAB, 0xA9, 0x3D, 0xBD, 0xC5, 0xCE, + 0x80, 0xCF, 0x4B, 0x3B, 0x13, 0x69, 0x81, 0x3D, 0xF6, 0x52, 0xF4, 0xAD, 0xAF, 0x94, 0x3F, 0x9B, + 0x12, 0xB7, 0xCB, 0x63, 0x39, 0x1F, 0xF5, 0xD3, 0xF5, 0x12, 0xE7, 0xC0, 0x6B, 0x6F, 0x28, 0x11, + 0x23, 0x14, 0x0C, 0x34, 0x3D, 0x96, 0x7B, 0x9B, 0x3F, 0xA3, 0x2D, 0x95, 0x04, 0x76, 0x73, 0x5A, + 0xBB, 0x9B, 0xA2, 0x2B, 0x4D, 0x6E, 0x67, 0x0E, 0x78, 0x32, 0x41, 0xCE, 0x3F, 0xE5, 0x68, 0xD1 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 83050. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_83050.cs +// + +namespace KeyCMF_083050 +{ + static const BYTE Keytable[] = + { + 0x1B, 0xEE, 0x16, 0xCA, 0x60, 0x25, 0x0C, 0xC0, 0x86, 0xC8, 0x12, 0x48, 0xBD, 0x16, 0x57, 0x1D, + 0x21, 0xA4, 0x9B, 0xDC, 0x16, 0xDF, 0x81, 0xC8, 0x8F, 0x02, 0xAF, 0x36, 0x37, 0xE1, 0xD8, 0x7A, + 0x38, 0x83, 0x7E, 0x59, 0xA4, 0xFA, 0x65, 0x5B, 0x31, 0x9D, 0x08, 0x1A, 0x96, 0xEC, 0x93, 0x3B, + 0x55, 0xAD, 0xE5, 0x85, 0x16, 0xD8, 0x5E, 0x7D, 0x22, 0x7D, 0x7E, 0x46, 0x8C, 0xBD, 0x55, 0xDE, + 0x34, 0x5D, 0x6E, 0x92, 0x4B, 0xE3, 0xA7, 0xD2, 0xA8, 0x43, 0x7A, 0x1E, 0xDD, 0x6B, 0x71, 0x97, + 0x0F, 0x50, 0x01, 0xF2, 0x70, 0xF7, 0xF9, 0xA3, 0x8D, 0x1C, 0x0E, 0x94, 0xEE, 0xFF, 0x75, 0x06, + 0x39, 0xC0, 0x23, 0x01, 0x6E, 0x38, 0xB8, 0x07, 0x8F, 0xC6, 0x53, 0x12, 0xD5, 0x6E, 0x0B, 0xC6, + 0xC3, 0x59, 0xBD, 0x2A, 0x79, 0x1F, 0xE7, 0xD3, 0x0E, 0x01, 0xB8, 0x37, 0xCF, 0x96, 0x84, 0xAB, + 0xA9, 0xFE, 0x80, 0xB4, 0x57, 0x80, 0x22, 0x5B, 0xAA, 0x55, 0x77, 0xF7, 0x75, 0x24, 0xF1, 0x6C, + 0x0B, 0xBF, 0x2E, 0x54, 0x50, 0xDA, 0x8E, 0x3B, 0x5E, 0x50, 0x63, 0xD3, 0x67, 0xF0, 0x5A, 0x89, + 0x2E, 0x84, 0x7A, 0xE7, 0x1A, 0xC8, 0xF3, 0x64, 0xEF, 0x76, 0x52, 0x14, 0xC3, 0x0C, 0xB6, 0x35, + 0x6A, 0xF6, 0xB8, 0x71, 0x9B, 0xD6, 0x27, 0x4D, 0x38, 0x3B, 0xCC, 0xDC, 0x16, 0xE2, 0x39, 0x4D, + 0x0F, 0x72, 0xA8, 0xF0, 0xE2, 0x4F, 0x40, 0xB6, 0x3A, 0x55, 0x8A, 0x3F, 0x84, 0xE7, 0x7C, 0x50, + 0xF5, 0x4D, 0x04, 0x0C, 0xB2, 0xFC, 0x9B, 0x03, 0x63, 0xF1, 0x92, 0x20, 0xE0, 0xEE, 0x68, 0xE8, + 0x2A, 0x06, 0x82, 0x39, 0x10, 0x6D, 0xE0, 0xE7, 0x52, 0xC6, 0x76, 0xEC, 0x6B, 0x9A, 0x6B, 0x7E, + 0xF5, 0x0D, 0xC1, 0x52, 0x9A, 0xE4, 0x5C, 0xD8, 0x1A, 0xA6, 0x5E, 0xD8, 0xB4, 0x1F, 0xB4, 0x58, + 0x60, 0x98, 0xC7, 0x04, 0x8F, 0x67, 0x71, 0xED, 0x81, 0x62, 0x51, 0xAE, 0x90, 0x59, 0x0E, 0x1F, + 0xC3, 0xE9, 0x5A, 0xBA, 0x5C, 0x82, 0x8F, 0xD4, 0xBC, 0x0D, 0x09, 0xEB, 0xDD, 0x92, 0xD2, 0xAB, + 0xED, 0x23, 0xE8, 0x32, 0x6F, 0x56, 0xA8, 0x1B, 0x14, 0x67, 0x0D, 0x03, 0xD2, 0xFE, 0x71, 0x01, + 0x59, 0xE5, 0x0D, 0x9B, 0x7E, 0x05, 0x6D, 0x2C, 0x7E, 0x10, 0x18, 0xCA, 0x9F, 0xB0, 0x6A, 0xC0, + 0xB1, 0xC4, 0x6F, 0x37, 0xCC, 0x48, 0x74, 0x0D, 0xE0, 0xC7, 0xC8, 0xDF, 0xFD, 0xBA, 0xB8, 0x59, + 0x51, 0x3B, 0x52, 0xEC, 0x42, 0x88, 0xCC, 0x2C, 0x31, 0x2D, 0x9B, 0x6C, 0xE3, 0xD0, 0x98, 0x0C, + 0x17, 0x01, 0x27, 0x9A, 0x2B, 0xE4, 0x6B, 0x0B, 0x9D, 0xD3, 0x16, 0xE6, 0x4E, 0x2A, 0x81, 0x01, + 0x64, 0xD7, 0xE4, 0xB4, 0x97, 0x75, 0xC8, 0x0F, 0x13, 0x5F, 0x95, 0x0B, 0xEC, 0xA6, 0x23, 0x45, + 0xFA, 0xB5, 0xDB, 0x83, 0x0B, 0x7C, 0x91, 0xEF, 0xB8, 0x6E, 0xA1, 0x34, 0x62, 0x6A, 0x50, 0x6C, + 0x6F, 0x8F, 0x12, 0x20, 0x48, 0x91, 0xF0, 0xA7, 0xE0, 0x09, 0xF9, 0x26, 0x70, 0x8D, 0xF8, 0x4A, + 0xD4, 0xA8, 0xF7, 0x36, 0xE2, 0xF5, 0xCE, 0xA6, 0x4D, 0x3D, 0xDE, 0xEE, 0xF5, 0x7A, 0xEF, 0xF9, + 0x83, 0xAC, 0xB1, 0xD3, 0x5D, 0x38, 0x71, 0x93, 0x45, 0x65, 0xC3, 0x92, 0x71, 0x1A, 0x3B, 0xF2, + 0x7C, 0xD0, 0x02, 0xE6, 0x20, 0x20, 0x34, 0xA1, 0x95, 0x18, 0x1F, 0x0F, 0xB7, 0xE4, 0x64, 0xBC, + 0x63, 0x54, 0x6F, 0xBD, 0xB2, 0xC7, 0x95, 0x4C, 0x61, 0xE3, 0x0D, 0x3F, 0xA7, 0xD1, 0x29, 0xC0, + 0xEC, 0x60, 0x8D, 0x54, 0x7A, 0x1D, 0x43, 0x2E, 0xC7, 0x0C, 0xDB, 0x4B, 0xEB, 0xDC, 0xD0, 0x09, + 0x4A, 0x30, 0x63, 0x02, 0x32, 0x99, 0x46, 0x13, 0xD9, 0x4C, 0x56, 0xE7, 0x14, 0xE7, 0xD3, 0x04 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 83584. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_83584.cs +// + +namespace KeyCMF_083584 +{ + static const BYTE Keytable[] = + { + 0xA6, 0xFD, 0x06, 0x44, 0x25, 0xCA, 0xB7, 0x1B, 0x96, 0x2D, 0x6F, 0xDB, 0xB8, 0x94, 0xA0, 0xEE, + 0xB9, 0x31, 0x18, 0xD8, 0x1F, 0xCF, 0xF3, 0xC1, 0xE9, 0xD5, 0x6C, 0x45, 0x04, 0x25, 0xBC, 0x25, + 0x33, 0x17, 0xF7, 0xDC, 0xD0, 0x03, 0x47, 0x74, 0xED, 0xE4, 0xC6, 0x8E, 0xCE, 0x83, 0x2B, 0x93, + 0x27, 0xAC, 0xF1, 0x49, 0x69, 0xFC, 0xAC, 0x67, 0x00, 0xAD, 0x1B, 0x46, 0xE1, 0x0B, 0x3F, 0x5F, + 0x5C, 0xA6, 0x15, 0x9D, 0x8D, 0xC8, 0x53, 0xF2, 0x46, 0xEF, 0xC5, 0x1C, 0xF9, 0xEE, 0x7B, 0x80, + 0x38, 0xF8, 0x1D, 0xD4, 0x96, 0x32, 0x01, 0x62, 0xF7, 0xEF, 0x3B, 0x3A, 0xE6, 0x0E, 0xF2, 0x8D, + 0x2B, 0x9A, 0x5B, 0x18, 0x91, 0x6A, 0x98, 0x11, 0xC1, 0x96, 0xC5, 0xCA, 0xB1, 0xB2, 0xFD, 0xE3, + 0xC4, 0x1D, 0x30, 0x80, 0x44, 0x3F, 0x57, 0xBE, 0x6B, 0x15, 0xC0, 0xF8, 0xF8, 0x4F, 0x6C, 0xF6, + 0x59, 0xE5, 0x2C, 0xFD, 0x6D, 0x10, 0x81, 0x31, 0x3D, 0x64, 0x36, 0x60, 0xEC, 0xBA, 0x22, 0x49, + 0xC5, 0x00, 0x31, 0x1C, 0x02, 0xB8, 0x72, 0xD3, 0xE6, 0x0F, 0x8C, 0x53, 0xA3, 0x6D, 0xC5, 0x3A, + 0xF1, 0x5D, 0x1D, 0x24, 0x88, 0xEC, 0x68, 0x92, 0xAE, 0x2F, 0xE6, 0x8C, 0xBF, 0xF8, 0x6A, 0xBD, + 0x65, 0x0A, 0x22, 0xF1, 0xD0, 0xAF, 0x83, 0xD7, 0x73, 0xA3, 0x01, 0xFE, 0x22, 0x3E, 0x51, 0xDA, + 0x0E, 0xA7, 0xB8, 0x2E, 0x5D, 0x0D, 0x15, 0x6F, 0xF5, 0x7D, 0xE1, 0xD7, 0xD0, 0x1B, 0x17, 0xB3, + 0x0A, 0x0B, 0x4B, 0xEC, 0x0F, 0x31, 0x06, 0xE9, 0xEC, 0x07, 0xDC, 0x79, 0xF3, 0x80, 0xA4, 0xDB, + 0x4A, 0xCD, 0x7A, 0x48, 0xC2, 0x64, 0x53, 0x0B, 0x8C, 0xF5, 0x03, 0x32, 0x43, 0x41, 0xB1, 0xFA, + 0x0E, 0x32, 0xEF, 0x8B, 0x6A, 0x1E, 0xB9, 0x7B, 0x09, 0x88, 0xFF, 0x47, 0xF3, 0x7D, 0x3D, 0x80, + 0x7A, 0x72, 0x45, 0x31, 0xF1, 0x24, 0x17, 0xCC, 0x9B, 0xEB, 0xCB, 0x8E, 0x29, 0x7B, 0xF3, 0xFD, + 0x7C, 0x23, 0x34, 0x93, 0x8A, 0xC6, 0x4A, 0xC5, 0x51, 0xCC, 0x05, 0xAC, 0xD4, 0xFC, 0x7B, 0xE8, + 0x91, 0x5C, 0x6A, 0xA5, 0x1C, 0x0C, 0xB3, 0x5E, 0x26, 0xD8, 0xB6, 0xE6, 0xED, 0x25, 0xD8, 0x91, + 0x3D, 0x20, 0x6C, 0x46, 0x72, 0x4C, 0xF6, 0xFF, 0x65, 0xFE, 0xA7, 0xC4, 0x39, 0xBE, 0x7C, 0x95, + 0xF5, 0xEC, 0x3A, 0xB2, 0xEF, 0x25, 0x0A, 0x51, 0x7B, 0xB5, 0x5A, 0x09, 0x45, 0x88, 0xDC, 0x2D, + 0x30, 0xFE, 0xA4, 0xCF, 0x1A, 0xFE, 0x4D, 0x83, 0xCA, 0xA8, 0xC2, 0x98, 0x4F, 0xD2, 0x7F, 0xE5, + 0xD8, 0x91, 0x96, 0xD1, 0xE0, 0x35, 0x4A, 0x32, 0xDC, 0xBD, 0xD7, 0x60, 0x46, 0x30, 0x7A, 0x55, + 0x18, 0xEC, 0x44, 0x19, 0xC5, 0xA8, 0x2E, 0x5A, 0x3A, 0xCF, 0xC0, 0xFE, 0xBC, 0x76, 0x1C, 0x30, + 0x8F, 0x65, 0xB7, 0x0B, 0xF1, 0xB9, 0x39, 0x93, 0xC4, 0x72, 0x9D, 0x99, 0x95, 0xDA, 0xBD, 0xF3, + 0x22, 0x2C, 0x81, 0x92, 0x6C, 0x60, 0x6B, 0xDB, 0xA2, 0xEB, 0xCD, 0x2F, 0xCC, 0x2E, 0x48, 0x75, + 0x4E, 0x90, 0x89, 0xB5, 0x01, 0xA2, 0x50, 0x8D, 0x9F, 0xEE, 0x20, 0xB0, 0x2C, 0x20, 0xB9, 0x60, + 0xAE, 0xE7, 0xD3, 0x61, 0x73, 0xC0, 0x98, 0xDE, 0x90, 0x97, 0xD6, 0xD6, 0xC1, 0x73, 0x5D, 0xAD, + 0x2B, 0x05, 0x7B, 0xAD, 0x5A, 0xB8, 0x8B, 0x90, 0x3D, 0x20, 0xC9, 0x52, 0x88, 0xB9, 0x70, 0xCE, + 0xAB, 0x75, 0x13, 0x21, 0xF1, 0xC5, 0xFE, 0x5F, 0x9F, 0xF5, 0x14, 0x2B, 0xE6, 0xCC, 0x71, 0x30, + 0xE8, 0xBE, 0x97, 0x8B, 0x42, 0x33, 0x2C, 0xB7, 0x16, 0xFF, 0x45, 0x94, 0x78, 0x15, 0xA7, 0x41, + 0xD3, 0x7D, 0x26, 0x3C, 0x0D, 0x95, 0x8E, 0x02, 0x6D, 0x87, 0x93, 0xD3, 0xB0, 0x2D, 0x25, 0xE4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[3] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 84186. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_84186.cs +// + +namespace KeyCMF_084186 +{ + static const BYTE Keytable[] = + { + 0xC1, 0x1A, 0x81, 0xF1, 0x7E, 0xC4, 0x77, 0x56, 0xA5, 0x36, 0x83, 0x54, 0xF1, 0x85, 0x33, 0x0A, + 0xB8, 0x12, 0x2D, 0xD4, 0x32, 0xD1, 0x6C, 0x3A, 0x37, 0xD5, 0x3A, 0xD2, 0x9D, 0x69, 0xD7, 0x92, + 0x28, 0x80, 0x8E, 0x7A, 0xD0, 0xDF, 0x9E, 0x7B, 0x2F, 0x35, 0x85, 0xE2, 0xE8, 0xC2, 0x21, 0x98, + 0xD4, 0x0C, 0x1F, 0x82, 0x3B, 0x07, 0x38, 0x4E, 0x18, 0xFB, 0xA0, 0xDB, 0xC0, 0x69, 0xFF, 0x44, + 0x2A, 0x7C, 0x94, 0x14, 0x3F, 0xA4, 0xDD, 0x43, 0x44, 0x7A, 0x74, 0xDB, 0x00, 0xBD, 0xA5, 0x7E, + 0x51, 0x1C, 0x46, 0xAB, 0xE1, 0xE0, 0x2B, 0x9B, 0x75, 0xEB, 0xC8, 0x72, 0x98, 0x57, 0x7D, 0xF2, + 0x3F, 0xD6, 0xA7, 0xFF, 0x03, 0xC6, 0x37, 0x9D, 0xA3, 0x88, 0x6C, 0x12, 0x5B, 0x4A, 0x00, 0x28, + 0x55, 0x1C, 0x7F, 0xC7, 0x9F, 0x56, 0x1E, 0x41, 0xD6, 0x3E, 0xC2, 0x4E, 0x1C, 0x44, 0x16, 0x19, + 0x65, 0x32, 0xE3, 0xD1, 0x85, 0x0C, 0x62, 0x1D, 0x4C, 0x9C, 0x59, 0x20, 0xF5, 0x08, 0xD3, 0x30, + 0xA6, 0x5C, 0x51, 0x6E, 0x76, 0x94, 0x4B, 0x21, 0x7A, 0xCF, 0xDB, 0xE4, 0x8A, 0x2C, 0x65, 0x72, + 0xC2, 0x1F, 0x76, 0xC8, 0x87, 0x66, 0x23, 0xF0, 0x21, 0x35, 0x84, 0xBA, 0x84, 0x62, 0x55, 0x0C, + 0xB2, 0x6F, 0x99, 0xB0, 0xDC, 0x38, 0x9D, 0x56, 0x82, 0xA2, 0x4D, 0x83, 0x1B, 0xF2, 0xCC, 0xEA, + 0xC0, 0xF2, 0x2B, 0xDB, 0xC7, 0x1C, 0x42, 0x52, 0xBF, 0xC5, 0xB6, 0x96, 0x67, 0x8B, 0x61, 0xF9, + 0x0F, 0xA7, 0x58, 0xF9, 0xA9, 0xDE, 0xCD, 0x54, 0x4C, 0xD5, 0xBA, 0x75, 0x8F, 0xEA, 0x1E, 0xA2, + 0x9C, 0x15, 0xD4, 0x7A, 0xC3, 0xC3, 0x6D, 0x22, 0xAA, 0x25, 0x48, 0x8A, 0xDD, 0x19, 0xD9, 0x6A, + 0xE8, 0x6C, 0xE5, 0x34, 0xBB, 0x71, 0xCE, 0xEF, 0xE2, 0xE1, 0x95, 0xDF, 0x05, 0x84, 0x30, 0x5B, + 0xDF, 0x5D, 0x02, 0x04, 0x0F, 0x7A, 0x91, 0xB6, 0x9A, 0xE8, 0xF9, 0xC1, 0x19, 0x79, 0xB0, 0x49, + 0x4F, 0x28, 0xFD, 0x69, 0x77, 0x3D, 0xDC, 0xB3, 0xAA, 0x4D, 0xD4, 0x4D, 0x36, 0xFF, 0xCB, 0x81, + 0x13, 0x5B, 0xF8, 0xFC, 0x6E, 0xA0, 0xAD, 0xFD, 0xE4, 0x8F, 0x84, 0x12, 0x94, 0xD3, 0x70, 0x3A, + 0x0C, 0x16, 0xDF, 0xB0, 0x85, 0x6A, 0x7E, 0xE6, 0x1B, 0xE3, 0x0D, 0x36, 0xC2, 0x1D, 0x9D, 0xEA, + 0x6E, 0xCC, 0x41, 0x52, 0x4D, 0x08, 0x51, 0x1C, 0xCF, 0xC5, 0x76, 0x67, 0xA1, 0x27, 0x8B, 0xE0, + 0x69, 0x81, 0x42, 0x24, 0x8B, 0xE8, 0x1C, 0x6C, 0x92, 0xE2, 0x64, 0xBF, 0xE6, 0x11, 0x01, 0x42, + 0x90, 0xDE, 0x97, 0x92, 0x48, 0xC6, 0x86, 0x9A, 0x1A, 0xC3, 0x2B, 0x23, 0x52, 0xA3, 0xA0, 0x2F, + 0x62, 0xBE, 0xF3, 0x35, 0xB9, 0xFD, 0x58, 0x8D, 0x86, 0xB2, 0x10, 0x7C, 0xAC, 0xDC, 0x44, 0x1A, + 0x9A, 0x31, 0xAA, 0xA8, 0x7C, 0x05, 0x6B, 0x6A, 0x24, 0x28, 0x9C, 0x1A, 0xA8, 0xED, 0x82, 0x8C, + 0x0E, 0x44, 0x2D, 0x3D, 0xFC, 0x1D, 0xC7, 0x0C, 0x61, 0x4F, 0x7C, 0xE2, 0x0C, 0x51, 0x16, 0x38, + 0x06, 0xDA, 0x72, 0x7D, 0xD7, 0x5D, 0xF8, 0xB4, 0x83, 0x19, 0xA7, 0xEB, 0x4E, 0xE2, 0xC5, 0xC8, + 0xC3, 0xC5, 0xC9, 0x24, 0xD9, 0x7D, 0xD7, 0x56, 0x98, 0x28, 0x8B, 0x75, 0x4C, 0x44, 0xA3, 0x53, + 0x47, 0xCA, 0x27, 0xB0, 0x77, 0xC6, 0x5F, 0x45, 0x52, 0xBC, 0x4F, 0x2E, 0x46, 0x18, 0x2D, 0x0E, + 0x0F, 0x64, 0x6F, 0x86, 0x64, 0x0E, 0x46, 0x68, 0xD7, 0xBA, 0x4A, 0xF5, 0x0A, 0x5E, 0x68, 0x37, + 0x54, 0x0B, 0x5B, 0x2A, 0x9F, 0xFE, 0xDC, 0x08, 0xFD, 0x7D, 0x7F, 0xCD, 0x55, 0xA4, 0x29, 0xBA, + 0x71, 0xC0, 0x4A, 0x2A, 0x46, 0xFA, 0x70, 0x68, 0x54, 0xC6, 0x17, 0x08, 0x06, 0x14, 0x01, 0x9D + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 84997. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_84997.cs +// + +namespace KeyCMF_084997 +{ + static const BYTE Keytable[] = + { + 0x3C, 0x89, 0x35, 0xD0, 0xD9, 0x05, 0x70, 0xAE, 0x77, 0xB0, 0x48, 0x74, 0xB0, 0x25, 0x78, 0xE4, + 0x0E, 0xDC, 0x69, 0x99, 0xC6, 0xC1, 0x8A, 0x2D, 0xEE, 0x8D, 0xD3, 0x98, 0x2E, 0xE3, 0xE2, 0x39, + 0xEF, 0x24, 0xE1, 0x2A, 0x99, 0x76, 0x1F, 0x9D, 0xDF, 0x05, 0xB9, 0x65, 0xED, 0xB5, 0xA4, 0xE4, + 0x0A, 0x3E, 0x33, 0x3B, 0x8B, 0x4E, 0x25, 0x28, 0x12, 0x06, 0xEA, 0x7E, 0x4C, 0x79, 0xDE, 0xB4, + 0xB0, 0x8B, 0x20, 0x0A, 0x44, 0x8B, 0xBC, 0xC7, 0x7F, 0x42, 0x34, 0x1D, 0x19, 0xF2, 0xD1, 0xDC, + 0x6F, 0xC0, 0x6E, 0x78, 0x51, 0xF4, 0xD8, 0x66, 0xEA, 0xCA, 0x06, 0xC2, 0xC4, 0x2B, 0xDF, 0x15, + 0x71, 0xA5, 0x67, 0xF9, 0xB0, 0x54, 0x36, 0x5A, 0x7D, 0x45, 0xE8, 0x3D, 0xEA, 0x02, 0x9E, 0xCF, + 0x67, 0xAF, 0x1B, 0x35, 0x66, 0x25, 0xA8, 0x23, 0xA7, 0x07, 0x9F, 0xE9, 0x8A, 0x3C, 0xA8, 0xF8, + 0x75, 0xC8, 0x57, 0x84, 0xC6, 0xF5, 0x17, 0x40, 0xD4, 0x22, 0xE5, 0x2C, 0x1D, 0x7A, 0xE6, 0xAE, + 0x38, 0x0C, 0xE7, 0xF5, 0x05, 0x33, 0xE6, 0x47, 0x75, 0x40, 0x43, 0x49, 0xF2, 0x7A, 0x0D, 0x33, + 0x42, 0x06, 0xD9, 0x2C, 0x46, 0x6C, 0x4F, 0xBF, 0xEB, 0xD4, 0x2C, 0xAB, 0x35, 0xBD, 0x53, 0xAC, + 0x5F, 0x3D, 0x0B, 0x0F, 0xA0, 0x17, 0x0E, 0x00, 0x4A, 0xBC, 0x76, 0x71, 0x41, 0x71, 0xD9, 0xBA, + 0xE2, 0xAB, 0x0A, 0x60, 0x2C, 0x9C, 0x37, 0x2D, 0xDD, 0x20, 0xBD, 0x79, 0x66, 0x42, 0xB1, 0x4B, + 0x9A, 0xB7, 0x60, 0x54, 0x11, 0x46, 0x73, 0x26, 0xE2, 0x04, 0x83, 0xD7, 0x0D, 0xEC, 0x60, 0x3F, + 0x82, 0xCF, 0x33, 0x29, 0x83, 0xDE, 0xEC, 0x58, 0xD9, 0x5F, 0xB8, 0xBC, 0x24, 0x26, 0x7A, 0x46, + 0xE9, 0x7A, 0x0B, 0x54, 0x3F, 0x8E, 0x8B, 0x30, 0x06, 0x40, 0x05, 0x1D, 0x14, 0xD2, 0xBA, 0xF6, + 0xB2, 0x84, 0xBA, 0x03, 0x8B, 0xD3, 0x0D, 0x0A, 0x13, 0x02, 0x2D, 0x5F, 0x79, 0xD0, 0x47, 0xE0, + 0x7D, 0x47, 0x78, 0x36, 0xF1, 0x58, 0x6A, 0x16, 0x42, 0x11, 0x5D, 0x2A, 0xA7, 0xF9, 0xAC, 0xA0, + 0xA9, 0xD4, 0x94, 0xBB, 0x91, 0x3C, 0x63, 0x6C, 0xB7, 0x23, 0xC5, 0xED, 0xA2, 0x05, 0x9D, 0x59, + 0x19, 0xBB, 0x1F, 0x18, 0xFC, 0xAF, 0x8E, 0x6E, 0x6A, 0x91, 0x2A, 0x01, 0xB9, 0xD6, 0x5C, 0x1A, + 0x71, 0xFE, 0x08, 0xAD, 0x90, 0xBB, 0x29, 0x3F, 0x57, 0x46, 0xAA, 0xF9, 0xCA, 0x62, 0x26, 0x2B, + 0xA3, 0x7D, 0x65, 0x0A, 0xD5, 0x5E, 0x27, 0x21, 0xA1, 0xD5, 0x37, 0xB5, 0x44, 0x4F, 0xC6, 0xE5, + 0x55, 0xDD, 0x38, 0x41, 0x7F, 0x20, 0x26, 0x01, 0x0E, 0x72, 0x7F, 0x1A, 0x4B, 0x28, 0xEE, 0xD0, + 0x29, 0x90, 0x4C, 0x28, 0xC4, 0xC7, 0xC8, 0x2E, 0xCF, 0x54, 0x83, 0xE2, 0x91, 0x01, 0x7C, 0x95, + 0x33, 0x43, 0x0F, 0x7C, 0xAB, 0xBD, 0x7C, 0x3B, 0x5C, 0x19, 0x9D, 0x4C, 0xC9, 0x4E, 0x33, 0x27, + 0x04, 0x78, 0x0C, 0xB0, 0xCA, 0xEC, 0x96, 0xDA, 0x8B, 0x74, 0xE1, 0x91, 0x34, 0x6D, 0x82, 0x62, + 0x6B, 0x6B, 0xC9, 0x34, 0x8B, 0x9F, 0xC5, 0x45, 0xAD, 0x61, 0xCB, 0x2D, 0x85, 0x0A, 0x67, 0x65, + 0x7F, 0x45, 0x86, 0xED, 0x4D, 0x15, 0xED, 0x00, 0x0B, 0x3C, 0x98, 0x47, 0x1D, 0x9F, 0xEA, 0x31, + 0xC7, 0x47, 0x51, 0x24, 0x3A, 0xF3, 0x01, 0xE4, 0x9E, 0x53, 0xD7, 0x2F, 0x11, 0xB8, 0x8A, 0xCF, + 0xEA, 0xBC, 0x78, 0xB4, 0xAB, 0x89, 0x80, 0x4F, 0x9A, 0xD0, 0xA8, 0xAD, 0x7B, 0x0B, 0x54, 0xD2, + 0x3B, 0x1B, 0x82, 0xE3, 0xDC, 0x8C, 0x15, 0xE0, 0x33, 0xA6, 0xC6, 0x89, 0x67, 0x29, 0x20, 0xDC, + 0xF9, 0x4B, 0x28, 0xA5, 0x71, 0x7A, 0xC4, 0xDC, 0xC7, 0x64, 0xAD, 0x85, 0xAB, 0x26, 0x9D, 0x2A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 85660. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_85660.cs +// + +namespace KeyCMF_085660 +{ + static const BYTE Keytable[] = + { + 0x1D, 0xF3, 0xF6, 0x8A, 0x83, 0x2C, 0x56, 0x74, 0x7A, 0x88, 0xAE, 0x75, 0x1B, 0x86, 0x2E, 0x4C, + 0x74, 0x17, 0x3E, 0xC4, 0x58, 0x4E, 0x59, 0xAC, 0xA9, 0xAD, 0xA0, 0x11, 0x14, 0x2D, 0x05, 0x76, + 0x45, 0x8C, 0x5C, 0x6C, 0x4A, 0xCC, 0x5B, 0xBD, 0x84, 0x17, 0xF5, 0xFE, 0xC1, 0xC4, 0xEA, 0x46, + 0x5F, 0x95, 0xF5, 0xF7, 0xDE, 0x8D, 0xD8, 0xC7, 0xE1, 0x17, 0x5C, 0x54, 0xB6, 0xA3, 0xF7, 0xED, + 0x12, 0x71, 0x0A, 0xB1, 0xEE, 0xF4, 0xBF, 0x96, 0xF6, 0xD0, 0xB7, 0x21, 0x10, 0x75, 0x09, 0x3E, + 0xE2, 0x3F, 0x47, 0x3D, 0x8B, 0x13, 0xB2, 0xC2, 0x6C, 0x4E, 0x76, 0xCA, 0x04, 0xB8, 0xFE, 0x9D, + 0x07, 0x11, 0x13, 0x90, 0xCE, 0x51, 0x82, 0x39, 0xEA, 0x50, 0x1E, 0xE5, 0x0A, 0x34, 0x3D, 0x69, + 0x35, 0xC9, 0x9E, 0x1D, 0xEE, 0x28, 0x62, 0xC2, 0xCC, 0xCF, 0xD9, 0x09, 0x84, 0x0F, 0x91, 0x7C, + 0x38, 0x8A, 0x52, 0x8E, 0x01, 0x3B, 0x58, 0x01, 0x80, 0x7C, 0xFD, 0xE4, 0x30, 0xF3, 0xC8, 0xA4, + 0x99, 0xCE, 0x31, 0x59, 0x24, 0x7A, 0x42, 0xFF, 0x01, 0xB5, 0x0C, 0x55, 0x64, 0x1A, 0x29, 0x38, + 0x87, 0xAD, 0xB6, 0xD2, 0xA1, 0xFB, 0x54, 0x3C, 0xCB, 0x88, 0xE7, 0x42, 0x79, 0x8B, 0x3F, 0x4A, + 0x4A, 0xFC, 0xAD, 0x60, 0x04, 0x24, 0xA9, 0x96, 0xAA, 0xB7, 0x90, 0x08, 0x53, 0x6A, 0x5B, 0x83, + 0x0B, 0xF8, 0xC1, 0xA0, 0xA2, 0xA5, 0xCA, 0x97, 0x32, 0x5E, 0x18, 0x05, 0x20, 0xE8, 0xAF, 0xE1, + 0x1C, 0xB0, 0xFF, 0xC4, 0x77, 0xDE, 0xF2, 0x67, 0xF8, 0x07, 0x7F, 0x93, 0xC6, 0xC5, 0xFA, 0x47, + 0x32, 0x32, 0x09, 0xC6, 0xCB, 0x05, 0x22, 0x97, 0x7D, 0xA6, 0x73, 0x3F, 0x24, 0xD0, 0x12, 0x10, + 0xCE, 0xB5, 0x07, 0xB1, 0xF4, 0x72, 0x8E, 0x18, 0xA2, 0x87, 0xD8, 0x13, 0x14, 0x12, 0x26, 0xD9, + 0xA0, 0x69, 0x65, 0x57, 0xAB, 0x1B, 0x8E, 0xC9, 0xBF, 0x3E, 0x97, 0x71, 0x23, 0x17, 0x3E, 0x45, + 0x9B, 0xF9, 0xCA, 0x1D, 0x93, 0x9F, 0x4B, 0x49, 0x62, 0x32, 0x7A, 0x1F, 0xAB, 0xF1, 0x95, 0x93, + 0xFB, 0xFD, 0x95, 0x59, 0xFD, 0xF9, 0xF1, 0x6F, 0x0B, 0xFA, 0xC9, 0x0E, 0xFA, 0x6C, 0x5A, 0x6E, + 0xC2, 0x9D, 0x4F, 0xC1, 0x50, 0xD2, 0x87, 0xA4, 0x4D, 0x08, 0x33, 0x44, 0x06, 0x19, 0x09, 0x18, + 0x7C, 0x8A, 0x14, 0x14, 0x2C, 0x03, 0x5B, 0x43, 0x10, 0x8F, 0x40, 0x9F, 0x30, 0xCF, 0x92, 0x08, + 0xA4, 0xAA, 0x88, 0x3A, 0x8D, 0xF8, 0xC7, 0x69, 0xDB, 0x31, 0xA6, 0x88, 0x92, 0x25, 0x4E, 0xF8, + 0x97, 0x52, 0x05, 0x5C, 0xBB, 0xDD, 0x21, 0x57, 0x3C, 0x55, 0x6C, 0xD4, 0x91, 0xA3, 0xCD, 0xD5, + 0xD4, 0xF9, 0xC6, 0x50, 0xF3, 0x34, 0x55, 0xFA, 0xCE, 0x80, 0x84, 0x7D, 0x44, 0xBB, 0xA9, 0x58, + 0x08, 0x60, 0x1D, 0x3F, 0x4E, 0xDC, 0xAA, 0x62, 0x70, 0x70, 0x16, 0xA4, 0x26, 0x16, 0x90, 0xB1, + 0x3D, 0x0D, 0x34, 0x27, 0x49, 0x18, 0x09, 0xB0, 0xA4, 0x9C, 0x40, 0x22, 0x3A, 0xB4, 0x78, 0x86, + 0x39, 0x26, 0xDF, 0x86, 0x07, 0x61, 0xA7, 0x95, 0x97, 0x2E, 0xA8, 0x0A, 0xB5, 0x2E, 0x6B, 0xF2, + 0xA3, 0x82, 0x9D, 0x5C, 0xCE, 0xD1, 0x65, 0x27, 0x64, 0x24, 0x9D, 0x00, 0xCC, 0xE9, 0x6D, 0xA6, + 0x55, 0xBD, 0x82, 0x37, 0x67, 0xA2, 0x03, 0x9F, 0x4B, 0xEC, 0x4C, 0x03, 0xF7, 0xD3, 0x47, 0x20, + 0x42, 0x79, 0x9D, 0x3C, 0x0E, 0x07, 0x05, 0x1C, 0x7F, 0xFF, 0xF4, 0x8B, 0x39, 0x9E, 0x8D, 0xA1, + 0xD8, 0xF6, 0x52, 0x5F, 0xE2, 0xDE, 0xE9, 0x3A, 0xD5, 0xDA, 0xD2, 0x11, 0x15, 0xA9, 0x5F, 0x3B, + 0xB7, 0xB3, 0x26, 0xDA, 0x91, 0xAF, 0x8D, 0xDF, 0x01, 0x22, 0x60, 0xCB, 0x3B, 0x81, 0x6D, 0x86 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[((2 * digest[13]) - length) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 86739. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_86739.cs +// + +namespace KeyCMF_086739 +{ + static const BYTE Keytable[] = + { + 0xB8, 0xD6, 0x31, 0x12, 0x82, 0xD8, 0x3C, 0x78, 0x1C, 0xB1, 0x14, 0x13, 0xBB, 0xCC, 0xFD, 0x96, + 0x25, 0x69, 0x9A, 0x6A, 0x0A, 0xB4, 0x2F, 0x55, 0x49, 0x95, 0x27, 0xDB, 0x3D, 0x06, 0x70, 0xAF, + 0xDB, 0xFC, 0x56, 0x81, 0x9E, 0xFA, 0xA2, 0x6F, 0xB4, 0xE8, 0x4E, 0xE6, 0xAC, 0x96, 0xD5, 0x76, + 0x17, 0x09, 0x6E, 0xDF, 0x05, 0x8A, 0xE2, 0x3F, 0x1F, 0x99, 0x45, 0x76, 0xE2, 0x48, 0x7B, 0x3F, + 0xAA, 0x00, 0x16, 0xA0, 0x1D, 0x99, 0xED, 0x54, 0x9E, 0xCA, 0xE0, 0x7E, 0xBE, 0xFA, 0x83, 0xA2, + 0x1E, 0xA7, 0x4D, 0x39, 0xF7, 0x3D, 0xCF, 0x8E, 0x35, 0x51, 0x2E, 0xF1, 0x0F, 0xDE, 0xF7, 0x33, + 0x56, 0x2F, 0xD0, 0xB8, 0x52, 0xDC, 0x53, 0x20, 0x3F, 0x23, 0x0C, 0xA0, 0xE4, 0x36, 0x32, 0x37, + 0xBB, 0xF7, 0xE0, 0x97, 0x62, 0x99, 0x88, 0x83, 0xD0, 0x35, 0x57, 0x60, 0xB2, 0xAE, 0xA0, 0x4A, + 0xB4, 0x16, 0x7B, 0x33, 0x7C, 0x9F, 0x7C, 0xAB, 0xA9, 0x59, 0xA6, 0xB5, 0x68, 0x0E, 0xAF, 0x21, + 0x71, 0xB5, 0xFF, 0x61, 0x0E, 0x27, 0xA9, 0x6D, 0xF2, 0x36, 0xA2, 0x79, 0x74, 0xC2, 0x04, 0xE2, + 0xFE, 0xBE, 0x02, 0x17, 0xA7, 0x7F, 0x7A, 0x18, 0xDE, 0xB0, 0xEE, 0x5B, 0x4A, 0xF1, 0x77, 0x82, + 0x00, 0x4F, 0xD7, 0x06, 0xC7, 0x1D, 0x19, 0x62, 0xE4, 0x5E, 0x6E, 0xB5, 0xC9, 0x03, 0x28, 0x5B, + 0x6C, 0xC6, 0x00, 0x4A, 0x75, 0xA0, 0x39, 0x4B, 0x05, 0xB7, 0xEB, 0x17, 0x6F, 0x79, 0x2E, 0x3B, + 0x52, 0x43, 0x7F, 0x6A, 0x2D, 0x09, 0x10, 0x0A, 0x6A, 0xBE, 0xAF, 0x88, 0xFD, 0x68, 0x05, 0x6E, + 0xEF, 0xB0, 0x13, 0xAD, 0xA6, 0xF6, 0x31, 0xA9, 0xCE, 0x51, 0xEA, 0xBD, 0x4E, 0x81, 0x43, 0x9D, + 0xB5, 0xEF, 0xD6, 0xEF, 0xB5, 0x42, 0x2B, 0x5F, 0xFD, 0x19, 0xF5, 0xFC, 0x9C, 0xB0, 0xEA, 0x59, + 0x0B, 0x2C, 0xA0, 0x6F, 0x89, 0x96, 0x95, 0xBE, 0x7F, 0xA3, 0x92, 0x36, 0xA1, 0x3D, 0x30, 0xFC, + 0xC1, 0x31, 0x4A, 0x19, 0xB3, 0x98, 0xF3, 0x7B, 0xF0, 0x7E, 0x15, 0x0D, 0x01, 0xE0, 0x4D, 0x6A, + 0xE4, 0x82, 0x66, 0x4E, 0x48, 0xB0, 0x49, 0x0A, 0xB2, 0x45, 0xAA, 0xCD, 0xD1, 0xA3, 0xE9, 0x29, + 0xA0, 0x48, 0x84, 0xE4, 0xDB, 0xB9, 0x10, 0x22, 0x7D, 0x19, 0x77, 0x91, 0x56, 0xF7, 0x2C, 0xF1, + 0x9A, 0xB0, 0x2F, 0xAE, 0xBF, 0x79, 0x98, 0xDC, 0x4B, 0xA0, 0xAF, 0x4C, 0x73, 0x49, 0x63, 0x2A, + 0xC2, 0x34, 0xE8, 0x0E, 0xD0, 0xBA, 0x3C, 0x95, 0x29, 0x97, 0x13, 0x35, 0x81, 0x21, 0x3B, 0x22, + 0xAF, 0x76, 0x3D, 0x37, 0x89, 0x9E, 0xB0, 0x1F, 0xBC, 0x26, 0xE2, 0x44, 0x07, 0x11, 0x0B, 0xF0, + 0xF3, 0x31, 0x18, 0x91, 0x75, 0x59, 0xA2, 0xB0, 0x0A, 0x34, 0xC0, 0x50, 0xC1, 0x06, 0xA6, 0xC3, + 0x32, 0xEA, 0xA8, 0xC1, 0x37, 0xED, 0xCE, 0x4F, 0x59, 0xDB, 0x8F, 0x8B, 0xBB, 0x1C, 0xD0, 0x0F, + 0x35, 0x0B, 0x63, 0x3B, 0x87, 0x3F, 0x39, 0xB4, 0xF8, 0xF7, 0x47, 0x34, 0x3B, 0x74, 0x5D, 0xBD, + 0x9A, 0x89, 0xCD, 0xB1, 0x33, 0x39, 0x4F, 0x45, 0x08, 0x6C, 0x01, 0x6C, 0xBB, 0x79, 0x7F, 0xB0, + 0xFF, 0x54, 0xA5, 0xBE, 0x97, 0xC1, 0xF3, 0xBB, 0x13, 0xE3, 0x53, 0x48, 0x28, 0xBE, 0x08, 0xE0, + 0x04, 0x96, 0x56, 0xE6, 0x44, 0xF3, 0x46, 0x0B, 0x50, 0x1D, 0xED, 0xF6, 0x74, 0xB5, 0xF9, 0x3C, + 0xC3, 0xB2, 0x5B, 0x77, 0x66, 0xF4, 0x3C, 0xDB, 0xDE, 0x80, 0x45, 0x14, 0x84, 0xA7, 0x84, 0x0B, + 0x05, 0x1E, 0xF9, 0x6C, 0x7F, 0x15, 0xF8, 0x5A, 0x7A, 0xAA, 0xC6, 0xA4, 0x8B, 0x69, 0x85, 0x4D, + 0x4E, 0x12, 0x7D, 0xC8, 0x68, 0xFE, 0x2F, 0xA7, 0xCB, 0x18, 0x98, 0x53, 0x5C, 0x00, 0x55, 0xFF + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 87506. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_87506.cs +// + +namespace KeyCMF_087506 +{ + static const BYTE Keytable[] = + { + 0xA7, 0x2E, 0xAF, 0x37, 0x67, 0xF4, 0x6C, 0x98, 0x0A, 0xC0, 0xC9, 0xDD, 0x21, 0x32, 0x56, 0x98, + 0x9B, 0x96, 0xA3, 0x96, 0xAC, 0xDF, 0x03, 0x9B, 0xD6, 0xA4, 0x2B, 0x77, 0x2B, 0x7F, 0xE6, 0x87, + 0xDE, 0x18, 0x5C, 0x1E, 0xF4, 0x55, 0x5C, 0xAE, 0xA6, 0xE7, 0x1C, 0x34, 0x2A, 0xFD, 0x72, 0xF5, + 0x66, 0x70, 0x68, 0x88, 0xCD, 0x4F, 0x21, 0xE5, 0x3D, 0xF6, 0xFB, 0x9F, 0x5C, 0x6A, 0xD9, 0x57, + 0xA6, 0xBE, 0xC5, 0x7F, 0x9D, 0x4F, 0xEA, 0x05, 0x37, 0x68, 0x40, 0x26, 0xB0, 0xE0, 0x81, 0x80, + 0xE0, 0xAA, 0x3E, 0x45, 0x2C, 0xA8, 0x57, 0x01, 0xFC, 0x8D, 0x2A, 0x12, 0xE6, 0x69, 0xCA, 0xBF, + 0x4B, 0x57, 0x10, 0x4F, 0x3B, 0xDC, 0x78, 0x56, 0x46, 0x57, 0xD3, 0x0F, 0xF6, 0xA3, 0x9A, 0x3D, + 0x64, 0x32, 0xB8, 0x0A, 0xDB, 0x17, 0xF6, 0x9C, 0x62, 0x66, 0xF1, 0x79, 0x49, 0x2D, 0x39, 0xAA, + 0x4D, 0x34, 0x17, 0xE1, 0x1D, 0x19, 0xCA, 0xA6, 0x3B, 0xF0, 0xCA, 0xAF, 0xBE, 0xFB, 0x4A, 0x3E, + 0xDA, 0xF4, 0xD0, 0x7C, 0x11, 0x8B, 0xF7, 0xCC, 0x37, 0x61, 0x4D, 0x9C, 0xF6, 0xF6, 0xAB, 0xE2, + 0x23, 0x53, 0x23, 0x62, 0xEF, 0x41, 0xCD, 0xBA, 0xBD, 0xB9, 0xAF, 0xE9, 0x4B, 0x02, 0xB7, 0x5A, + 0xCE, 0x5D, 0x36, 0xFF, 0x46, 0x64, 0xA3, 0xB4, 0x6D, 0xDF, 0x81, 0x76, 0x59, 0x29, 0xC5, 0xB3, + 0xE2, 0x16, 0x31, 0x1B, 0x68, 0x19, 0x6F, 0x33, 0x71, 0x59, 0x76, 0xD0, 0x1F, 0x0D, 0x80, 0x79, + 0x73, 0x93, 0x87, 0x2E, 0xA6, 0x79, 0xBC, 0xB2, 0x47, 0x7A, 0x08, 0x6A, 0xEC, 0xA5, 0x6E, 0x7C, + 0x51, 0x1A, 0x6D, 0x31, 0x43, 0xEB, 0x50, 0xE3, 0x22, 0xF5, 0xBE, 0x2F, 0x61, 0x5D, 0xD9, 0x7B, + 0x25, 0xB3, 0xBA, 0x1F, 0xFD, 0x79, 0x81, 0x10, 0xA2, 0xF9, 0xB7, 0x0E, 0xE9, 0x75, 0x41, 0x78, + 0x2D, 0x50, 0xE9, 0x38, 0x2C, 0x23, 0x17, 0xB4, 0xF8, 0x55, 0x21, 0x0C, 0x6E, 0xA0, 0xFA, 0xD9, + 0x25, 0x9C, 0x59, 0x1D, 0xAB, 0x99, 0xB0, 0x8E, 0xDF, 0xE2, 0x72, 0xFA, 0xCD, 0x79, 0x07, 0x61, + 0xDB, 0x6E, 0xAA, 0x27, 0xEC, 0x23, 0x99, 0xE4, 0x9E, 0x02, 0xD0, 0xC3, 0xC5, 0xBC, 0xD1, 0xC3, + 0x98, 0x84, 0xC8, 0xE6, 0xA8, 0x3E, 0x3C, 0x4C, 0x35, 0x23, 0xD4, 0xEE, 0x7E, 0xFA, 0xFF, 0xF5, + 0x81, 0x2A, 0x4E, 0xA4, 0x6E, 0xBF, 0xCB, 0xCD, 0xE8, 0x67, 0xC6, 0xDC, 0x2D, 0x9B, 0xF2, 0x85, + 0x2F, 0x42, 0x0F, 0x23, 0xB4, 0xF7, 0x48, 0x4B, 0x7D, 0x1F, 0x3A, 0x0C, 0x0A, 0x96, 0x2B, 0x74, + 0xE6, 0xB0, 0xE4, 0x04, 0x5B, 0x12, 0x61, 0x1E, 0xD5, 0xBE, 0xA4, 0xDA, 0x69, 0x6C, 0x4F, 0xE1, + 0xDB, 0xE4, 0x2B, 0xA2, 0x59, 0xCE, 0x00, 0xDF, 0xB5, 0x39, 0x51, 0x6D, 0xBA, 0xB3, 0x9C, 0x00, + 0x25, 0xC0, 0x71, 0x48, 0x58, 0xD1, 0xBC, 0x0B, 0x07, 0x92, 0x8C, 0xBC, 0x52, 0x33, 0xA5, 0x8E, + 0xE6, 0x5C, 0x0A, 0x17, 0x83, 0xDF, 0xA1, 0x2A, 0xB0, 0x4F, 0x15, 0x3F, 0x59, 0xA9, 0xE2, 0x7E, + 0xB8, 0x57, 0x1C, 0x11, 0x1B, 0x8F, 0x67, 0xB0, 0xA7, 0x79, 0x6C, 0xC0, 0x32, 0xD8, 0x2B, 0x27, + 0xE6, 0x7D, 0x49, 0x68, 0xDE, 0x28, 0x1B, 0x95, 0x6B, 0x18, 0x02, 0xB8, 0x21, 0xF6, 0x2E, 0x87, + 0x3F, 0xC1, 0x7C, 0x01, 0x30, 0x2D, 0xEE, 0x7A, 0x78, 0x8C, 0x6C, 0x86, 0xBE, 0xAF, 0x3F, 0x26, + 0x71, 0x0C, 0xAF, 0xF9, 0x49, 0xBE, 0xF7, 0xB6, 0xAC, 0x22, 0x5B, 0x59, 0xB0, 0xD2, 0x76, 0x40, + 0xE2, 0xDC, 0x9F, 0x14, 0x52, 0x05, 0xE5, 0x27, 0x6A, 0x7D, 0x4B, 0xB5, 0xB6, 0x5E, 0x9C, 0xF1, + 0x9C, 0x19, 0x13, 0x57, 0x0D, 0xF1, 0xCD, 0x9C, 0xCF, 0x1F, 0xAC, 0x5B, 0x16, 0xB3, 0xF2, 0xBF + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]) % 17; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 88423. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_88423.cs +// + +namespace KeyCMF_088423 +{ + static const BYTE Keytable[] = + { + 0x6F, 0x80, 0x0F, 0x44, 0xA7, 0xC7, 0xD8, 0x75, 0xC2, 0xEF, 0x9C, 0x88, 0xCD, 0xA6, 0x13, 0x0B, + 0x5D, 0x8A, 0x84, 0x68, 0xFA, 0x7C, 0x1E, 0x9A, 0x48, 0xEE, 0x81, 0xAA, 0x3A, 0x1B, 0xBA, 0x2B, + 0xDB, 0x40, 0x01, 0x8B, 0x2B, 0x00, 0x16, 0x46, 0x48, 0x7C, 0xF7, 0xE3, 0xC4, 0xCE, 0x49, 0x6E, + 0x74, 0x75, 0xA1, 0xB2, 0x8D, 0x89, 0x1B, 0x46, 0x81, 0xD8, 0x1F, 0x6B, 0xAF, 0x16, 0x85, 0x4A, + 0x59, 0x4F, 0x21, 0x02, 0xA1, 0xFC, 0x51, 0xC1, 0xDB, 0x29, 0x43, 0x88, 0x72, 0xA6, 0x9E, 0xF7, + 0xC4, 0x4F, 0xC8, 0x1B, 0x79, 0x07, 0xB6, 0x8B, 0x76, 0xB1, 0x5F, 0x97, 0x0F, 0x37, 0x9C, 0xF6, + 0xBB, 0x84, 0x1F, 0x4A, 0x75, 0x59, 0xFE, 0x8B, 0xDC, 0x20, 0xB6, 0x3C, 0xE6, 0x6E, 0x64, 0xCA, + 0x50, 0x15, 0x7D, 0x35, 0x40, 0x75, 0x65, 0xC2, 0x2C, 0xFC, 0x30, 0xDF, 0x3F, 0x53, 0xF5, 0xD6, + 0x2A, 0x53, 0x34, 0x11, 0x76, 0x4A, 0xF2, 0x09, 0xFD, 0x83, 0x45, 0x93, 0x8B, 0x53, 0x94, 0x1B, + 0xCF, 0xF0, 0x7A, 0x7D, 0x5E, 0x36, 0x2C, 0xCB, 0x6C, 0xF9, 0xAB, 0x9E, 0xAB, 0xFD, 0x31, 0x5D, + 0xC3, 0x0F, 0x44, 0xE4, 0x19, 0x25, 0xC9, 0x16, 0x8C, 0x61, 0x13, 0xD6, 0xA4, 0x2A, 0x22, 0xD1, + 0x8C, 0x79, 0x9B, 0x96, 0xF0, 0xD5, 0x5B, 0xDA, 0x6B, 0xE1, 0xEA, 0x4B, 0xF1, 0xCC, 0x1B, 0xC1, + 0x99, 0x23, 0x09, 0xE2, 0xA6, 0xFF, 0xA9, 0x30, 0xDF, 0xE4, 0x2A, 0xC7, 0x7A, 0x5C, 0x51, 0xA7, + 0x9D, 0x79, 0xF3, 0xFD, 0x29, 0x50, 0xC1, 0x37, 0xB4, 0xAA, 0xBF, 0x46, 0xDE, 0x20, 0x32, 0x59, + 0x07, 0x89, 0x6C, 0xB7, 0xBC, 0x8D, 0x42, 0x9C, 0x21, 0x7A, 0x94, 0x12, 0xB5, 0xA4, 0x4B, 0xDE, + 0xD9, 0xA2, 0x3F, 0x8B, 0xD5, 0x74, 0xAE, 0xC1, 0x3F, 0x52, 0x89, 0x35, 0xD8, 0x8B, 0xDD, 0xBC, + 0xC6, 0x94, 0x1B, 0x95, 0x80, 0x7C, 0x7A, 0x23, 0x44, 0x92, 0x21, 0x11, 0x62, 0x2A, 0x51, 0x09, + 0x9A, 0xF8, 0xE1, 0x24, 0x2C, 0xF8, 0x57, 0xF6, 0x37, 0xD8, 0x15, 0x9A, 0x62, 0xEB, 0xC6, 0x54, + 0xBB, 0xD3, 0x1A, 0x2D, 0x87, 0x92, 0x34, 0xCD, 0x17, 0xBC, 0xE5, 0xBE, 0xE5, 0xC0, 0x4B, 0xB5, + 0xE0, 0xA7, 0x7E, 0x9C, 0x38, 0x90, 0x8A, 0x1F, 0xB0, 0x4C, 0x4F, 0x3E, 0x18, 0xD7, 0x6E, 0x2D, + 0x27, 0x6C, 0x1A, 0x72, 0xAE, 0x62, 0xFF, 0x7B, 0x91, 0xB5, 0x24, 0x87, 0x22, 0x1A, 0xDB, 0x4F, + 0xAE, 0x33, 0x19, 0x58, 0x89, 0xA0, 0x56, 0x9D, 0xCB, 0xEF, 0x1D, 0x3B, 0x1C, 0x94, 0xB4, 0x8D, + 0x6F, 0xED, 0x21, 0xC9, 0xA1, 0xD3, 0xCA, 0x22, 0x5B, 0xE7, 0x93, 0x9A, 0x9E, 0x16, 0x67, 0xA6, + 0xF0, 0x65, 0x40, 0xF1, 0x47, 0x79, 0xAD, 0xA6, 0x9E, 0x48, 0xD7, 0x42, 0x46, 0x64, 0xB0, 0x99, + 0x0D, 0xBD, 0xD8, 0xD4, 0x5F, 0xB3, 0xE4, 0x93, 0xBC, 0xF8, 0xB8, 0xA9, 0x82, 0xA5, 0x53, 0xDB, + 0xA2, 0x70, 0x9F, 0x02, 0x25, 0x0A, 0x4C, 0xEB, 0xC1, 0x2C, 0xEE, 0x27, 0xC2, 0xA1, 0x12, 0x11, + 0x38, 0x0A, 0x34, 0x56, 0x68, 0x7E, 0xD9, 0x70, 0xA0, 0x7A, 0xD1, 0x53, 0x53, 0xA5, 0x07, 0x37, + 0xAB, 0xB5, 0x35, 0xBC, 0x7F, 0xCF, 0x0C, 0x90, 0x66, 0xB6, 0xB8, 0x37, 0x02, 0x27, 0x76, 0x05, + 0x33, 0xB7, 0x41, 0x60, 0x87, 0xC1, 0x4D, 0xC4, 0xA0, 0xCE, 0x2E, 0xCE, 0x78, 0x23, 0x30, 0x4D, + 0x78, 0x84, 0x5F, 0xC4, 0x7F, 0xA7, 0xE6, 0x70, 0xF2, 0x77, 0x63, 0x2D, 0xB7, 0x48, 0x41, 0xB8, + 0x77, 0x53, 0x67, 0xA6, 0x72, 0x99, 0x14, 0xD1, 0x71, 0x2F, 0xCB, 0xB8, 0x2B, 0x36, 0xB1, 0x2E, + 0xAC, 0xE4, 0xDB, 0x4C, 0xDD, 0xF4, 0x2B, 0x39, 0x9C, 0xD0, 0x4A, 0x06, 0x44, 0x0D, 0x86, 0x63 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 88742. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_88742.cs +// + +namespace KeyCMF_088742 +{ + static const BYTE Keytable[] = + { + 0x0F, 0x72, 0x5F, 0x27, 0x21, 0xBB, 0xB5, 0x40, 0x69, 0x6B, 0xA0, 0x06, 0x2D, 0x29, 0x15, 0x50, + 0xE5, 0x7E, 0x1B, 0x0F, 0xD1, 0x8D, 0xDA, 0x98, 0x53, 0x04, 0x58, 0x9F, 0x81, 0xD8, 0x92, 0x3D, + 0x27, 0xAA, 0x31, 0x41, 0xC8, 0xCB, 0x59, 0x58, 0x2E, 0x63, 0x7E, 0x4C, 0x3F, 0x54, 0xFA, 0x4A, + 0x92, 0x88, 0xD3, 0x9E, 0xDC, 0xCD, 0xC3, 0xB3, 0x1E, 0x07, 0x0E, 0x33, 0xAF, 0xF0, 0xDA, 0xC7, + 0x1D, 0xBB, 0x54, 0xBA, 0x80, 0x36, 0x3A, 0x92, 0x08, 0xAC, 0xC2, 0x8E, 0xB7, 0xBD, 0x4C, 0xBF, + 0x7B, 0x20, 0x40, 0xBD, 0x37, 0xAD, 0x7F, 0x3A, 0x35, 0xF1, 0x95, 0x40, 0xF4, 0x1E, 0x2A, 0xD9, + 0x5D, 0x9E, 0xD2, 0x5A, 0x77, 0xF7, 0x8A, 0xE3, 0xD4, 0x4D, 0x29, 0xB3, 0xAA, 0xEB, 0x0D, 0x99, + 0x62, 0x84, 0xF8, 0x40, 0x5C, 0xB8, 0x63, 0x52, 0x00, 0x3F, 0x6B, 0xD2, 0x1A, 0x22, 0xFE, 0xA3, + 0x12, 0x14, 0x4A, 0x2E, 0x83, 0xD3, 0x72, 0xA5, 0xD0, 0x8A, 0x24, 0x88, 0x8B, 0x9A, 0x13, 0x1E, + 0x41, 0x55, 0xE1, 0xD5, 0xAC, 0x92, 0x02, 0xB4, 0xC2, 0xB4, 0xD1, 0xED, 0xB3, 0xC8, 0x46, 0xCF, + 0x19, 0x48, 0x8B, 0x99, 0x9D, 0x52, 0x7B, 0xD3, 0x00, 0xA4, 0xF5, 0x47, 0xF3, 0x9F, 0x74, 0x84, + 0x53, 0x32, 0x6E, 0x40, 0x5D, 0x89, 0x2C, 0x45, 0x17, 0xA9, 0x81, 0x11, 0x22, 0x87, 0xF6, 0x98, + 0x36, 0xD3, 0xA0, 0x61, 0xCA, 0xF5, 0xD5, 0xBF, 0x5D, 0xCE, 0xA4, 0xE2, 0xB3, 0xD0, 0x78, 0xC7, + 0x52, 0xD0, 0x1B, 0xB9, 0x17, 0x84, 0x06, 0xC8, 0x91, 0x4B, 0xB4, 0x9A, 0x93, 0x2F, 0x6C, 0x73, + 0x5E, 0x7E, 0x3C, 0x9F, 0x71, 0x8F, 0xE4, 0x84, 0xD1, 0x64, 0x26, 0xEE, 0x13, 0xA9, 0x1F, 0x47, + 0x28, 0xDC, 0xCE, 0x72, 0x18, 0x01, 0xFC, 0xC3, 0x31, 0x75, 0x6A, 0x29, 0x44, 0x46, 0xB9, 0x89, + 0x86, 0x48, 0xF5, 0xDF, 0xEA, 0xF6, 0x44, 0x12, 0x51, 0xD5, 0x7F, 0xC6, 0x1E, 0x3D, 0x5A, 0x47, + 0x0C, 0xD7, 0xE5, 0xF3, 0x18, 0xEB, 0xFD, 0xC5, 0x05, 0x48, 0x27, 0x51, 0xCD, 0xE8, 0x01, 0xF5, + 0xB2, 0xA9, 0x90, 0xE3, 0x2A, 0x89, 0x90, 0xBE, 0x78, 0xFA, 0x61, 0xED, 0x59, 0xA6, 0x40, 0x0D, + 0x4E, 0xDB, 0x3C, 0xB6, 0xBF, 0x45, 0x9E, 0x0C, 0xDF, 0xB9, 0xE7, 0x4F, 0x4F, 0xCD, 0x7C, 0x70, + 0x79, 0x27, 0x45, 0xF3, 0xD9, 0xB2, 0xF2, 0xFD, 0xEA, 0x24, 0xD5, 0x0A, 0xD3, 0x97, 0xD9, 0x2F, + 0x89, 0x1C, 0x49, 0xBE, 0x15, 0xCD, 0x59, 0x1D, 0xF8, 0x2B, 0x04, 0xBC, 0x08, 0x31, 0x65, 0x70, + 0xED, 0x42, 0x08, 0x66, 0x55, 0x56, 0x36, 0x8C, 0x6C, 0x5E, 0x83, 0x36, 0xF6, 0x48, 0xDD, 0x3C, + 0xC4, 0xBA, 0x05, 0xB1, 0xA5, 0xA5, 0x18, 0x42, 0x55, 0x64, 0x99, 0xC2, 0x7B, 0x0E, 0x16, 0x36, + 0x86, 0x97, 0x0E, 0x00, 0x99, 0xF1, 0x7C, 0x11, 0x01, 0x32, 0x6D, 0xE6, 0xFF, 0x2E, 0x86, 0x00, + 0xF0, 0xE8, 0x17, 0xF4, 0x9A, 0x1C, 0x8B, 0x62, 0x03, 0xA2, 0x11, 0xEC, 0xC2, 0x81, 0x3F, 0x92, + 0xF0, 0x4B, 0x24, 0xFD, 0x0F, 0x21, 0xB2, 0x4D, 0x24, 0xD3, 0x99, 0xE5, 0x0F, 0x6A, 0xFA, 0x73, + 0xA5, 0x8E, 0x1E, 0x2F, 0xF0, 0x5E, 0x18, 0xA1, 0xC1, 0xA4, 0x78, 0x61, 0x35, 0x68, 0x23, 0x15, + 0x46, 0x86, 0xDB, 0x9E, 0x1B, 0x21, 0x4F, 0x75, 0x35, 0x7F, 0x6B, 0x66, 0xA5, 0xCA, 0x2C, 0xB9, + 0x22, 0xED, 0x79, 0xC5, 0x40, 0x4C, 0x49, 0x61, 0xB6, 0x1A, 0x5D, 0xB3, 0xCF, 0x33, 0x72, 0xD5, + 0x74, 0x8E, 0x00, 0xA5, 0xA0, 0x8B, 0x8D, 0x11, 0xA4, 0x47, 0x28, 0x9D, 0xA3, 0xF5, 0x03, 0x57, + 0xD7, 0x83, 0xFE, 0x26, 0xBB, 0xE5, 0x3B, 0xF0, 0xD2, 0x5A, 0xAF, 0x39, 0x8C, 0x8A, 0x5B, 0x4A + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 89353. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_89353.cs +// + +namespace KeyCMF_089353 +{ + static const BYTE Keytable[] = + { + 0x23, 0xA5, 0x2C, 0x87, 0xC5, 0x6C, 0x02, 0x56, 0x09, 0x3C, 0xAB, 0x04, 0xEB, 0x24, 0x58, 0x14, + 0x98, 0x92, 0x78, 0x4E, 0xB2, 0x59, 0x43, 0xF6, 0xCA, 0x9D, 0x5B, 0xE3, 0x65, 0x10, 0xE7, 0x7A, + 0x59, 0xCC, 0xA9, 0xC0, 0xA0, 0xAA, 0x63, 0x26, 0x57, 0x51, 0x58, 0xEB, 0xD6, 0xFC, 0xC2, 0x4C, + 0x8F, 0x62, 0xA7, 0x35, 0xBF, 0x05, 0x9D, 0x58, 0x49, 0x8C, 0x76, 0xEC, 0x22, 0xCC, 0x65, 0x6D, + 0x8C, 0xBC, 0x92, 0xE0, 0xE4, 0x1A, 0xEE, 0xC5, 0xBC, 0x99, 0x35, 0xBE, 0x91, 0x05, 0x8B, 0x7B, + 0x05, 0x06, 0x62, 0x0D, 0x35, 0x62, 0x60, 0x7E, 0x27, 0x28, 0x50, 0xF2, 0xAC, 0x23, 0x49, 0x16, + 0x51, 0x28, 0x78, 0x4F, 0x30, 0xD8, 0xC8, 0x87, 0x18, 0x91, 0x95, 0xD9, 0xC9, 0x17, 0x9B, 0x62, + 0xD0, 0xB5, 0xE4, 0x37, 0x19, 0xE3, 0xE2, 0x44, 0x20, 0xA8, 0x63, 0xB4, 0x80, 0xBF, 0x81, 0x18, + 0x30, 0x5D, 0x0E, 0xDF, 0x4A, 0x97, 0x3D, 0x94, 0x5F, 0xDC, 0xB3, 0x13, 0x3D, 0xD2, 0x60, 0x2D, + 0x0F, 0x8C, 0x43, 0x40, 0x7F, 0x41, 0xE5, 0x46, 0xE4, 0x04, 0xDD, 0x70, 0x50, 0xE4, 0x5B, 0x6B, + 0x24, 0x3D, 0x72, 0xA8, 0x79, 0x36, 0xB6, 0x6A, 0xB9, 0x06, 0x02, 0x05, 0xC4, 0x0D, 0xAD, 0x18, + 0x7E, 0x1D, 0xCA, 0x6A, 0xA1, 0x07, 0x97, 0x18, 0xD9, 0xFA, 0x52, 0xA9, 0x76, 0x00, 0xA5, 0x31, + 0x6E, 0xBF, 0xE2, 0x1A, 0xE3, 0x78, 0xC5, 0x10, 0x6F, 0xA6, 0x5F, 0x1E, 0xCA, 0x23, 0x9E, 0xC6, + 0x17, 0x25, 0x26, 0x0C, 0x90, 0xA0, 0xAA, 0x2A, 0x96, 0xD3, 0x6E, 0xB7, 0xB1, 0x6E, 0x35, 0xEA, + 0x31, 0xAF, 0x0B, 0xB8, 0xF0, 0xED, 0xDA, 0x99, 0x41, 0xCB, 0x2B, 0x03, 0x3E, 0x6A, 0x20, 0x8E, + 0x67, 0xF1, 0x7F, 0x4A, 0xB3, 0xA9, 0xBC, 0x20, 0x69, 0x89, 0xAD, 0x48, 0x5B, 0x67, 0x9B, 0x82, + 0xFD, 0x8B, 0x21, 0x5E, 0x9C, 0xE1, 0x02, 0x6C, 0x02, 0x99, 0xBD, 0xDC, 0x0F, 0xFA, 0xB0, 0xEF, + 0x2F, 0x0D, 0xAD, 0x4C, 0x56, 0xB3, 0x6F, 0x05, 0x0E, 0x66, 0xD5, 0x77, 0x31, 0xC8, 0x7A, 0xF2, + 0xF7, 0x42, 0xBA, 0xA4, 0xE9, 0xA7, 0x69, 0x06, 0xA5, 0xE0, 0x36, 0x9E, 0xA0, 0x73, 0x3F, 0x27, + 0xAB, 0xE8, 0x14, 0x45, 0xAD, 0x85, 0xFF, 0x48, 0x60, 0xA1, 0x5E, 0xC1, 0xC8, 0xED, 0xC3, 0xF5, + 0x58, 0xF4, 0x34, 0x63, 0xF2, 0x5E, 0x2E, 0x4D, 0x1D, 0xE8, 0x22, 0x94, 0xA3, 0x6F, 0xF3, 0xFA, + 0xAB, 0x43, 0x6C, 0x6A, 0x8E, 0x57, 0xB3, 0xBE, 0x3F, 0x98, 0xB3, 0xB3, 0x22, 0x21, 0x6B, 0x71, + 0x6C, 0x85, 0x07, 0x00, 0x34, 0x98, 0x11, 0x2E, 0x2D, 0x67, 0x55, 0x8F, 0xDC, 0x73, 0x06, 0x12, + 0x30, 0x8D, 0xB1, 0xED, 0x77, 0xC6, 0x53, 0x14, 0xCC, 0x75, 0x34, 0xEB, 0xA9, 0x67, 0xB8, 0x95, + 0x80, 0x18, 0x25, 0x9C, 0x74, 0xC6, 0x9E, 0xB8, 0x1F, 0x26, 0x44, 0x11, 0xA3, 0x3C, 0xCE, 0xC8, + 0x83, 0x31, 0xA1, 0xCE, 0x16, 0xB1, 0x1C, 0x1D, 0x58, 0x98, 0x29, 0x2F, 0x2D, 0x87, 0x19, 0x90, + 0xD3, 0x62, 0x7C, 0xBA, 0x0B, 0x75, 0x5E, 0xCF, 0x28, 0x1F, 0xCB, 0x1D, 0x0D, 0xBA, 0x3E, 0x5D, + 0xBA, 0x7D, 0x1F, 0xC5, 0xB0, 0x1E, 0x82, 0x15, 0x2E, 0x0D, 0x1D, 0xF3, 0x49, 0x70, 0x23, 0x5D, + 0xA3, 0xB9, 0x98, 0xE7, 0x4A, 0x14, 0xD4, 0xCF, 0xFF, 0xEE, 0x91, 0xEA, 0x5E, 0x9C, 0xF9, 0x90, + 0x07, 0xC2, 0x51, 0x54, 0x5D, 0x1B, 0x99, 0x7F, 0x5F, 0x67, 0xEF, 0x9B, 0x9B, 0x16, 0x83, 0xA3, + 0xA1, 0x32, 0x16, 0x01, 0xD7, 0x33, 0x6D, 0x18, 0x08, 0xDA, 0x72, 0xFD, 0xCC, 0x52, 0xF2, 0x0B, + 0xB8, 0x9C, 0x98, 0xCA, 0x5B, 0x20, 0x34, 0x0E, 0x80, 0xD1, 0xF2, 0x80, 0xD6, 0x36, 0x7D, 0x30 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 90193. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_90193.cs +// + +namespace KeyCMF_090193 +{ + static const BYTE Keytable[] = + { + 0x29, 0x20, 0x7E, 0x3F, 0xD7, 0xD0, 0xC0, 0xF7, 0x3C, 0x57, 0x0C, 0x9E, 0xEE, 0x74, 0xD2, 0x7A, + 0x32, 0xC5, 0xB4, 0x82, 0x90, 0xF1, 0x5A, 0xD1, 0xF3, 0x82, 0x87, 0x79, 0x33, 0x6A, 0xAB, 0xE9, + 0xD0, 0xE1, 0x83, 0x91, 0xAF, 0x63, 0x00, 0x8F, 0x24, 0xCB, 0xE5, 0xD2, 0x29, 0x6E, 0xC1, 0x24, + 0xA3, 0xFF, 0xB9, 0xEE, 0xFF, 0x70, 0x89, 0x4C, 0xC9, 0xCE, 0x29, 0x9B, 0x7F, 0x5C, 0x68, 0x15, + 0x98, 0x06, 0x79, 0xFA, 0x43, 0x5B, 0x12, 0x49, 0xF0, 0x6C, 0x67, 0xA0, 0xA8, 0x64, 0x6B, 0x39, + 0x0E, 0x34, 0xB2, 0x2B, 0x3F, 0xF3, 0xD8, 0x3C, 0xD2, 0xD9, 0xAE, 0x3E, 0xA1, 0x2E, 0x4C, 0x7E, + 0xB9, 0x41, 0xF1, 0x51, 0xA5, 0x0B, 0x98, 0x9B, 0xC7, 0x52, 0xAE, 0x11, 0xFD, 0xC9, 0xC5, 0x0D, + 0xFD, 0xC2, 0xB3, 0x11, 0x40, 0x94, 0x36, 0x20, 0x80, 0xA6, 0xE6, 0x9F, 0x52, 0xC9, 0x24, 0xBC, + 0x74, 0xC2, 0x6C, 0x45, 0xA4, 0x5C, 0x9A, 0x4C, 0x23, 0x9C, 0x64, 0x71, 0x55, 0x3E, 0x1D, 0x86, + 0xB9, 0x42, 0x8A, 0x83, 0x13, 0x40, 0xD8, 0xC9, 0x65, 0x5E, 0x48, 0x1E, 0x80, 0x98, 0xCB, 0x82, + 0x08, 0x06, 0x6E, 0xAB, 0xFA, 0xA2, 0xFE, 0x2E, 0x56, 0xBA, 0x85, 0x43, 0xC1, 0x40, 0xF7, 0x31, + 0xB8, 0x06, 0x6C, 0xAC, 0x41, 0x68, 0xF4, 0x45, 0x81, 0x99, 0x89, 0xEC, 0xBF, 0xC8, 0x94, 0x5D, + 0x22, 0x3F, 0x76, 0xA6, 0x84, 0x05, 0xB2, 0x2F, 0xC9, 0x98, 0xF8, 0x75, 0x24, 0x8D, 0x42, 0x63, + 0x4D, 0x91, 0xD8, 0x90, 0xF7, 0x42, 0x7C, 0xB4, 0x33, 0x8B, 0xF6, 0xEC, 0x93, 0x50, 0xB0, 0xB7, + 0x19, 0xD5, 0xF6, 0xB0, 0x60, 0x81, 0x87, 0xA0, 0xC1, 0x0F, 0xC4, 0xE4, 0x47, 0xC8, 0x4F, 0xB0, + 0x90, 0x02, 0x9A, 0xB6, 0xBB, 0x70, 0x07, 0x90, 0xEC, 0xA8, 0xA8, 0x06, 0x58, 0xF5, 0xF7, 0x46, + 0xA1, 0xB7, 0x4E, 0xF8, 0x18, 0x93, 0x0D, 0xBE, 0x5B, 0xCE, 0x58, 0x9F, 0xA1, 0x28, 0xA7, 0x93, + 0x4B, 0xCD, 0x65, 0x3A, 0x41, 0x2D, 0xB1, 0x7B, 0x3B, 0x14, 0xAF, 0xFE, 0x2D, 0x37, 0xB1, 0x5C, + 0x13, 0xCF, 0x39, 0x7C, 0x82, 0x6D, 0xFB, 0x80, 0x69, 0x55, 0xAD, 0x63, 0xB2, 0x73, 0x06, 0xB9, + 0x0A, 0x00, 0xA3, 0x66, 0xD0, 0x77, 0xD3, 0x46, 0x7B, 0x5F, 0x0C, 0x9A, 0x76, 0x81, 0x7D, 0x3B, + 0x2F, 0x03, 0xE0, 0xC9, 0x15, 0x16, 0x36, 0xFD, 0x30, 0xF6, 0xC3, 0x26, 0x14, 0x88, 0xDB, 0x70, + 0x78, 0x05, 0x69, 0x15, 0xB2, 0xDD, 0x44, 0x49, 0x65, 0xFB, 0x65, 0xC4, 0xB0, 0xE5, 0xBD, 0x16, + 0x2A, 0xBE, 0x78, 0xE3, 0x40, 0x1F, 0x65, 0x5A, 0x63, 0x5B, 0x5D, 0xDA, 0x44, 0x72, 0x1B, 0x31, + 0x3B, 0x4C, 0x04, 0xBC, 0x39, 0x20, 0xBD, 0x82, 0x53, 0xC6, 0x4C, 0xC3, 0x52, 0xB5, 0x62, 0xEF, + 0xE4, 0x39, 0x3C, 0x9F, 0x1A, 0xE4, 0xF1, 0xE6, 0x96, 0x0F, 0x7A, 0xDE, 0xE7, 0xE5, 0xEC, 0x60, + 0x67, 0xD2, 0x5D, 0xA7, 0xEB, 0xC5, 0xBC, 0x97, 0xE3, 0x77, 0x59, 0xEE, 0xD0, 0x34, 0x0C, 0xAE, + 0x21, 0x1D, 0xD2, 0xC6, 0xDA, 0x3B, 0x1D, 0x82, 0x8E, 0x4A, 0xFD, 0xD0, 0xF9, 0xF9, 0xCE, 0xC4, + 0x63, 0x33, 0x56, 0x9D, 0x70, 0x10, 0x7C, 0x7F, 0x72, 0xB0, 0x78, 0x5B, 0x1F, 0x72, 0xE1, 0x7B, + 0x90, 0x58, 0xBD, 0xA9, 0x38, 0xD4, 0xF8, 0x1E, 0xB6, 0xD0, 0x92, 0xD9, 0x80, 0xB0, 0xE5, 0xFD, + 0x4E, 0x30, 0x49, 0xB9, 0x68, 0x25, 0x11, 0x6D, 0x8E, 0xDF, 0x0D, 0x35, 0xFD, 0x46, 0x1F, 0x45, + 0xB5, 0xB7, 0xE8, 0xA9, 0x7C, 0x64, 0xFB, 0x75, 0xF4, 0x81, 0xB8, 0x3B, 0xCB, 0xE3, 0x91, 0x19, + 0x14, 0xB4, 0x29, 0xD4, 0xB9, 0xCE, 0x22, 0x13, 0x7C, 0xE5, 0x16, 0x0F, 0x73, 0xAA, 0xCD, 0xEE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint) (length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 90774. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_90774.cs +// + +namespace KeyCMF_090774 +{ + static const BYTE Keytable[] = + { + 0xCD, 0xBF, 0xB7, 0xBD, 0x95, 0x05, 0xDD, 0x00, 0x3A, 0x3D, 0xB2, 0x79, 0x4E, 0x29, 0x13, 0x40, + 0xED, 0xB7, 0xDD, 0x64, 0x53, 0xC8, 0x1A, 0x37, 0x43, 0x3A, 0x9F, 0x5B, 0xA5, 0x8A, 0x3E, 0xF7, + 0xFA, 0x33, 0xC2, 0x78, 0x0D, 0x89, 0x65, 0xA0, 0x7F, 0xFD, 0xB0, 0xC9, 0xC6, 0x70, 0x1D, 0x92, + 0x71, 0xFC, 0x18, 0x0C, 0xC0, 0xD4, 0xE1, 0xD3, 0x46, 0x1D, 0x62, 0x7D, 0x32, 0x60, 0xB8, 0x66, + 0xF4, 0x93, 0x62, 0xD9, 0x09, 0x0D, 0x78, 0x89, 0x88, 0x85, 0x35, 0x1F, 0x17, 0x43, 0x61, 0xA4, + 0x0C, 0x56, 0x4E, 0x27, 0xDE, 0x51, 0x12, 0xA0, 0x0F, 0x35, 0xCE, 0x44, 0x86, 0x2D, 0x92, 0x32, + 0x6F, 0xC3, 0x54, 0x8D, 0xAB, 0xF3, 0xF3, 0x94, 0xAB, 0x01, 0x9E, 0x94, 0xD5, 0x91, 0xF3, 0x5B, + 0x76, 0x76, 0x3A, 0x8B, 0x53, 0xF7, 0x2D, 0xFE, 0xDF, 0x3F, 0x64, 0xF8, 0x79, 0xC3, 0x9D, 0x39, + 0x94, 0xB2, 0xD0, 0xD5, 0xC7, 0xF6, 0x81, 0xC1, 0xF4, 0x4A, 0xC5, 0xD7, 0x76, 0x5F, 0xB1, 0xF9, + 0xB8, 0x27, 0x77, 0x7F, 0x81, 0xE6, 0x2D, 0x31, 0x16, 0x6F, 0x36, 0x48, 0x3A, 0x58, 0x91, 0xA5, + 0x0B, 0x4C, 0x8C, 0x64, 0xC4, 0xE2, 0x06, 0x03, 0xBE, 0xDC, 0x8E, 0x0D, 0xC8, 0xDB, 0x59, 0x40, + 0x61, 0x8C, 0x1E, 0x61, 0x2B, 0x2F, 0x52, 0x75, 0xAF, 0x08, 0x6E, 0xE2, 0x8D, 0xE1, 0xC6, 0xF9, + 0xCE, 0x43, 0x5D, 0x8C, 0x6E, 0x81, 0x69, 0xB9, 0x6D, 0xAA, 0xFE, 0x70, 0x3A, 0xB9, 0xA3, 0x8C, + 0x43, 0x8E, 0x58, 0x65, 0x9A, 0x00, 0xAE, 0x59, 0x61, 0x84, 0xE0, 0xFE, 0xC3, 0xE3, 0x61, 0x70, + 0xDC, 0xB0, 0xA9, 0xFE, 0x3A, 0x85, 0x5C, 0x95, 0xF0, 0xEE, 0xDF, 0x7F, 0x84, 0x89, 0x2D, 0x66, + 0x48, 0xAD, 0xED, 0xBA, 0x4D, 0x0B, 0x41, 0x37, 0x92, 0x78, 0xA4, 0xEC, 0xE0, 0x7E, 0x4B, 0x2B, + 0x8D, 0x4D, 0xC5, 0x22, 0x55, 0x4F, 0x13, 0xB3, 0x80, 0x57, 0xC1, 0x80, 0x03, 0x92, 0xA6, 0xD3, + 0x9A, 0xD6, 0xD1, 0x10, 0x0B, 0xDD, 0xCB, 0xAE, 0x2C, 0x04, 0x48, 0xE5, 0x2F, 0x86, 0xB0, 0xBB, + 0x94, 0x48, 0x50, 0xF1, 0xF6, 0xEA, 0x58, 0x5E, 0xAD, 0x1C, 0x8D, 0xDA, 0xF2, 0x0D, 0x33, 0xDB, + 0xD3, 0x46, 0x20, 0x43, 0xFF, 0x24, 0xE3, 0x39, 0xA2, 0x20, 0xC8, 0xB3, 0xC8, 0xCC, 0x81, 0x14, + 0x2B, 0xE1, 0x6F, 0xCD, 0xF6, 0x6A, 0x79, 0xCB, 0x6C, 0x90, 0x2E, 0x14, 0x8B, 0x64, 0xA8, 0xC1, + 0x40, 0x28, 0x55, 0x72, 0x84, 0xE1, 0x4C, 0x6A, 0xC8, 0xF6, 0x14, 0xF5, 0xF0, 0x9A, 0x89, 0x7E, + 0x4D, 0x85, 0xC3, 0x37, 0x48, 0x0E, 0x94, 0xFC, 0xA9, 0x85, 0xB4, 0x10, 0x7A, 0x93, 0xE9, 0x40, + 0x23, 0xD7, 0x1E, 0x50, 0x3D, 0x26, 0x6C, 0x1A, 0xD8, 0x2B, 0x66, 0x73, 0xBC, 0x28, 0xCA, 0x6E, + 0xA6, 0xA2, 0xFA, 0x6C, 0xC4, 0x37, 0xAB, 0x51, 0x88, 0x5C, 0xD4, 0xDF, 0x08, 0xAA, 0x92, 0xCA, + 0xF6, 0xC8, 0x0B, 0x33, 0x1A, 0xE0, 0x14, 0xD8, 0xC2, 0x1D, 0x6F, 0xAB, 0x5C, 0x3C, 0xD7, 0x84, + 0xF3, 0xB2, 0x9A, 0x1F, 0x5B, 0x62, 0xAB, 0x6C, 0x70, 0xA4, 0x7D, 0xFF, 0xD6, 0xB3, 0x34, 0xB8, + 0xC2, 0x32, 0x96, 0xEF, 0x54, 0x2A, 0xEC, 0xA3, 0x96, 0xB5, 0x77, 0x4C, 0xA8, 0xAD, 0x8D, 0x8E, + 0x03, 0x4B, 0x52, 0x09, 0xA5, 0xEB, 0x12, 0x30, 0x6B, 0xF1, 0xF0, 0x42, 0xF6, 0xCF, 0x56, 0x2B, + 0xC8, 0x3F, 0x77, 0x3C, 0x62, 0x02, 0x9B, 0x03, 0x79, 0x47, 0xC8, 0x1E, 0x43, 0xE1, 0xF7, 0x10, + 0xDB, 0x1E, 0x5F, 0xAC, 0x59, 0x81, 0x6D, 0x8F, 0x7F, 0x25, 0xDC, 0x35, 0x14, 0x84, 0x11, 0xA7, + 0x88, 0x2D, 0x33, 0x03, 0xF0, 0x28, 0xFF, 0x8D, 0x51, 0x41, 0xB8, 0xC3, 0x74, 0x8F, 0x8D, 0xE7 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 92111. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_92111.cs +// + +namespace KeyCMF_092111 +{ + static const BYTE Keytable[] = + { + 0xF9, 0xA7, 0xF8, 0x45, 0x57, 0x07, 0xAE, 0xA8, 0x08, 0xCD, 0x9E, 0x91, 0x44, 0x24, 0x05, 0x82, + 0x16, 0x26, 0xC2, 0x34, 0x98, 0x5A, 0x53, 0xD3, 0x33, 0x40, 0x8C, 0xAA, 0x0C, 0xE3, 0x36, 0x9D, + 0x43, 0xE6, 0x19, 0xEA, 0x84, 0x11, 0x53, 0xE4, 0x74, 0x37, 0x9B, 0x9A, 0x32, 0x30, 0xDD, 0xCA, + 0x5D, 0x04, 0xE6, 0xA3, 0x3B, 0x43, 0x65, 0x24, 0xDB, 0x02, 0x9D, 0x79, 0x4F, 0xA0, 0xB9, 0xD7, + 0x56, 0xA7, 0x1B, 0xF7, 0x38, 0x74, 0xC6, 0x55, 0x4E, 0x6E, 0x16, 0xCF, 0xAA, 0xF2, 0xAD, 0x59, + 0x97, 0xFC, 0x0C, 0x8F, 0xE6, 0x75, 0xBE, 0x8C, 0x25, 0x22, 0xE0, 0xCC, 0x78, 0xCC, 0xED, 0x3E, + 0x9F, 0x8D, 0x7E, 0x67, 0xA3, 0x28, 0x4C, 0xDD, 0x74, 0xF6, 0x67, 0xF7, 0x01, 0xBC, 0x74, 0xC9, + 0x3F, 0xD2, 0xF4, 0xBD, 0x73, 0x5F, 0x0C, 0xF0, 0x67, 0xB2, 0xD3, 0xCF, 0x91, 0x2E, 0x20, 0xB9, + 0x2D, 0xB0, 0x5E, 0x72, 0xF2, 0xEA, 0x4E, 0x20, 0x97, 0x95, 0x15, 0x7A, 0x3F, 0x9B, 0x0F, 0x61, + 0x88, 0xA5, 0x58, 0x39, 0xCC, 0xA1, 0xD7, 0x82, 0xBC, 0x40, 0x74, 0x85, 0xC8, 0x3A, 0x9C, 0x98, + 0xA4, 0x2B, 0xDC, 0x16, 0x07, 0x45, 0x46, 0xFC, 0x38, 0x27, 0xD7, 0x39, 0x86, 0x52, 0xB0, 0x2C, + 0x31, 0xE4, 0xCA, 0x90, 0x3B, 0x97, 0xA9, 0xA1, 0x41, 0xA9, 0x8D, 0x64, 0x47, 0x10, 0x3D, 0x7B, + 0xB7, 0x9C, 0x9A, 0x00, 0x5E, 0xE4, 0xC9, 0xB7, 0xDD, 0xA8, 0xC8, 0x62, 0x0E, 0xE7, 0xF9, 0x2D, + 0x86, 0xD5, 0x3D, 0xFA, 0xE6, 0x52, 0x14, 0xDC, 0xC0, 0xFF, 0x3F, 0x74, 0x40, 0x17, 0xB1, 0xF0, + 0x7F, 0x8B, 0xFF, 0x6B, 0x2F, 0x8B, 0xB2, 0xC6, 0x1B, 0xFB, 0x3B, 0x7E, 0xCA, 0x16, 0x24, 0xA6, + 0xA3, 0x80, 0xA6, 0x0A, 0x7F, 0x53, 0x8D, 0x74, 0x12, 0xA7, 0x81, 0xA6, 0x41, 0x1D, 0xCD, 0xC6, + 0xCD, 0x7B, 0xC2, 0x86, 0x5D, 0x1B, 0x0B, 0x12, 0xEC, 0x7A, 0x2D, 0x3B, 0x07, 0x23, 0x20, 0xCF, + 0x2A, 0x0A, 0xE3, 0xC1, 0x80, 0x03, 0xA3, 0x77, 0x7E, 0x0E, 0xDE, 0xD9, 0xB8, 0xC3, 0x18, 0x44, + 0x93, 0xA9, 0xD4, 0x0D, 0xE2, 0xE3, 0x6C, 0x34, 0xAC, 0xB5, 0x70, 0x60, 0xC5, 0x4A, 0x7C, 0x1F, + 0x38, 0xF7, 0xD4, 0xCE, 0xAB, 0x4C, 0x09, 0x8B, 0x31, 0x67, 0xC4, 0x81, 0x37, 0x77, 0x07, 0x61, + 0xEF, 0x09, 0xBF, 0x7B, 0xB7, 0x7C, 0x7B, 0x31, 0x67, 0xC0, 0xDF, 0xEE, 0x53, 0xD0, 0xBF, 0x17, + 0xB9, 0x68, 0xB3, 0xBD, 0xE1, 0x95, 0x20, 0xDD, 0x6D, 0x5F, 0x1A, 0x29, 0x6E, 0x61, 0x0A, 0x00, + 0x79, 0x8C, 0xA8, 0x9A, 0x48, 0xFF, 0x1F, 0x7D, 0xD7, 0x71, 0x52, 0x94, 0x56, 0x82, 0xFF, 0x29, + 0x07, 0xD4, 0x15, 0x4C, 0x48, 0xF5, 0x79, 0xF3, 0xB8, 0x2B, 0x6D, 0x58, 0xFC, 0x6F, 0x1C, 0x08, + 0xF2, 0x2F, 0xBC, 0x66, 0x54, 0xAC, 0x41, 0xA1, 0xB3, 0xAE, 0x5F, 0x81, 0xF4, 0x29, 0xAD, 0xC7, + 0xFC, 0x08, 0x03, 0xBE, 0x6C, 0xCC, 0xE6, 0x23, 0xEB, 0xE3, 0x12, 0x0F, 0x8C, 0x65, 0x93, 0xA8, + 0x8A, 0x84, 0x54, 0xD1, 0x4C, 0x7F, 0x46, 0xC8, 0xB7, 0xFD, 0x72, 0xD3, 0xB0, 0xF2, 0x22, 0x38, + 0xB8, 0x82, 0xDC, 0xAD, 0xBC, 0x57, 0xD1, 0x2D, 0x2B, 0x6B, 0x56, 0x1C, 0x03, 0xFF, 0xED, 0xEE, + 0x3C, 0x4A, 0x76, 0xB7, 0xE2, 0x37, 0xF9, 0x7F, 0x4B, 0x3C, 0x3A, 0xB7, 0x98, 0x79, 0xD3, 0x53, + 0x17, 0xFF, 0xB8, 0x7C, 0x18, 0x9E, 0xA5, 0x0E, 0x89, 0x5C, 0x89, 0x82, 0x68, 0x7C, 0x69, 0xB3, + 0xB5, 0xA5, 0xB7, 0xCC, 0xDE, 0x05, 0xE3, 0xDD, 0xBA, 0x23, 0x90, 0xD8, 0x8D, 0x4B, 0xBA, 0x9D, + 0x26, 0x43, 0x30, 0x58, 0x33, 0x9A, 0x76, 0xA5, 0x3D, 0x28, 0xDB, 0xAA, 0x79, 0x27, 0x10, 0xCE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 93519. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_93519.cs +// + +namespace KeyCMF_093519 +{ + static const BYTE Keytable[] = + { + 0xC2, 0xF8, 0x3A, 0xC4, 0x8F, 0x1C, 0x17, 0x12, 0x04, 0xA3, 0x2E, 0x5A, 0x03, 0xA0, 0xE6, 0xBF, + 0x33, 0x6F, 0xF7, 0x42, 0xFB, 0x30, 0x9E, 0xF8, 0x65, 0x35, 0x4B, 0xCD, 0xCD, 0x9C, 0x9A, 0xC5, + 0xA2, 0xB1, 0x30, 0x89, 0x52, 0x08, 0xB3, 0x2E, 0x57, 0x18, 0x79, 0xB7, 0x63, 0x4E, 0xB7, 0x6E, + 0x70, 0x43, 0x6B, 0x55, 0xB8, 0x15, 0xF4, 0x53, 0x9A, 0xED, 0xAA, 0x08, 0xB8, 0xD9, 0xF1, 0xAB, + 0xEC, 0x86, 0xF3, 0x48, 0x25, 0xDC, 0x00, 0xA8, 0x28, 0xD8, 0x2F, 0x9A, 0x4A, 0x3F, 0x75, 0xE0, + 0x28, 0xD8, 0x7B, 0x06, 0x22, 0x34, 0x17, 0x18, 0x99, 0x27, 0xF1, 0x79, 0x97, 0xCC, 0xCD, 0x53, + 0xE9, 0x59, 0x53, 0x41, 0xF4, 0x76, 0x93, 0x16, 0x57, 0xAE, 0x41, 0x5A, 0xED, 0xCF, 0x3F, 0x6F, + 0x0F, 0x61, 0xD1, 0x4A, 0xBE, 0x63, 0x8A, 0xDD, 0xC9, 0x71, 0x2C, 0x83, 0xFC, 0xAD, 0x3C, 0xC4, + 0x7A, 0x1E, 0xDB, 0xE1, 0x14, 0x99, 0x92, 0x40, 0xAD, 0x06, 0x64, 0x92, 0x71, 0x26, 0x14, 0x72, + 0xE9, 0xCD, 0xA6, 0x89, 0xD1, 0x2D, 0x6F, 0xA5, 0x58, 0x05, 0x4A, 0x65, 0x21, 0x0D, 0x73, 0x70, + 0xCF, 0x24, 0xD9, 0xF0, 0x93, 0xFD, 0x08, 0xFE, 0x3F, 0xCE, 0xAC, 0xE2, 0x9E, 0xAF, 0xCC, 0xE7, + 0xB0, 0xD4, 0xF0, 0xD8, 0x27, 0xF1, 0x5C, 0x8D, 0xF0, 0xC1, 0x9D, 0xFD, 0x98, 0x02, 0xD5, 0xBE, + 0xF3, 0x5F, 0x62, 0x5A, 0xBF, 0x5A, 0xC9, 0xAD, 0x91, 0xA9, 0x0D, 0xC0, 0x77, 0xA5, 0x62, 0xD5, + 0x8F, 0x49, 0x36, 0x16, 0x8C, 0xA0, 0x69, 0x0D, 0x29, 0x6E, 0x52, 0x8C, 0x50, 0xC6, 0xE2, 0xFE, + 0xA0, 0x80, 0xF9, 0x3F, 0xBF, 0x37, 0x3E, 0x3A, 0xD9, 0x22, 0xC5, 0xFD, 0x1A, 0xFC, 0x5A, 0xC4, + 0x26, 0x72, 0x4E, 0x77, 0x68, 0x2E, 0xB3, 0x4B, 0x90, 0x30, 0x6C, 0xA6, 0xC4, 0xB6, 0x7C, 0xF4, + 0x17, 0x44, 0x8F, 0x9A, 0x10, 0x13, 0xC9, 0x23, 0x26, 0x74, 0x01, 0xB5, 0x9C, 0xF2, 0x1D, 0x3D, + 0x61, 0x06, 0xDB, 0x76, 0x7C, 0x63, 0x4D, 0x72, 0xAA, 0xD4, 0xC8, 0x13, 0xC3, 0xE6, 0x60, 0x74, + 0x6E, 0x89, 0xB7, 0x5D, 0x40, 0x95, 0xC4, 0x88, 0xC4, 0x6A, 0x4B, 0x52, 0x40, 0x87, 0xA6, 0xEF, + 0xED, 0xD2, 0x66, 0xFC, 0x8D, 0xEC, 0x86, 0x21, 0x54, 0x79, 0x7C, 0xBF, 0x19, 0x3D, 0xE7, 0x77, + 0x42, 0xC9, 0xB5, 0xBE, 0xED, 0x13, 0xEF, 0xE4, 0x33, 0x0F, 0x87, 0x8F, 0x7D, 0xD1, 0xD2, 0x85, + 0xA9, 0x72, 0x6D, 0x12, 0x34, 0x7B, 0x54, 0x3F, 0xB0, 0xEB, 0x30, 0x48, 0x25, 0x21, 0x67, 0xA1, + 0xAD, 0x0C, 0xD6, 0xE4, 0xBF, 0x1C, 0x7C, 0x97, 0xF0, 0x63, 0x74, 0xDB, 0x72, 0x9E, 0x50, 0xFE, + 0xF2, 0xFB, 0x85, 0x03, 0x88, 0xBF, 0x00, 0xF8, 0x34, 0x90, 0x30, 0x28, 0xC9, 0x1F, 0xE8, 0xC3, + 0xD8, 0x3A, 0x2A, 0x65, 0x06, 0x7D, 0xCE, 0xE9, 0xE9, 0x61, 0xFB, 0x61, 0xD1, 0x95, 0xFE, 0xBB, + 0x7D, 0xD4, 0x2F, 0x81, 0xAD, 0x66, 0xE6, 0xED, 0xB9, 0x5B, 0x0D, 0x16, 0x7A, 0xAE, 0xFE, 0xDF, + 0x9D, 0xD4, 0x28, 0xDE, 0x5A, 0xFC, 0x3F, 0x83, 0x7D, 0xAA, 0xA1, 0xB5, 0xBC, 0xAF, 0xDE, 0xE4, + 0x3E, 0xD6, 0x75, 0x97, 0x53, 0x18, 0xF5, 0x1B, 0x45, 0xD2, 0xE4, 0x16, 0x1A, 0xB6, 0x7D, 0x2F, + 0x1B, 0x1A, 0x12, 0xF6, 0x80, 0x7A, 0xAE, 0x9E, 0xE1, 0xA7, 0xC4, 0x68, 0x18, 0xCE, 0xC1, 0x02, + 0x19, 0x0C, 0x8F, 0x57, 0xD4, 0x5B, 0xD5, 0xBC, 0x66, 0x5B, 0x3E, 0x65, 0xDB, 0x3B, 0x00, 0x98, + 0x64, 0xBE, 0x21, 0x0F, 0x08, 0xEF, 0x27, 0x7B, 0x7F, 0x93, 0x26, 0x86, 0x91, 0x6B, 0x1C, 0xA2, + 0xC0, 0xAA, 0x28, 0x0C, 0xCE, 0xA4, 0xBB, 0xA9, 0x08, 0x5D, 0x9E, 0x6D, 0x57, 0x13, 0xBA, 0x2E + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 94717. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_94717.cs +// + +namespace KeyCMF_094717 +{ + static const BYTE Keytable[] = + { + 0xCA, 0x55, 0x57, 0xE8, 0x3F, 0x0A, 0x44, 0xB3, 0x8A, 0x1C, 0x91, 0x27, 0x75, 0x0D, 0xEA, 0x24, + 0x45, 0x56, 0x26, 0xD0, 0x8D, 0xD1, 0x4D, 0xAD, 0x01, 0x64, 0x5D, 0xF4, 0xCA, 0xD9, 0x18, 0xA2, + 0xCD, 0x32, 0xD3, 0xB6, 0x66, 0x30, 0x3C, 0xE7, 0x09, 0xB7, 0xDD, 0xF4, 0x5E, 0xA0, 0x15, 0x06, + 0x2B, 0x8D, 0x32, 0xAA, 0x6A, 0x32, 0x51, 0x9C, 0x82, 0x32, 0xDD, 0xDD, 0x6B, 0x28, 0x67, 0xD0, + 0xC5, 0x29, 0xFF, 0xDC, 0x00, 0x6A, 0x57, 0x57, 0xFC, 0x4A, 0xEE, 0x56, 0xA8, 0xAE, 0x6A, 0xB1, + 0xDD, 0xCD, 0x04, 0x1A, 0x5B, 0x38, 0x49, 0x51, 0x3B, 0xF2, 0xC6, 0xE4, 0x25, 0xD6, 0x4C, 0xE9, + 0x58, 0x73, 0xB8, 0x93, 0xC5, 0x0D, 0x2F, 0xFA, 0x22, 0x45, 0x96, 0x89, 0xA0, 0x14, 0x4F, 0x14, + 0xD8, 0x55, 0x65, 0x12, 0x66, 0x0F, 0x82, 0xBF, 0xA0, 0xDE, 0x02, 0x78, 0xA5, 0xFE, 0x36, 0x01, + 0xF3, 0x26, 0x85, 0xA5, 0x83, 0x33, 0xD6, 0xDE, 0xF5, 0xDC, 0x29, 0x3F, 0xA1, 0x6E, 0xF2, 0x76, + 0xAC, 0x09, 0x44, 0x4D, 0xCC, 0x80, 0x10, 0xFF, 0xE1, 0xA2, 0x7F, 0xDC, 0x8B, 0x84, 0xA2, 0x67, + 0xCC, 0xFA, 0xBF, 0x82, 0x72, 0x09, 0x2A, 0x3C, 0x21, 0xD4, 0xB4, 0x1B, 0xA2, 0x40, 0x56, 0xC7, + 0x7E, 0x80, 0x17, 0x9D, 0x63, 0x19, 0x02, 0x3D, 0x64, 0x2F, 0x36, 0x69, 0x64, 0xB1, 0x72, 0x3B, + 0x5C, 0xE5, 0xF4, 0x2E, 0xA1, 0x9F, 0xBD, 0xCE, 0x6A, 0x57, 0x5E, 0xA1, 0x30, 0x3C, 0x1A, 0x35, + 0xC4, 0x0D, 0x21, 0x15, 0xE0, 0xE5, 0xFF, 0xCD, 0x5C, 0x83, 0x07, 0xB9, 0x3F, 0x79, 0x28, 0xC6, + 0xAE, 0xF6, 0xC6, 0x18, 0xE8, 0xB5, 0xB8, 0x1F, 0x5B, 0x3A, 0x55, 0xD1, 0x41, 0xAE, 0x35, 0x1F, + 0x81, 0x05, 0x40, 0x14, 0x11, 0xEB, 0x20, 0x41, 0x59, 0x10, 0x42, 0x1D, 0xEE, 0x17, 0xB8, 0x9D, + 0x49, 0x65, 0x02, 0x93, 0x9B, 0xFC, 0x36, 0x3A, 0xA9, 0x09, 0x99, 0xD0, 0xD1, 0x91, 0xD0, 0x18, + 0x58, 0x32, 0x0B, 0xFC, 0x8A, 0xD5, 0xF3, 0x91, 0x6D, 0xDA, 0x12, 0x85, 0xEC, 0x62, 0x01, 0x62, + 0xBE, 0x9F, 0x8D, 0xEC, 0x1A, 0xEA, 0x5A, 0x5B, 0x10, 0x81, 0x44, 0xE5, 0x50, 0x0C, 0x6F, 0x90, + 0x30, 0x31, 0x0B, 0xB1, 0x02, 0x1A, 0x21, 0x78, 0x7F, 0xA1, 0x6F, 0x57, 0x31, 0xDE, 0xC4, 0xD6, + 0x37, 0xF9, 0x16, 0xAC, 0xAC, 0x59, 0x29, 0x93, 0x49, 0x0D, 0x15, 0x33, 0x70, 0xD2, 0xFD, 0x20, + 0xA2, 0x6D, 0x75, 0x6D, 0xB1, 0xD6, 0xA9, 0x8E, 0x11, 0x56, 0xF7, 0x56, 0xFA, 0x8C, 0x2A, 0xC2, + 0xC7, 0x78, 0x46, 0x37, 0x07, 0xD2, 0x74, 0xE2, 0x1B, 0x3B, 0x90, 0x19, 0x69, 0x55, 0x8E, 0xA6, + 0x88, 0x55, 0xEA, 0xF8, 0x32, 0x5A, 0xD5, 0x09, 0x97, 0x03, 0x9B, 0x88, 0x9D, 0x7C, 0x65, 0xCA, + 0x55, 0xFD, 0xE2, 0xB4, 0x33, 0xBB, 0x9F, 0xC1, 0x1D, 0x6A, 0xE2, 0x2E, 0xC2, 0xB5, 0x90, 0x75, + 0x62, 0xB6, 0xD3, 0x63, 0x30, 0xDD, 0x63, 0x72, 0x00, 0x46, 0x18, 0x70, 0x6E, 0xDA, 0x58, 0x73, + 0x9D, 0xDF, 0xFB, 0x92, 0x2E, 0xAF, 0x8E, 0xDF, 0xAF, 0xD5, 0x84, 0xB5, 0x26, 0x7F, 0x01, 0x22, + 0x9A, 0xDF, 0x4F, 0x4F, 0x29, 0x07, 0x8C, 0x37, 0xC1, 0xB1, 0xDB, 0x29, 0x08, 0x17, 0x36, 0xCF, + 0x48, 0x28, 0xCB, 0x62, 0xBB, 0x0F, 0x20, 0x71, 0x32, 0xA1, 0xD3, 0xE9, 0x1B, 0xD1, 0x4B, 0xF3, + 0xE7, 0x72, 0x0B, 0x9E, 0x24, 0xB1, 0xD3, 0x41, 0xD9, 0xFD, 0xEA, 0xC3, 0x14, 0x28, 0x74, 0x7F, + 0x06, 0xCB, 0xCB, 0x3A, 0x9F, 0x22, 0xFF, 0x14, 0x9A, 0xCC, 0xB4, 0xAD, 0x4E, 0x69, 0x6C, 0xE5, + 0x60, 0x6D, 0x6D, 0x66, 0x5E, 0xC8, 0x20, 0x42, 0x22, 0x6B, 0x03, 0x2C, 0xEB, 0x59, 0xE3, 0x23 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 96081. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_96081.cs +// + +namespace KeyCMF_096081 +{ + static const BYTE Keytable[] = + { + 0xDC, 0xBB, 0x3F, 0xBE, 0x48, 0x7B, 0xE4, 0x59, 0x31, 0xA9, 0x5F, 0x0D, 0x30, 0x9F, 0xD8, 0x78, + 0xF4, 0x15, 0xAC, 0x71, 0x9C, 0x91, 0x5F, 0xCB, 0xD0, 0x41, 0xD0, 0x4B, 0x9D, 0xDB, 0x2F, 0xAC, + 0x9A, 0x47, 0x75, 0x8D, 0xEE, 0xF9, 0x7D, 0x8E, 0xC4, 0xCC, 0x64, 0x7E, 0x51, 0xCB, 0x96, 0xC5, + 0x24, 0x89, 0x39, 0xEA, 0x94, 0x3A, 0x73, 0x4F, 0x17, 0xD5, 0x2C, 0x65, 0xD2, 0xE5, 0x70, 0xA6, + 0x71, 0x8C, 0xD8, 0xB4, 0x62, 0xD9, 0xB4, 0x3B, 0x2F, 0x33, 0x7E, 0x23, 0x54, 0x7D, 0xBA, 0x11, + 0x59, 0xA8, 0x07, 0x94, 0x47, 0x7F, 0x2D, 0x98, 0xB8, 0xBE, 0x96, 0x34, 0x65, 0x53, 0x2D, 0x1D, + 0x6D, 0x01, 0x74, 0xBA, 0xD8, 0x76, 0xA8, 0x1F, 0x66, 0x12, 0xF4, 0x05, 0x1E, 0x75, 0x5C, 0x27, + 0x0E, 0xCD, 0xA2, 0x0F, 0xD9, 0x57, 0x33, 0x7F, 0xAD, 0xE3, 0xF7, 0x2B, 0x0F, 0x79, 0x67, 0x22, + 0x5D, 0x62, 0x6D, 0x07, 0x74, 0xE3, 0xE3, 0x77, 0x78, 0x15, 0x81, 0x72, 0x00, 0x4D, 0x50, 0xD4, + 0x9F, 0xEB, 0x2D, 0xC6, 0xFE, 0x42, 0xCD, 0x77, 0x04, 0x7A, 0x11, 0x7A, 0x77, 0xB1, 0x85, 0x1D, + 0xD8, 0x8A, 0x7B, 0xE9, 0x00, 0x24, 0x08, 0x8C, 0xD2, 0x52, 0x56, 0xD7, 0x71, 0x30, 0xB6, 0x77, + 0xDF, 0x56, 0x0B, 0x26, 0xFA, 0x51, 0x87, 0x47, 0x2A, 0x6E, 0xFE, 0xFD, 0x6A, 0x95, 0x39, 0x5C, + 0x67, 0x17, 0x74, 0xB8, 0xE0, 0x62, 0xCF, 0x04, 0xD0, 0x8B, 0x78, 0xA0, 0xC6, 0x43, 0x2D, 0x6F, + 0x76, 0x0B, 0x7B, 0x42, 0x04, 0xD2, 0xE3, 0x80, 0x60, 0x13, 0xE0, 0xA3, 0x57, 0x9B, 0xE3, 0x81, + 0xC8, 0x56, 0x40, 0x45, 0xCE, 0x42, 0xAA, 0x35, 0x31, 0xC8, 0x8E, 0x9E, 0x31, 0x8F, 0xA4, 0x26, + 0x2B, 0x04, 0xF3, 0xD2, 0x79, 0xB2, 0xC5, 0xE8, 0xB1, 0xDF, 0xF3, 0x73, 0x20, 0x33, 0x58, 0x04, + 0x41, 0x0A, 0xD9, 0xC8, 0xBA, 0x34, 0xD8, 0x8E, 0x27, 0x3B, 0xF6, 0xB3, 0xB5, 0x4D, 0x2A, 0x0B, + 0xD3, 0xEB, 0x6E, 0x61, 0xC4, 0xAF, 0x78, 0x0C, 0x11, 0xE0, 0x0E, 0xF7, 0xB0, 0x9A, 0xFE, 0xD5, + 0xBE, 0x42, 0xC9, 0x88, 0xE1, 0x01, 0x26, 0xD6, 0xF3, 0x0F, 0x09, 0x38, 0xAC, 0x64, 0xEA, 0xA7, + 0xD4, 0xAB, 0x8D, 0xAB, 0xBC, 0xBC, 0x5A, 0xB4, 0xEA, 0xF1, 0x81, 0x51, 0x2C, 0x4C, 0x59, 0x73, + 0x99, 0xCD, 0x86, 0x60, 0xE6, 0xBC, 0x71, 0x74, 0x3D, 0xE9, 0x4A, 0x67, 0x41, 0x99, 0x28, 0xA8, + 0x0C, 0xE0, 0xB9, 0xAD, 0x28, 0x0E, 0x78, 0x5E, 0xFE, 0x71, 0x66, 0x3C, 0xA8, 0x0F, 0xFB, 0x42, + 0xA4, 0xBC, 0x96, 0x7C, 0x1E, 0x7A, 0x61, 0x27, 0xF3, 0xB2, 0xB3, 0xEC, 0xFB, 0xE3, 0xBE, 0x9B, + 0xD2, 0xBB, 0x6C, 0xB1, 0x85, 0x40, 0xE1, 0x45, 0x58, 0x01, 0x94, 0x7A, 0x21, 0xAD, 0x79, 0xC2, + 0xA1, 0xCA, 0xD9, 0x5C, 0x0C, 0x6C, 0xFD, 0xE4, 0xBE, 0xBC, 0xC8, 0x81, 0x93, 0x8F, 0x49, 0x99, + 0xD8, 0xDC, 0x1B, 0xF5, 0x27, 0xD0, 0xF3, 0xD1, 0xDA, 0x0E, 0x70, 0x1E, 0xBF, 0x7E, 0xFB, 0xEF, + 0x02, 0xDA, 0x9E, 0x07, 0xE2, 0x12, 0x92, 0xDB, 0xC0, 0x85, 0xD4, 0xBF, 0xD6, 0xB7, 0x59, 0x6F, + 0x07, 0xEB, 0x42, 0x7D, 0x4D, 0x7B, 0xE4, 0x48, 0xF7, 0xA7, 0x4E, 0x86, 0x2F, 0xE4, 0x36, 0x9B, + 0xE3, 0x59, 0x63, 0xB7, 0x3F, 0x80, 0xF0, 0xE6, 0x0B, 0xAB, 0x89, 0xDD, 0x34, 0x11, 0x2D, 0x6F, + 0x74, 0x39, 0xC6, 0xCA, 0x1F, 0x3B, 0x6E, 0x0F, 0x9E, 0xFC, 0x86, 0x50, 0xAB, 0x12, 0x8C, 0x7B, + 0xA6, 0xBD, 0xAE, 0xD4, 0xBC, 0xFC, 0xFC, 0x80, 0x5A, 0x6A, 0xC0, 0x1B, 0xD1, 0x5D, 0x5E, 0x82, + 0xAC, 0xCC, 0x67, 0xDD, 0xFA, 0x1C, 0xBD, 0x93, 0xDC, 0x3C, 0x82, 0x40, 0xC7, 0x1C, 0xD4, 0xC3 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 96894. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_96894.cs +// + +namespace KeyCMF_096894 +{ + static const BYTE Keytable[] = + { + 0x56, 0x78, 0xCD, 0xE6, 0x3E, 0xB8, 0x03, 0x00, 0x28, 0x38, 0x12, 0xC9, 0x15, 0x64, 0x20, 0x9F, + 0x9F, 0x4B, 0x82, 0x8A, 0x63, 0x98, 0x7E, 0x53, 0x87, 0xA7, 0xA9, 0xE1, 0x0A, 0x54, 0x84, 0xA1, + 0x5F, 0xAB, 0xAE, 0x8B, 0x7C, 0x83, 0x75, 0xEF, 0xA2, 0x1F, 0xE4, 0x88, 0x45, 0xD3, 0x9B, 0x5B, + 0x4B, 0xA0, 0x5A, 0x05, 0x62, 0x17, 0x7C, 0x5B, 0xE6, 0x38, 0xA9, 0xA9, 0xF0, 0xA7, 0xB9, 0xD4, + 0x40, 0xF4, 0xF4, 0xD0, 0xA7, 0x72, 0x67, 0xA0, 0xAD, 0x56, 0xEB, 0x12, 0x40, 0xEB, 0x1D, 0x49, + 0xB2, 0xEB, 0x9E, 0x51, 0x87, 0xFC, 0xDC, 0xFA, 0x10, 0x81, 0x6B, 0xD3, 0xB9, 0xB9, 0xA2, 0xF7, + 0x27, 0x94, 0x9A, 0x60, 0xBC, 0x8A, 0x05, 0xE6, 0xCD, 0x13, 0x71, 0x3B, 0x99, 0x57, 0xE6, 0xF7, + 0xC9, 0x23, 0x13, 0x3D, 0x90, 0x38, 0x7A, 0x11, 0x75, 0xE2, 0xC0, 0x2E, 0xA3, 0x1C, 0xF6, 0x62, + 0x6A, 0x67, 0xC4, 0xC6, 0xA1, 0xF8, 0x18, 0xF2, 0x17, 0xB1, 0x4A, 0x7F, 0xB5, 0x46, 0xDD, 0xB0, + 0x6D, 0xE1, 0xD4, 0x87, 0xBE, 0xA4, 0x42, 0x64, 0xC7, 0x7E, 0xB6, 0x62, 0x93, 0x08, 0xA0, 0x3E, + 0x16, 0xA9, 0x57, 0xDA, 0x9B, 0x80, 0x80, 0x15, 0x7D, 0x2F, 0xAA, 0xA4, 0x7A, 0x9E, 0xFB, 0x3B, + 0x32, 0x70, 0xB6, 0x46, 0x86, 0x34, 0x83, 0x7D, 0xE4, 0x69, 0x20, 0xC9, 0xB1, 0x63, 0x28, 0x6C, + 0xC0, 0xB9, 0x5C, 0x15, 0x2C, 0x60, 0x2C, 0x2F, 0xEC, 0xEE, 0x0F, 0x79, 0x87, 0xD1, 0x76, 0xD2, + 0x0E, 0x34, 0x59, 0x16, 0x97, 0x1F, 0xF7, 0x9F, 0x05, 0x4B, 0x25, 0x47, 0x6C, 0xFA, 0xF7, 0xF9, + 0x1E, 0xD1, 0x83, 0xFA, 0xE1, 0x12, 0x08, 0xF5, 0x21, 0x3E, 0xEF, 0xE0, 0x47, 0x2B, 0x0F, 0x03, + 0xA4, 0xED, 0x0A, 0xCC, 0xD2, 0x48, 0x2E, 0x41, 0xEF, 0x08, 0x74, 0xF8, 0xBF, 0xF1, 0x86, 0x3F, + 0x48, 0x7D, 0x6F, 0xEC, 0x94, 0x12, 0x30, 0x07, 0x5E, 0xEC, 0xB1, 0xFF, 0x41, 0xF0, 0x8F, 0x82, + 0x4C, 0x36, 0xB7, 0x86, 0xAF, 0xAE, 0x02, 0xD9, 0x8A, 0xD6, 0xF9, 0xA0, 0x3A, 0x15, 0x1F, 0x97, + 0x6F, 0xDF, 0xA5, 0x8A, 0xD2, 0x99, 0xB5, 0xCE, 0x89, 0xE0, 0x18, 0xE4, 0x3C, 0x28, 0x44, 0x43, + 0xCF, 0x61, 0x3F, 0xA5, 0x9B, 0x32, 0xA3, 0xFD, 0xE2, 0x80, 0xDF, 0x85, 0xB3, 0x24, 0xB9, 0x0C, + 0x82, 0x2D, 0xE4, 0x5E, 0xCD, 0x9B, 0x2D, 0x48, 0x03, 0x5A, 0x47, 0xAF, 0x36, 0xEF, 0x9A, 0x7C, + 0x82, 0x5E, 0x4D, 0x41, 0x26, 0xF4, 0x83, 0x4B, 0x6A, 0xD0, 0x55, 0x6D, 0x94, 0x30, 0x9A, 0xC6, + 0x58, 0x99, 0xA0, 0x46, 0xBD, 0x06, 0xC1, 0xC8, 0x6F, 0x13, 0x32, 0x92, 0xC4, 0xEB, 0x81, 0xB6, + 0x73, 0xB7, 0x8C, 0xB6, 0xA1, 0x7B, 0x76, 0x22, 0xD6, 0x8E, 0x65, 0x9B, 0x62, 0xD0, 0x44, 0xFD, + 0x41, 0xF7, 0xBA, 0x69, 0x1E, 0x2D, 0xBF, 0xF3, 0xA4, 0x4A, 0x81, 0xE7, 0xF8, 0xD9, 0x62, 0xFF, + 0xB2, 0x71, 0x13, 0x1A, 0xAE, 0x41, 0x63, 0xB3, 0xAC, 0xE7, 0x56, 0x3C, 0x5F, 0x34, 0x2F, 0xE4, + 0x17, 0x49, 0xF5, 0x0E, 0x62, 0x04, 0x12, 0xAE, 0xFB, 0x4D, 0x58, 0x4F, 0x02, 0xBE, 0xED, 0x92, + 0xE1, 0xA9, 0xB7, 0x58, 0xC8, 0x81, 0xDD, 0x95, 0x75, 0xD9, 0x59, 0xB8, 0xC5, 0x41, 0x7C, 0x97, + 0xAB, 0xB7, 0xF0, 0xB6, 0xB9, 0x13, 0x7C, 0x2A, 0xC2, 0xFC, 0x3F, 0xE3, 0x9A, 0x0A, 0x54, 0xC0, + 0x6E, 0x69, 0x0F, 0x50, 0xDD, 0xF9, 0x70, 0xC2, 0x57, 0xF4, 0x90, 0xEF, 0xE3, 0xA9, 0x2A, 0xB3, + 0xAD, 0x5D, 0x83, 0x80, 0xDC, 0xE6, 0x95, 0xFE, 0x69, 0xE2, 0xAE, 0x1D, 0x3B, 0x48, 0x22, 0x6A, + 0x82, 0x2F, 0xEA, 0x8D, 0x00, 0xE5, 0x06, 0x4C, 0x26, 0x10, 0x54, 0xE2, 0xB6, 0x92, 0x33, 0xCB + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[3] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 98315. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_98315.cs +// + +namespace KeyCMF_098315 +{ + static const BYTE Keytable[] = + { + 0x2A, 0x72, 0xF7, 0x20, 0xF9, 0xC7, 0x21, 0x4E, 0x6C, 0x62, 0x96, 0x29, 0x4D, 0x4D, 0x6A, 0xF2, + 0x66, 0x59, 0x29, 0x6C, 0x09, 0xB4, 0x70, 0x38, 0x0C, 0x91, 0x63, 0xE6, 0xBD, 0xF9, 0xCF, 0xE2, + 0xB0, 0x04, 0xCC, 0x1C, 0xA4, 0xFB, 0xA5, 0x67, 0x14, 0x54, 0x7E, 0x4B, 0x34, 0x7E, 0xAC, 0x89, + 0xE6, 0xDA, 0x62, 0x56, 0x0D, 0xE1, 0x91, 0x7F, 0x1E, 0xB4, 0xA0, 0x49, 0x1B, 0xE7, 0xB2, 0xAA, + 0x32, 0x47, 0x42, 0x0B, 0x3D, 0x74, 0x17, 0x0A, 0x05, 0x61, 0x6D, 0x59, 0x57, 0xAE, 0xF3, 0xEB, + 0xA4, 0x8B, 0xB6, 0x85, 0x75, 0x8B, 0x26, 0xEC, 0x4D, 0x6D, 0xE1, 0xF0, 0x84, 0x32, 0xB4, 0x41, + 0x91, 0xFF, 0x45, 0xAF, 0x99, 0xCB, 0x57, 0xC3, 0xA2, 0xB9, 0xC3, 0x77, 0x6D, 0xDC, 0x7C, 0x59, + 0xA2, 0x20, 0x7F, 0x42, 0x02, 0x12, 0x8F, 0x3A, 0xA5, 0x7F, 0x3A, 0x20, 0x11, 0x0D, 0x86, 0x3B, + 0xFC, 0x62, 0x53, 0xEA, 0x0F, 0xCB, 0x88, 0xD3, 0xAE, 0xBA, 0x2B, 0xEF, 0x8C, 0xDF, 0x12, 0x14, + 0x82, 0xC0, 0x3F, 0xB8, 0xB4, 0x68, 0x7A, 0x6D, 0x86, 0x50, 0x64, 0x16, 0x31, 0x6B, 0xE3, 0xEE, + 0xC9, 0x6C, 0x27, 0x2D, 0x98, 0xB8, 0xD0, 0x54, 0x5F, 0xC3, 0x17, 0x7B, 0x89, 0x45, 0xB2, 0x0F, + 0x30, 0x5E, 0xCA, 0x33, 0x03, 0x66, 0x07, 0xFA, 0xD9, 0x76, 0x03, 0xC3, 0x7E, 0x2D, 0x1C, 0xA0, + 0x51, 0x5B, 0xD0, 0x9E, 0x7E, 0x97, 0xDE, 0x79, 0x72, 0xEC, 0x62, 0x74, 0x88, 0xF4, 0xE2, 0xFC, + 0xB4, 0x07, 0x4B, 0xF6, 0x40, 0xF1, 0x83, 0x32, 0xCD, 0xAF, 0x7B, 0xB5, 0x57, 0xAE, 0xD9, 0xCF, + 0x27, 0xDE, 0x8E, 0x3D, 0xC1, 0x9D, 0xFA, 0x3D, 0xAB, 0xA4, 0xE4, 0x02, 0x2D, 0x2E, 0x21, 0xD4, + 0x2D, 0x95, 0xD7, 0x4B, 0x46, 0xFB, 0xBF, 0x42, 0xE0, 0x5E, 0xEE, 0x7D, 0xEC, 0xA4, 0x79, 0x16, + 0x33, 0xFD, 0xB9, 0x86, 0xA5, 0x7D, 0x91, 0xFF, 0xF8, 0xF1, 0x91, 0x3E, 0xD7, 0x13, 0x51, 0xC5, + 0x31, 0x2C, 0xED, 0x26, 0xF2, 0x5B, 0xD7, 0x4F, 0x62, 0x87, 0x9B, 0x42, 0x96, 0x74, 0xB6, 0xDE, + 0x3E, 0x78, 0x2C, 0x9F, 0xAA, 0xF6, 0xB8, 0xB7, 0x05, 0xD5, 0xB5, 0xE1, 0xCA, 0x11, 0x3A, 0xB9, + 0x49, 0xCA, 0xD8, 0xF1, 0x16, 0xCD, 0x45, 0x67, 0xB3, 0x43, 0x4A, 0xB7, 0x24, 0xCD, 0xCF, 0x64, + 0x95, 0xE5, 0xFF, 0x1F, 0xF4, 0xBE, 0x47, 0x20, 0x97, 0x1B, 0x16, 0xD4, 0x4E, 0x48, 0xF4, 0x0E, + 0x5D, 0xEC, 0xAE, 0xA9, 0xF0, 0xCF, 0x96, 0xDC, 0x0C, 0x2E, 0x15, 0x39, 0xBD, 0x39, 0x4A, 0x78, + 0x26, 0xD3, 0xFA, 0xF2, 0x35, 0x39, 0xC1, 0x27, 0xDC, 0xA1, 0x33, 0xA9, 0xD3, 0x44, 0x94, 0x0B, + 0xDF, 0xD2, 0xA0, 0xEE, 0xA3, 0xE5, 0xA0, 0x5A, 0x65, 0x8C, 0x3B, 0xD3, 0xCF, 0x01, 0xE2, 0xD8, + 0x0D, 0xB6, 0x72, 0xF4, 0xA4, 0x63, 0x67, 0xD7, 0x8D, 0x30, 0xFC, 0xC4, 0x30, 0x1B, 0x6E, 0x8F, + 0xB7, 0x14, 0xB9, 0xB1, 0x88, 0x6A, 0xEE, 0x72, 0x9D, 0x6B, 0xF3, 0x49, 0x31, 0x7C, 0xBA, 0xCB, + 0x9F, 0xD8, 0x69, 0x7B, 0x4E, 0xD9, 0x98, 0x70, 0xAE, 0x0F, 0xFA, 0x25, 0x9E, 0x7E, 0x0A, 0x8E, + 0xD8, 0xB5, 0x01, 0x35, 0xC8, 0x13, 0x83, 0xB9, 0x35, 0x1F, 0xA3, 0xC0, 0x42, 0xEA, 0x19, 0x63, + 0xB0, 0x76, 0x4E, 0xF4, 0x4D, 0xE2, 0x99, 0xB2, 0x6D, 0x96, 0xF3, 0x62, 0xA7, 0x65, 0x74, 0xA0, + 0x31, 0xDB, 0x75, 0xD0, 0x91, 0x0D, 0x77, 0x2F, 0x6B, 0x59, 0x4A, 0xBA, 0xCC, 0x7D, 0x9E, 0x41, + 0x49, 0x3B, 0x46, 0xC2, 0x49, 0x95, 0x5E, 0xD0, 0x44, 0xEE, 0xBD, 0xDE, 0xC1, 0x16, 0x83, 0x03, + 0xCD, 0x1F, 0xBF, 0x28, 0xEE, 0x5D, 0x85, 0x03, 0xCC, 0x32, 0xD4, 0x47, 0x3B, 0x98, 0xF1, 0xC9 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 98576. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_98576.cs +// + +namespace KeyCMF_098576 +{ + static const BYTE Keytable[] = + { + 0x1D, 0x0A, 0x9C, 0xCA, 0x37, 0x56, 0x47, 0x24, 0x94, 0x23, 0xA7, 0xBA, 0xB6, 0x1B, 0xC8, 0x06, + 0x3D, 0xE6, 0x02, 0x98, 0xCC, 0x36, 0xCD, 0xCE, 0x10, 0x21, 0x2F, 0x80, 0x87, 0x28, 0xE7, 0xD2, + 0x71, 0x17, 0x85, 0x66, 0xB3, 0x0D, 0xBC, 0xBE, 0x1B, 0x4B, 0x2F, 0x48, 0xE2, 0xD9, 0x7C, 0x7C, + 0x05, 0x1B, 0x94, 0x20, 0xE9, 0x00, 0x63, 0x63, 0xAF, 0xEF, 0x19, 0x25, 0xCF, 0x0B, 0x37, 0x3A, + 0x7E, 0x67, 0xFE, 0x64, 0x7F, 0x17, 0x38, 0xCB, 0x84, 0x08, 0x96, 0x0D, 0xEE, 0x8E, 0xCF, 0xB2, + 0xA5, 0xFE, 0x74, 0x2E, 0x45, 0xDF, 0x37, 0xAE, 0xBB, 0xA3, 0xAD, 0xFD, 0x14, 0xE3, 0xD0, 0x21, + 0xC0, 0x87, 0xC7, 0x6F, 0x7A, 0x16, 0xC7, 0x8F, 0x3B, 0x77, 0x62, 0x52, 0xD8, 0x3A, 0x61, 0x09, + 0x1F, 0x73, 0x23, 0x33, 0xC2, 0x60, 0x27, 0x4A, 0x52, 0x89, 0xD8, 0xFC, 0x87, 0xF9, 0xE9, 0x5C, + 0x72, 0x57, 0xE0, 0xB3, 0x3D, 0x24, 0x4F, 0xC8, 0xCF, 0x92, 0x42, 0x12, 0x22, 0xEF, 0x25, 0xFE, + 0x9A, 0x4E, 0x7A, 0xC4, 0xEB, 0xFC, 0x78, 0xD0, 0x9F, 0x83, 0x00, 0xE7, 0x7E, 0x1D, 0x9E, 0x12, + 0x99, 0xFD, 0x0A, 0xD2, 0xFD, 0x4E, 0xE0, 0x53, 0xF8, 0xFF, 0x69, 0x91, 0x61, 0x56, 0x1C, 0xB2, + 0x17, 0xA8, 0x7A, 0x0C, 0x63, 0xD6, 0x07, 0xDA, 0x53, 0x7B, 0xBB, 0x3B, 0xCC, 0x63, 0xB1, 0x4C, + 0x92, 0xF3, 0x31, 0x36, 0x92, 0x68, 0x7C, 0x2C, 0xC2, 0x71, 0x5C, 0xFD, 0x30, 0x53, 0xCC, 0xA1, + 0xEB, 0x92, 0x25, 0xEA, 0x3B, 0x8A, 0xA1, 0xB8, 0x79, 0x22, 0x2E, 0x42, 0x5E, 0xA9, 0x71, 0x90, + 0xDC, 0x09, 0x50, 0x52, 0x48, 0xFD, 0x4B, 0x37, 0x32, 0x0B, 0x3E, 0x15, 0x04, 0x7F, 0xB7, 0xEB, + 0x66, 0x20, 0xB3, 0x23, 0xC3, 0x29, 0x3F, 0xB8, 0xB4, 0xA2, 0x1F, 0x98, 0x24, 0x10, 0xE3, 0xF6, + 0xA5, 0xB3, 0x5C, 0x6B, 0xD6, 0x0B, 0xFB, 0x72, 0x2B, 0xC0, 0x76, 0x26, 0xA2, 0x07, 0xDB, 0x1A, + 0x4F, 0x38, 0x21, 0x01, 0x73, 0x86, 0x56, 0xB9, 0xED, 0xDC, 0xDF, 0x3F, 0x96, 0x74, 0x2F, 0x76, + 0x5A, 0x01, 0x6F, 0xCE, 0x70, 0x37, 0x29, 0x42, 0xC7, 0xFC, 0x2E, 0x69, 0x12, 0xF8, 0xC8, 0xA4, + 0x97, 0xFE, 0x7B, 0x3B, 0x87, 0x46, 0x5E, 0xE5, 0x6A, 0x5E, 0x7F, 0xB0, 0x1F, 0x33, 0x50, 0x9C, + 0x04, 0x3D, 0xFB, 0x32, 0x83, 0xE9, 0xFD, 0xCD, 0x74, 0x27, 0x6E, 0x51, 0xC6, 0xCF, 0xBB, 0x79, + 0xD4, 0x63, 0x71, 0x10, 0xF2, 0xDB, 0x29, 0x22, 0x7F, 0x04, 0xCF, 0xEF, 0xBF, 0xBD, 0x26, 0x65, + 0xE0, 0x7C, 0x72, 0xBC, 0xBD, 0xC3, 0x91, 0xEF, 0x4E, 0xC5, 0xC7, 0x67, 0xBC, 0x47, 0x68, 0xE1, + 0x7F, 0xBA, 0x4A, 0x56, 0xF4, 0x5F, 0xDE, 0x13, 0x48, 0xB5, 0x89, 0x3F, 0xF8, 0xBA, 0xAB, 0x8F, + 0xAE, 0x02, 0x25, 0x63, 0xBA, 0x86, 0x45, 0xA1, 0x40, 0xF8, 0xF4, 0xDC, 0x96, 0x7B, 0xED, 0xF8, + 0x99, 0xA5, 0x4D, 0xB2, 0x99, 0x7C, 0xF0, 0x4B, 0x6C, 0x5D, 0x91, 0x3A, 0xC3, 0x7B, 0x32, 0x41, + 0x26, 0x54, 0x08, 0xA7, 0x09, 0x9D, 0x95, 0x9E, 0x41, 0xB4, 0xC6, 0xC8, 0x65, 0x89, 0xF7, 0xBF, + 0xC0, 0x73, 0x10, 0x8F, 0xD4, 0xCE, 0x69, 0x05, 0x16, 0x8C, 0x32, 0xCA, 0x72, 0x7B, 0xB9, 0xB1, + 0xF9, 0x69, 0x99, 0xAF, 0x46, 0x40, 0x3D, 0x91, 0x32, 0xA0, 0xD6, 0x1B, 0xBE, 0x69, 0x38, 0x8A, + 0x50, 0x07, 0x6B, 0x7B, 0x1A, 0x06, 0xB2, 0x0F, 0x81, 0xA7, 0x62, 0xF3, 0x1D, 0xE2, 0xC0, 0x9B, + 0xBF, 0xFB, 0xEE, 0xD1, 0x62, 0xF3, 0x30, 0xEB, 0xD1, 0x59, 0x71, 0xC1, 0xB0, 0xEC, 0x4B, 0x67, + 0x8A, 0x13, 0x7A, 0xAE, 0x51, 0x00, 0x2C, 0xD2, 0x22, 0x8C, 0x01, 0x7D, 0x6E, 0xE7, 0x16, 0x26 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 98845. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_98845.cs +// + +namespace KeyCMF_098845 +{ + static const BYTE Keytable[] = + { + 0x76, 0x7D, 0x00, 0xF5, 0x22, 0x05, 0x60, 0x8B, 0xCA, 0xA1, 0x99, 0xF0, 0xB0, 0xBB, 0x42, 0xB5, + 0x19, 0xBA, 0x61, 0x60, 0x85, 0x84, 0x59, 0x77, 0xE2, 0x69, 0xBA, 0xFE, 0x9F, 0xF1, 0x61, 0x73, + 0xC2, 0xEF, 0x81, 0x3C, 0x7B, 0x28, 0x75, 0xAF, 0x7B, 0xF3, 0x47, 0x2E, 0x37, 0xD4, 0x25, 0xD7, + 0xDB, 0x90, 0x34, 0x91, 0x70, 0x5E, 0x42, 0x7D, 0x8C, 0x60, 0xD0, 0x7A, 0x30, 0xCE, 0xD1, 0x85, + 0x00, 0x45, 0xBA, 0x4D, 0xF1, 0x41, 0x33, 0xF6, 0xA6, 0x47, 0x7B, 0x50, 0x7E, 0xEA, 0x7B, 0x07, + 0xC0, 0xC6, 0xDD, 0x13, 0xD0, 0x0E, 0x23, 0x1B, 0xCB, 0xE2, 0x5A, 0xE9, 0xB1, 0x4C, 0x01, 0x90, + 0x2B, 0x31, 0x6F, 0xA9, 0x50, 0x6D, 0xF4, 0xB7, 0x9F, 0xE5, 0xFC, 0x57, 0xE1, 0x8F, 0x5C, 0x86, + 0x4E, 0x61, 0x81, 0xD2, 0x3B, 0x43, 0x40, 0x26, 0x88, 0x2D, 0x61, 0xD6, 0x51, 0x62, 0x43, 0xB1, + 0x87, 0x11, 0x05, 0xED, 0x61, 0x0A, 0xA6, 0x09, 0x88, 0x7B, 0x7F, 0x82, 0x08, 0x6D, 0xDE, 0x80, + 0x6E, 0x1D, 0x7A, 0x86, 0x01, 0x17, 0x69, 0xB7, 0x6E, 0xCC, 0x2E, 0x1B, 0x6A, 0x29, 0x69, 0xD2, + 0x60, 0xF7, 0xF2, 0x8D, 0x36, 0x5D, 0x01, 0x27, 0xE4, 0xE4, 0xBA, 0xD8, 0xD7, 0xFF, 0x37, 0x59, + 0x41, 0x35, 0x77, 0x9F, 0x1E, 0x5F, 0x97, 0x06, 0x8F, 0x1E, 0x47, 0xA8, 0xFF, 0x9D, 0xD4, 0x9E, + 0x71, 0xA7, 0x3E, 0x05, 0x51, 0xBF, 0x24, 0x7D, 0xCC, 0x4D, 0xB4, 0x7D, 0xAB, 0x59, 0x01, 0x15, + 0x7E, 0x36, 0xEB, 0x94, 0x1B, 0xE6, 0xBD, 0x82, 0xC7, 0x44, 0x89, 0xBA, 0x43, 0xBB, 0x14, 0x19, + 0x06, 0xA8, 0xC4, 0xE0, 0x1D, 0xD5, 0x1B, 0x65, 0xE9, 0x74, 0x0D, 0x8F, 0x86, 0x52, 0x1D, 0xF1, + 0xBB, 0xE1, 0x5D, 0x47, 0x0A, 0x08, 0x57, 0x07, 0xE7, 0xDF, 0xAF, 0xB1, 0xD2, 0xED, 0xE8, 0x8E, + 0xB0, 0x54, 0xF7, 0x40, 0x75, 0xFE, 0x3E, 0xC3, 0x73, 0x0B, 0x0B, 0xF9, 0xEB, 0xC8, 0x1A, 0xA4, + 0x7F, 0xB1, 0x27, 0x8D, 0xB4, 0x67, 0x31, 0xF0, 0xEF, 0xE1, 0xA0, 0x79, 0x4A, 0xEF, 0xBD, 0x06, + 0x97, 0x3E, 0xC9, 0x18, 0x84, 0xBF, 0x50, 0x63, 0xE3, 0xBE, 0x1F, 0xC8, 0x69, 0xEE, 0x2F, 0xEE, + 0xAF, 0x5C, 0x36, 0xF6, 0x65, 0xE9, 0xFD, 0x8C, 0xC6, 0xC8, 0xB7, 0xE5, 0x19, 0x50, 0x5F, 0xB6, + 0x4D, 0x71, 0x6B, 0xC0, 0xDC, 0xF6, 0x09, 0x68, 0x94, 0xDB, 0xE0, 0xF8, 0xB9, 0x8C, 0x6C, 0x20, + 0x5B, 0x13, 0x77, 0x1F, 0xED, 0x8B, 0x1F, 0x0B, 0xA4, 0xBA, 0x61, 0x5A, 0x6E, 0xCA, 0x96, 0xC3, + 0x62, 0x86, 0x67, 0x04, 0x23, 0x53, 0x41, 0x0A, 0x06, 0x2A, 0xBC, 0x9A, 0x73, 0xE2, 0x6C, 0x86, + 0xE6, 0xE7, 0xCC, 0xF3, 0x43, 0x88, 0xE9, 0x61, 0x92, 0x1E, 0x60, 0xAD, 0xEB, 0xCA, 0x03, 0xE1, + 0x97, 0xFE, 0x16, 0xD6, 0x68, 0x40, 0xF5, 0xD7, 0x49, 0x87, 0xF8, 0x44, 0x69, 0xD4, 0xA6, 0xB0, + 0x84, 0x19, 0x25, 0x7C, 0x58, 0x28, 0x6E, 0x61, 0x15, 0x1A, 0x10, 0x81, 0xF8, 0x2A, 0xBB, 0xF0, + 0x07, 0xA7, 0x89, 0x65, 0xBB, 0x1A, 0x62, 0x63, 0xF2, 0x83, 0x9F, 0xA8, 0xC4, 0x48, 0xA5, 0xD5, + 0x39, 0x6A, 0xE0, 0xF3, 0x2D, 0x26, 0xB3, 0x86, 0x38, 0x7B, 0x97, 0x96, 0xF9, 0xE7, 0xA6, 0x77, + 0x42, 0x00, 0x7E, 0x54, 0xF2, 0x37, 0xC4, 0x66, 0x36, 0x2B, 0xD7, 0x67, 0x6E, 0x6D, 0xBE, 0xDA, + 0x29, 0xD2, 0x80, 0xED, 0xEA, 0x5A, 0xA9, 0x42, 0xF8, 0xC7, 0x50, 0x13, 0x97, 0x0E, 0x3B, 0xC9, + 0x78, 0x89, 0x85, 0x9A, 0x37, 0x0E, 0x7E, 0x9C, 0xE5, 0x47, 0xF0, 0x01, 0xF1, 0xF0, 0x29, 0x6D, + 0xED, 0x99, 0x2A, 0x92, 0x9C, 0xAD, 0x69, 0x32, 0x8B, 0xC9, 0xEC, 0xFF, 0xB6, 0x45, 0xB6, 0xF8 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 99843. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_99843.cs +// + +namespace KeyCMF_099843 +{ + static const BYTE Keytable[] = + { + 0xD9, 0xE2, 0x13, 0x55, 0xB5, 0x00, 0x9E, 0x45, 0x1C, 0xF3, 0x34, 0x24, 0xF8, 0x64, 0x64, 0x2F, + 0xBB, 0xAA, 0x77, 0x1E, 0x64, 0xAA, 0x7B, 0xEB, 0xDE, 0x8A, 0xBD, 0x95, 0xF2, 0x03, 0x2C, 0x47, + 0xB6, 0xDC, 0x16, 0x90, 0x44, 0x1B, 0xE2, 0x92, 0x5D, 0x03, 0xA8, 0xF5, 0xF7, 0xAC, 0x77, 0x11, + 0xBA, 0xCC, 0x49, 0xFB, 0xAF, 0xA5, 0x3E, 0x16, 0x96, 0xB2, 0x99, 0xE0, 0x35, 0xDF, 0x8E, 0x1A, + 0xD4, 0x0F, 0x56, 0xDD, 0x23, 0x3F, 0x7B, 0x25, 0x72, 0x1F, 0xBA, 0xFD, 0x13, 0xF8, 0xA9, 0x02, + 0x87, 0xD0, 0x1C, 0x3B, 0xB4, 0x70, 0x79, 0x20, 0x6B, 0x39, 0x7C, 0x01, 0xEC, 0x4B, 0x0D, 0xBC, + 0xC0, 0x20, 0x1B, 0xBA, 0xF5, 0xF7, 0x26, 0xD9, 0xA9, 0x75, 0x61, 0xF7, 0x5E, 0x67, 0x38, 0x11, + 0x73, 0x15, 0x5B, 0xDC, 0xF1, 0x17, 0x65, 0x7C, 0x57, 0x47, 0x18, 0x36, 0x77, 0x5C, 0x91, 0xCF, + 0x9B, 0x48, 0x44, 0xE5, 0x52, 0x9D, 0xD9, 0xC2, 0x3F, 0xF3, 0x52, 0x1B, 0xB5, 0x33, 0xC7, 0xE0, + 0x38, 0x47, 0x3D, 0xA1, 0xD8, 0x88, 0xFF, 0x70, 0x37, 0x15, 0x4D, 0xAB, 0xFD, 0x44, 0x79, 0xEA, + 0x62, 0xD4, 0x2C, 0xCB, 0x1A, 0x54, 0x60, 0xEB, 0x0A, 0x92, 0xFD, 0x82, 0x0C, 0x00, 0xE7, 0xA0, + 0x48, 0x6E, 0xB3, 0xFA, 0x42, 0x5F, 0x99, 0x09, 0x10, 0xC4, 0x00, 0xB9, 0x30, 0x9C, 0x39, 0x43, + 0x0D, 0xCB, 0x93, 0xDA, 0xDF, 0x1A, 0x5E, 0xD0, 0xD8, 0xBA, 0x0C, 0x14, 0xF5, 0x13, 0xBB, 0x3B, + 0xCB, 0x3A, 0x04, 0x35, 0x63, 0x5C, 0x68, 0xE9, 0x01, 0xB7, 0x94, 0x6C, 0x3A, 0x09, 0xE7, 0xB6, + 0x99, 0x32, 0xAD, 0x48, 0x1D, 0xDD, 0xDA, 0x27, 0xA8, 0xC4, 0x2B, 0xF9, 0x26, 0x96, 0xCD, 0x25, + 0xEC, 0xCC, 0xE8, 0xA3, 0xCA, 0xB0, 0xEE, 0x2F, 0x54, 0x87, 0x34, 0xF1, 0x9A, 0xB7, 0x1A, 0xFA, + 0x8F, 0x14, 0x01, 0xDC, 0x02, 0x74, 0x88, 0x47, 0x23, 0xF3, 0xB6, 0xBD, 0xB3, 0xD7, 0x48, 0xE7, + 0xF0, 0xC4, 0xC6, 0xB8, 0x14, 0xB5, 0x55, 0x57, 0x98, 0xBD, 0xA7, 0xD7, 0xC4, 0xBF, 0x77, 0xEB, + 0x13, 0x8D, 0xFD, 0x97, 0x4A, 0x84, 0x6F, 0x01, 0x23, 0x7F, 0x5A, 0x4F, 0x94, 0x5D, 0xDF, 0x13, + 0x28, 0xE2, 0x70, 0xC3, 0xA9, 0x08, 0x80, 0x60, 0x24, 0x2A, 0x49, 0xAD, 0xF5, 0x0D, 0x53, 0x54, + 0x5A, 0xA9, 0x3D, 0xDD, 0x38, 0x0D, 0xC0, 0xE3, 0x53, 0x98, 0x7C, 0x07, 0x58, 0x67, 0x39, 0x58, + 0x30, 0xD6, 0xC1, 0x57, 0x6C, 0x96, 0x15, 0x28, 0x90, 0xBB, 0x51, 0x31, 0x21, 0x94, 0x93, 0x3D, + 0x75, 0xDE, 0x42, 0xD5, 0x24, 0x31, 0xF1, 0xE9, 0x73, 0xD0, 0xAD, 0x9C, 0xC8, 0xDD, 0x5D, 0xC0, + 0x96, 0x1D, 0x70, 0xC2, 0xAF, 0x8A, 0x50, 0x29, 0x5B, 0x24, 0x3A, 0xD1, 0x90, 0x81, 0xAA, 0x53, + 0xD1, 0x10, 0x1C, 0x2A, 0xFE, 0xCD, 0xA1, 0xF7, 0x7D, 0xE4, 0x52, 0x68, 0x80, 0xE3, 0x0A, 0x3D, + 0x28, 0xBD, 0x75, 0x9B, 0xA7, 0x39, 0xB5, 0x5E, 0x46, 0x6C, 0x79, 0x6E, 0xC5, 0x48, 0x14, 0x75, + 0x0D, 0x0F, 0x5D, 0x58, 0x7F, 0x19, 0x7B, 0xAE, 0x63, 0x5C, 0xBD, 0x49, 0xE5, 0x02, 0xA0, 0x17, + 0xAE, 0x4B, 0xDF, 0xE8, 0x27, 0x05, 0x4C, 0x97, 0x87, 0x6B, 0x86, 0x28, 0xA4, 0x24, 0x55, 0xA2, + 0xB1, 0x50, 0x92, 0x08, 0x88, 0xCC, 0x80, 0xDA, 0x84, 0x25, 0x0F, 0x88, 0xFB, 0x83, 0x1F, 0x2E, + 0x89, 0x6F, 0x4B, 0xFC, 0x39, 0x00, 0xAC, 0x86, 0x36, 0xD6, 0x3F, 0x4E, 0x0E, 0x5E, 0x67, 0xC7, + 0x6B, 0x30, 0x2B, 0x94, 0x19, 0xAA, 0x53, 0xF9, 0x68, 0x12, 0xAD, 0xDF, 0x8E, 0xCC, 0xC7, 0x8A, + 0x2B, 0xCE, 0x0F, 0x34, 0xF9, 0xEE, 0x55, 0x1A, 0x17, 0x4F, 0x75, 0xBE, 0x1C, 0xE2, 0x86, 0xCC + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 100672. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_100672.cs +// + +namespace KeyCMF_100672 +{ + static const BYTE Keytable[] = + { + 0xB4, 0xA3, 0x04, 0xEC, 0xB7, 0x0F, 0xC8, 0xF1, 0x48, 0x71, 0xF0, 0xFB, 0x1D, 0x35, 0x2A, 0x39, + 0xC6, 0x8F, 0x1C, 0x6D, 0x91, 0x12, 0xA7, 0x7C, 0xDD, 0xEF, 0xBB, 0xB4, 0x62, 0x07, 0x10, 0x08, + 0x8A, 0x03, 0x87, 0xD4, 0x24, 0x93, 0x71, 0xE0, 0x7B, 0x1E, 0x3A, 0x8B, 0x3A, 0x15, 0x54, 0x54, + 0x28, 0x53, 0x49, 0x33, 0x99, 0x25, 0x02, 0xC2, 0x66, 0x1F, 0xBA, 0xCB, 0x99, 0xD0, 0x69, 0x1F, + 0x89, 0xEA, 0x94, 0x86, 0xA6, 0xBF, 0xFA, 0x1D, 0x1A, 0x55, 0x20, 0xFB, 0x41, 0x30, 0xF6, 0x6D, + 0x9D, 0x4C, 0x8A, 0x21, 0x8B, 0xA9, 0x99, 0xA7, 0x2B, 0x12, 0xF3, 0xFE, 0x87, 0xCA, 0x44, 0x8F, + 0xD1, 0x3C, 0x7A, 0xB2, 0xBC, 0x56, 0x35, 0x94, 0x1C, 0xED, 0x3F, 0xEB, 0x44, 0xD2, 0xB3, 0x57, + 0x75, 0x2F, 0xDE, 0x00, 0xF2, 0x37, 0x93, 0x9D, 0x57, 0x9F, 0xAE, 0xBE, 0x5E, 0x2B, 0xAD, 0x32, + 0xC6, 0x54, 0x2F, 0xF8, 0x91, 0x11, 0x3D, 0x10, 0xD1, 0x21, 0xCC, 0x20, 0xCA, 0x3B, 0xC2, 0x4E, + 0xE3, 0x86, 0xC4, 0xE7, 0x24, 0xE2, 0xEC, 0xB8, 0x7D, 0x6B, 0x58, 0x94, 0x00, 0xD4, 0xEB, 0x91, + 0xC2, 0x57, 0x9F, 0xBD, 0x8D, 0x18, 0xDA, 0xB5, 0xA3, 0x82, 0xDE, 0x26, 0x98, 0xEC, 0x13, 0x20, + 0xE8, 0xA4, 0x60, 0x24, 0xCE, 0x6C, 0xB7, 0xF3, 0xB3, 0x32, 0x54, 0x96, 0xC0, 0x74, 0xD8, 0x87, + 0xE5, 0xDD, 0xD4, 0x26, 0x1E, 0xE4, 0xBF, 0xFB, 0x2A, 0xAE, 0xB8, 0xFD, 0x0F, 0xFA, 0x13, 0x05, + 0x80, 0x38, 0x43, 0x41, 0xB0, 0x75, 0xD7, 0xBE, 0xB8, 0x5C, 0xF2, 0x20, 0x84, 0x1C, 0x1D, 0x33, + 0xD9, 0x0B, 0xEF, 0xCB, 0xAA, 0xDF, 0x0E, 0x2B, 0xE2, 0x28, 0xFE, 0xA8, 0xE7, 0x2F, 0x3B, 0x97, + 0xEE, 0xCC, 0x5E, 0x60, 0xD2, 0xAA, 0xBF, 0xAD, 0x53, 0xA9, 0x24, 0xCA, 0x17, 0xCC, 0xE6, 0x4C, + 0xF5, 0xAF, 0xC9, 0x02, 0x11, 0x59, 0x12, 0x60, 0xF4, 0x30, 0x06, 0x92, 0x57, 0x44, 0x44, 0x84, + 0xC4, 0x69, 0xF1, 0x70, 0x71, 0x1B, 0xA9, 0x11, 0xF2, 0xAD, 0xD3, 0x31, 0xDC, 0xE6, 0x94, 0x6A, + 0x99, 0xB6, 0xA4, 0xAA, 0xFF, 0x3A, 0x1C, 0xF5, 0xDE, 0x8E, 0xDC, 0x65, 0x75, 0xAC, 0x5C, 0xEB, + 0xF9, 0x74, 0xBC, 0xBD, 0x79, 0xE2, 0x78, 0x30, 0x47, 0x29, 0x6C, 0x9F, 0x01, 0x97, 0xDA, 0x1D, + 0x66, 0xA6, 0xA3, 0x31, 0x1D, 0xF4, 0x0C, 0x24, 0x3F, 0x88, 0x60, 0x37, 0xB5, 0x67, 0x35, 0x06, + 0x96, 0x5C, 0x2E, 0x67, 0x49, 0xFC, 0xBB, 0xC4, 0xAF, 0x73, 0x17, 0x9F, 0x94, 0x2A, 0x9D, 0x69, + 0x33, 0x08, 0x5A, 0x58, 0x83, 0x54, 0x65, 0x91, 0x31, 0x0F, 0xF9, 0xAA, 0x69, 0x8A, 0x47, 0xB4, + 0xE5, 0xCE, 0x7C, 0x92, 0x89, 0x1C, 0x19, 0xCF, 0x2D, 0xDF, 0xDD, 0x44, 0x9C, 0x65, 0xC3, 0x71, + 0x39, 0x45, 0x62, 0x6F, 0x4A, 0x29, 0x9C, 0xD5, 0xAD, 0xA6, 0xD9, 0xAA, 0x67, 0x9C, 0xFB, 0x71, + 0xB9, 0x27, 0xC7, 0x27, 0x40, 0x57, 0x96, 0xDC, 0x52, 0x5A, 0x5A, 0x45, 0xC2, 0xE5, 0x4C, 0xCC, + 0x6F, 0x2F, 0x0B, 0x44, 0x23, 0x20, 0xBF, 0x72, 0x7E, 0x56, 0x74, 0xB4, 0xA2, 0x85, 0x72, 0xE6, + 0x0D, 0x19, 0xAD, 0x2D, 0xB3, 0xA4, 0xC6, 0xE5, 0x46, 0xE1, 0xDD, 0x35, 0xDE, 0xDF, 0x4F, 0x21, + 0x87, 0x0F, 0x78, 0x49, 0xFB, 0x0D, 0xC5, 0xFC, 0x0A, 0x10, 0x76, 0x69, 0xA7, 0xBA, 0xB7, 0x86, + 0x1D, 0xC5, 0x8D, 0x1C, 0x6A, 0xF3, 0xF2, 0x90, 0xFD, 0x51, 0xEB, 0xAC, 0xF2, 0x80, 0x78, 0x7B, + 0xCB, 0x7B, 0xB7, 0x51, 0x13, 0x2D, 0xC6, 0xF2, 0x71, 0x36, 0x4C, 0x94, 0x9C, 0x26, 0x9D, 0x48, + 0xDA, 0x0E, 0x74, 0x8B, 0x8A, 0xC2, 0x5F, 0x45, 0xD9, 0x63, 0x7A, 0x24, 0xEC, 0x0A, 0x65, 0x9B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 101600. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_101600.cs +// + +namespace KeyCMF_101600 +{ + static const BYTE Keytable[] = + { + 0xE0, 0x1D, 0xA0, 0x8D, 0xBA, 0x0C, 0x83, 0x47, 0xF0, 0xB2, 0x64, 0x5E, 0x34, 0xF1, 0x03, 0x88, + 0x6D, 0xC1, 0x6C, 0xBA, 0x1F, 0x92, 0xC5, 0x16, 0x11, 0x36, 0x7C, 0xA7, 0x48, 0xE6, 0x56, 0x42, + 0x76, 0xFB, 0xA0, 0xB5, 0x91, 0x61, 0xC1, 0x92, 0xF7, 0x4F, 0x3A, 0x10, 0x58, 0x17, 0x10, 0x20, + 0x27, 0xD7, 0x0C, 0xEA, 0xF3, 0x77, 0x8E, 0x5F, 0x75, 0xCB, 0xD5, 0x24, 0xE4, 0xD7, 0xA1, 0xD3, + 0xA5, 0x0E, 0x36, 0xEC, 0x2C, 0x96, 0x56, 0x18, 0x75, 0x7C, 0x28, 0x7A, 0xC4, 0x2B, 0x98, 0xBA, + 0xCB, 0xB4, 0xFB, 0xBA, 0x36, 0x5F, 0x64, 0xEB, 0x3D, 0xEE, 0xBD, 0x67, 0x21, 0xA0, 0xEE, 0x43, + 0x42, 0x73, 0xAD, 0x7A, 0x62, 0x3A, 0x20, 0x08, 0xE2, 0x62, 0x96, 0xAF, 0x63, 0x03, 0x92, 0xC3, + 0x1C, 0x12, 0xBD, 0x3E, 0x87, 0x86, 0xD0, 0xEC, 0x47, 0x4D, 0x11, 0xE6, 0xC9, 0x8B, 0xDD, 0x55, + 0x2D, 0x9A, 0x10, 0x7D, 0x39, 0xAC, 0xEE, 0xD3, 0xBD, 0xB1, 0xCD, 0x63, 0x01, 0x2A, 0x5A, 0x8D, + 0x18, 0xD2, 0xB6, 0x57, 0xCC, 0xF4, 0x98, 0x6D, 0x7B, 0xDC, 0x94, 0x14, 0x57, 0xB6, 0x86, 0xA1, + 0x83, 0xC4, 0xB5, 0xAA, 0x16, 0x4A, 0x6C, 0x1F, 0xE9, 0x69, 0x8C, 0xC4, 0x58, 0x8D, 0x78, 0xDE, + 0x5E, 0xA2, 0xF2, 0x01, 0xD2, 0x81, 0xB6, 0x24, 0x85, 0x05, 0xAA, 0x5B, 0xAA, 0xB6, 0x0D, 0xDC, + 0x9C, 0x65, 0xFA, 0xEE, 0x68, 0x74, 0x22, 0x66, 0x42, 0x62, 0x8A, 0xD9, 0xD9, 0x7C, 0x68, 0xCA, + 0x57, 0x5F, 0x33, 0xFA, 0x0D, 0x9B, 0x95, 0xBE, 0x4B, 0x70, 0x20, 0xB6, 0xDA, 0xA9, 0x7C, 0xC1, + 0x62, 0x7B, 0x4B, 0xA3, 0x69, 0xD8, 0xCA, 0x73, 0xEE, 0xB1, 0xA2, 0x72, 0xB9, 0x3B, 0xDD, 0xE3, + 0xE7, 0xFD, 0x49, 0x44, 0x7A, 0xBB, 0x4D, 0x82, 0x13, 0x35, 0xFA, 0xAF, 0x29, 0x73, 0xBB, 0xB9, + 0xF1, 0x4D, 0x80, 0x7C, 0xAD, 0x92, 0x90, 0xBF, 0x9B, 0x49, 0x24, 0x97, 0x81, 0x94, 0x78, 0x5C, + 0xBA, 0x12, 0xB0, 0xA5, 0xA6, 0xDF, 0xE2, 0x32, 0xCE, 0x44, 0x8F, 0x86, 0xC9, 0xF4, 0x2D, 0x08, + 0xE3, 0xBF, 0x51, 0x24, 0xD7, 0x9D, 0x94, 0x2F, 0x71, 0x33, 0x87, 0x40, 0x4D, 0xF0, 0xB4, 0x6F, + 0x63, 0x6E, 0xC5, 0xDD, 0x1F, 0x06, 0x8A, 0x31, 0xC8, 0x56, 0x51, 0x50, 0xAA, 0x07, 0x02, 0xC6, + 0x6C, 0x13, 0x75, 0x1E, 0x63, 0xD3, 0x90, 0x6C, 0xF4, 0x04, 0x36, 0x91, 0x46, 0xA1, 0x26, 0x35, + 0xB0, 0xE6, 0xCD, 0x91, 0x56, 0x09, 0xC7, 0x4C, 0xFA, 0xE2, 0xED, 0xA8, 0x54, 0x8A, 0x89, 0x42, + 0x6F, 0xBD, 0x05, 0x96, 0x1D, 0xB9, 0x58, 0x12, 0x28, 0x3C, 0xF7, 0xFB, 0xF3, 0x15, 0x1D, 0x0F, + 0x58, 0x1B, 0x48, 0x1B, 0x8C, 0x89, 0x39, 0xBB, 0xA2, 0x02, 0xEE, 0x1C, 0xBC, 0x03, 0x22, 0x88, + 0xD8, 0x39, 0x95, 0xF5, 0x49, 0x30, 0xA0, 0x84, 0x7D, 0x82, 0xE5, 0x63, 0xB7, 0x8C, 0xF4, 0xAB, + 0x72, 0x76, 0xF4, 0xE9, 0x7B, 0x14, 0xBC, 0xCC, 0x07, 0xEA, 0xF3, 0x26, 0xE3, 0xF1, 0x8C, 0x39, + 0x7B, 0x0B, 0x5B, 0xE4, 0x02, 0x62, 0x3A, 0xB2, 0xD8, 0x7A, 0xF9, 0x69, 0xE8, 0x2D, 0xDC, 0xBD, + 0x13, 0x78, 0x8A, 0x26, 0x8E, 0x23, 0x9B, 0xE8, 0x85, 0xD1, 0xF9, 0xC0, 0x95, 0x79, 0x46, 0x2F, + 0x48, 0x1E, 0x07, 0x51, 0xED, 0x66, 0x11, 0x86, 0xA8, 0xA3, 0x98, 0x1C, 0xB8, 0x41, 0x91, 0x2B, + 0xA9, 0xE5, 0x67, 0x19, 0x5C, 0x73, 0xE3, 0x91, 0x49, 0xDD, 0x4A, 0x3B, 0x81, 0x7F, 0xFC, 0xF5, + 0xA2, 0x23, 0x0C, 0x67, 0x34, 0x48, 0x93, 0x53, 0xE3, 0x6C, 0xD4, 0x86, 0x43, 0xCA, 0xF3, 0xFA, + 0x1E, 0xD6, 0x23, 0x39, 0x6D, 0x8D, 0x01, 0x9D, 0x92, 0xB3, 0x2B, 0x8C, 0x2B, 0x64, 0x81, 0x70 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[Keytable[0] & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 102337. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_102337.cs +// + +namespace KeyCMF_102337 +{ + static const BYTE Keytable[] = + { + 0xE7, 0x98, 0xFF, 0xE9, 0x23, 0xDB, 0xC1, 0xA8, 0x9E, 0xF4, 0xE0, 0xC3, 0xBE, 0xE5, 0x08, 0xB1, + 0x07, 0x30, 0x39, 0x4D, 0x0D, 0x7E, 0xF2, 0x1A, 0xAA, 0xD8, 0x0D, 0x8A, 0x1C, 0xF3, 0x9F, 0xE5, + 0x1F, 0xB2, 0xBA, 0xA0, 0xB2, 0x72, 0xA1, 0x7D, 0x6B, 0x74, 0x15, 0xF3, 0x6B, 0x24, 0x25, 0x6F, + 0xB8, 0x24, 0x78, 0x2A, 0xB9, 0xF6, 0x39, 0xD1, 0x74, 0x4E, 0x31, 0x89, 0x2E, 0x63, 0x71, 0x4E, + 0x44, 0xBA, 0x3B, 0x42, 0x49, 0x9E, 0x40, 0x24, 0x91, 0x19, 0x95, 0x1A, 0x0A, 0xF0, 0xE1, 0xD2, + 0xF1, 0x8F, 0xE5, 0x1B, 0xEC, 0x4C, 0x94, 0x65, 0x0E, 0x47, 0x28, 0x9C, 0x63, 0xB3, 0x8F, 0xAD, + 0x30, 0x77, 0x60, 0xAC, 0x2C, 0x05, 0x9C, 0x5F, 0x87, 0xA0, 0x7A, 0x8D, 0xC5, 0x34, 0xF0, 0x26, + 0x61, 0x41, 0x12, 0x64, 0x53, 0x59, 0x43, 0x6A, 0x32, 0x51, 0x53, 0x7A, 0x09, 0x64, 0x16, 0x4A, + 0x38, 0x1B, 0xB3, 0xCF, 0xDD, 0x87, 0x07, 0x47, 0x7F, 0x0D, 0x09, 0x55, 0xEE, 0x0D, 0x83, 0xC2, + 0x68, 0xDD, 0x6B, 0xE5, 0x02, 0xB7, 0xA7, 0x43, 0x8A, 0x91, 0xCC, 0x65, 0x57, 0xC7, 0x82, 0xD3, + 0x88, 0x20, 0x04, 0xE9, 0xB3, 0x4B, 0xC7, 0xE3, 0x15, 0x20, 0x94, 0xB1, 0xEE, 0xA9, 0xB2, 0x14, + 0xD3, 0x5B, 0x94, 0x58, 0xC3, 0x33, 0x6E, 0xC8, 0xDC, 0x51, 0x64, 0xB5, 0x0B, 0x14, 0xBA, 0x70, + 0x6B, 0x17, 0xB3, 0x0A, 0xDD, 0x5D, 0x97, 0x4C, 0xE9, 0xDE, 0xE5, 0xD5, 0xC7, 0x23, 0x7E, 0x64, + 0x76, 0x2C, 0x00, 0x5D, 0x62, 0xD1, 0x2A, 0xAB, 0x54, 0x9E, 0x35, 0x7F, 0xA2, 0xBF, 0x8D, 0x67, + 0xE9, 0xD4, 0x4F, 0x67, 0xAB, 0x3A, 0xD2, 0x74, 0x59, 0xCB, 0xFE, 0x43, 0x15, 0xFA, 0xE0, 0xFD, + 0xFD, 0x9C, 0xF7, 0x06, 0xF1, 0x9B, 0x2F, 0x27, 0xEB, 0x3B, 0x7D, 0xDB, 0x57, 0x04, 0xBC, 0x39, + 0x08, 0xB3, 0x1B, 0x18, 0xC6, 0xEB, 0xD1, 0xB8, 0xD0, 0x4E, 0x99, 0x19, 0x22, 0x5C, 0xA2, 0xB9, + 0x22, 0x83, 0xEE, 0x13, 0x49, 0x56, 0x89, 0x1C, 0x49, 0x44, 0xBF, 0xC5, 0xCF, 0x94, 0x76, 0x82, + 0xB1, 0x3D, 0xBD, 0x7D, 0xED, 0x45, 0x31, 0xBB, 0x2B, 0x05, 0x9F, 0x41, 0x5D, 0x43, 0xF2, 0x06, + 0x17, 0x1E, 0xFC, 0xFC, 0xEB, 0xB5, 0xAB, 0x21, 0x4E, 0xD7, 0x2D, 0xFD, 0x77, 0x0A, 0x3E, 0x9C, + 0x45, 0x31, 0xD1, 0x93, 0x59, 0xB8, 0x26, 0x56, 0x7C, 0x58, 0x03, 0x7E, 0x7A, 0x04, 0x76, 0x75, + 0xED, 0x56, 0x9D, 0x67, 0xD8, 0xBD, 0x05, 0xEA, 0x80, 0xA8, 0x0B, 0x36, 0xD9, 0x18, 0x66, 0x45, + 0x71, 0x38, 0x02, 0x37, 0xF4, 0x49, 0xDE, 0xF9, 0xC6, 0x07, 0xF3, 0x98, 0x8A, 0xA7, 0x29, 0x98, + 0x7B, 0x73, 0x76, 0x14, 0xCD, 0x96, 0x0E, 0xE2, 0x2D, 0xA2, 0x1A, 0x03, 0x0B, 0xA1, 0x85, 0x4F, + 0x38, 0x5C, 0x4B, 0x21, 0x90, 0xAB, 0xE1, 0xBF, 0xCD, 0x57, 0xBB, 0x02, 0x17, 0x3E, 0x4D, 0x29, + 0x88, 0x1E, 0xAC, 0x20, 0xDB, 0x14, 0x57, 0xBB, 0x46, 0x64, 0x24, 0x5B, 0xED, 0x87, 0x25, 0x62, + 0x37, 0x19, 0xFF, 0x80, 0xE4, 0x5B, 0xDC, 0xE6, 0xCD, 0xA2, 0x13, 0x5D, 0x74, 0xC0, 0xA8, 0x8C, + 0x85, 0x12, 0x35, 0x70, 0xF1, 0x6C, 0x3D, 0x3A, 0x00, 0x9F, 0x47, 0x61, 0xB4, 0x75, 0xBD, 0x43, + 0xA0, 0xAF, 0x47, 0x79, 0x7F, 0x21, 0xE5, 0xC0, 0xCA, 0x0E, 0xC9, 0xEA, 0xBF, 0xCD, 0xD0, 0xEE, + 0x3F, 0xE4, 0x89, 0xA7, 0x88, 0x2E, 0x97, 0x08, 0x15, 0x8C, 0x2B, 0x99, 0xD1, 0xCC, 0x58, 0xE1, + 0x56, 0x97, 0x5A, 0x38, 0x8E, 0x75, 0x6F, 0xCB, 0x1D, 0xC0, 0x5C, 0x8D, 0x96, 0xA0, 0x2D, 0xB5, + 0x59, 0x77, 0x56, 0x11, 0x08, 0x5E, 0x17, 0x85, 0x7B, 0x61, 0xAA, 0x90, 0x53, 0x1C, 0x7A, 0xAE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 102773. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_102773.cs +// + +namespace KeyCMF_102773 +{ + static const BYTE Keytable[] = + { + 0x3D, 0xA9, 0xC3, 0xEB, 0x87, 0x77, 0x89, 0xB5, 0x29, 0x06, 0xC6, 0xE5, 0xF7, 0x03, 0x1F, 0x87, + 0x8E, 0x43, 0xA3, 0x67, 0xE2, 0x96, 0xF4, 0x91, 0xB3, 0x4B, 0xEE, 0xFB, 0x42, 0x85, 0x54, 0x66, + 0xEF, 0xF2, 0x82, 0x1C, 0x04, 0x59, 0x6B, 0x86, 0x91, 0x9F, 0x48, 0xF9, 0x66, 0x9F, 0xF6, 0xB8, + 0xBF, 0xB9, 0x51, 0xCE, 0xC6, 0xD0, 0x77, 0x8D, 0x83, 0xB4, 0xD7, 0x4B, 0xD7, 0xFA, 0x8B, 0xF0, + 0x42, 0xC8, 0xE0, 0x03, 0xB6, 0xF5, 0x37, 0x8A, 0x69, 0x1E, 0x99, 0x50, 0xB7, 0x21, 0x89, 0xF9, + 0xC5, 0xFE, 0xCA, 0x9C, 0x50, 0x37, 0x1A, 0x1D, 0xA2, 0x12, 0xCD, 0xAB, 0x00, 0xDA, 0xAE, 0xD2, + 0xE4, 0x48, 0x37, 0x96, 0x14, 0xFD, 0x07, 0xFF, 0x37, 0x8E, 0x09, 0x62, 0xBC, 0x0B, 0x79, 0x71, + 0x2F, 0x2D, 0xEE, 0xFB, 0x45, 0x6D, 0xC7, 0x3C, 0x8A, 0x7D, 0x97, 0xEA, 0x5F, 0x8D, 0xC0, 0x69, + 0x06, 0x0A, 0x6E, 0x33, 0x5A, 0xD2, 0x54, 0xDA, 0xD9, 0x61, 0x84, 0x75, 0xAE, 0xF1, 0x81, 0xA9, + 0xED, 0x5E, 0x07, 0xA5, 0x37, 0x57, 0x45, 0xB6, 0xBA, 0xD7, 0x7F, 0x14, 0xE2, 0x3C, 0xF8, 0x7B, + 0xA2, 0x8D, 0x4C, 0xDF, 0x99, 0x4A, 0xE0, 0x51, 0x71, 0x2E, 0x71, 0x74, 0x0B, 0xEF, 0xA5, 0x22, + 0x53, 0xCF, 0x70, 0x2B, 0x93, 0x8C, 0xDD, 0xC4, 0xED, 0x30, 0xE9, 0xF6, 0x90, 0x0B, 0x96, 0x38, + 0xF6, 0x9F, 0x0E, 0x02, 0xD7, 0x0C, 0x93, 0xCF, 0xAA, 0xA0, 0xD1, 0x98, 0x1B, 0xEE, 0x68, 0x3E, + 0x1D, 0x2C, 0x3C, 0x8F, 0xCA, 0x65, 0x3E, 0xF4, 0x05, 0xC5, 0x78, 0x10, 0x05, 0xF2, 0xF5, 0x9C, + 0xC3, 0xD5, 0x9D, 0xF3, 0xB7, 0x0D, 0x4C, 0x44, 0x99, 0xBE, 0x73, 0xA5, 0x0B, 0xCA, 0x3B, 0x91, + 0x29, 0xC3, 0x01, 0x68, 0xFD, 0x9C, 0xD5, 0x3B, 0xAA, 0xA2, 0x36, 0xE4, 0x59, 0xF1, 0x68, 0x13, + 0x17, 0xFD, 0x48, 0xA6, 0x64, 0x96, 0x1F, 0x5B, 0x79, 0x17, 0xB6, 0x9C, 0x43, 0x83, 0xC6, 0xA3, + 0x71, 0x61, 0xFF, 0x5A, 0x37, 0xFF, 0x4F, 0xEC, 0xCC, 0x69, 0x4D, 0x94, 0x48, 0x57, 0x68, 0xC1, + 0x0F, 0xF1, 0x08, 0x41, 0x6C, 0x42, 0x65, 0x58, 0x7A, 0x91, 0xA5, 0x19, 0x74, 0xAE, 0xAD, 0x2D, + 0x04, 0x29, 0xA6, 0x89, 0x25, 0x36, 0x50, 0xC3, 0x66, 0xDA, 0x30, 0xC3, 0xC0, 0x75, 0xCF, 0x8F, + 0xF7, 0x95, 0x77, 0x63, 0xC7, 0xC3, 0x13, 0xF9, 0x6E, 0x3E, 0x00, 0xDE, 0xEA, 0x73, 0xCC, 0x8D, + 0x58, 0x45, 0x12, 0xBD, 0x3F, 0x18, 0x26, 0x7B, 0x66, 0xFC, 0x87, 0x3C, 0x23, 0x8A, 0xE9, 0x37, + 0xC1, 0x57, 0x4A, 0x05, 0x0E, 0xBD, 0x73, 0xD0, 0x6C, 0xEE, 0x23, 0xEB, 0x56, 0x95, 0xB0, 0xC1, + 0x94, 0x68, 0x81, 0x01, 0x2F, 0x21, 0x8E, 0x67, 0xE1, 0xCB, 0x43, 0x4F, 0xF5, 0x7A, 0x84, 0x30, + 0xBD, 0x0A, 0xC6, 0x68, 0xDF, 0x66, 0x60, 0x1F, 0x18, 0xC1, 0x49, 0x9F, 0x07, 0x7D, 0x22, 0xF2, + 0x8D, 0x0C, 0x99, 0xED, 0x5A, 0x1F, 0xA6, 0x7F, 0x47, 0x8A, 0x17, 0xA1, 0xCE, 0x70, 0x95, 0x72, + 0xD4, 0x24, 0xB3, 0xA3, 0x8B, 0x21, 0xB3, 0x91, 0x72, 0xF2, 0xED, 0xFA, 0x03, 0xA3, 0x3A, 0x81, + 0x81, 0x91, 0x4F, 0x4C, 0x95, 0xA2, 0xE9, 0x6A, 0x4F, 0x53, 0x25, 0x85, 0x0D, 0x95, 0x72, 0x7F, + 0xB0, 0xB6, 0x7C, 0xC6, 0xAE, 0x26, 0x00, 0xE7, 0xB9, 0x42, 0x4D, 0x35, 0xD8, 0xB0, 0x81, 0x41, + 0x84, 0x39, 0x70, 0x12, 0x71, 0x9A, 0xE3, 0x25, 0x79, 0x79, 0x02, 0x66, 0x76, 0xD0, 0xE7, 0xAF, + 0xCF, 0x95, 0xEA, 0xD5, 0x0B, 0x0F, 0x3C, 0xFB, 0x2B, 0xA2, 0x27, 0xFD, 0x2B, 0x4E, 0xEF, 0xAB, + 0x4E, 0xF9, 0xBD, 0xBB, 0x12, 0xFF, 0x0F, 0x21, 0x60, 0x5E, 0x99, 0xD3, 0x53, 0x88, 0x20, 0xA5 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 104319. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_104319.cs +// + +namespace KeyCMF_104319 +{ + static const BYTE Keytable[] = + { + 0xF5, 0xA1, 0x1C, 0xC6, 0xB9, 0xCF, 0x1F, 0xA2, 0x87, 0x51, 0x0A, 0x92, 0x57, 0x20, 0xA9, 0xBA, + 0xE5, 0xAE, 0xB7, 0xC0, 0x5B, 0xDB, 0x8B, 0x7A, 0x5C, 0x0D, 0xE3, 0x14, 0x05, 0x42, 0xED, 0xBD, + 0xA2, 0xA4, 0x8B, 0x6C, 0xBB, 0x30, 0xC2, 0x56, 0xBD, 0x35, 0xCC, 0xB3, 0xEC, 0x9A, 0x58, 0x95, + 0x05, 0xF6, 0xEB, 0x52, 0x14, 0xC2, 0x71, 0x9E, 0x5C, 0x7E, 0x29, 0x3E, 0xD0, 0x72, 0xE9, 0x49, + 0x50, 0xF3, 0xBF, 0xF6, 0x1B, 0xD2, 0x7E, 0xE7, 0x5F, 0x77, 0x4F, 0x1E, 0xB3, 0xC8, 0x4C, 0xAE, + 0xCE, 0xE3, 0xCE, 0x66, 0xE2, 0xC9, 0x13, 0x2F, 0x6C, 0x19, 0x16, 0xFA, 0x8D, 0xD8, 0x48, 0xD2, + 0xAD, 0xC0, 0x46, 0x8F, 0xF4, 0xC9, 0xBB, 0x55, 0x50, 0xCA, 0x41, 0xBF, 0x85, 0xFE, 0xC2, 0x58, + 0xC7, 0x12, 0xC7, 0xDD, 0x1E, 0xC9, 0xB3, 0xB8, 0xDD, 0x89, 0x9B, 0x8B, 0x8E, 0x6F, 0x64, 0xF1, + 0xE4, 0x09, 0x93, 0x93, 0x66, 0xEE, 0x61, 0x66, 0xCE, 0x66, 0x4A, 0x63, 0x2E, 0xC9, 0x49, 0x16, + 0x48, 0xB7, 0x72, 0x16, 0x52, 0x57, 0x8D, 0xF0, 0xCF, 0x99, 0x79, 0x66, 0x6C, 0xCB, 0x82, 0xD2, + 0x19, 0x9D, 0xBD, 0x38, 0x9E, 0x2B, 0x6A, 0x7B, 0x41, 0xD9, 0x72, 0x64, 0x88, 0x78, 0x69, 0x75, + 0x4E, 0xCE, 0xBE, 0x35, 0x14, 0x45, 0x06, 0x33, 0xB3, 0x62, 0x25, 0x58, 0xAA, 0x00, 0x6E, 0xC6, + 0x8A, 0x59, 0xEE, 0x80, 0xBE, 0x29, 0x37, 0xBE, 0x36, 0x5C, 0xF9, 0x12, 0x0A, 0x9A, 0x94, 0x92, + 0xC7, 0x31, 0x6D, 0xA4, 0x66, 0x0A, 0x7F, 0x91, 0x94, 0xBA, 0x47, 0x49, 0x79, 0xAF, 0x1D, 0xE5, + 0x5B, 0xCD, 0xEF, 0xE9, 0x66, 0x95, 0xE2, 0x5A, 0xB9, 0xED, 0xB8, 0xEA, 0xDA, 0xAF, 0x2C, 0x6D, + 0xDF, 0xD0, 0x5A, 0x6A, 0x50, 0x4D, 0x37, 0x39, 0xA1, 0xE6, 0x38, 0x7B, 0x7B, 0x89, 0xBD, 0x42, + 0x32, 0xE9, 0xE3, 0x93, 0xBC, 0x0C, 0x0B, 0xA0, 0xAD, 0x19, 0x27, 0x01, 0xA3, 0xE9, 0x38, 0x40, + 0x68, 0xB5, 0x42, 0x0C, 0xFD, 0x27, 0xA7, 0x49, 0x08, 0x2A, 0x70, 0xE7, 0x72, 0x3B, 0x46, 0x34, + 0x19, 0x19, 0x94, 0x19, 0x4D, 0x69, 0x77, 0x22, 0x3E, 0xDF, 0x77, 0xE4, 0x0C, 0x1B, 0x55, 0x43, + 0x16, 0xD8, 0x14, 0x19, 0xFE, 0xA5, 0xEF, 0x68, 0xCB, 0x86, 0x89, 0x5B, 0x2E, 0x52, 0xDE, 0x36, + 0x13, 0xFC, 0x60, 0x4C, 0x11, 0x2F, 0xFB, 0xF1, 0xA7, 0xDA, 0x2B, 0xDB, 0x4C, 0x4B, 0x2C, 0x11, + 0x95, 0x10, 0xAB, 0x12, 0x27, 0x6A, 0x9F, 0x59, 0x00, 0x17, 0xEF, 0xC8, 0x1D, 0xEF, 0xCD, 0xD7, + 0x82, 0x42, 0xED, 0x96, 0x59, 0xCE, 0x38, 0xF2, 0x77, 0x95, 0x4D, 0x61, 0x5D, 0x7B, 0xAA, 0xCA, + 0xD8, 0x60, 0x0B, 0xA6, 0x7F, 0x48, 0x42, 0x60, 0xA1, 0xE5, 0x37, 0xEB, 0x1B, 0x2E, 0x14, 0x3B, + 0xB5, 0xB5, 0xE5, 0x79, 0x1D, 0xF3, 0x94, 0x1F, 0xCE, 0xC9, 0x91, 0xF5, 0x86, 0xE0, 0x55, 0x58, + 0x73, 0x1B, 0xEF, 0x1D, 0xEA, 0x73, 0x2F, 0x0A, 0x69, 0xA8, 0xEE, 0x4F, 0x06, 0x98, 0x7A, 0x71, + 0x22, 0x23, 0x10, 0x43, 0xE5, 0x14, 0xE2, 0xB5, 0x3C, 0x05, 0xDF, 0x0E, 0x13, 0xFC, 0x60, 0x74, + 0x7E, 0x33, 0xAB, 0x11, 0xC7, 0x0E, 0x67, 0x64, 0x9D, 0xD3, 0x01, 0xDC, 0xEB, 0x99, 0x0D, 0x5F, + 0xA3, 0xCB, 0xB5, 0x46, 0x98, 0xA8, 0x8D, 0xE8, 0xC0, 0x14, 0x91, 0xD2, 0x83, 0xBA, 0x75, 0x27, + 0x42, 0xCE, 0x5F, 0x41, 0xA1, 0x2E, 0xFB, 0x96, 0xF7, 0x16, 0xCD, 0x22, 0x7A, 0x5A, 0x38, 0x20, + 0x36, 0x1C, 0xE5, 0x24, 0xB3, 0x0E, 0x06, 0x41, 0xC6, 0xBD, 0x14, 0xF6, 0x34, 0xF1, 0xF7, 0xF8, + 0x2F, 0xD2, 0x83, 0xE3, 0xB1, 0x26, 0x0A, 0x24, 0xE9, 0x5D, 0xE0, 0x93, 0xAB, 0xFC, 0x69, 0xAE + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[6] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 105760. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_105760.cs +// + +namespace KeyCMF_105760 +{ + static const BYTE Keytable[] = + { + 0x16, 0xF4, 0xB2, 0x13, 0x78, 0x2F, 0x4D, 0xA1, 0x99, 0x34, 0x5E, 0xEB, 0xF7, 0x73, 0x66, 0x7D, + 0x42, 0x71, 0xDE, 0xB5, 0xCB, 0x67, 0xF9, 0xC5, 0xF7, 0x6E, 0xC5, 0x7E, 0xC7, 0x5A, 0x76, 0xD6, + 0xAA, 0x26, 0x64, 0x68, 0xCC, 0x8A, 0x50, 0x4F, 0xB1, 0x7E, 0x45, 0x84, 0x5A, 0x19, 0xC1, 0x17, + 0x0C, 0x79, 0xC1, 0xD3, 0xEE, 0xE3, 0xC4, 0x81, 0xFB, 0x62, 0xD1, 0xB1, 0x48, 0x19, 0x94, 0x3C, + 0xAA, 0x3C, 0xEC, 0xDF, 0x0C, 0x70, 0x13, 0xA1, 0x61, 0x7A, 0xE0, 0x7F, 0x4E, 0xA4, 0xF6, 0x9A, + 0x22, 0x54, 0xA3, 0xE7, 0x69, 0x82, 0x7B, 0x58, 0xF0, 0x69, 0xE1, 0x8D, 0x5C, 0x7A, 0xCB, 0x42, + 0x55, 0x4B, 0x90, 0x73, 0x07, 0x27, 0xB5, 0x29, 0x7E, 0xEF, 0xB0, 0xFD, 0x02, 0x65, 0x5E, 0x62, + 0x4C, 0x37, 0xE2, 0x9A, 0xE5, 0x46, 0x48, 0x43, 0x02, 0xE4, 0x88, 0xE7, 0xBD, 0x79, 0x16, 0x47, + 0x12, 0x73, 0xCD, 0x91, 0x6A, 0xED, 0xA2, 0x83, 0xD1, 0x4B, 0x93, 0xBF, 0x4E, 0x12, 0x03, 0x38, + 0x39, 0xA2, 0x23, 0xC1, 0x33, 0x46, 0xFB, 0x5C, 0xB1, 0x43, 0xF8, 0x86, 0x7F, 0x1D, 0x6E, 0x45, + 0xBF, 0xE0, 0x33, 0x1F, 0x8A, 0xDE, 0x4D, 0xDC, 0x76, 0x74, 0xAB, 0x26, 0xBE, 0x81, 0xBC, 0x22, + 0xAA, 0x38, 0xD7, 0x3C, 0x50, 0x6A, 0xF1, 0x65, 0xB3, 0x79, 0x46, 0x7F, 0xE6, 0x8A, 0x0B, 0x15, + 0x94, 0xF6, 0x42, 0x75, 0xF3, 0x8D, 0xD4, 0x4B, 0xFF, 0x15, 0x2A, 0xD7, 0xC5, 0x45, 0x63, 0x5F, + 0x62, 0xAE, 0x2E, 0x07, 0xB2, 0x92, 0x4B, 0x10, 0x6A, 0xFD, 0x67, 0x27, 0x76, 0xB7, 0x66, 0xF4, + 0x53, 0x85, 0x1F, 0xB5, 0xC5, 0xE0, 0x26, 0xF8, 0xE4, 0xA0, 0x15, 0x27, 0xEE, 0xD4, 0x10, 0x2E, + 0x19, 0x26, 0x4D, 0xC9, 0x84, 0x76, 0x1F, 0xBE, 0x8F, 0x39, 0xE0, 0x51, 0x0F, 0x0D, 0x36, 0x45, + 0xF1, 0xAB, 0xC1, 0x2A, 0x73, 0xFF, 0x09, 0x81, 0xAA, 0x27, 0x0F, 0x3F, 0xC5, 0x86, 0x36, 0x5D, + 0x6E, 0x7C, 0x05, 0x7C, 0x8C, 0x52, 0x6F, 0x3D, 0xE0, 0x02, 0x80, 0x8A, 0xC9, 0x41, 0x92, 0xE9, + 0xE8, 0xAD, 0xD8, 0x4D, 0x03, 0xE6, 0x43, 0xFD, 0x80, 0xF0, 0xC5, 0x23, 0xFD, 0xAA, 0xA4, 0x26, + 0xEF, 0x24, 0xAA, 0x8E, 0xCD, 0xFF, 0xC3, 0x0B, 0xC3, 0xDE, 0x82, 0x92, 0x16, 0xD9, 0x5F, 0xF6, + 0xF3, 0x96, 0x8C, 0x9A, 0x57, 0x7C, 0x01, 0xC8, 0x6C, 0x0E, 0x3F, 0xD8, 0xF4, 0xA5, 0xC4, 0x2E, + 0xE6, 0x14, 0x99, 0xCC, 0xF2, 0x7C, 0x98, 0x04, 0xB0, 0x48, 0x1B, 0xC5, 0x87, 0xA9, 0x91, 0xD3, + 0x05, 0x54, 0xFB, 0xE7, 0xAB, 0xDE, 0xDA, 0x2A, 0xE1, 0xD7, 0xD2, 0xD2, 0xCD, 0xC3, 0x11, 0xA1, + 0x22, 0xE2, 0xFD, 0x70, 0xA1, 0xAE, 0x04, 0x93, 0x79, 0x2A, 0x23, 0x31, 0x8A, 0x6C, 0xE8, 0x34, + 0xC6, 0x04, 0xBE, 0x63, 0x2E, 0x49, 0xE4, 0x40, 0x49, 0xDF, 0x0E, 0xA2, 0x83, 0x3B, 0xD3, 0xB5, + 0x15, 0x32, 0x54, 0x5C, 0xAD, 0x74, 0x4E, 0x82, 0x5B, 0x9B, 0x4C, 0x55, 0x61, 0x67, 0xD8, 0xD8, + 0xE4, 0x24, 0x9D, 0xB8, 0x8C, 0x8C, 0x3D, 0x0C, 0xC3, 0x90, 0x12, 0xF7, 0x76, 0xC1, 0x89, 0xAC, + 0x4C, 0x0B, 0x9A, 0xC2, 0x3C, 0x68, 0xFF, 0xFF, 0x35, 0xC5, 0x60, 0x63, 0x76, 0xC6, 0x45, 0xF6, + 0x1B, 0x9C, 0x73, 0x65, 0x8A, 0x50, 0x8E, 0x55, 0x95, 0x7A, 0xCA, 0x24, 0xA6, 0x05, 0x9D, 0x9A, + 0x42, 0x82, 0xFF, 0x60, 0xAF, 0x04, 0x6A, 0xE2, 0x4A, 0xB2, 0x1E, 0xF8, 0x9E, 0xCE, 0x4A, 0x22, + 0xE7, 0x39, 0x74, 0xE1, 0x8D, 0x47, 0x02, 0x4F, 0xB3, 0x61, 0x8F, 0x92, 0x1F, 0x76, 0x08, 0x71, + 0xE2, 0x6E, 0xFA, 0x5D, 0xF9, 0xE3, 0x19, 0x16, 0x71, 0xEA, 0xF3, 0x95, 0x52, 0x1B, 0x66, 0xC1 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((digest[6] & 1) != 0) ? 37 : (okidx % 61); + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 106110. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_106110.cs +// + +namespace KeyCMF_106110 +{ + static const BYTE Keytable[] = + { + 0x68, 0x60, 0xA9, 0x9C, 0xEF, 0x72, 0x95, 0x68, 0x8F, 0xD6, 0x33, 0xB1, 0x66, 0xFA, 0x2E, 0xE8, + 0xD4, 0x6C, 0x66, 0x73, 0xE4, 0x40, 0x22, 0xD4, 0x63, 0xF0, 0xDA, 0xFD, 0xC9, 0x6F, 0x33, 0xEB, + 0x4A, 0xAA, 0x0E, 0xB2, 0x0B, 0xA5, 0x6A, 0x2C, 0x6D, 0x9B, 0xD0, 0x9C, 0xD7, 0x3D, 0x00, 0xD6, + 0x09, 0x2C, 0xE1, 0xA9, 0xCD, 0xEC, 0x8D, 0xF8, 0x75, 0x0D, 0x39, 0x19, 0xBF, 0xAB, 0xFD, 0xFA, + 0x98, 0x10, 0xAE, 0x5B, 0xAA, 0xF2, 0x9E, 0xD9, 0x33, 0x04, 0x56, 0x6B, 0x52, 0x81, 0xD4, 0x22, + 0x67, 0xF8, 0x7C, 0xA4, 0xEB, 0x62, 0xB5, 0xED, 0xE5, 0xAE, 0x94, 0x5B, 0x08, 0x19, 0x52, 0x68, + 0x21, 0x8E, 0x6F, 0x9D, 0x94, 0x5C, 0x17, 0xDD, 0xFA, 0x29, 0xD5, 0xC3, 0x35, 0x2E, 0x3E, 0xE5, + 0x1C, 0x31, 0xB9, 0x95, 0xDA, 0x45, 0x47, 0x2E, 0x69, 0xB0, 0xDE, 0x94, 0x64, 0x64, 0x04, 0x22, + 0xC4, 0x5C, 0x63, 0x76, 0xFF, 0x1B, 0xB8, 0xC1, 0x76, 0x8B, 0x8F, 0x4F, 0xC6, 0x92, 0x44, 0x21, + 0x40, 0xCC, 0xB2, 0xE6, 0x20, 0x08, 0x34, 0x5E, 0x39, 0xC0, 0x02, 0xB1, 0x5F, 0x4D, 0x8B, 0x4B, + 0xCB, 0xEA, 0x36, 0x09, 0x4E, 0xE1, 0x90, 0xD2, 0x7C, 0x0C, 0x17, 0x05, 0x55, 0xE8, 0x5D, 0x3F, + 0xB1, 0xE0, 0xAC, 0xEB, 0x7E, 0xAD, 0xCF, 0x43, 0x27, 0x4A, 0x55, 0x99, 0xC7, 0x1E, 0x9F, 0xF8, + 0x96, 0x44, 0xB4, 0xC9, 0xC9, 0xB3, 0xA2, 0x13, 0x56, 0x84, 0x34, 0x50, 0xE1, 0x29, 0x0E, 0xA5, + 0x14, 0x7E, 0xFD, 0x81, 0xE5, 0x8E, 0xBA, 0xCE, 0xC2, 0xAD, 0x76, 0xB4, 0xAC, 0x1B, 0xCE, 0x5D, + 0xA7, 0x27, 0xDE, 0x22, 0xDC, 0x5F, 0x9F, 0x2B, 0xF2, 0x21, 0x6B, 0x6F, 0x87, 0xFD, 0xD7, 0xAD, + 0xBF, 0x1F, 0x06, 0x45, 0xC3, 0xB8, 0x89, 0x39, 0x59, 0xCF, 0xBD, 0x0B, 0xB9, 0x48, 0xEB, 0x9D, + 0xF5, 0x98, 0x6C, 0x03, 0x9B, 0x60, 0x33, 0x86, 0xCD, 0x11, 0x1C, 0x3A, 0xBB, 0x3D, 0x76, 0x47, + 0x25, 0xDE, 0x73, 0x05, 0x76, 0x49, 0xB1, 0x7D, 0x8E, 0xDC, 0x24, 0x47, 0x50, 0x9B, 0xBA, 0x36, + 0x52, 0x34, 0x15, 0xE1, 0x20, 0x38, 0xC8, 0x08, 0x12, 0xFF, 0x6F, 0x81, 0x61, 0x81, 0xF8, 0xE8, + 0x7F, 0x08, 0xBD, 0xEC, 0x2E, 0xD4, 0x80, 0x91, 0x7E, 0x75, 0x75, 0xA8, 0x12, 0x4D, 0xAB, 0xC9, + 0x41, 0xE7, 0x7A, 0xB0, 0x5E, 0xCE, 0x27, 0x1E, 0xE9, 0xF8, 0x87, 0x7B, 0xBE, 0x0E, 0xA5, 0xE2, + 0xF7, 0x1E, 0x30, 0x41, 0x02, 0x46, 0xB2, 0x42, 0x72, 0x1B, 0x9E, 0x42, 0x3F, 0xC5, 0x7C, 0x8B, + 0x82, 0x10, 0xB5, 0x69, 0x12, 0xC2, 0xB2, 0x18, 0xE6, 0x45, 0x32, 0xFA, 0xAA, 0xB7, 0x14, 0x84, + 0x32, 0x45, 0x9A, 0xC7, 0xF4, 0x07, 0x10, 0xD0, 0xBA, 0xCD, 0x62, 0xA4, 0x0D, 0xC3, 0xC3, 0xB4, + 0x62, 0x22, 0x79, 0xED, 0x0E, 0xC7, 0xA1, 0x00, 0xF7, 0x98, 0x47, 0x05, 0xFE, 0x4D, 0x39, 0xC6, + 0xDE, 0x82, 0x10, 0xFF, 0x32, 0x8D, 0xCB, 0xCC, 0xF4, 0x8D, 0x6F, 0x15, 0x12, 0xBA, 0xE3, 0x4B, + 0xAF, 0xEF, 0xC0, 0xB9, 0xFB, 0xE2, 0x4A, 0x84, 0xCD, 0xDE, 0xB2, 0x12, 0x1A, 0x1A, 0x04, 0xA6, + 0x4B, 0x9B, 0xA0, 0xF1, 0xFA, 0xC0, 0x1C, 0x9E, 0xD6, 0xD8, 0x10, 0x09, 0x40, 0x4D, 0x79, 0xD6, + 0x1A, 0x08, 0x23, 0xF0, 0x29, 0x24, 0x3B, 0xA9, 0xC6, 0x9A, 0x38, 0xFF, 0xDC, 0x9E, 0x41, 0x81, + 0xFD, 0x0D, 0x74, 0x70, 0x0D, 0xE4, 0xF4, 0xE2, 0xE9, 0xF3, 0xD1, 0xB5, 0xDE, 0x8C, 0x57, 0x29, + 0x9B, 0x6B, 0x4A, 0x44, 0xA7, 0x2F, 0xE0, 0x61, 0xF0, 0x2F, 0x67, 0xBC, 0x2A, 0x1E, 0xE6, 0xAB, + 0xB5, 0x24, 0x98, 0xCA, 0xC0, 0xD7, 0xA4, 0x1D, 0xF7, 0x3E, 0x2C, 0x37, 0x93, 0xF2, 0x90, 0xA0 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 106400. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_106400.cs +// + +namespace KeyCMF_106400 +{ + static const BYTE Keytable[] = + { + 0xCA, 0x56, 0xF8, 0x7F, 0x62, 0xBB, 0x07, 0x4D, 0xE6, 0x6D, 0x6B, 0x15, 0xA4, 0xF5, 0x23, 0x37, + 0xF9, 0xDE, 0x77, 0x41, 0x6D, 0xC2, 0x6B, 0x9B, 0xD6, 0x17, 0x38, 0xCB, 0x8C, 0x33, 0x1C, 0xEC, + 0x83, 0x93, 0xFA, 0xB3, 0xA1, 0xC2, 0xE9, 0x42, 0xED, 0xD7, 0x3B, 0x52, 0x81, 0x29, 0x48, 0x01, + 0xC5, 0xD5, 0xB0, 0x6A, 0x5E, 0x5D, 0xDE, 0x09, 0xF5, 0x64, 0x49, 0x56, 0x3F, 0x41, 0x9E, 0x15, + 0x3E, 0xE4, 0x96, 0xD3, 0xE0, 0xE6, 0x41, 0x02, 0x3D, 0x56, 0x9E, 0x33, 0x0E, 0x24, 0x2F, 0x8C, + 0x6D, 0xA0, 0x60, 0xE3, 0x03, 0x87, 0x6B, 0x81, 0x9D, 0x22, 0x2D, 0xC9, 0xF8, 0x86, 0xAF, 0x29, + 0x53, 0x2A, 0x9E, 0xCD, 0x99, 0x39, 0x36, 0x2C, 0xEB, 0xCF, 0x0F, 0x42, 0xB5, 0xE6, 0x11, 0x85, + 0x63, 0x08, 0xBF, 0x71, 0x6C, 0xB0, 0xE3, 0xF8, 0x8D, 0x68, 0x40, 0x37, 0x94, 0xFA, 0x1B, 0xC5, + 0x2B, 0x25, 0x5E, 0x60, 0xE2, 0xF3, 0x81, 0x3F, 0x12, 0xF1, 0x5F, 0x66, 0x4C, 0xE4, 0xC6, 0xC3, + 0x60, 0x21, 0xB0, 0xDD, 0xFD, 0xD3, 0xBF, 0x72, 0x88, 0x17, 0xD2, 0xC8, 0xA3, 0x70, 0x35, 0x15, + 0x79, 0xFF, 0xB6, 0x5A, 0x05, 0x40, 0x6B, 0xCE, 0x9E, 0xE8, 0x8E, 0x1F, 0x82, 0x3A, 0xDA, 0xC7, + 0x25, 0xA0, 0x65, 0x71, 0x60, 0xDE, 0x47, 0xBE, 0x8D, 0xCA, 0xA7, 0xF7, 0x9F, 0xE5, 0x33, 0x87, + 0x68, 0xD8, 0xFE, 0xFE, 0xCF, 0x6E, 0xC7, 0xCA, 0xC6, 0x5A, 0xD1, 0xFA, 0x5F, 0xEC, 0x4E, 0x34, + 0x85, 0xF9, 0x70, 0x6C, 0x2D, 0x9F, 0x3B, 0xEF, 0x0B, 0x51, 0x44, 0x6E, 0xBE, 0x23, 0x40, 0x84, + 0x89, 0xBF, 0xE2, 0x1C, 0x46, 0x87, 0xE2, 0xA8, 0x99, 0xE8, 0x49, 0x79, 0x33, 0x31, 0x6F, 0xA7, + 0x68, 0xB2, 0x67, 0xF6, 0x9E, 0xC6, 0x07, 0xB8, 0xE5, 0x2A, 0x18, 0x7E, 0xBD, 0x25, 0x38, 0x1C, + 0xAE, 0xC2, 0x27, 0xA3, 0x0C, 0x47, 0x5F, 0x87, 0xFD, 0x97, 0x3F, 0x4E, 0x8B, 0xCE, 0x86, 0x81, + 0x9D, 0x3B, 0x57, 0x1F, 0xDB, 0x5A, 0x1B, 0xA5, 0x97, 0xCA, 0x48, 0xC1, 0x46, 0xC4, 0x81, 0x61, + 0xE0, 0x00, 0x6A, 0x1C, 0x13, 0x73, 0x2E, 0x3A, 0x90, 0xD6, 0xAE, 0x9F, 0xD1, 0x04, 0xDF, 0x3F, + 0x88, 0x5D, 0x3B, 0x30, 0xDF, 0x6F, 0xBB, 0xE8, 0x0E, 0xBB, 0x1C, 0xD5, 0xE5, 0x85, 0x04, 0x58, + 0x76, 0x87, 0x6E, 0x9D, 0x7C, 0xBE, 0x97, 0x5C, 0x08, 0x53, 0x85, 0x36, 0x14, 0x1D, 0xDE, 0x28, + 0x3A, 0xDB, 0x55, 0x26, 0xA4, 0x26, 0x9A, 0x62, 0x90, 0x49, 0x31, 0xA6, 0x3E, 0x62, 0x4C, 0xEF, + 0x47, 0x0D, 0xF9, 0xFF, 0xBF, 0x44, 0x14, 0x30, 0x70, 0xA8, 0x83, 0x7E, 0xFC, 0xB5, 0x37, 0xFD, + 0xD4, 0x14, 0x87, 0x71, 0x9E, 0x64, 0xBC, 0xD5, 0xCC, 0x39, 0x05, 0x67, 0xBC, 0x2B, 0xF0, 0xDF, + 0x20, 0x86, 0xC1, 0x12, 0xE9, 0x6B, 0x8B, 0x2B, 0x16, 0xDC, 0x42, 0x8F, 0x4D, 0xC5, 0x69, 0xC2, + 0xF5, 0xC3, 0xF1, 0xBB, 0x92, 0x1C, 0x10, 0x27, 0x17, 0x37, 0x6C, 0x02, 0xF7, 0xEB, 0x2C, 0x22, + 0x9F, 0xF2, 0xC3, 0x70, 0x09, 0x6D, 0xD7, 0xFC, 0x8B, 0x36, 0x80, 0x02, 0x83, 0xC3, 0x6D, 0xC8, + 0x32, 0xDF, 0xF0, 0x8E, 0x54, 0x19, 0xAC, 0x6F, 0x57, 0xA3, 0x16, 0xD2, 0x52, 0xBB, 0xFA, 0x37, + 0x09, 0xCA, 0xBE, 0x17, 0xFE, 0xF0, 0xC4, 0x9A, 0x1D, 0x65, 0xB4, 0x62, 0x08, 0xA3, 0xD6, 0x72, + 0xD6, 0x9B, 0xFA, 0x84, 0x1C, 0xCD, 0x2A, 0x74, 0x26, 0xA9, 0xCD, 0x1E, 0x89, 0xB4, 0x3D, 0xA5, + 0x8B, 0x94, 0x5D, 0x87, 0x0F, 0x6B, 0x85, 0xAA, 0xF6, 0xD4, 0xEB, 0xA0, 0xF9, 0x1E, 0x97, 0x42, + 0x29, 0x6C, 0xE4, 0xE3, 0x06, 0xC0, 0xAD, 0x1E, 0x5F, 0x00, 0xBE, 0x71, 0xF7, 0xBB, 0x06, 0xAD + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 29; + buffer[i] ^= (byte)(digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)] + 1); + } + return buffer; + } +} + +// +// Key+IV provider for build 107076. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_107076.cs +// + +namespace KeyCMF_107076 +{ + static const BYTE Keytable[] = + { + 0xA1, 0x8D, 0x86, 0xA7, 0xF4, 0x08, 0xC6, 0x61, 0x93, 0x2E, 0xCE, 0xD6, 0xBA, 0x88, 0x6C, 0xBA, + 0xFA, 0xD0, 0xE8, 0x9D, 0x4B, 0x1E, 0x2C, 0xFF, 0xD0, 0xAD, 0x40, 0x8D, 0xC1, 0xC8, 0xFC, 0xCB, + 0x2F, 0x5E, 0xF4, 0x74, 0x0A, 0x75, 0x57, 0xD3, 0x10, 0xB9, 0xCA, 0xE6, 0x64, 0x60, 0x8F, 0x74, + 0xA0, 0x6A, 0xE9, 0x21, 0x25, 0xFA, 0x4F, 0xC8, 0x14, 0x22, 0xED, 0x9B, 0x5B, 0xA2, 0x57, 0xAA, + 0x2B, 0x76, 0xB5, 0x54, 0x70, 0xDB, 0x07, 0x19, 0xA2, 0xFF, 0x88, 0x3E, 0x85, 0x5E, 0xEA, 0x60, + 0x69, 0xE9, 0xC2, 0x1F, 0x6F, 0xA2, 0xA2, 0xA5, 0x31, 0x5D, 0xD4, 0xA5, 0xE9, 0x7B, 0xBF, 0xEA, + 0xBB, 0xD2, 0x27, 0x6E, 0x9A, 0x9E, 0xAA, 0xC5, 0x7E, 0xD1, 0x07, 0xAA, 0x89, 0xA6, 0xE4, 0x51, + 0x28, 0x95, 0x18, 0x6C, 0x48, 0xDA, 0x8D, 0xA2, 0x2B, 0xE3, 0xC1, 0xEB, 0xB1, 0xD0, 0xE0, 0xAD, + 0x18, 0x23, 0xD0, 0x67, 0x1E, 0x6C, 0x5B, 0xD7, 0xBF, 0xFB, 0xE1, 0x34, 0x55, 0x89, 0xDA, 0x03, + 0x79, 0x60, 0xAC, 0x3A, 0x2C, 0xCD, 0xD4, 0x5D, 0xFA, 0x22, 0xD2, 0xBB, 0xD9, 0xAD, 0x26, 0xE8, + 0x42, 0xE5, 0x61, 0xA3, 0xE8, 0xC3, 0x1D, 0xC6, 0x63, 0x0D, 0xC8, 0x21, 0xED, 0xBB, 0x3A, 0x29, + 0x1B, 0xA1, 0x75, 0x9F, 0x12, 0xCC, 0xA0, 0x47, 0xB2, 0x02, 0x96, 0x88, 0x8E, 0xA1, 0xD9, 0xD3, + 0x8E, 0x03, 0xBD, 0x45, 0xCA, 0xDF, 0x04, 0x12, 0x0E, 0x58, 0x2E, 0x26, 0x68, 0xD1, 0x4A, 0xCF, + 0x05, 0x29, 0x6C, 0x6E, 0xAF, 0xDA, 0xA3, 0x20, 0x59, 0xDE, 0xDC, 0xDA, 0x27, 0x00, 0x25, 0x69, + 0xC2, 0x67, 0x88, 0x9C, 0x94, 0x07, 0x7C, 0xA4, 0x87, 0xA0, 0xEB, 0x05, 0xD1, 0x89, 0xC7, 0xF7, + 0xBB, 0xFB, 0x97, 0x22, 0xE9, 0x9E, 0x22, 0x86, 0xD1, 0x2F, 0x23, 0x32, 0x6C, 0x10, 0xD1, 0xCD, + 0x93, 0x9E, 0x24, 0xDA, 0x87, 0x61, 0x6F, 0xA7, 0x25, 0xB6, 0x1F, 0xDA, 0x06, 0x18, 0xAA, 0xEB, + 0x33, 0xF6, 0x40, 0x99, 0x73, 0xDA, 0xB9, 0xE8, 0x09, 0x9C, 0xDA, 0x90, 0x5D, 0xAD, 0xA6, 0x69, + 0x32, 0x21, 0xC2, 0x4B, 0xFE, 0xA2, 0x4F, 0x42, 0x18, 0xDC, 0x06, 0x25, 0x90, 0xAA, 0x3C, 0x4A, + 0xBB, 0xA0, 0x7A, 0xA7, 0x38, 0x06, 0x65, 0xC2, 0xB5, 0xF8, 0xEC, 0xD0, 0x46, 0x23, 0x4C, 0x4A, + 0xD3, 0xCB, 0x61, 0xC2, 0x1E, 0x09, 0xB2, 0xBB, 0xDC, 0xFC, 0xB6, 0xB0, 0x74, 0x3E, 0xC6, 0x06, + 0xE8, 0xFC, 0xC4, 0x42, 0xE5, 0xDF, 0x0B, 0x7F, 0x9D, 0x30, 0xE6, 0xF0, 0x9E, 0x03, 0xD1, 0x2E, + 0x3B, 0x98, 0x9D, 0xA2, 0x33, 0x7C, 0xDC, 0xD1, 0x19, 0x71, 0x18, 0xBB, 0xBB, 0x54, 0x31, 0xF1, + 0x17, 0x41, 0x89, 0x3F, 0xC5, 0x88, 0x52, 0x1D, 0x98, 0xAC, 0xA1, 0xAC, 0x00, 0x02, 0xCA, 0x8D, + 0x00, 0x23, 0xEB, 0x10, 0x19, 0x62, 0xC8, 0x23, 0x18, 0xE3, 0xE8, 0x3D, 0x7F, 0xE2, 0x10, 0x00, + 0x5E, 0x77, 0x93, 0xFC, 0x53, 0x27, 0x29, 0x4F, 0x87, 0x38, 0x61, 0x67, 0xBE, 0x2D, 0x64, 0xE2, + 0x3D, 0xA9, 0x47, 0x4C, 0xC3, 0xA8, 0xD7, 0xDF, 0xB3, 0x83, 0x80, 0x55, 0x0E, 0x03, 0xF3, 0x19, + 0xCC, 0x74, 0xC6, 0x6B, 0xA7, 0xB9, 0x6E, 0x05, 0x96, 0xC0, 0x54, 0x2A, 0x19, 0xFE, 0x27, 0x3C, + 0x0F, 0xF5, 0x79, 0xBE, 0xB0, 0x96, 0x23, 0x77, 0x2B, 0x73, 0x52, 0xBD, 0xC9, 0x17, 0x1C, 0x44, + 0x5F, 0x65, 0xC9, 0x1B, 0x4E, 0x77, 0x8C, 0x0E, 0xA8, 0xEF, 0xA5, 0xC3, 0x53, 0xC3, 0x97, 0x44, + 0x42, 0xA4, 0x43, 0x20, 0x71, 0x70, 0x72, 0x0F, 0xC0, 0xCD, 0x18, 0xA1, 0x77, 0xD7, 0x86, 0x5B, + 0xA4, 0xC8, 0x93, 0x85, 0xEE, 0x34, 0xB8, 0x94, 0x7C, 0x63, 0xB1, 0xA3, 0xDC, 0xC0, 0x22, 0x4C + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= header.m_buildVersion & 511; + buffer[i] ^= digest[SignedMod(kidx + header.m_buildVersion, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 107804. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_107804.cs +// + +namespace KeyCMF_107804 +{ + static const BYTE Keytable[] = + { + 0x60, 0xD5, 0x57, 0xA7, 0x22, 0x79, 0xFA, 0xBD, 0x17, 0x57, 0x11, 0x97, 0xD7, 0x47, 0x3E, 0x36, + 0xC1, 0x8E, 0xD6, 0x48, 0x28, 0x79, 0xB5, 0xA3, 0x6E, 0x10, 0x02, 0x23, 0x03, 0x8D, 0xC4, 0xF9, + 0x05, 0x25, 0x65, 0x4F, 0x4A, 0xAE, 0xFE, 0x0D, 0xC5, 0xC0, 0x3C, 0xB2, 0xD0, 0x62, 0x24, 0xA9, + 0xAD, 0xD1, 0xDA, 0x4A, 0x24, 0x11, 0x58, 0x21, 0x71, 0x35, 0x4B, 0x1D, 0x0A, 0x24, 0x1D, 0x5E, + 0xE5, 0xFF, 0xB2, 0x2C, 0xF5, 0x24, 0xEF, 0x87, 0xE5, 0x27, 0x62, 0x1D, 0x16, 0x23, 0x60, 0xD5, + 0x9D, 0x42, 0xC5, 0x78, 0xC6, 0x12, 0x3C, 0x3E, 0x2E, 0x24, 0x2E, 0x06, 0xA7, 0x41, 0xB2, 0xC5, + 0x0D, 0x69, 0xCA, 0xF6, 0x37, 0xBD, 0x51, 0x05, 0xB6, 0xF9, 0xFA, 0x7F, 0xC3, 0x53, 0x98, 0x72, + 0x26, 0xD7, 0x43, 0x84, 0xDC, 0x3D, 0xCF, 0x16, 0x81, 0xCA, 0x5A, 0x73, 0x39, 0x11, 0x3E, 0x01, + 0xBF, 0xB9, 0x5D, 0xF7, 0xC7, 0xED, 0x2E, 0xBD, 0x4E, 0xD9, 0x44, 0xCA, 0x64, 0x74, 0xBF, 0x28, + 0x1F, 0x7B, 0xF7, 0xD8, 0x2C, 0xC0, 0x39, 0xF1, 0x12, 0x0E, 0xAC, 0x5B, 0x1B, 0x23, 0x94, 0x79, + 0x95, 0x29, 0x79, 0x4E, 0xE6, 0xAA, 0xE4, 0xE5, 0x72, 0xE7, 0xE5, 0xA0, 0x39, 0x0C, 0x98, 0xD9, + 0xD5, 0xFE, 0x1F, 0x91, 0x0F, 0x1D, 0xB6, 0xF7, 0xCF, 0x02, 0x29, 0xF4, 0xA8, 0x76, 0x96, 0x9E, + 0xB8, 0xD6, 0x3C, 0xE9, 0xA0, 0xCF, 0x58, 0x58, 0x63, 0xE6, 0xD4, 0x3A, 0x8D, 0x6E, 0x02, 0xA1, + 0xEF, 0xC4, 0xB2, 0x2A, 0xEB, 0xB3, 0x9F, 0xCA, 0x77, 0x1E, 0xAE, 0x9A, 0xDE, 0x77, 0xFB, 0x94, + 0x60, 0xDB, 0x92, 0x3D, 0xD9, 0x49, 0x1F, 0x05, 0x34, 0xDD, 0x0E, 0x27, 0x95, 0xD1, 0x77, 0xF6, + 0x5F, 0x67, 0x33, 0x44, 0xDD, 0xEC, 0x29, 0xE8, 0x2A, 0x2B, 0x7D, 0xC8, 0x89, 0x76, 0x27, 0x76, + 0x56, 0xB0, 0x64, 0x2C, 0x29, 0xE8, 0x35, 0xA0, 0x85, 0xC0, 0x05, 0x73, 0x67, 0x4D, 0xA0, 0xB5, + 0xCC, 0xB2, 0x12, 0x55, 0x17, 0x69, 0x54, 0xCD, 0x5B, 0x07, 0x8A, 0xE2, 0x86, 0x24, 0x00, 0x70, + 0x28, 0xC7, 0x08, 0xB8, 0x59, 0x8F, 0xC0, 0x32, 0x9B, 0x3A, 0xF2, 0x46, 0x11, 0x53, 0x41, 0x53, + 0x4C, 0x4E, 0x95, 0x6F, 0x95, 0x54, 0x5D, 0xD0, 0x7E, 0x21, 0xF9, 0x58, 0x16, 0x4D, 0xD3, 0xE1, + 0xE2, 0x19, 0x82, 0x7A, 0x05, 0x4D, 0xE7, 0x23, 0x00, 0xB1, 0x64, 0x32, 0x1C, 0x69, 0xF2, 0xA5, + 0x04, 0x6B, 0x4D, 0x97, 0x3C, 0x83, 0x90, 0xC0, 0xBA, 0xEB, 0x7D, 0x0D, 0xFA, 0x62, 0xB6, 0xBA, + 0x7F, 0xBC, 0x8C, 0x6F, 0xD9, 0xFB, 0x4E, 0xED, 0xBC, 0x99, 0x3B, 0xC1, 0x8D, 0x93, 0xDF, 0xAB, + 0xF8, 0xA8, 0x9E, 0xB3, 0xA5, 0x29, 0xB4, 0x8B, 0x62, 0x53, 0xB4, 0xBA, 0xF0, 0x13, 0x1C, 0x1D, + 0xE3, 0x3D, 0x57, 0xC0, 0x48, 0x02, 0x1F, 0x7A, 0xDF, 0xA1, 0x00, 0x93, 0x4E, 0xFD, 0x73, 0x13, + 0xC7, 0xA9, 0x1C, 0x02, 0xBE, 0xD2, 0x66, 0xAF, 0x0F, 0x35, 0x03, 0xB8, 0x96, 0xA7, 0x02, 0x53, + 0xCD, 0xC6, 0x5F, 0x57, 0x1D, 0xC5, 0xC0, 0x96, 0x64, 0x54, 0x5F, 0x44, 0xAF, 0x91, 0xDF, 0xD3, + 0xB1, 0xE2, 0x83, 0x4F, 0x36, 0xFF, 0x50, 0xA3, 0xAB, 0x00, 0x48, 0x84, 0x3B, 0xC1, 0xD9, 0x40, + 0x76, 0xE0, 0x2E, 0x01, 0x3A, 0x6C, 0xF3, 0x00, 0x64, 0x14, 0x33, 0xD9, 0xAB, 0x31, 0xF6, 0x4D, + 0xB9, 0xA1, 0x42, 0x00, 0xF0, 0x21, 0x13, 0x0F, 0x18, 0x46, 0xF4, 0x7E, 0x76, 0x12, 0xC0, 0xBD, + 0x6E, 0xD5, 0x33, 0x46, 0x7F, 0x1F, 0x6B, 0x3C, 0x97, 0x00, 0xB7, 0x65, 0x81, 0xB1, 0x0A, 0xAC, + 0x05, 0xFE, 0xC2, 0xB1, 0x6B, 0xA5, 0xAD, 0x93, 0xB1, 0xD0, 0xF5, 0x39, 0x1E, 0xDA, 0xB1, 0xE6 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 108097. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_108097.cs +// + +namespace KeyCMF_108097 +{ + static const BYTE Keytable[] = + { + 0xD8, 0x43, 0xB1, 0x6F, 0x97, 0xD5, 0xEC, 0x97, 0x22, 0xE5, 0xCC, 0x6A, 0x7C, 0xA9, 0x00, 0x66, + 0xEE, 0x2C, 0x4F, 0x87, 0xCE, 0x49, 0x21, 0x56, 0x18, 0xEE, 0x39, 0x94, 0x28, 0x55, 0xE8, 0xB6, + 0x2A, 0x70, 0x4C, 0xCF, 0x83, 0x4E, 0xB8, 0x19, 0xB1, 0x05, 0x06, 0x34, 0x2B, 0x0B, 0x1F, 0x30, + 0x59, 0x26, 0x2E, 0x4D, 0xE3, 0x04, 0xF4, 0x20, 0xE2, 0xB7, 0xDC, 0x6A, 0xEE, 0xFD, 0xCD, 0xC5, + 0xB3, 0x03, 0x80, 0x1C, 0xF3, 0x28, 0x29, 0x42, 0x88, 0x8C, 0x63, 0xAA, 0x87, 0x37, 0x47, 0xDA, + 0x8C, 0x91, 0x76, 0x93, 0xA3, 0x08, 0x71, 0x5B, 0x25, 0xAA, 0x42, 0x9E, 0x1B, 0x59, 0xBF, 0x7E, + 0x03, 0x61, 0x6E, 0xB1, 0xD8, 0x61, 0x3C, 0x2E, 0xFC, 0x71, 0x25, 0x2E, 0x9A, 0xD3, 0x07, 0xF9, + 0xDF, 0xCC, 0x0E, 0x27, 0x47, 0xFF, 0x4A, 0xE0, 0x4F, 0x34, 0x48, 0x3D, 0xA4, 0xD0, 0x6A, 0xC8, + 0x77, 0xB3, 0xD2, 0x6C, 0xF2, 0x9F, 0x00, 0xB7, 0x08, 0x27, 0x34, 0x2A, 0x93, 0x52, 0xFF, 0xCB, + 0xA0, 0xCB, 0x80, 0x58, 0xA7, 0x25, 0xD5, 0xE8, 0xC1, 0xCD, 0xFB, 0x9D, 0x0E, 0x0D, 0x79, 0xD5, + 0x23, 0x2D, 0x64, 0x01, 0x3F, 0x29, 0x37, 0x47, 0x11, 0x59, 0x35, 0xF1, 0xD4, 0xC4, 0x2B, 0x01, + 0x5B, 0x70, 0xD5, 0xAB, 0x85, 0xFE, 0x99, 0x16, 0x61, 0x05, 0x56, 0x8A, 0x80, 0x97, 0x44, 0x11, + 0xAF, 0xF1, 0xAC, 0xDC, 0xDB, 0xB0, 0xCC, 0xCA, 0xC1, 0x95, 0x4A, 0xAE, 0xA9, 0x1A, 0x19, 0xFE, + 0x00, 0x96, 0x6E, 0xDE, 0x96, 0xAC, 0x43, 0xD3, 0xDF, 0xBC, 0xD0, 0x54, 0x63, 0x37, 0xD6, 0xEB, + 0x3E, 0x80, 0x0A, 0x2F, 0xCF, 0xC2, 0x10, 0x22, 0xA3, 0x23, 0xE6, 0xF0, 0x79, 0x46, 0x72, 0x41, + 0x44, 0x61, 0x5A, 0xB3, 0xE1, 0xDD, 0x01, 0x7C, 0x6F, 0x11, 0x7A, 0x80, 0xF2, 0x16, 0x71, 0xA1, + 0xBF, 0x9F, 0x54, 0xA2, 0xC2, 0xA6, 0x6F, 0x5C, 0x1F, 0x57, 0xE9, 0xC6, 0x2D, 0xEA, 0x3C, 0xA1, + 0x21, 0x4E, 0x64, 0x34, 0x3E, 0xD5, 0x54, 0x04, 0x5A, 0x6B, 0x4C, 0x9E, 0xB9, 0x17, 0x5E, 0xC7, + 0x9F, 0xB2, 0x86, 0x76, 0x6F, 0x95, 0xD6, 0xDB, 0x0A, 0x84, 0xE7, 0x77, 0xEF, 0x29, 0x26, 0xEA, + 0x34, 0x2B, 0x4C, 0xE0, 0xEB, 0x9A, 0xF2, 0x94, 0x24, 0x53, 0x84, 0xBC, 0xAD, 0xD4, 0x66, 0x69, + 0x8C, 0xFB, 0xBB, 0xE5, 0x41, 0x29, 0xB8, 0xB2, 0xD1, 0xBB, 0x04, 0xB4, 0xB6, 0xDB, 0xAF, 0x85, + 0x75, 0xC7, 0x7C, 0x2D, 0x0F, 0xEA, 0x7B, 0xC9, 0x5F, 0x81, 0x64, 0xEE, 0x1D, 0x0C, 0x6B, 0x48, + 0xD3, 0xA2, 0x3E, 0x56, 0x3C, 0xD0, 0x42, 0xFD, 0xF1, 0xBD, 0x03, 0x82, 0x93, 0x29, 0xD8, 0x3A, + 0x51, 0xCD, 0x41, 0xDD, 0x27, 0x1B, 0x58, 0xB3, 0xD8, 0xB4, 0x28, 0xEE, 0x9F, 0x04, 0x55, 0x77, + 0xF9, 0x6B, 0x95, 0xEF, 0x61, 0xAB, 0x91, 0xC5, 0xC0, 0xDB, 0xDE, 0xBF, 0xEE, 0x21, 0x32, 0x30, + 0x6D, 0x26, 0x34, 0xF7, 0x84, 0x84, 0x12, 0x39, 0x42, 0xC3, 0xC8, 0x6C, 0xD9, 0xD9, 0xC3, 0xC4, + 0x3B, 0x1D, 0x71, 0x8D, 0xC2, 0x53, 0xC8, 0x13, 0x99, 0x02, 0x42, 0xD0, 0x8A, 0x5B, 0xDB, 0xE8, + 0x8D, 0x3B, 0xF1, 0xF2, 0x86, 0x59, 0x41, 0x18, 0x78, 0x36, 0x66, 0x64, 0xDB, 0x50, 0xE2, 0x22, + 0xDE, 0x74, 0x0D, 0x91, 0x9E, 0xBA, 0xE9, 0x96, 0x35, 0xD0, 0x42, 0xA6, 0xF0, 0x89, 0xBA, 0x5D, + 0x1E, 0xC2, 0x13, 0x27, 0x8C, 0x37, 0x5B, 0xC6, 0x18, 0xAF, 0xB3, 0xD8, 0xCB, 0x55, 0x8A, 0x33, + 0x2D, 0x5D, 0x08, 0x12, 0xCA, 0x49, 0x93, 0x58, 0x1C, 0x0A, 0x91, 0xD5, 0xCE, 0x8C, 0x69, 0xDB, + 0xAD, 0x47, 0x94, 0xE9, 0x41, 0x44, 0x3C, 0x91, 0x5E, 0x28, 0x79, 0x0D, 0x0D, 0x36, 0xF2, 0x44 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 109168. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_109168.cs +// + +namespace KeyCMF_109168 +{ + static const BYTE Keytable[] = + { + 0xCB, 0x08, 0x59, 0x42, 0x68, 0xE7, 0xC9, 0xE7, 0x34, 0x4A, 0x62, 0xB2, 0xD2, 0x66, 0x22, 0x49, + 0x05, 0x93, 0x09, 0x3E, 0x32, 0x32, 0xE8, 0x82, 0x62, 0x34, 0xDD, 0xA9, 0x8B, 0x4C, 0x3D, 0xF9, + 0xFF, 0xF2, 0x42, 0x3A, 0x3B, 0xC7, 0x8B, 0x0B, 0xDC, 0x73, 0x9F, 0x1A, 0x28, 0x1C, 0x01, 0xF8, + 0xAA, 0x7A, 0xFD, 0x0C, 0xC5, 0x38, 0x98, 0xE6, 0x37, 0x39, 0xE0, 0xC6, 0xCA, 0xB6, 0x58, 0x2D, + 0xB6, 0x56, 0xFE, 0x7A, 0x11, 0x22, 0xB5, 0xDA, 0xDE, 0x35, 0xF2, 0xE9, 0xE9, 0x0A, 0x45, 0x70, + 0xE2, 0x8E, 0x1E, 0xED, 0xAE, 0x49, 0x0D, 0x91, 0x9F, 0x87, 0xC6, 0x3F, 0x17, 0xB9, 0x15, 0x47, + 0xC8, 0x96, 0x7A, 0xA9, 0x48, 0x9F, 0xD5, 0x31, 0x0F, 0xEE, 0xB8, 0xDE, 0xFA, 0x47, 0x06, 0xFA, + 0xA4, 0x34, 0x26, 0xB4, 0x72, 0x84, 0xBD, 0x74, 0x61, 0x2B, 0x81, 0xB5, 0x81, 0x0E, 0x1D, 0x2F, + 0x70, 0xBF, 0xBF, 0x28, 0x10, 0x9C, 0xBE, 0x08, 0x09, 0xC4, 0x74, 0x55, 0x38, 0x68, 0xB8, 0x2B, + 0xAC, 0x43, 0x1D, 0xEE, 0xD9, 0x1B, 0xB9, 0xDE, 0xE7, 0xFF, 0xDB, 0xF3, 0x4E, 0x04, 0x8B, 0x70, + 0x5F, 0xFE, 0x2D, 0xC8, 0x4A, 0x82, 0xAD, 0x1D, 0xF0, 0x68, 0xE3, 0x13, 0x05, 0x32, 0x8E, 0x8C, + 0x4B, 0x77, 0x89, 0x69, 0xAF, 0xFC, 0x85, 0xA6, 0xE3, 0x56, 0x70, 0xC7, 0x66, 0xEC, 0xCB, 0xE0, + 0x39, 0x59, 0x06, 0xBF, 0xBE, 0x6F, 0x8B, 0x83, 0xA2, 0xF8, 0xE3, 0xE7, 0x74, 0x78, 0x30, 0xD9, + 0xA5, 0x96, 0xAD, 0x73, 0x74, 0x45, 0xB4, 0x07, 0xC3, 0x68, 0xE8, 0x81, 0xB9, 0xEC, 0xF6, 0xED, + 0x12, 0x0F, 0xC9, 0x88, 0x2A, 0xCE, 0xF1, 0x26, 0xAB, 0xFA, 0x04, 0xBE, 0xE7, 0x7C, 0x4A, 0x64, + 0xF4, 0x90, 0xB8, 0xF2, 0x9C, 0xF4, 0x8C, 0x61, 0xDA, 0x15, 0x66, 0xDF, 0x7C, 0xDE, 0x28, 0x2E, + 0xE6, 0x02, 0x7C, 0x36, 0xFA, 0xD4, 0xD5, 0xE8, 0x01, 0x7D, 0x4B, 0xDF, 0x5F, 0x37, 0x9F, 0x51, + 0xC5, 0x16, 0xEE, 0x30, 0xA4, 0x3A, 0xB9, 0xFC, 0x27, 0x96, 0x4C, 0xB8, 0xC0, 0x2D, 0xF8, 0x42, + 0x36, 0x3A, 0x99, 0x52, 0xFE, 0x1F, 0xCB, 0x1A, 0xB8, 0x3C, 0xD8, 0x3A, 0x49, 0x05, 0xC8, 0x0E, + 0x49, 0x38, 0x34, 0x2E, 0x13, 0x2D, 0x51, 0x1B, 0x7C, 0xAC, 0xC9, 0x38, 0x10, 0x84, 0xF6, 0x4E, + 0xAD, 0x45, 0xB6, 0x87, 0x1D, 0x6A, 0xC2, 0xF1, 0x14, 0xDE, 0xA3, 0x94, 0xD0, 0xF2, 0x1D, 0x8C, + 0x45, 0x2A, 0xFD, 0x5E, 0x8F, 0x3A, 0x1E, 0x68, 0x04, 0x26, 0xBE, 0x8C, 0x79, 0x7F, 0x46, 0x4A, + 0xB6, 0x6B, 0xE2, 0x99, 0xB4, 0x11, 0x6F, 0x1D, 0xCE, 0x3D, 0xF9, 0xDD, 0x00, 0x69, 0x63, 0xD4, + 0x0E, 0x74, 0x74, 0x99, 0x66, 0x5F, 0x28, 0xF1, 0xF9, 0x11, 0x83, 0x00, 0x75, 0x8C, 0x2B, 0x67, + 0x78, 0xB0, 0x63, 0xA5, 0x23, 0x9B, 0xDF, 0x07, 0xD5, 0xEA, 0xAB, 0xFB, 0xA0, 0xBD, 0xC4, 0x41, + 0xBB, 0xE5, 0xC8, 0xC2, 0x12, 0x8D, 0x3F, 0x43, 0x31, 0x59, 0x01, 0x78, 0x93, 0xEC, 0xB9, 0x46, + 0x32, 0xFF, 0x90, 0x1D, 0xEE, 0xA9, 0x1B, 0x53, 0x61, 0x75, 0x24, 0x67, 0x1B, 0x69, 0x05, 0x77, + 0x24, 0x85, 0x22, 0xFD, 0x8E, 0x5E, 0xA6, 0x69, 0xFA, 0x94, 0x10, 0xFC, 0xC1, 0x65, 0xA9, 0x95, + 0x6B, 0xC0, 0x0B, 0xDE, 0x0B, 0x03, 0x76, 0x5D, 0x01, 0xF9, 0x9D, 0x77, 0x20, 0xDA, 0x36, 0x87, + 0x6E, 0xDE, 0x9E, 0x35, 0xE3, 0xAD, 0xEE, 0x8E, 0x22, 0xD2, 0xB4, 0x44, 0xDB, 0x46, 0x73, 0xFB, + 0x17, 0x51, 0x69, 0x9D, 0xDF, 0x20, 0x64, 0xBC, 0xD1, 0x54, 0x69, 0xA4, 0x6B, 0x8F, 0xA4, 0xDB, + 0x0D, 0x35, 0xAE, 0x5C, 0xF2, 0x35, 0x19, 0x9A, 0xE4, 0xA9, 0x61, 0xDB, 0x04, 0xEB, 0x06, 0xD2 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 109670. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_109670.cs +// + +namespace KeyCMF_109670 +{ + static const BYTE Keytable[] = + { + 0xB1, 0xEF, 0x1F, 0x4A, 0x2A, 0x5F, 0xBC, 0x94, 0x43, 0x2D, 0x12, 0x2B, 0xD3, 0x1A, 0xDD, 0x05, + 0x71, 0x69, 0x85, 0x50, 0x7B, 0x47, 0xCD, 0xC7, 0x06, 0x7C, 0xAF, 0x75, 0x19, 0x08, 0x12, 0x7A, + 0x58, 0x5B, 0x4D, 0x04, 0xB5, 0xAA, 0xCE, 0x50, 0x98, 0x8A, 0xC3, 0x7D, 0xB1, 0xE0, 0x31, 0xDF, + 0x8F, 0x87, 0x18, 0xA0, 0x8A, 0x49, 0x70, 0x91, 0x76, 0x27, 0xD8, 0x54, 0x81, 0x0E, 0x71, 0xDD, + 0x6B, 0x94, 0x4C, 0x46, 0x08, 0xBD, 0xD5, 0x07, 0xC4, 0x36, 0xB1, 0x58, 0xC6, 0x4A, 0x28, 0x00, + 0xDA, 0xFB, 0x11, 0x68, 0x98, 0xF5, 0xF9, 0x28, 0xE7, 0xE1, 0x69, 0xF9, 0xC6, 0x2A, 0x03, 0x75, + 0x4D, 0x54, 0x9B, 0x39, 0xC4, 0x8C, 0x80, 0xED, 0x91, 0xE7, 0xDA, 0xDE, 0xEB, 0x81, 0xDB, 0x37, + 0x92, 0xAB, 0x79, 0xC3, 0x85, 0x20, 0x01, 0x5F, 0x7D, 0x33, 0x20, 0xC4, 0xF0, 0xF5, 0x62, 0x0C, + 0xD7, 0x4B, 0x59, 0xC9, 0xD5, 0xAE, 0x6C, 0x67, 0x9C, 0x96, 0x23, 0xA9, 0x09, 0x84, 0x78, 0x06, + 0x00, 0x4A, 0xF2, 0x3C, 0xA4, 0x8B, 0xD7, 0x33, 0x5A, 0x7A, 0xFB, 0x6C, 0xDE, 0xBA, 0xF1, 0x85, + 0x7B, 0xDE, 0x97, 0x0D, 0xD1, 0x70, 0xD3, 0xB5, 0x56, 0x7C, 0xDB, 0x8B, 0x87, 0x54, 0x71, 0x5D, + 0x56, 0x7B, 0x03, 0xAD, 0xD9, 0xB9, 0xA3, 0x26, 0x94, 0x86, 0x2E, 0xDB, 0xBE, 0xD1, 0x45, 0xAC, + 0xFE, 0xA0, 0x84, 0x57, 0xA4, 0x9F, 0x03, 0x72, 0x38, 0x02, 0x8B, 0x47, 0x37, 0x37, 0xB3, 0x0F, + 0x4D, 0x86, 0x2B, 0xED, 0xEE, 0x2A, 0x5B, 0xAD, 0x0C, 0x12, 0x5B, 0xC7, 0xF7, 0x3A, 0x5B, 0xA3, + 0x5B, 0xDA, 0xFC, 0x9B, 0xBE, 0x4A, 0x18, 0xD4, 0x45, 0x94, 0xD5, 0xFA, 0xD8, 0x75, 0xDF, 0xAF, + 0x78, 0x0F, 0xFC, 0xD7, 0xAD, 0xE7, 0xA7, 0xB5, 0x32, 0x00, 0x4A, 0x98, 0x13, 0x9F, 0x83, 0x47, + 0x59, 0xE3, 0xA1, 0x92, 0xC7, 0xEA, 0xBF, 0x3F, 0xDD, 0xD9, 0x4E, 0xCC, 0x50, 0x10, 0xB7, 0xF8, + 0xF1, 0x6B, 0x33, 0x14, 0x98, 0xD7, 0xEC, 0xE4, 0x4A, 0x23, 0xFA, 0xFE, 0x76, 0x26, 0x36, 0x1A, + 0x78, 0x32, 0x5A, 0x82, 0xDE, 0x48, 0xFB, 0x61, 0x80, 0x45, 0xE1, 0x17, 0xB7, 0x84, 0xD7, 0xFD, + 0xFC, 0x64, 0xBF, 0x0A, 0xA1, 0xF1, 0x59, 0xDB, 0x03, 0x95, 0xD6, 0x61, 0xE6, 0x1D, 0xDA, 0xB3, + 0x5B, 0x76, 0x37, 0xA6, 0x21, 0xE6, 0x7D, 0xDA, 0x20, 0x5C, 0xDA, 0x0B, 0xDC, 0x19, 0x8E, 0xC9, + 0x2B, 0xE8, 0xD9, 0x7B, 0x2C, 0xF6, 0xE7, 0x99, 0xBC, 0x6A, 0x46, 0x56, 0xF3, 0x13, 0xD0, 0xE0, + 0x3D, 0x4D, 0x07, 0x52, 0xC3, 0xDD, 0xD0, 0x63, 0x55, 0x35, 0x28, 0x86, 0x5E, 0xB1, 0x2A, 0x20, + 0x6D, 0xA5, 0x8D, 0x06, 0x09, 0x8A, 0x98, 0x90, 0x8C, 0x9B, 0xC2, 0x62, 0x03, 0x04, 0xB2, 0xF1, + 0x56, 0xF7, 0x57, 0xFF, 0x7C, 0x7D, 0xA6, 0x2C, 0x71, 0x5B, 0xF6, 0xFB, 0x7E, 0x2C, 0x48, 0x83, + 0x5F, 0xD1, 0x80, 0x9B, 0x6F, 0x46, 0x7D, 0x70, 0x84, 0x85, 0x7C, 0xD2, 0x20, 0xC5, 0xAD, 0x9F, + 0x29, 0xAE, 0x32, 0x3F, 0x77, 0x2B, 0x11, 0xCC, 0x64, 0x4F, 0x46, 0x5C, 0xE7, 0x50, 0x2D, 0xE2, + 0xCA, 0xFD, 0x6F, 0x0F, 0x16, 0xF6, 0x2C, 0x74, 0x2F, 0xA9, 0x2A, 0x61, 0xF0, 0x9B, 0xD7, 0xCC, + 0xB6, 0x08, 0x5E, 0xC7, 0x38, 0x9F, 0xD1, 0x1A, 0x15, 0x38, 0x73, 0x10, 0x22, 0xF1, 0x02, 0x76, + 0xF4, 0x44, 0x4B, 0x35, 0xB5, 0x2A, 0xB8, 0x5A, 0xC3, 0xD6, 0x44, 0x76, 0xD6, 0xCF, 0x0A, 0x95, + 0x82, 0x42, 0x61, 0x41, 0xBF, 0x92, 0x7C, 0x99, 0xA2, 0x32, 0x43, 0x4F, 0x85, 0xAC, 0x53, 0xA9, + 0x99, 0x26, 0x40, 0x3E, 0x8C, 0x0E, 0x7D, 0x81, 0x3D, 0x55, 0x98, 0xF0, 0xD6, 0x47, 0x88, 0x19 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[((2 * digest[13]) - length) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 109691. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_109691.cs +// + +namespace KeyCMF_109691 +{ + static const BYTE Keytable[] = + { + 0x0E, 0xF6, 0x80, 0x89, 0xEA, 0x37, 0x59, 0xD2, 0x23, 0xB0, 0xC3, 0x11, 0x6B, 0x50, 0x43, 0x46, + 0x50, 0xC9, 0x39, 0xB3, 0x1D, 0x54, 0xBD, 0x48, 0x3E, 0xBF, 0x53, 0xE5, 0xFA, 0x8C, 0xD0, 0x1E, + 0x27, 0x45, 0xA3, 0xC9, 0xE6, 0x83, 0x2F, 0x7E, 0x53, 0x7C, 0x3A, 0x68, 0xA7, 0xA0, 0x4B, 0x76, + 0x94, 0x02, 0xBB, 0x9C, 0x37, 0x06, 0xA4, 0x39, 0xFF, 0x1F, 0x4F, 0xE0, 0xA4, 0x2F, 0xEC, 0xAF, + 0xC6, 0xA3, 0xCE, 0x9A, 0x40, 0xFF, 0x36, 0x3C, 0x72, 0x4F, 0x9F, 0x06, 0x9B, 0x02, 0xAF, 0xD6, + 0xCB, 0x81, 0x8F, 0xEA, 0x72, 0x50, 0x9C, 0x04, 0x26, 0x58, 0x8C, 0xC8, 0x18, 0xB8, 0x0B, 0x31, + 0x12, 0x0D, 0x0F, 0x15, 0x4D, 0xF5, 0x49, 0xEF, 0x29, 0xB3, 0x77, 0x82, 0xB4, 0x58, 0x90, 0xE3, + 0xA1, 0x7B, 0xE0, 0x97, 0x93, 0xF5, 0x24, 0xBC, 0x87, 0xC3, 0xD1, 0x3D, 0x99, 0x2E, 0xB6, 0xBC, + 0x5C, 0x16, 0x2E, 0x01, 0xFD, 0xD7, 0xF9, 0xE9, 0x3D, 0x47, 0x8A, 0x51, 0xB9, 0xC9, 0x9B, 0x88, + 0x12, 0x6A, 0x2D, 0xB9, 0x45, 0x70, 0x78, 0x1D, 0x30, 0x43, 0xDE, 0x1B, 0xEE, 0xC0, 0x56, 0x78, + 0x92, 0xAB, 0xD2, 0x18, 0xF9, 0xD4, 0x0B, 0xD0, 0x8E, 0xE5, 0x3A, 0x03, 0xF1, 0x72, 0xA8, 0xB3, + 0x42, 0x13, 0xE9, 0x3A, 0x93, 0x97, 0x09, 0x79, 0x1E, 0xD9, 0xDB, 0x16, 0x76, 0xE9, 0x5F, 0x8C, + 0x6B, 0x08, 0xB4, 0xDC, 0x55, 0x89, 0xF8, 0x13, 0xC0, 0x27, 0x2B, 0x1F, 0x96, 0x14, 0x40, 0x28, + 0xF6, 0xA8, 0xAA, 0xA4, 0x98, 0x50, 0x2B, 0xD2, 0xBD, 0x45, 0xE0, 0xCB, 0x16, 0x35, 0xF2, 0x8F, + 0x1A, 0xA4, 0x88, 0x1F, 0x86, 0x82, 0x52, 0xAC, 0x86, 0xE4, 0x20, 0x2F, 0x53, 0x19, 0x2F, 0xFF, + 0x17, 0x9A, 0xE1, 0x58, 0xB3, 0xE4, 0x1B, 0xF1, 0xA6, 0x6A, 0x5F, 0x7C, 0x94, 0x03, 0x6C, 0x1D, + 0x10, 0x93, 0x02, 0x3B, 0x6B, 0x5D, 0xCD, 0x7A, 0xFE, 0x80, 0xBC, 0x75, 0xC7, 0xD3, 0x16, 0xE0, + 0x3B, 0x82, 0x21, 0xA7, 0x73, 0xD8, 0x94, 0x25, 0x9E, 0xC8, 0x57, 0x43, 0x4E, 0xD0, 0xA9, 0xB1, + 0x1E, 0x52, 0x4B, 0x5C, 0xFE, 0x51, 0x15, 0x18, 0x40, 0xCB, 0x79, 0x89, 0xA3, 0xDA, 0x4B, 0xB9, + 0x7E, 0x10, 0xCA, 0xF6, 0x06, 0x5B, 0x6C, 0x6C, 0xD8, 0x4E, 0x6E, 0x39, 0x4F, 0x8E, 0xF2, 0x10, + 0x8E, 0xB9, 0x10, 0x29, 0x37, 0x3C, 0x8F, 0x33, 0x1F, 0x71, 0xC6, 0x7E, 0xC6, 0x42, 0xA8, 0xCD, + 0xBA, 0x6C, 0x9F, 0x1E, 0x67, 0x33, 0xDA, 0x82, 0x2B, 0x5B, 0x47, 0xC6, 0xDE, 0xAB, 0xCD, 0xCB, + 0xAD, 0x57, 0x29, 0xDE, 0xAE, 0x35, 0xB0, 0xCF, 0x4D, 0x3D, 0xC0, 0x09, 0x38, 0xE8, 0x56, 0xA5, + 0x03, 0x1A, 0x16, 0x45, 0x22, 0x02, 0x9E, 0x0C, 0xA3, 0xBE, 0xB2, 0xE3, 0x67, 0xC0, 0x6D, 0x3E, + 0x95, 0x9F, 0x58, 0x54, 0xAC, 0xF1, 0x03, 0x6F, 0xB5, 0x78, 0x14, 0x54, 0x3A, 0x08, 0x3A, 0x7C, + 0x3C, 0x20, 0xD5, 0xFE, 0xC0, 0xBB, 0xBD, 0x93, 0xAE, 0xB6, 0x3E, 0xAF, 0x2C, 0x8D, 0x57, 0xFB, + 0x8A, 0x7B, 0xE6, 0xE3, 0x43, 0x0A, 0x6D, 0xB7, 0x32, 0xC6, 0x19, 0xEB, 0x54, 0xF2, 0x73, 0x7B, + 0x14, 0xE3, 0x2B, 0xA8, 0x24, 0x1F, 0x07, 0xD6, 0x11, 0xD1, 0xAA, 0xBA, 0xB6, 0xFF, 0x31, 0x73, + 0x2A, 0x8A, 0xB1, 0xB8, 0xC1, 0x0C, 0x86, 0x1A, 0x6D, 0x3D, 0x15, 0x1F, 0xBE, 0x75, 0x1D, 0x7B, + 0xA6, 0x15, 0x1A, 0x05, 0x3E, 0x06, 0x93, 0x85, 0xEB, 0xCA, 0xAD, 0x8B, 0xFB, 0xDA, 0xF0, 0xCF, + 0x5B, 0xF5, 0x59, 0x95, 0xE9, 0x73, 0x6B, 0x88, 0x64, 0xD6, 0xCF, 0x07, 0xBB, 0x33, 0xE4, 0xDF, + 0xBB, 0x96, 0xA7, 0x89, 0x36, 0x9A, 0x1A, 0x6B, 0xF7, 0x77, 0xA6, 0xE8, 0xCA, 0x60, 0xED, 0x8B + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (uint)header.m_dataCount; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[((2 * digest[13]) - length) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 109912. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_109912.cs +// + +namespace KeyCMF_109912 +{ + static const BYTE Keytable[] = + { + 0x5B, 0xBE, 0x9D, 0x1B, 0xD4, 0x42, 0xBF, 0xAB, 0xB9, 0x0D, 0xE0, 0xC1, 0xE3, 0xDD, 0xD1, 0x9E, + 0x8C, 0x9F, 0x9D, 0xE3, 0x97, 0x6A, 0x7E, 0x3F, 0xC7, 0x83, 0x2F, 0x78, 0xE9, 0x43, 0x62, 0x88, + 0x2A, 0x96, 0xA6, 0x44, 0x6D, 0xD2, 0x1E, 0x5A, 0x68, 0x47, 0x05, 0x1C, 0x67, 0xFE, 0x8B, 0xE6, + 0xF5, 0xDB, 0x6C, 0x57, 0x6C, 0xB8, 0x2C, 0xBA, 0xF7, 0x32, 0xF6, 0xBD, 0xD2, 0xDD, 0x03, 0xCD, + 0x67, 0xA0, 0xCF, 0x53, 0x91, 0x7B, 0x10, 0x3D, 0x34, 0x40, 0xE8, 0x7A, 0xEA, 0xA9, 0x49, 0x20, + 0x10, 0x13, 0x6C, 0x31, 0x21, 0x52, 0x54, 0x08, 0xF2, 0x40, 0xE2, 0xED, 0xBC, 0xB5, 0xB1, 0xFB, + 0x37, 0xEF, 0x35, 0xDA, 0xDE, 0x2E, 0x46, 0x9E, 0x4A, 0x89, 0x12, 0xC3, 0x89, 0xA8, 0xD3, 0x56, + 0xBA, 0x5C, 0xAD, 0xAD, 0xF3, 0xD5, 0xBB, 0x19, 0x93, 0x9E, 0x36, 0x7F, 0x48, 0x3B, 0xDA, 0x93, + 0xC4, 0xBD, 0x13, 0x96, 0x5B, 0x51, 0xE5, 0x5F, 0x8C, 0xCD, 0x76, 0xBD, 0xF4, 0x88, 0x15, 0xB9, + 0x09, 0xFE, 0x0C, 0x27, 0x34, 0x27, 0xBE, 0xC6, 0x7F, 0x03, 0x2C, 0xE2, 0x24, 0x6D, 0x1D, 0xF3, + 0x64, 0xAD, 0x81, 0x5A, 0xFA, 0x66, 0x35, 0x8C, 0x03, 0x8D, 0xC1, 0x42, 0x4A, 0x90, 0x7F, 0x5D, + 0x44, 0xC5, 0x91, 0x1C, 0xB8, 0x2A, 0x4B, 0x88, 0x6E, 0x76, 0x7F, 0xEA, 0x44, 0x45, 0x4F, 0xCC, + 0x38, 0xD2, 0x78, 0x0F, 0x6B, 0x1D, 0x91, 0xCC, 0x1D, 0x51, 0x2F, 0x46, 0x12, 0x2B, 0x78, 0x23, + 0xEB, 0xC2, 0xE1, 0x0A, 0x1B, 0x5D, 0xED, 0xF5, 0x22, 0x28, 0x81, 0x9C, 0x20, 0x12, 0xBC, 0xDE, + 0x94, 0x8B, 0xBE, 0x2C, 0x66, 0xAA, 0x82, 0x81, 0x27, 0xC5, 0x31, 0x3A, 0x52, 0xCC, 0x87, 0x1B, + 0x85, 0x45, 0x4D, 0x75, 0x34, 0xBE, 0xAF, 0x81, 0xD5, 0x97, 0x2C, 0xD3, 0xB2, 0xF7, 0xF6, 0xE1, + 0x21, 0x23, 0xCC, 0x37, 0xFF, 0xDE, 0x36, 0x95, 0x19, 0x86, 0xD6, 0x82, 0x16, 0x70, 0x43, 0xCF, + 0xEF, 0x61, 0x22, 0x21, 0x0A, 0x8E, 0xEA, 0xF5, 0x0B, 0x77, 0xAA, 0x3F, 0xC1, 0xFB, 0x72, 0xF1, + 0xE6, 0x81, 0xED, 0x21, 0x6B, 0x01, 0xFD, 0xB8, 0x20, 0x14, 0xD2, 0x36, 0xF6, 0x81, 0x4B, 0xAF, + 0x64, 0x55, 0x7C, 0x70, 0xD3, 0xCD, 0x66, 0xE9, 0x8D, 0xEF, 0xD5, 0xB2, 0xDD, 0x58, 0x39, 0xDC, + 0x14, 0x80, 0x6D, 0x45, 0x87, 0xC8, 0xA5, 0x92, 0xCD, 0xD8, 0xEB, 0xAA, 0x15, 0x72, 0xFD, 0xDC, + 0x85, 0x9C, 0x89, 0xE9, 0xD4, 0x44, 0xCB, 0x2B, 0x0B, 0x17, 0x65, 0xA1, 0xD7, 0x02, 0xD4, 0x0C, + 0xE5, 0x14, 0xAC, 0x71, 0x0F, 0xE2, 0xE2, 0xB2, 0x92, 0x54, 0xF9, 0x6A, 0x9A, 0x57, 0x63, 0x9C, + 0xA1, 0xDE, 0x19, 0x3B, 0x36, 0x52, 0x8E, 0x2D, 0xBC, 0xE1, 0x19, 0x1E, 0xCD, 0x45, 0x5E, 0x9C, + 0x65, 0xC3, 0x81, 0x77, 0xC7, 0xA7, 0xA1, 0x21, 0x0E, 0x47, 0x51, 0xA0, 0x53, 0x22, 0x5A, 0xF4, + 0x12, 0x2D, 0x8C, 0xCC, 0x3F, 0x70, 0xC8, 0x58, 0x7A, 0xB3, 0x30, 0x9C, 0x5F, 0xF2, 0xF6, 0xF1, + 0x4A, 0xAE, 0xF6, 0x9C, 0x9E, 0x0D, 0x35, 0x47, 0xCF, 0x91, 0xF7, 0x77, 0x1A, 0x1B, 0xE6, 0x45, + 0xD3, 0x31, 0xAD, 0x15, 0xC3, 0x15, 0x3D, 0x1C, 0xCD, 0x7D, 0x13, 0xB1, 0xBD, 0xBB, 0x7B, 0x1E, + 0x73, 0x08, 0xDB, 0xF2, 0x3D, 0xFD, 0x80, 0xA9, 0x54, 0xB2, 0x71, 0xB4, 0xDC, 0x42, 0x03, 0x5B, + 0xDB, 0x9F, 0x34, 0x9A, 0xC7, 0xC4, 0x69, 0x31, 0x6F, 0x22, 0xFF, 0xFD, 0x66, 0x09, 0x22, 0x2A, + 0x79, 0x33, 0x78, 0x90, 0xA1, 0xB8, 0x23, 0x07, 0xA1, 0x54, 0x2A, 0x21, 0x86, 0xAC, 0xE7, 0xA4, + 0x94, 0xB4, 0x5B, 0x2E, 0x25, 0xD7, 0x09, 0x43, 0x7E, 0xA3, 0xB5, 0x8E, 0xDE, 0x0E, 0x00, 0x28 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + buffer[i] ^= digest[SignedMod(kidx - i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 110340. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_110340.cs +// + +namespace KeyCMF_110340 +{ + static const BYTE Keytable[] = + { + 0x57, 0x6C, 0x68, 0xA5, 0xE1, 0x19, 0x33, 0x4B, 0x43, 0x87, 0x64, 0x13, 0xC2, 0x52, 0x93, 0x9A, + 0xAA, 0x0F, 0xFB, 0x5C, 0xD4, 0x78, 0x0E, 0xAA, 0x6A, 0x25, 0x3B, 0xDC, 0x9B, 0x69, 0xB4, 0x19, + 0x3D, 0x74, 0x6D, 0xD8, 0x03, 0x3E, 0xE1, 0x42, 0x4E, 0x8E, 0x16, 0x0E, 0x63, 0xF3, 0x11, 0x51, + 0x36, 0x20, 0x63, 0x80, 0xB6, 0x0F, 0x22, 0x59, 0x0D, 0xCA, 0x4B, 0xCA, 0x6C, 0xE9, 0xB4, 0xD1, + 0xDC, 0x22, 0x22, 0x21, 0xAE, 0x96, 0xDD, 0x8A, 0x74, 0x90, 0x2C, 0x03, 0xB5, 0xE6, 0xC1, 0xAB, + 0x01, 0xA8, 0x6C, 0x2C, 0xB8, 0x53, 0xF6, 0x45, 0x31, 0x25, 0x71, 0x2A, 0x7C, 0x86, 0xFA, 0x61, + 0x51, 0xFD, 0x70, 0xC6, 0x6C, 0xC5, 0x01, 0x0E, 0xA7, 0x2D, 0x6F, 0x57, 0x1B, 0xAE, 0x9A, 0x85, + 0xBA, 0x10, 0x17, 0xD1, 0x9C, 0x66, 0x07, 0xAB, 0x4C, 0xB2, 0xD8, 0x9E, 0xA8, 0x2D, 0x2B, 0xEF, + 0xC9, 0xB0, 0x04, 0x07, 0x8B, 0xBB, 0x53, 0x4E, 0x40, 0xCE, 0x3D, 0x23, 0x5E, 0x8A, 0xB9, 0xBB, + 0x8C, 0x38, 0x1A, 0xCC, 0xE2, 0x61, 0x83, 0x66, 0xC0, 0x87, 0x2B, 0x02, 0xBC, 0xD7, 0xA3, 0x89, + 0x91, 0xA2, 0xA0, 0x09, 0x24, 0x9F, 0x30, 0x54, 0x87, 0x1F, 0xF4, 0xA4, 0xA4, 0x28, 0x84, 0xD9, + 0xF6, 0xD7, 0xA9, 0xB2, 0x4F, 0xA3, 0x50, 0xF1, 0x0F, 0x01, 0x7D, 0xF6, 0xB8, 0xDD, 0x80, 0x91, + 0xB4, 0x85, 0xA5, 0x04, 0x76, 0xA9, 0x18, 0x19, 0x11, 0x78, 0xFD, 0x9B, 0x7E, 0xD2, 0xF8, 0xA2, + 0x9B, 0x08, 0x83, 0x56, 0xFD, 0x80, 0x1B, 0x75, 0x1F, 0x37, 0x0A, 0xBD, 0x6D, 0xB6, 0x3F, 0x81, + 0xE6, 0xE8, 0x5C, 0x4C, 0x18, 0xE0, 0x94, 0x0C, 0xE2, 0xE4, 0xAD, 0x20, 0xCA, 0xF4, 0xE0, 0x4E, + 0xD3, 0xB5, 0x41, 0xB6, 0x25, 0x16, 0xA6, 0x5A, 0x01, 0xA6, 0x9D, 0xFF, 0xA8, 0x70, 0xDD, 0x9B, + 0x82, 0xBF, 0x8B, 0xED, 0xCB, 0x6D, 0xBB, 0xFB, 0x41, 0x84, 0x2E, 0xEF, 0x29, 0x79, 0x9E, 0x47, + 0x10, 0x7C, 0xBF, 0xF4, 0xCE, 0xA3, 0x60, 0x20, 0x44, 0x18, 0x55, 0xDB, 0xC5, 0x03, 0xE7, 0x09, + 0x72, 0x97, 0xBD, 0xDC, 0x14, 0x2C, 0xA0, 0x2A, 0xAE, 0xAA, 0xEF, 0xE6, 0x87, 0xF0, 0x09, 0xC3, + 0x17, 0xDA, 0x00, 0x3D, 0xA3, 0x72, 0x3D, 0x70, 0x19, 0x35, 0x61, 0xBA, 0x45, 0x12, 0x1D, 0x07, + 0xE4, 0x65, 0x72, 0x34, 0xB2, 0x75, 0x01, 0x91, 0x96, 0xD6, 0xF1, 0x61, 0x14, 0x35, 0x68, 0x53, + 0x4B, 0xEA, 0x6D, 0xB5, 0x7F, 0x59, 0xC5, 0xA5, 0x04, 0xE7, 0x8B, 0x53, 0x7E, 0x53, 0xEE, 0xE3, + 0xED, 0x98, 0xBE, 0xA0, 0xB5, 0x72, 0x10, 0x3C, 0x13, 0xBF, 0x44, 0x19, 0xF4, 0x89, 0xF1, 0xD7, + 0xDC, 0xE3, 0x55, 0xEA, 0x09, 0x8D, 0x38, 0x81, 0x6A, 0x34, 0x4B, 0xE7, 0x65, 0xE6, 0x94, 0x13, + 0x6A, 0x84, 0x22, 0xE6, 0xFF, 0xF7, 0xFF, 0xB8, 0x4C, 0x13, 0x7E, 0x7E, 0x48, 0x63, 0x94, 0x03, + 0xCC, 0xC8, 0x8F, 0xCC, 0x2A, 0x9C, 0xD6, 0xF4, 0xA6, 0x25, 0x8E, 0xD9, 0x2E, 0x6C, 0x48, 0x02, + 0x7E, 0x7E, 0xDF, 0x33, 0x52, 0x9A, 0xC0, 0x85, 0x0D, 0x20, 0xCE, 0x32, 0xAF, 0x4B, 0xF9, 0x6D, + 0xB5, 0x7C, 0xB0, 0xCC, 0x53, 0xAE, 0xCF, 0x44, 0x1C, 0x0C, 0x4C, 0x48, 0x78, 0x1E, 0x3C, 0x3F, + 0x78, 0xAD, 0xA3, 0xA4, 0x48, 0x2B, 0x62, 0xF6, 0x0C, 0xF5, 0xBD, 0x35, 0xA2, 0x96, 0xDF, 0x3D, + 0xB4, 0x31, 0x26, 0x04, 0x1F, 0x09, 0x60, 0x8C, 0x3F, 0xCF, 0x82, 0x2A, 0xAB, 0x0C, 0xA1, 0xB2, + 0x8F, 0xB2, 0xE0, 0x19, 0x7D, 0x5E, 0xA3, 0xC4, 0xDC, 0xFC, 0x43, 0x47, 0x0F, 0x12, 0x18, 0x70, + 0xB5, 0xCC, 0x7E, 0x09, 0xEB, 0x01, 0xF1, 0x55, 0xD7, 0x45, 0x2E, 0x3C, 0xB8, 0xEB, 0x94, 0x58 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 61; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(digest[7] + header.m_dataCount) & 511; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 111387. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_111387.cs +// + +namespace KeyCMF_111387 +{ + static const BYTE Keytable[] = + { + 0x4A, 0x7C, 0x0C, 0x7F, 0xEA, 0xE2, 0x19, 0xF6, 0x9A, 0xD2, 0x05, 0xDB, 0xA4, 0x10, 0xCC, 0xD8, + 0xD4, 0xBD, 0x27, 0xCB, 0x3D, 0xC6, 0x42, 0xCB, 0xAE, 0x8D, 0x28, 0x3C, 0xC6, 0x65, 0x7B, 0xC8, + 0x4A, 0x9F, 0x88, 0x47, 0x55, 0xCD, 0xFC, 0x6E, 0x1A, 0xE1, 0x75, 0x36, 0x80, 0x75, 0x7C, 0xD0, + 0x75, 0x5D, 0xE9, 0x3E, 0x0F, 0x03, 0x9A, 0xB6, 0x3F, 0x10, 0xE6, 0x29, 0x7C, 0x77, 0x5D, 0xDE, + 0xD4, 0x1F, 0xB3, 0xFB, 0xC3, 0x3D, 0xD5, 0x20, 0x7B, 0xEA, 0xE3, 0xF2, 0x2C, 0xB3, 0x0D, 0xD7, + 0x05, 0xFE, 0x89, 0x4E, 0xC3, 0xCF, 0xBA, 0x1D, 0x88, 0x9E, 0x6B, 0x3F, 0x0B, 0xF4, 0xB4, 0xD9, + 0xEC, 0xD4, 0xBD, 0x84, 0xFE, 0x5F, 0xE1, 0x00, 0x4D, 0x21, 0xD6, 0xB4, 0xAA, 0x58, 0x68, 0xC6, + 0xB2, 0x7F, 0x70, 0x25, 0x00, 0xF5, 0xEB, 0xD8, 0xC6, 0xAF, 0x3C, 0x4F, 0x67, 0x8F, 0x86, 0xF6, + 0x3C, 0x89, 0x1F, 0x82, 0x7E, 0xF7, 0x47, 0xB4, 0x0A, 0xA5, 0x99, 0x59, 0x07, 0x34, 0x89, 0x7C, + 0x66, 0xD1, 0x72, 0x0A, 0x95, 0x5A, 0x27, 0x1F, 0x04, 0x92, 0x8D, 0xA1, 0xB2, 0xEF, 0xEB, 0xBC, + 0xE7, 0x84, 0x6C, 0xB1, 0xBB, 0xED, 0xBA, 0xBE, 0x7C, 0x0D, 0x16, 0xEE, 0xC3, 0xE9, 0xA6, 0x6E, + 0x27, 0xAF, 0xE2, 0x18, 0x8F, 0x6D, 0x8E, 0xFA, 0xD7, 0x49, 0x1C, 0x3E, 0xB6, 0x51, 0x55, 0x5F, + 0xE3, 0x43, 0xA1, 0x31, 0x25, 0xB8, 0x1E, 0x69, 0x63, 0x7B, 0x9E, 0x91, 0x7E, 0xAA, 0x77, 0xE0, + 0x81, 0x8D, 0x21, 0x27, 0x6C, 0x5C, 0xB8, 0x25, 0x7A, 0x8F, 0x75, 0x77, 0x60, 0xB1, 0xEF, 0xEF, + 0xD8, 0x73, 0xA7, 0x7F, 0xB6, 0x6F, 0xAE, 0x2F, 0xAC, 0x8F, 0x34, 0xDB, 0x9A, 0xFA, 0x4D, 0x12, + 0xC0, 0x6B, 0x48, 0xF2, 0x17, 0x82, 0x9E, 0x7C, 0x03, 0xF9, 0xB5, 0x26, 0xD4, 0xF3, 0xBC, 0xC5, + 0x43, 0xE5, 0x11, 0xE4, 0x3F, 0x88, 0xBB, 0x66, 0x9F, 0x42, 0xD8, 0x34, 0x90, 0x11, 0x30, 0xE2, + 0x1B, 0x13, 0x70, 0x29, 0x35, 0xD6, 0xE1, 0x3E, 0x52, 0xBF, 0xBF, 0x25, 0xEE, 0xB9, 0x8A, 0x64, + 0x37, 0x7A, 0xDB, 0xB7, 0x73, 0x94, 0x0E, 0xD0, 0x26, 0x09, 0xD0, 0xF7, 0xF2, 0x14, 0x53, 0x11, + 0x44, 0x65, 0x4A, 0x30, 0xBA, 0x9E, 0xDB, 0x69, 0xD7, 0x30, 0xD0, 0x5B, 0x74, 0xB1, 0xCC, 0x54, + 0x5E, 0xE9, 0xB1, 0x57, 0x0B, 0x57, 0x4C, 0x65, 0x98, 0x3C, 0x7D, 0x4C, 0x84, 0xFD, 0x73, 0x79, + 0x67, 0x8F, 0x87, 0xE5, 0x9E, 0xFC, 0xCC, 0x0B, 0xF7, 0xCE, 0x8B, 0x35, 0x17, 0xDE, 0xAC, 0xB7, + 0x2C, 0x6C, 0xB4, 0xFE, 0x11, 0xEA, 0x55, 0x56, 0x8B, 0x6C, 0x7C, 0xB6, 0x47, 0xC5, 0x13, 0x32, + 0x79, 0xD2, 0x0A, 0x59, 0xE8, 0xF3, 0x85, 0x38, 0x0E, 0x20, 0x56, 0x8E, 0xE6, 0x26, 0x4E, 0x71, + 0x85, 0x40, 0x0D, 0x61, 0x53, 0xD4, 0x52, 0x7F, 0x71, 0x73, 0x8F, 0xC3, 0xAB, 0x3D, 0xDE, 0x08, + 0xCF, 0x18, 0x3D, 0x5F, 0xB2, 0xD7, 0x03, 0xD6, 0x0C, 0x7F, 0xC8, 0x9C, 0xCE, 0x58, 0xD6, 0xBF, + 0x6A, 0x89, 0xA7, 0x98, 0x84, 0x41, 0x30, 0x5C, 0x23, 0x4F, 0xF2, 0x84, 0x50, 0xA7, 0xCD, 0x70, + 0xCE, 0x17, 0x8E, 0x52, 0x84, 0xFB, 0x4B, 0x5A, 0x87, 0x97, 0x80, 0xD9, 0x88, 0x1E, 0x9A, 0xD2, + 0x57, 0xC0, 0xD6, 0x05, 0xA1, 0x8B, 0xD8, 0x9E, 0xDA, 0x61, 0x9E, 0xEA, 0x2F, 0xA9, 0x2F, 0x63, + 0xBB, 0xB4, 0x2C, 0x2B, 0x32, 0x31, 0xB4, 0xAC, 0x86, 0xB5, 0xF0, 0xB3, 0x05, 0x91, 0x9C, 0x6A, + 0x26, 0x21, 0x25, 0xEA, 0xAC, 0x0E, 0x9F, 0x04, 0x8B, 0xDC, 0x16, 0x6A, 0xCD, 0x4B, 0xBC, 0xB0, + 0x5A, 0xD8, 0xB4, 0xC6, 0xAC, 0xE9, 0xA8, 0x4C, 0x73, 0x3A, 0xDA, 0xAC, 0x3C, 0xA2, 0x12, 0x83 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]) % 17; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 111774. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_111774.cs +// + +namespace KeyCMF_111774 +{ + static const BYTE Keytable[] = + { + 0x35, 0xB0, 0x92, 0x41, 0x5B, 0xDD, 0x58, 0x1F, 0x99, 0x02, 0xAE, 0x16, 0xCD, 0x20, 0xB8, 0x6E, + 0xBD, 0xFE, 0x10, 0x32, 0xD3, 0x9D, 0xC1, 0xE5, 0x1F, 0xAD, 0x0C, 0xDC, 0xDF, 0xAA, 0x90, 0xE7, + 0x2F, 0x66, 0x3F, 0xF3, 0xD8, 0x9A, 0xC3, 0x70, 0x50, 0xB9, 0xB7, 0x19, 0x9E, 0x43, 0x46, 0xF0, + 0x3D, 0x7B, 0xA0, 0x69, 0xE3, 0x9B, 0x4C, 0xF9, 0x7D, 0x28, 0x2B, 0x7D, 0xAE, 0x4B, 0x9E, 0x93, + 0x6B, 0x45, 0xAA, 0x3E, 0xF3, 0x66, 0xA5, 0x84, 0x60, 0xAF, 0x5B, 0xA0, 0x85, 0x81, 0x3C, 0xCC, + 0xAC, 0xE8, 0x14, 0x12, 0xF9, 0x32, 0xE0, 0x43, 0x5F, 0x71, 0x2E, 0x0A, 0x20, 0xE1, 0x74, 0x65, + 0x58, 0xF5, 0xD1, 0xA6, 0x01, 0x7D, 0x06, 0xD3, 0xB2, 0x58, 0x9E, 0x4D, 0x63, 0xCB, 0x72, 0xA5, + 0xF5, 0x03, 0x55, 0x9B, 0xD7, 0x87, 0x30, 0x9D, 0x71, 0x48, 0xD6, 0xC3, 0xC8, 0xDF, 0x9D, 0xF3, + 0x8A, 0xD9, 0xAA, 0xBD, 0x72, 0xB7, 0x80, 0xB9, 0x49, 0x05, 0xB9, 0x51, 0x8F, 0xA9, 0x2A, 0x47, + 0xD5, 0x70, 0xD3, 0xCF, 0xF1, 0x68, 0x73, 0xC3, 0x3D, 0xDA, 0x68, 0xD3, 0x32, 0xF5, 0x5F, 0xD6, + 0x4C, 0x52, 0x44, 0x1C, 0x66, 0xD9, 0xFD, 0x70, 0xC2, 0xDB, 0x7C, 0xBC, 0x58, 0x10, 0x75, 0x83, + 0xC2, 0xFE, 0xAE, 0x42, 0x2D, 0x5C, 0x38, 0x34, 0xB6, 0xAA, 0x41, 0xA8, 0xC5, 0x14, 0xC1, 0x92, + 0xC0, 0x25, 0x5B, 0xAE, 0x06, 0xFC, 0xC9, 0x16, 0xF3, 0x22, 0xC6, 0xA3, 0x8C, 0x45, 0x2F, 0xA2, + 0xC9, 0x65, 0x10, 0x7C, 0x91, 0x73, 0x1A, 0xC5, 0x59, 0xBD, 0x28, 0x93, 0x35, 0x64, 0xC3, 0x6A, + 0x5B, 0x71, 0x70, 0xC3, 0xED, 0xF5, 0x51, 0x53, 0x1D, 0xBA, 0x91, 0x66, 0x45, 0x8F, 0xDD, 0x9D, + 0xBA, 0x57, 0x52, 0xD0, 0x13, 0xB5, 0xF4, 0x45, 0x37, 0x83, 0x9E, 0x55, 0x9E, 0x98, 0x25, 0x1F, + 0x1B, 0x71, 0x78, 0x57, 0xB8, 0xA8, 0x76, 0xB3, 0xFC, 0x0F, 0xFF, 0xAB, 0xF7, 0x89, 0xA7, 0x63, + 0x31, 0x29, 0xDE, 0xBD, 0xFE, 0xF4, 0x4B, 0x0B, 0xDE, 0x57, 0xDB, 0x22, 0x9B, 0x89, 0x0B, 0xD2, + 0x03, 0x98, 0x0E, 0xFC, 0x83, 0x53, 0x5A, 0x84, 0x62, 0xAE, 0xD2, 0x07, 0xFD, 0x91, 0x17, 0xB4, + 0x7B, 0x43, 0xEF, 0x7E, 0xC1, 0x45, 0x33, 0x0B, 0xDF, 0x53, 0xF4, 0xC7, 0x33, 0x96, 0xB1, 0xC1, + 0xBF, 0x18, 0x2C, 0x2E, 0x77, 0x5B, 0x86, 0x81, 0x69, 0x56, 0x48, 0xFD, 0xAA, 0xB8, 0xEA, 0x1B, + 0xF0, 0xD2, 0xB5, 0x65, 0x0D, 0xDF, 0xA9, 0x74, 0x84, 0xB1, 0x89, 0x04, 0xAB, 0x4C, 0xE0, 0xA4, + 0x25, 0x40, 0x03, 0x4C, 0x1D, 0x71, 0x35, 0xB7, 0xE1, 0x95, 0x72, 0x6D, 0x9A, 0x9C, 0x71, 0x22, + 0xC1, 0xE8, 0xF7, 0x6A, 0x4D, 0xB1, 0x18, 0xDF, 0xB9, 0x22, 0x90, 0x87, 0xAA, 0xFE, 0x04, 0xEA, + 0x23, 0x0E, 0x1E, 0x6C, 0xE8, 0xBC, 0x7F, 0xF2, 0x3F, 0xAE, 0xBA, 0x39, 0xB9, 0xBC, 0x72, 0x67, + 0x4A, 0x21, 0x37, 0xFC, 0xB0, 0x17, 0xA2, 0xCD, 0x7F, 0x7A, 0xCC, 0xBF, 0x58, 0x2D, 0xEC, 0xC0, + 0x90, 0x93, 0x3F, 0x07, 0x4B, 0x77, 0x71, 0x57, 0x2F, 0x3D, 0xF7, 0x87, 0x03, 0xD2, 0xCB, 0xAB, + 0xAD, 0xB4, 0x48, 0x24, 0xDD, 0xEE, 0xB7, 0xC3, 0xE7, 0xF1, 0xEC, 0x59, 0xE9, 0x89, 0xA4, 0x8C, + 0x9C, 0x86, 0xAF, 0x61, 0xD4, 0xC0, 0xBA, 0x26, 0xB2, 0xF4, 0xCC, 0xE6, 0x42, 0x17, 0x97, 0x22, + 0x8D, 0x93, 0x2A, 0x8E, 0xE8, 0x33, 0xD4, 0x71, 0x47, 0x98, 0x80, 0xAD, 0x02, 0x35, 0x52, 0x54, + 0x67, 0x97, 0x7B, 0xFB, 0x66, 0x5B, 0x68, 0x06, 0xCE, 0xA8, 0x6A, 0x40, 0xCA, 0x6E, 0xC1, 0x26, + 0x12, 0xD2, 0xA5, 0x63, 0xD0, 0x9E, 0xE7, 0x76, 0x95, 0xCE, 0x32, 0x93, 0x51, 0xF9, 0xBA, 0xA0 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 112214. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_112214.cs +// + +namespace KeyCMF_112214 +{ + static const BYTE Keytable[] = + { + 0x74, 0xF3, 0x47, 0x06, 0xB0, 0x45, 0x2E, 0x37, 0x06, 0x73, 0xA3, 0x34, 0x09, 0x21, 0x86, 0x65, + 0x81, 0x41, 0x14, 0x33, 0xF2, 0x12, 0x2D, 0xDB, 0xC5, 0x1F, 0x34, 0x0B, 0x00, 0xDB, 0xFD, 0x0E, + 0xAD, 0xAF, 0xE4, 0xB1, 0x6A, 0x59, 0xDD, 0x60, 0x86, 0xA2, 0x8B, 0x23, 0x77, 0xB2, 0x76, 0x9C, + 0x11, 0x62, 0x2A, 0x86, 0x94, 0x4C, 0xD8, 0xCB, 0x5F, 0x9D, 0x64, 0x79, 0xFC, 0xDB, 0x06, 0xE5, + 0xBE, 0xF7, 0x8D, 0x36, 0x56, 0x33, 0x9B, 0xC6, 0x0E, 0x2F, 0xB5, 0x5D, 0xD4, 0xE1, 0xAC, 0xDA, + 0xFC, 0x22, 0x52, 0x8E, 0xB5, 0x34, 0xBE, 0xEC, 0x6C, 0x53, 0xE5, 0xE8, 0x6D, 0x3D, 0x9C, 0x1A, + 0xC0, 0xEB, 0x3B, 0x22, 0xBE, 0x82, 0xBE, 0x0C, 0xD7, 0xA6, 0xB2, 0x7A, 0x17, 0x17, 0x5E, 0xB6, + 0xC4, 0xCA, 0xB8, 0x78, 0xFC, 0xFF, 0x91, 0x19, 0xCA, 0x64, 0x6F, 0x30, 0xD5, 0x3A, 0x4B, 0x9C, + 0x7E, 0xF0, 0xB6, 0x6F, 0xF2, 0x33, 0xBA, 0x73, 0xD9, 0xC7, 0x78, 0x11, 0xB0, 0x4A, 0x52, 0xC6, + 0xEB, 0x9A, 0x73, 0x8A, 0x2C, 0xFD, 0xCB, 0xC3, 0x40, 0xFC, 0x8C, 0xC5, 0xF8, 0xB7, 0xC7, 0xA3, + 0xEE, 0x8A, 0x5F, 0xF4, 0x1F, 0xFA, 0x65, 0xD7, 0xD4, 0x71, 0x32, 0xF9, 0x7B, 0xF0, 0xF8, 0x97, + 0x62, 0x46, 0xB1, 0xA5, 0x3C, 0x61, 0x8A, 0x8D, 0x54, 0xC4, 0x52, 0x8B, 0x96, 0xBD, 0x25, 0xC5, + 0x00, 0x8A, 0xE5, 0x2A, 0x6C, 0xC3, 0x78, 0x3B, 0x9C, 0x8E, 0x07, 0xAE, 0x94, 0x83, 0x2B, 0xA6, + 0xA2, 0x01, 0x9A, 0x1F, 0xA2, 0x52, 0x89, 0xA8, 0xEE, 0x0D, 0xDF, 0xAE, 0x49, 0x5F, 0xE3, 0xC8, + 0x6B, 0xDB, 0x5D, 0x0F, 0x53, 0xD0, 0xC8, 0xFE, 0x6A, 0x4E, 0x87, 0xE0, 0xEA, 0x3E, 0xDF, 0x50, + 0x81, 0xD2, 0xA5, 0x9C, 0x4B, 0x2E, 0x2A, 0x78, 0x12, 0xAF, 0x1D, 0x22, 0x3C, 0x8B, 0x36, 0x7F, + 0xD0, 0x58, 0x93, 0x7F, 0x64, 0x0B, 0x89, 0xC4, 0x25, 0x30, 0x12, 0xB6, 0x1B, 0x48, 0xD8, 0xE7, + 0xE4, 0x62, 0x2F, 0x68, 0xAA, 0xD4, 0x7D, 0xEF, 0xC4, 0xDF, 0xD8, 0x01, 0x4E, 0x93, 0x5F, 0xBC, + 0x77, 0x4F, 0xFD, 0xF9, 0xFF, 0x3C, 0x0C, 0x49, 0x5D, 0x27, 0xB4, 0x51, 0xA8, 0x6B, 0x03, 0xC5, + 0x7A, 0x3C, 0x51, 0xB5, 0x52, 0xC9, 0xE1, 0x31, 0xEE, 0x54, 0xF0, 0x4C, 0xEB, 0x34, 0x34, 0x9A, + 0x17, 0xD1, 0x7D, 0xC5, 0xEE, 0x3E, 0x31, 0x6B, 0x39, 0x3A, 0x22, 0xFA, 0x85, 0x2A, 0xD8, 0x67, + 0x6F, 0x68, 0x5C, 0x26, 0x05, 0x40, 0x28, 0x6A, 0x3E, 0xF7, 0x08, 0xDD, 0x18, 0x35, 0xC1, 0x74, + 0xA3, 0xE6, 0x30, 0x16, 0x8F, 0x27, 0x16, 0x7F, 0x04, 0x20, 0xF1, 0xA9, 0x51, 0xD3, 0x7C, 0xC0, + 0xD1, 0x35, 0xC3, 0x3E, 0x99, 0xFB, 0xB8, 0x15, 0xB3, 0xFC, 0xB9, 0x15, 0x6B, 0xDB, 0x63, 0x41, + 0xCD, 0x7B, 0xE0, 0x75, 0x68, 0x0B, 0x3A, 0x5E, 0x07, 0x78, 0xF0, 0xF8, 0x21, 0xFA, 0x32, 0xB9, + 0x90, 0x3C, 0x4E, 0x18, 0x2A, 0x17, 0x05, 0x31, 0x57, 0x3D, 0xC4, 0x32, 0xB1, 0xBE, 0xBA, 0xB7, + 0xF2, 0x97, 0x18, 0x16, 0x1D, 0x5F, 0x8D, 0x15, 0x16, 0xD0, 0x53, 0x69, 0xC9, 0xF2, 0xCA, 0x0C, + 0x0A, 0xED, 0xD8, 0x5B, 0x98, 0x0E, 0x7A, 0x3E, 0x1C, 0x2E, 0xAD, 0x0B, 0xCC, 0x3B, 0x4F, 0xA2, + 0x90, 0xF4, 0xBC, 0x69, 0xC0, 0xBC, 0x1D, 0x32, 0x41, 0x62, 0x80, 0x89, 0x56, 0x8B, 0xD0, 0xD8, + 0x76, 0xB4, 0xC3, 0x71, 0xCC, 0x17, 0x21, 0x13, 0x4F, 0x79, 0xD3, 0x3A, 0x52, 0x3A, 0x93, 0x0D, + 0x47, 0xC6, 0xD0, 0xD6, 0x15, 0x47, 0x95, 0x87, 0x16, 0x1C, 0xEB, 0x89, 0xCE, 0x8E, 0x3B, 0x9F, + 0xE2, 0x6A, 0x78, 0xDF, 0x7C, 0x84, 0xE4, 0x02, 0xD2, 0xAA, 0xED, 0x95, 0xD5, 0x40, 0xC3, 0x33 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += (header.m_buildVersion * (uint)header.m_dataCount) % 7; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(digest[7] * Keytable[0]) & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 112724. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_112724.cs +// + +namespace KeyCMF_112724 +{ + static const BYTE Keytable[] = + { + 0x71, 0x11, 0xA0, 0x31, 0x81, 0xBD, 0xE3, 0x1C, 0xD7, 0xB6, 0x41, 0xD1, 0xD5, 0x4B, 0x9D, 0xC7, + 0xBC, 0x01, 0x13, 0x27, 0xE4, 0xFC, 0x4F, 0x82, 0xFF, 0x48, 0xDB, 0x96, 0xD6, 0xA8, 0xE9, 0xD2, + 0xDF, 0xCF, 0x08, 0x41, 0x7A, 0xFE, 0x1D, 0x8D, 0x37, 0x93, 0x05, 0x39, 0xA7, 0x90, 0xA9, 0xD3, + 0x35, 0x73, 0x22, 0x2B, 0xEF, 0xC7, 0xC0, 0x4A, 0x90, 0x18, 0xEE, 0xDF, 0xDA, 0x92, 0x5E, 0x37, + 0x47, 0xA1, 0x9A, 0xDE, 0x46, 0xC0, 0xA1, 0x09, 0x64, 0x79, 0xB0, 0x6F, 0x8C, 0x99, 0x7C, 0x38, + 0x7E, 0x40, 0x3A, 0x23, 0xB4, 0x40, 0x41, 0x97, 0x2D, 0x9C, 0xCB, 0x71, 0x7B, 0xAF, 0xBC, 0xFC, + 0xB8, 0x30, 0x36, 0xD1, 0xF4, 0x5B, 0xAB, 0x30, 0x6B, 0x68, 0x75, 0x8C, 0x8B, 0x9F, 0xBD, 0xB6, + 0xA7, 0x0A, 0x28, 0xEE, 0x5E, 0x14, 0x4A, 0x88, 0x38, 0x09, 0x2F, 0xB9, 0x08, 0x0D, 0xDB, 0xE4, + 0x83, 0xB8, 0x43, 0x28, 0xCA, 0xF5, 0x46, 0x74, 0x39, 0xA9, 0x8D, 0x58, 0xF5, 0x88, 0x64, 0xA4, + 0xD7, 0x9E, 0xF6, 0xB5, 0x09, 0x7C, 0xDD, 0x86, 0x24, 0x88, 0x6F, 0xB2, 0xB6, 0x29, 0x55, 0xEC, + 0xC0, 0xF1, 0x52, 0x5A, 0x95, 0x26, 0x6D, 0x6D, 0xF5, 0x4D, 0x74, 0x63, 0xC4, 0x09, 0xF8, 0x91, + 0x3F, 0x81, 0xA0, 0xE7, 0x5B, 0xD8, 0xB3, 0xDC, 0x74, 0x53, 0xD8, 0x01, 0xD3, 0x1B, 0xF4, 0xB1, + 0xA2, 0x1B, 0x2C, 0xD8, 0xFA, 0x58, 0x12, 0x1E, 0xC9, 0x95, 0x27, 0xF5, 0x63, 0xA4, 0xE1, 0xF2, + 0xF5, 0x9E, 0x7D, 0x43, 0x4E, 0x7A, 0xA6, 0xDC, 0x05, 0x6E, 0x71, 0x90, 0xF9, 0x9E, 0xB7, 0x40, + 0x87, 0x4E, 0xBA, 0xFF, 0xBC, 0xF3, 0x6E, 0x7E, 0x7F, 0x7C, 0x3E, 0x38, 0xDF, 0x79, 0x26, 0x7D, + 0xAB, 0x25, 0xA3, 0xEE, 0xFD, 0xC4, 0xA6, 0xBF, 0xB3, 0x86, 0x40, 0xAB, 0x78, 0xB0, 0xE1, 0x6B, + 0xF5, 0x94, 0xC9, 0xEE, 0x1B, 0x2F, 0x24, 0x2E, 0x53, 0x8B, 0xC9, 0x9F, 0x32, 0xA2, 0xFF, 0xD6, + 0x78, 0x46, 0x93, 0x6D, 0xFA, 0x46, 0xA9, 0xA2, 0xC9, 0xC2, 0x98, 0x14, 0x35, 0x19, 0xF4, 0x48, + 0xD4, 0xD7, 0x7F, 0xBB, 0xA7, 0x20, 0x95, 0xFF, 0xCD, 0xC5, 0xCA, 0x75, 0xB4, 0xEA, 0xF7, 0xBE, + 0x17, 0xE1, 0xC7, 0xC6, 0xEA, 0x96, 0xD3, 0xAA, 0x35, 0xE9, 0x1C, 0x0E, 0xDE, 0x12, 0xD1, 0xA0, + 0x54, 0xA5, 0xC1, 0x81, 0x6A, 0x85, 0x2B, 0xC6, 0x8C, 0x43, 0x88, 0x1C, 0xC5, 0x8E, 0x0D, 0x13, + 0x98, 0x6E, 0xD5, 0x2A, 0xE0, 0xBE, 0x96, 0xBE, 0xAE, 0x0C, 0x26, 0xCD, 0xA2, 0x4A, 0x65, 0xCF, + 0x39, 0x08, 0x64, 0x83, 0xF7, 0xF9, 0xD5, 0x44, 0xEE, 0x82, 0x27, 0xAE, 0x74, 0xC4, 0xAD, 0x14, + 0xE7, 0xFD, 0x9B, 0x53, 0x42, 0x3F, 0xDB, 0x70, 0x91, 0x85, 0xA9, 0x14, 0xBE, 0x7F, 0x72, 0xAA, + 0xDF, 0xFA, 0x82, 0x55, 0x98, 0x8B, 0x41, 0xD1, 0x30, 0xA0, 0x23, 0x80, 0xEE, 0xD0, 0x94, 0xCF, + 0xF8, 0xAB, 0x64, 0x72, 0x6A, 0x83, 0xD2, 0xD0, 0x36, 0xB2, 0xAF, 0x4C, 0x8F, 0x9C, 0x18, 0x58, + 0xD0, 0x3B, 0xBA, 0x3D, 0x56, 0x67, 0xA7, 0xC4, 0x9E, 0x13, 0x03, 0xCD, 0x01, 0x5C, 0xCE, 0x26, + 0x48, 0x13, 0x18, 0xED, 0x37, 0x63, 0x4B, 0x16, 0xBC, 0xC8, 0x18, 0x59, 0x42, 0xCC, 0x61, 0xD2, + 0x83, 0x66, 0x44, 0xE7, 0x1B, 0x85, 0xCC, 0x95, 0x01, 0x1E, 0x8D, 0xD7, 0x00, 0xDD, 0x9D, 0x19, + 0xA6, 0x13, 0x70, 0x58, 0xF5, 0x62, 0x76, 0xA2, 0xF0, 0xEA, 0x77, 0x66, 0x2E, 0xF5, 0xEF, 0xE8, + 0x57, 0xAF, 0x11, 0x4A, 0x4D, 0x52, 0xA7, 0x19, 0xBA, 0xCC, 0x90, 0x2E, 0x5D, 0xB7, 0x31, 0x46, + 0xAE, 0x77, 0x4D, 0xCA, 0xED, 0x3E, 0x67, 0x21, 0x54, 0xB8, 0xCA, 0x60, 0x53, 0x6C, 0x23, 0x19 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 113596. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_113596.cs +// + +namespace KeyCMF_113596 +{ + static const BYTE Keytable[] = + { + 0x85, 0x6F, 0xD4, 0x8C, 0xB1, 0xE1, 0x5F, 0x01, 0x2E, 0x36, 0x35, 0xB3, 0xDD, 0xDE, 0xD1, 0x23, + 0xA6, 0x0C, 0x58, 0x89, 0x5C, 0x3F, 0xBD, 0x9B, 0x99, 0xA8, 0x2F, 0xB7, 0x8A, 0xB7, 0x67, 0xAD, + 0x5E, 0xFF, 0x0E, 0x22, 0x2D, 0x3E, 0x49, 0xA4, 0x8E, 0x19, 0x50, 0x0D, 0x45, 0xCF, 0x16, 0xA1, + 0x79, 0xC3, 0x04, 0x22, 0x78, 0x4F, 0xEC, 0x7D, 0x74, 0x97, 0xBC, 0x78, 0x16, 0x97, 0x7A, 0xB5, + 0x44, 0x24, 0x3A, 0xCD, 0xD3, 0x85, 0x5E, 0x65, 0xD0, 0xAB, 0x7C, 0x16, 0x70, 0xEE, 0xBD, 0x55, + 0x3C, 0x36, 0xD7, 0xB3, 0xF3, 0x5F, 0x08, 0xA8, 0xBB, 0xB3, 0xBA, 0xDE, 0xB0, 0x13, 0x41, 0x22, + 0xF8, 0x03, 0x18, 0x23, 0xEF, 0xE5, 0x10, 0x4E, 0xA0, 0x34, 0xE2, 0x8A, 0x0E, 0x22, 0xB2, 0xC8, + 0x98, 0xE6, 0x3F, 0x92, 0x6E, 0x4E, 0x70, 0x9B, 0xAD, 0x44, 0xD8, 0x1F, 0xD3, 0x8D, 0xBE, 0x44, + 0xBE, 0x21, 0x08, 0xA1, 0xD2, 0x70, 0x78, 0x13, 0xF5, 0x79, 0xE8, 0xF9, 0xCE, 0xFD, 0xA8, 0x7F, + 0x72, 0xA9, 0xF9, 0xC4, 0x08, 0x52, 0xA7, 0x81, 0xF3, 0xAE, 0xCD, 0xA9, 0xF4, 0x7D, 0x62, 0xF2, + 0xFE, 0xDA, 0xCE, 0x3A, 0xA7, 0xC7, 0x46, 0x19, 0x41, 0x8D, 0xEA, 0xDA, 0x8E, 0x65, 0xE7, 0x06, + 0x33, 0x34, 0xA1, 0x4F, 0x5D, 0x37, 0x1C, 0xC3, 0x27, 0xF8, 0xC5, 0x04, 0x80, 0x0A, 0x54, 0xC8, + 0x25, 0x43, 0x81, 0x21, 0x1C, 0x78, 0x01, 0x50, 0x57, 0x98, 0x69, 0xD5, 0x84, 0xEE, 0x05, 0xE2, + 0xCD, 0xDA, 0x1A, 0x75, 0x31, 0xD8, 0x91, 0x17, 0xC9, 0x5F, 0xC0, 0xBD, 0x4C, 0x13, 0x56, 0x6F, + 0x8C, 0x6C, 0xA0, 0xB2, 0x74, 0xB9, 0xD1, 0xD4, 0xCF, 0xDB, 0xD3, 0x10, 0xE0, 0x46, 0x3A, 0x9A, + 0x45, 0x65, 0x0D, 0xB9, 0x5A, 0xA0, 0x9F, 0x1C, 0xDC, 0x2C, 0x69, 0xAD, 0x52, 0x00, 0xE8, 0xBF, + 0x85, 0x47, 0xB7, 0x0D, 0xEC, 0xB2, 0x9E, 0xF9, 0xA5, 0x33, 0x0E, 0x01, 0x3E, 0xE8, 0xCB, 0x66, + 0x15, 0x42, 0x76, 0x5B, 0xF3, 0xA8, 0x60, 0x05, 0x3D, 0x2C, 0x02, 0x13, 0x6A, 0xD5, 0x70, 0x56, + 0x2D, 0x7C, 0xB2, 0xDF, 0xDF, 0xC0, 0xF8, 0x6E, 0x7C, 0xC6, 0x78, 0xA2, 0xAD, 0x7B, 0x2A, 0x82, + 0x51, 0xC8, 0x90, 0x13, 0x68, 0xF9, 0xBC, 0x8B, 0x34, 0x5E, 0x35, 0xDB, 0x20, 0xD6, 0x48, 0x8D, + 0xE1, 0xB5, 0x9E, 0x3D, 0xFD, 0x5E, 0x97, 0x2C, 0xE4, 0x0C, 0x28, 0xB2, 0x7C, 0x83, 0x9A, 0x82, + 0x5C, 0xED, 0xEC, 0x85, 0x58, 0x15, 0x87, 0x78, 0x1D, 0xC3, 0x08, 0xAF, 0xBE, 0x56, 0x6C, 0xBA, + 0x68, 0x64, 0x0C, 0x1C, 0x25, 0x57, 0xB1, 0x69, 0x75, 0x18, 0x29, 0x84, 0x73, 0xB1, 0x60, 0x96, + 0xF9, 0x2C, 0xC4, 0x58, 0xFB, 0xF3, 0x50, 0xFA, 0xAF, 0x9A, 0x4B, 0x73, 0x73, 0xA1, 0xB2, 0x25, + 0x79, 0xDF, 0xB2, 0x47, 0xF4, 0x1A, 0x4E, 0x71, 0x63, 0x4C, 0xE2, 0xD5, 0x98, 0x51, 0x05, 0xC7, + 0x7D, 0x9F, 0xC7, 0x19, 0x0B, 0x53, 0x8E, 0x54, 0xEE, 0x43, 0xAB, 0xEE, 0x69, 0x8F, 0x6A, 0xBD, + 0xD1, 0x5C, 0xBA, 0xD0, 0x45, 0xA8, 0x1E, 0xD9, 0x74, 0x9E, 0x3D, 0x76, 0xC8, 0x71, 0xCC, 0x33, + 0x31, 0x49, 0xC0, 0x3A, 0x64, 0x67, 0x6C, 0xB3, 0x03, 0x1B, 0xFF, 0x87, 0x7A, 0x84, 0xB0, 0xC7, + 0x51, 0x06, 0x30, 0xDD, 0x40, 0xF9, 0x17, 0xC5, 0xBD, 0xE5, 0x06, 0xC6, 0x54, 0xBB, 0x2F, 0x4C, + 0xE1, 0x40, 0xB7, 0x2D, 0x6D, 0x26, 0x80, 0x17, 0x87, 0xBA, 0x57, 0x12, 0x41, 0xA9, 0xC0, 0x91, + 0x9A, 0xCA, 0xD5, 0xEF, 0x0A, 0x75, 0xE3, 0xD1, 0xE0, 0xE9, 0xDC, 0xC1, 0xCC, 0x9A, 0x71, 0x31, + 0xE0, 0xB5, 0xC6, 0x6E, 0x97, 0x35, 0x65, 0x64, 0x99, 0x40, 0x9B, 0x09, 0x38, 0x7D, 0x1C, 0xC4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += 3; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(length * header.m_buildVersion); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx -= 43; + buffer[i] ^= digest[SignedMod(kidx + header.m_dataCount, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 114357. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_114357.cs +// + +namespace KeyCMF_114357 +{ + static const BYTE Keytable[] = + { + 0x6C, 0xF2, 0xCE, 0xF9, 0x61, 0x62, 0x37, 0xC7, 0xBF, 0x82, 0xAD, 0x53, 0xB3, 0xAF, 0xDA, 0xB5, + 0xBE, 0x81, 0x2F, 0xFB, 0x09, 0x4C, 0xC8, 0x85, 0x8B, 0x57, 0xBA, 0xD7, 0x88, 0x52, 0x55, 0xB4, + 0x08, 0xEE, 0x4D, 0x4B, 0xD5, 0x56, 0x8C, 0xF8, 0xB0, 0x40, 0xA1, 0xE2, 0x80, 0x55, 0x31, 0x73, + 0xF2, 0x55, 0x7F, 0x77, 0x9A, 0x27, 0x45, 0xA6, 0x52, 0xF9, 0x3D, 0xB6, 0x9D, 0xD6, 0x48, 0xA3, + 0xCE, 0x34, 0x6D, 0x03, 0x67, 0x10, 0xE5, 0x48, 0x56, 0xE3, 0xAA, 0xAB, 0xCD, 0x63, 0x9E, 0x45, + 0x4C, 0x44, 0xAA, 0x2B, 0x3F, 0x77, 0xC5, 0x9C, 0x38, 0x88, 0xC2, 0xBA, 0x75, 0x7A, 0xF9, 0x67, + 0x94, 0x33, 0xBD, 0x4B, 0x6F, 0x08, 0x68, 0xD2, 0x38, 0x62, 0x6C, 0xC8, 0xD7, 0x16, 0xA5, 0x19, + 0x07, 0xF1, 0x2A, 0xC3, 0x2F, 0x2C, 0x6D, 0xA7, 0xE4, 0x87, 0xF0, 0xD5, 0x31, 0xDB, 0xF1, 0xB7, + 0x01, 0xD8, 0xD9, 0xBC, 0xB6, 0xAD, 0x18, 0xDB, 0x42, 0x15, 0xD1, 0x50, 0x8D, 0x5F, 0x1F, 0xEF, + 0x6B, 0x0D, 0x20, 0x95, 0xD9, 0x7B, 0x84, 0x76, 0x49, 0xF7, 0x21, 0xD8, 0xD3, 0x07, 0x41, 0x1F, + 0xA2, 0x7A, 0xC5, 0xFE, 0xD9, 0xB5, 0x27, 0x52, 0x5E, 0x07, 0x50, 0xA7, 0x81, 0xB4, 0xAE, 0x32, + 0x4F, 0x35, 0x05, 0xF5, 0x0E, 0xCA, 0xC3, 0x9A, 0xA9, 0x35, 0x61, 0x64, 0xE2, 0x44, 0xAF, 0x78, + 0x87, 0x06, 0xD9, 0x74, 0x51, 0xBE, 0xD1, 0x30, 0xF2, 0xD0, 0x2C, 0x7B, 0x74, 0x98, 0xCB, 0x9D, + 0x60, 0x3A, 0x2E, 0x0E, 0x22, 0x40, 0xCB, 0x8F, 0x5D, 0xBA, 0x17, 0xB6, 0xC4, 0xB8, 0x89, 0x63, + 0xED, 0xA3, 0x61, 0x32, 0x4F, 0xE2, 0x1E, 0x71, 0xD8, 0x41, 0xF2, 0xA7, 0xB6, 0xCF, 0xC8, 0x3B, + 0xA6, 0xD0, 0xAE, 0x42, 0xD5, 0x73, 0xDB, 0x99, 0x82, 0xE1, 0xBA, 0x23, 0x25, 0x3E, 0x7A, 0x8E, + 0x1D, 0x3D, 0x78, 0x7B, 0x27, 0x83, 0xAB, 0x91, 0x7C, 0xA4, 0x7A, 0x7C, 0x00, 0x48, 0xAD, 0x2B, + 0x17, 0x34, 0x3C, 0x88, 0xC4, 0xCA, 0xC5, 0xC7, 0x78, 0x21, 0x62, 0x8F, 0x0B, 0x30, 0xC3, 0x6F, + 0x0C, 0x29, 0x25, 0x07, 0x38, 0xE3, 0x2F, 0x0A, 0x3F, 0x9A, 0xF1, 0xD7, 0x35, 0xD5, 0x5C, 0xDF, + 0xFA, 0xF3, 0x46, 0x00, 0x07, 0xBC, 0xCB, 0xD0, 0x54, 0xA6, 0x43, 0x27, 0x00, 0x1F, 0x73, 0x6F, + 0xD1, 0xD7, 0x1A, 0xF4, 0x83, 0xB2, 0x91, 0xBC, 0x85, 0x43, 0x33, 0xF2, 0xF3, 0xC9, 0x3B, 0xB9, + 0xE2, 0x60, 0xB9, 0xA6, 0xAB, 0xDF, 0x28, 0xED, 0xD3, 0x79, 0x47, 0x74, 0x9A, 0x33, 0x88, 0x7D, + 0x7D, 0x25, 0xD3, 0x26, 0xE6, 0x9B, 0xD2, 0x40, 0xCE, 0xC9, 0x7E, 0x8B, 0x21, 0xBC, 0xB0, 0x75, + 0x44, 0x81, 0xD3, 0x98, 0x5C, 0x29, 0x9B, 0xA8, 0xA9, 0x7A, 0x82, 0x62, 0x3F, 0x44, 0x34, 0xF6, + 0xB2, 0x0B, 0x45, 0x28, 0xE7, 0xA5, 0x97, 0x51, 0x9F, 0x0D, 0x7C, 0x1A, 0x5A, 0xF3, 0x20, 0x92, + 0x2C, 0x1D, 0xC6, 0x2E, 0x3E, 0x18, 0x82, 0xBF, 0xF1, 0xA1, 0x00, 0x1E, 0xB4, 0x56, 0xC5, 0xF5, + 0x97, 0x4A, 0x27, 0x5F, 0xF2, 0x66, 0x13, 0xCE, 0x6F, 0xBE, 0x28, 0x51, 0x3E, 0x4C, 0xC7, 0x42, + 0xA0, 0x33, 0x65, 0xE4, 0xEA, 0xC9, 0xFF, 0x6C, 0xAA, 0x45, 0x54, 0x81, 0xBE, 0xF6, 0xCB, 0x2C, + 0x1E, 0x6F, 0xEB, 0x52, 0x1D, 0x2C, 0xE4, 0x10, 0xB0, 0x75, 0x53, 0x78, 0x75, 0xE1, 0xD6, 0x4C, + 0x7C, 0x3D, 0x9C, 0x77, 0xCC, 0xC8, 0xBD, 0xDD, 0x4D, 0x59, 0x11, 0x2B, 0x17, 0x9A, 0xBB, 0x2E, + 0x35, 0xE2, 0xF4, 0x9A, 0x10, 0xEB, 0xA1, 0xF0, 0x35, 0xF9, 0x42, 0xFD, 0xCD, 0x98, 0x4E, 0xCE, + 0xD1, 0xED, 0x1B, 0xEA, 0x8C, 0xBB, 0xDE, 0xFA, 0xC9, 0xB3, 0xFF, 0x5E, 0x26, 0x4D, 0x33, 0xC4 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[(length * Keytable[0]) & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += ((uint)header.m_dataCount + digest[SignedMod(header.m_dataCount, SHA1_DIGESTSIZE)]) % 17; + buffer[i] = digest[SignedMod(kidx, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 114579. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_114579.cs +// + +namespace KeyCMF_114579 +{ + static const BYTE Keytable[] = + { + 0x4E, 0xF1, 0x56, 0xDA, 0x1C, 0x82, 0xE7, 0x94, 0x2E, 0xF3, 0x8C, 0x0A, 0x79, 0x9E, 0xDC, 0xFE, + 0x89, 0xCB, 0x7F, 0x74, 0xD0, 0xDC, 0x96, 0x90, 0xE0, 0x57, 0x87, 0x5C, 0x7A, 0xBB, 0x24, 0x4A, + 0xEB, 0x09, 0x89, 0x90, 0x1E, 0x9B, 0x14, 0x4F, 0xAE, 0xE4, 0x0E, 0xAF, 0x40, 0x42, 0x68, 0x43, + 0xD7, 0x41, 0x16, 0xDB, 0x9F, 0xDF, 0x11, 0x69, 0x0C, 0x90, 0xDF, 0x13, 0x94, 0xE6, 0xAB, 0x56, + 0x75, 0xF8, 0xE2, 0xE1, 0xA1, 0xE9, 0xAA, 0x05, 0x27, 0x47, 0x62, 0x94, 0x19, 0x08, 0xE6, 0xDD, + 0x3E, 0xAE, 0x25, 0x47, 0xFA, 0xE6, 0x95, 0x93, 0x30, 0x3F, 0x0C, 0x13, 0x08, 0x0B, 0xA7, 0x4F, + 0x14, 0xCC, 0x00, 0xF0, 0xB9, 0x4F, 0xD6, 0x13, 0xF1, 0x32, 0x72, 0xA9, 0x0E, 0x56, 0x70, 0xC1, + 0x97, 0x72, 0xB0, 0x7D, 0x37, 0x7A, 0x2D, 0x3B, 0x25, 0x51, 0x91, 0xFE, 0x09, 0xA6, 0xA0, 0x99, + 0xCB, 0x46, 0x0B, 0x4F, 0xE6, 0x46, 0x99, 0xE6, 0x29, 0xD7, 0x80, 0xB6, 0xA3, 0x78, 0x7E, 0xDB, + 0x05, 0x9D, 0x9C, 0x6B, 0x4B, 0x6A, 0x14, 0x89, 0xA0, 0x35, 0x7C, 0x2D, 0x15, 0x5A, 0xA8, 0x2E, + 0xF4, 0xDF, 0x35, 0x9C, 0x82, 0x27, 0x4F, 0xC9, 0xB8, 0x59, 0xA9, 0x4B, 0x7A, 0x07, 0xC2, 0x85, + 0xAA, 0xC8, 0x3F, 0x30, 0x6A, 0x58, 0xC5, 0x7C, 0x5D, 0xED, 0xF9, 0x1A, 0x5B, 0x73, 0x33, 0x35, + 0xD1, 0x74, 0x0B, 0x82, 0xFE, 0x37, 0x3E, 0xA3, 0xB3, 0xC4, 0x29, 0xC0, 0x5C, 0xC1, 0x29, 0x47, + 0xBA, 0xCA, 0x41, 0x1A, 0x6E, 0x34, 0x09, 0x36, 0xB0, 0xD2, 0xA1, 0xBA, 0xE9, 0xA8, 0xE8, 0x29, + 0x1D, 0x2B, 0x1C, 0xBC, 0x22, 0x01, 0x4C, 0xC7, 0xEC, 0x5E, 0xE4, 0xF8, 0xB9, 0xE1, 0x4D, 0x4E, + 0xD4, 0x12, 0x79, 0xF0, 0xBA, 0xE2, 0x34, 0x32, 0x50, 0x4F, 0x41, 0x5C, 0xAD, 0x8E, 0xA4, 0x44, + 0xDD, 0xC6, 0x1D, 0x3E, 0x8C, 0x9C, 0xC1, 0x0A, 0x9A, 0x39, 0x7F, 0x0E, 0xD4, 0x11, 0xDD, 0x18, + 0x52, 0x15, 0xCE, 0x89, 0x8E, 0x19, 0x40, 0xBA, 0xB4, 0x77, 0x55, 0xB5, 0xF6, 0xCB, 0x51, 0x85, + 0xA9, 0x2D, 0x6B, 0x38, 0x83, 0xBD, 0x47, 0x75, 0x2D, 0xBF, 0xE3, 0xA5, 0x10, 0xA2, 0xEE, 0x2C, + 0x4E, 0x0C, 0x03, 0xE5, 0x87, 0xC4, 0x8A, 0x6F, 0x22, 0x4A, 0xA0, 0xE6, 0x8B, 0x4F, 0x63, 0x92, + 0xF1, 0x91, 0x27, 0xC7, 0xAC, 0x70, 0x35, 0x1F, 0xCD, 0xA9, 0x4A, 0x77, 0x0B, 0x5A, 0x3B, 0xFA, + 0x30, 0xB6, 0x1E, 0x9B, 0x3D, 0xF2, 0x56, 0xFA, 0x16, 0x13, 0xAC, 0xDD, 0x42, 0x89, 0x79, 0xEA, + 0x45, 0x60, 0x34, 0x1B, 0x12, 0x86, 0xDA, 0xBC, 0xFC, 0x24, 0xC0, 0x4A, 0x89, 0x81, 0x83, 0xFF, + 0x38, 0x81, 0xB2, 0xB5, 0xDF, 0xA8, 0x49, 0x8F, 0xE9, 0x55, 0xA4, 0x5F, 0xDF, 0x4F, 0xA9, 0x68, + 0x9E, 0x33, 0x1B, 0xA0, 0x3C, 0xD7, 0x13, 0x76, 0x28, 0x1D, 0xB0, 0xBA, 0x09, 0x31, 0x74, 0x63, + 0x7A, 0x08, 0x62, 0x07, 0x37, 0x08, 0x19, 0x82, 0x6F, 0xD0, 0x99, 0x40, 0x84, 0x8C, 0x2F, 0xB6, + 0x13, 0x36, 0x0E, 0xC4, 0xD0, 0x9F, 0xCF, 0xF4, 0x89, 0x11, 0x0F, 0xB0, 0xDA, 0x8D, 0x12, 0x69, + 0xF4, 0x97, 0x3F, 0x88, 0x9F, 0x88, 0xD4, 0x59, 0xB1, 0xD2, 0x78, 0x11, 0x71, 0x25, 0x33, 0x70, + 0x95, 0xDF, 0xAB, 0x0C, 0x03, 0xF1, 0xD0, 0xB7, 0x33, 0xED, 0xDC, 0x18, 0x8C, 0x4C, 0xA9, 0x56, + 0x47, 0xC3, 0xFE, 0xBD, 0x92, 0xD0, 0xA2, 0xC7, 0x61, 0xE5, 0xB6, 0x5C, 0xD9, 0xA2, 0x4E, 0xCA, + 0x08, 0x35, 0x4C, 0xF1, 0xFE, 0x12, 0xC4, 0x6C, 0xE3, 0x43, 0xBE, 0xC1, 0xE7, 0x70, 0x00, 0x1C, + 0xDC, 0xC4, 0x65, 0xCD, 0x0A, 0xCC, 0x00, 0x88, 0x58, 0xB7, 0xBD, 0xA5, 0xAD, 0x30, 0x6F, 0x91 + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[length + 256]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_buildVersion & 511]; + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx = header.m_buildVersion - kidx; + buffer[i] ^= digest[SignedMod(kidx + i, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// +// Key+IV provider for build 115001. Created automatically, DO NOT EDIT. +// Source: .\TACTLib\TACTLib\Core\Product\Tank\CMF\ProCMF_115001.cs +// + +namespace KeyCMF_115001 +{ + static const BYTE Keytable[] = + { + 0xC6, 0x85, 0xDC, 0xF1, 0x39, 0x42, 0xA3, 0x2D, 0x59, 0xBD, 0x1F, 0xD3, 0x7A, 0xFE, 0xF0, 0xE2, + 0x18, 0x43, 0x54, 0x69, 0x0E, 0x11, 0xAC, 0xC1, 0x8C, 0x20, 0x1E, 0xD0, 0xF5, 0x98, 0x67, 0x55, + 0x8D, 0x38, 0x3E, 0x46, 0x1F, 0xCC, 0x35, 0x71, 0xBA, 0x96, 0x8A, 0x67, 0x78, 0x56, 0xCA, 0xD5, + 0xED, 0x58, 0x77, 0x4E, 0x1E, 0x2E, 0x4F, 0xB9, 0xD0, 0xAD, 0x08, 0xA9, 0x49, 0xD9, 0xA4, 0xAE, + 0x18, 0x26, 0xD6, 0xFC, 0x71, 0x15, 0xCF, 0xA7, 0x2E, 0xED, 0xFF, 0x29, 0x30, 0x9F, 0x2E, 0xB1, + 0xD4, 0x4E, 0x04, 0x76, 0xC6, 0x4E, 0xE3, 0xA1, 0xC0, 0xA5, 0x30, 0xD1, 0x6A, 0x9D, 0xC2, 0xD5, + 0xD5, 0xA8, 0xF2, 0x6F, 0xF8, 0x51, 0xFB, 0x31, 0x2F, 0xCA, 0x05, 0xCD, 0x72, 0x7C, 0xFA, 0x8F, + 0xDA, 0x87, 0xF1, 0xBD, 0xC9, 0x70, 0x40, 0x40, 0x80, 0x3D, 0x3A, 0x77, 0x68, 0xD8, 0x57, 0x75, + 0xB0, 0x2F, 0xA5, 0x38, 0x17, 0x7D, 0xA9, 0xD5, 0xA8, 0xD8, 0xB6, 0xF3, 0xBD, 0x83, 0x2E, 0x9D, + 0x86, 0x24, 0xBE, 0x07, 0xBA, 0xE1, 0xB0, 0x0E, 0x72, 0xD9, 0xAA, 0xAE, 0x61, 0x76, 0xB2, 0x85, + 0xD1, 0x9A, 0xA7, 0x67, 0x09, 0x5A, 0xE9, 0xA0, 0xD1, 0x1B, 0x54, 0x75, 0x53, 0x88, 0x2A, 0x4D, + 0x1C, 0x6E, 0x38, 0xE5, 0x3E, 0xB9, 0xBC, 0x2C, 0x6B, 0x08, 0xCD, 0xAB, 0xB0, 0xBE, 0xDF, 0x78, + 0xEB, 0x78, 0x29, 0x7F, 0x96, 0x56, 0x31, 0x50, 0x59, 0x38, 0x3F, 0x99, 0xAD, 0x09, 0xCC, 0x50, + 0x89, 0x39, 0xE9, 0x88, 0xB8, 0x24, 0xB4, 0xB5, 0xAD, 0x13, 0xD9, 0x01, 0xD9, 0x85, 0x6E, 0x72, + 0x89, 0x28, 0xEC, 0x32, 0xEE, 0x7C, 0x48, 0x6A, 0x3D, 0x30, 0x6D, 0x63, 0x97, 0x00, 0x2B, 0x8E, + 0x48, 0x11, 0xC1, 0x75, 0xF0, 0x9D, 0xA1, 0x5C, 0xCC, 0x66, 0x85, 0xA7, 0xC8, 0x2F, 0x96, 0x54, + 0x81, 0x14, 0x8A, 0x3B, 0x1D, 0x72, 0x47, 0x1E, 0x44, 0xB4, 0x9B, 0x93, 0x86, 0xD0, 0xCF, 0x39, + 0x2E, 0x07, 0x49, 0x52, 0x57, 0xB6, 0xC2, 0x4C, 0xF1, 0xA0, 0xA1, 0xCB, 0xBE, 0x0C, 0x45, 0xBF, + 0x87, 0x41, 0x0E, 0xC4, 0xAA, 0xF1, 0xE3, 0xB9, 0xD5, 0x36, 0xEC, 0xAF, 0xE3, 0xF1, 0x51, 0xAA, + 0x10, 0xC2, 0xB5, 0x3B, 0x3D, 0x8C, 0xE7, 0x2A, 0x50, 0xB5, 0xF7, 0xB7, 0x31, 0xBC, 0x65, 0x67, + 0xB0, 0xC5, 0x87, 0x20, 0xF4, 0xFA, 0x22, 0xAB, 0xF9, 0x26, 0xC1, 0xD4, 0x95, 0x14, 0x70, 0x24, + 0xCC, 0x12, 0x3B, 0x9C, 0x46, 0x7D, 0x39, 0x13, 0x63, 0x6F, 0x27, 0xA7, 0x71, 0x39, 0x03, 0x7C, + 0x3D, 0xDC, 0xDE, 0x7F, 0xAD, 0x0D, 0xA3, 0x23, 0x8B, 0xF6, 0xF8, 0x38, 0xF7, 0xAA, 0xD3, 0x5F, + 0xA1, 0x83, 0xBD, 0x3A, 0xCE, 0x69, 0x8B, 0xEF, 0x30, 0x05, 0x02, 0x17, 0x1C, 0xA4, 0x40, 0x5D, + 0xFD, 0x4D, 0xAC, 0x48, 0x70, 0xA7, 0xBA, 0xCE, 0xAC, 0x82, 0xA5, 0x15, 0xC9, 0xA1, 0x54, 0xD1, + 0xDE, 0x6C, 0x18, 0x26, 0xAF, 0x38, 0x79, 0x2C, 0x7B, 0xAD, 0x72, 0x6C, 0xA4, 0x32, 0x92, 0xDF, + 0x74, 0xAA, 0xDE, 0x88, 0xBF, 0xE1, 0xBB, 0x87, 0xD4, 0xD2, 0x58, 0x1D, 0xDF, 0x21, 0x1F, 0xC5, + 0x61, 0x20, 0xB2, 0x50, 0xDA, 0xEF, 0x6F, 0xDB, 0x30, 0xF2, 0x32, 0xCB, 0x07, 0xE7, 0x96, 0xBA, + 0x20, 0x6E, 0x8D, 0xA5, 0xC3, 0x67, 0x4A, 0x17, 0xCD, 0xC7, 0xDD, 0x6A, 0xA7, 0x5B, 0x1C, 0x83, + 0xEA, 0x7E, 0x35, 0xC7, 0x3E, 0xBF, 0x8D, 0xCE, 0x2E, 0x74, 0x5E, 0x03, 0x19, 0x2B, 0x39, 0x65, + 0xE6, 0x01, 0x4E, 0xDE, 0xF3, 0x9C, 0x1F, 0x31, 0x35, 0xB6, 0xA1, 0xAD, 0xA5, 0xD7, 0x3B, 0x8A, + 0xEC, 0xC0, 0xC4, 0x83, 0xA6, 0x51, 0xB2, 0x31, 0x3E, 0x8D, 0x3D, 0x93, 0x24, 0x8C, 0x36, 0x9C + }; + + LPBYTE Key(const CASC_CMF_HEADER & header, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = Keytable[header.m_dataCount & 511]; + + for (uint i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + switch (SignedMod(kidx, 3)) + { + case 0: + + kidx += 103; + break; + + case 1: + + kidx = (uint)SignedMod(kidx * 4, header.m_buildVersion); + break; + + case 2: + + --kidx; + break; + + } + } + return buffer; + } + + LPBYTE IV(const CASC_CMF_HEADER & header, LPBYTE digest, LPBYTE buffer, int length) + { + // byte[] buffer = new byte[length]; + uint kidx, okidx; + kidx = okidx = (uint)(2 * digest[5]); + + for (int i = 0; i != length; ++i) + { + buffer[i] = Keytable[SignedMod(kidx, 512)]; + kidx += okidx % 13; + buffer[i] ^= digest[SignedMod(kidx - 73, SHA1_DIGESTSIZE)]; + } + return buffer; + } +} + +// Sorted list of Key+IV providers. DO NOT EDIT. +static const CASC_CMF_KEY_PROVIDER CmfKeyProviders[] = +{ + { 35328, KeyCMF_035328::Key, KeyCMF_035328::IV}, + { 35455, KeyCMF_035455::Key, KeyCMF_035455::IV}, + { 35780, KeyCMF_035780::Key, KeyCMF_035780::IV}, + { 36473, KeyCMF_036473::Key, KeyCMF_036473::IV}, + { 36859, KeyCMF_036859::Key, KeyCMF_036859::IV}, + { 37104, KeyCMF_037104::Key, KeyCMF_037104::IV}, + { 37130, KeyCMF_037130::Key, KeyCMF_037130::IV}, + { 37218, KeyCMF_037218::Key, KeyCMF_037218::IV}, + { 37254, KeyCMF_037254::Key, KeyCMF_037254::IV}, + { 37275, KeyCMF_037275::Key, KeyCMF_037275::IV}, + { 37415, KeyCMF_037415::Key, KeyCMF_037415::IV}, + { 37456, KeyCMF_037456::Key, KeyCMF_037456::IV}, + { 37636, KeyCMF_037636::Key, KeyCMF_037636::IV}, + { 37646, KeyCMF_037646::Key, KeyCMF_037646::IV}, + { 37664, KeyCMF_037664::Key, KeyCMF_037664::IV}, + { 37703, KeyCMF_037703::Key, KeyCMF_037703::IV}, + { 37734, KeyCMF_037734::Key, KeyCMF_037734::IV}, + { 37755, KeyCMF_037755::Key, KeyCMF_037755::IV}, + { 37793, KeyCMF_037793::Key, KeyCMF_037793::IV}, + { 37865, KeyCMF_037865::Key, KeyCMF_037865::IV}, + { 37962, KeyCMF_037962::Key, KeyCMF_037962::IV}, + { 38044, KeyCMF_038044::Key, KeyCMF_038044::IV}, + { 38058, KeyCMF_038058::Key, KeyCMF_038058::IV}, + { 38125, KeyCMF_038125::Key, KeyCMF_038125::IV}, + { 38170, KeyCMF_038170::Key, KeyCMF_038170::IV}, + { 38248, KeyCMF_038248::Key, KeyCMF_038248::IV}, + { 38459, KeyCMF_038459::Key, KeyCMF_038459::IV}, + { 38765, KeyCMF_038765::Key, KeyCMF_038765::IV}, + { 38882, KeyCMF_038882::Key, KeyCMF_038882::IV}, + { 39023, KeyCMF_039023::Key, KeyCMF_039023::IV}, + { 39028, KeyCMF_039028::Key, KeyCMF_039028::IV}, + { 39083, KeyCMF_039083::Key, KeyCMF_039083::IV}, + { 39103, KeyCMF_039103::Key, KeyCMF_039103::IV}, + { 39241, KeyCMF_039241::Key, KeyCMF_039241::IV}, + { 39362, KeyCMF_039362::Key, KeyCMF_039362::IV}, + { 39425, KeyCMF_039425::Key, KeyCMF_039425::IV}, + { 39484, KeyCMF_039484::Key, KeyCMF_039484::IV}, + { 39823, KeyCMF_039823::Key, KeyCMF_039823::IV}, + { 39935, KeyCMF_039935::Key, KeyCMF_039935::IV}, + { 39974, KeyCMF_039974::Key, KeyCMF_039974::IV}, + { 40407, KeyCMF_040407::Key, KeyCMF_040407::IV}, + { 40570, KeyCMF_040570::Key, KeyCMF_040570::IV}, + { 40763, KeyCMF_040763::Key, KeyCMF_040763::IV}, + { 40990, KeyCMF_040990::Key, KeyCMF_040990::IV}, + { 41350, KeyCMF_041350::Key, KeyCMF_041350::IV}, + { 41713, KeyCMF_041713::Key, KeyCMF_041713::IV}, + { 42076, KeyCMF_042076::Key, KeyCMF_042076::IV}, + { 42210, KeyCMF_042210::Key, KeyCMF_042210::IV}, + { 42539, KeyCMF_042539::Key, KeyCMF_042539::IV}, + { 42563, KeyCMF_042563::Key, KeyCMF_042563::IV}, + { 42665, KeyCMF_042665::Key, KeyCMF_042665::IV}, + { 42936, KeyCMF_042936::Key, KeyCMF_042936::IV}, + { 43036, KeyCMF_043036::Key, KeyCMF_043036::IV}, + { 43435, KeyCMF_043435::Key, KeyCMF_043435::IV}, + { 43515, KeyCMF_043515::Key, KeyCMF_043515::IV}, + { 43605, KeyCMF_043605::Key, KeyCMF_043605::IV}, + { 44022, KeyCMF_044022::Key, KeyCMF_044022::IV}, + { 44916, KeyCMF_044916::Key, KeyCMF_044916::IV}, + { 45214, KeyCMF_045214::Key, KeyCMF_045214::IV}, + { 45420, KeyCMF_045420::Key, KeyCMF_045420::IV}, + { 45752, KeyCMF_045752::Key, KeyCMF_045752::IV}, + { 46137, KeyCMF_046137::Key, KeyCMF_046137::IV}, + { 46510, KeyCMF_046510::Key, KeyCMF_046510::IV}, + { 46823, KeyCMF_046823::Key, KeyCMF_046823::IV}, + { 46836, KeyCMF_046836::Key, KeyCMF_046836::IV}, + { 47161, KeyCMF_047161::Key, KeyCMF_047161::IV}, + { 47452, KeyCMF_047452::Key, KeyCMF_047452::IV}, + { 47946, KeyCMF_047946::Key, KeyCMF_047946::IV}, + { 49154, KeyCMF_049154::Key, KeyCMF_049154::IV}, + { 49656, KeyCMF_049656::Key, KeyCMF_049656::IV}, + { 50148, KeyCMF_050148::Key, KeyCMF_050148::IV}, + { 50483, KeyCMF_050483::Key, KeyCMF_050483::IV}, + { 51575, KeyCMF_051575::Key, KeyCMF_051575::IV}, + { 51948, KeyCMF_051948::Key, KeyCMF_051948::IV}, + { 52717, KeyCMF_052717::Key, KeyCMF_052717::IV}, + { 52926, KeyCMF_052926::Key, KeyCMF_052926::IV}, + { 53537, KeyCMF_053537::Key, KeyCMF_053537::IV}, + { 54011, KeyCMF_054011::Key, KeyCMF_054011::IV}, + { 54052, KeyCMF_054052::Key, KeyCMF_054052::IV}, + { 54255, KeyCMF_054255::Key, KeyCMF_054255::IV}, + { 54983, KeyCMF_054983::Key, KeyCMF_054983::IV}, + { 55290, KeyCMF_055290::Key, KeyCMF_055290::IV}, + { 55918, KeyCMF_055918::Key, KeyCMF_055918::IV}, + { 56957, KeyCMF_056957::Key, KeyCMF_056957::IV}, + { 57230, KeyCMF_057230::Key, KeyCMF_057230::IV}, + { 57796, KeyCMF_057796::Key, KeyCMF_057796::IV}, + { 57979, KeyCMF_057979::Key, KeyCMF_057979::IV}, + { 58155, KeyCMF_058155::Key, KeyCMF_058155::IV}, + { 58625, KeyCMF_058625::Key, KeyCMF_058625::IV}, + { 59008, KeyCMF_059008::Key, KeyCMF_059008::IV}, + { 59573, KeyCMF_059573::Key, KeyCMF_059573::IV}, + { 60038, KeyCMF_060038::Key, KeyCMF_060038::IV}, + { 60360, KeyCMF_060360::Key, KeyCMF_060360::IV}, + { 60547, KeyCMF_060547::Key, KeyCMF_060547::IV}, + { 60993, KeyCMF_060993::Key, KeyCMF_060993::IV}, + { 61542, KeyCMF_061542::Key, KeyCMF_061542::IV}, + { 62065, KeyCMF_062065::Key, KeyCMF_062065::IV}, + { 62591, KeyCMF_062591::Key, KeyCMF_062591::IV}, + { 62906, KeyCMF_062906::Key, KeyCMF_062906::IV}, + { 63372, KeyCMF_063372::Key, KeyCMF_063372::IV}, + { 63568, KeyCMF_063568::Key, KeyCMF_063568::IV}, + { 63778, KeyCMF_063778::Key, KeyCMF_063778::IV}, + { 63869, KeyCMF_063869::Key, KeyCMF_063869::IV}, + { 64346, KeyCMF_064346::Key, KeyCMF_064346::IV}, + { 64719, KeyCMF_064719::Key, KeyCMF_064719::IV}, + { 65302, KeyCMF_065302::Key, KeyCMF_065302::IV}, + { 65513, KeyCMF_065513::Key, KeyCMF_065513::IV}, + { 66302, KeyCMF_066302::Key, KeyCMF_066302::IV}, + { 66607, KeyCMF_066607::Key, KeyCMF_066607::IV}, + { 67071, KeyCMF_067071::Key, KeyCMF_067071::IV}, + { 67664, KeyCMF_067664::Key, KeyCMF_067664::IV}, + { 68126, KeyCMF_068126::Key, KeyCMF_068126::IV}, + { 68780, KeyCMF_068780::Key, KeyCMF_068780::IV}, + { 69340, KeyCMF_069340::Key, KeyCMF_069340::IV}, + { 69939, KeyCMF_069939::Key, KeyCMF_069939::IV}, + { 70250, KeyCMF_070250::Key, KeyCMF_070250::IV}, + { 70665, KeyCMF_070665::Key, KeyCMF_070665::IV}, + { 71213, KeyCMF_071213::Key, KeyCMF_071213::IV}, + { 71620, KeyCMF_071620::Key, KeyCMF_071620::IV}, + { 72127, KeyCMF_072127::Key, KeyCMF_072127::IV}, + { 73258, KeyCMF_073258::Key, KeyCMF_073258::IV}, + { 73677, KeyCMF_073677::Key, KeyCMF_073677::IV}, + { 74102, KeyCMF_074102::Key, KeyCMF_074102::IV}, + { 75428, KeyCMF_075428::Key, KeyCMF_075428::IV}, + { 76333, KeyCMF_076333::Key, KeyCMF_076333::IV}, + { 77262, KeyCMF_077262::Key, KeyCMF_077262::IV}, + { 78040, KeyCMF_078040::Key, KeyCMF_078040::IV}, + { 78777, KeyCMF_078777::Key, KeyCMF_078777::IV}, + { 79605, KeyCMF_079605::Key, KeyCMF_079605::IV}, + { 80111, KeyCMF_080111::Key, KeyCMF_080111::IV}, + { 80550, KeyCMF_080550::Key, KeyCMF_080550::IV}, + { 81410, KeyCMF_081410::Key, KeyCMF_081410::IV}, + { 82693, KeyCMF_082693::Key, KeyCMF_082693::IV}, + { 82920, KeyCMF_082920::Key, KeyCMF_082920::IV}, + { 83050, KeyCMF_083050::Key, KeyCMF_083050::IV}, + { 83584, KeyCMF_083584::Key, KeyCMF_083584::IV}, + { 84186, KeyCMF_084186::Key, KeyCMF_084186::IV}, + { 84997, KeyCMF_084997::Key, KeyCMF_084997::IV}, + { 85660, KeyCMF_085660::Key, KeyCMF_085660::IV}, + { 86739, KeyCMF_086739::Key, KeyCMF_086739::IV}, + { 87506, KeyCMF_087506::Key, KeyCMF_087506::IV}, + { 88423, KeyCMF_088423::Key, KeyCMF_088423::IV}, + { 88742, KeyCMF_088742::Key, KeyCMF_088742::IV}, + { 89353, KeyCMF_089353::Key, KeyCMF_089353::IV}, + { 90193, KeyCMF_090193::Key, KeyCMF_090193::IV}, + { 90774, KeyCMF_090774::Key, KeyCMF_090774::IV}, + { 92111, KeyCMF_092111::Key, KeyCMF_092111::IV}, + { 93519, KeyCMF_093519::Key, KeyCMF_093519::IV}, + { 94717, KeyCMF_094717::Key, KeyCMF_094717::IV}, + { 96081, KeyCMF_096081::Key, KeyCMF_096081::IV}, + { 96894, KeyCMF_096894::Key, KeyCMF_096894::IV}, + { 98315, KeyCMF_098315::Key, KeyCMF_098315::IV}, + { 98576, KeyCMF_098576::Key, KeyCMF_098576::IV}, + { 98845, KeyCMF_098845::Key, KeyCMF_098845::IV}, + { 99843, KeyCMF_099843::Key, KeyCMF_099843::IV}, + {100672, KeyCMF_100672::Key, KeyCMF_100672::IV}, + {101600, KeyCMF_101600::Key, KeyCMF_101600::IV}, + {102337, KeyCMF_102337::Key, KeyCMF_102337::IV}, + {102773, KeyCMF_102773::Key, KeyCMF_102773::IV}, + {104319, KeyCMF_104319::Key, KeyCMF_104319::IV}, + {105760, KeyCMF_105760::Key, KeyCMF_105760::IV}, + {106110, KeyCMF_106110::Key, KeyCMF_106110::IV}, + {106400, KeyCMF_106400::Key, KeyCMF_106400::IV}, + {107076, KeyCMF_107076::Key, KeyCMF_107076::IV}, + {107804, KeyCMF_107804::Key, KeyCMF_107804::IV}, + {108097, KeyCMF_108097::Key, KeyCMF_108097::IV}, + {109168, KeyCMF_109168::Key, KeyCMF_109168::IV}, + {109670, KeyCMF_109670::Key, KeyCMF_109670::IV}, + {109691, KeyCMF_109691::Key, KeyCMF_109691::IV}, + {109912, KeyCMF_109912::Key, KeyCMF_109912::IV}, + {110340, KeyCMF_110340::Key, KeyCMF_110340::IV}, + {111387, KeyCMF_111387::Key, KeyCMF_111387::IV}, + {111774, KeyCMF_111774::Key, KeyCMF_111774::IV}, + {112214, KeyCMF_112214::Key, KeyCMF_112214::IV}, + {112724, KeyCMF_112724::Key, KeyCMF_112724::IV}, + {113596, KeyCMF_113596::Key, KeyCMF_113596::IV}, + {114357, KeyCMF_114357::Key, KeyCMF_114357::IV}, + {114579, KeyCMF_114579::Key, KeyCMF_114579::IV}, + {115001, KeyCMF_115001::Key, KeyCMF_115001::IV}, +}; + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER |