// // 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