Register for your free account! | Forgot your password?

You last visited: Today at 06:55

  • Please register to post and access all features, it's quick, easy and FREE!


CAST-128 (CAST5) Cipher Feedback

Reply
 
Old   #1

 
elite*gold: 0
Join Date: Jan 2008
Posts: 1,394
Received Thanks: 1,055
CAST-128 (CAST5) Cipher Feedback

Similar to my other work in ciphers, here a CAST-128 cipher for the game encryption. It uses the Cipher Feedback (CFB64) method like the OpenSSL implementation used by TQ in CO2. My implementation uses pointers, so it can be considered as unsafe.

I decided to release it independently of the CO2_CORE_DLL project. As it is part of the library, you must add the Kernel file.

PS. I updated the CO2_CORE_DLL too, with a revised Blowfish cipher.

Code:
// * ************************************************************
// * * START:                                          cast5.cs *
// * ************************************************************

// * ************************************************************
// *                      INFORMATIONS
// * ************************************************************
// * CAST-128 (CFB64) class for the library.
// * cast5.cs
// * 
// * --
// *
// * Feel free to use this class in your projects, but don't
// * remove the header to keep the paternity of the class.
// * 
// * ************************************************************
// *                      CREDITS
// * ************************************************************
// * Originally created by CptSky (March 32th, 2012)
// * Copyright (C) 2012 CptSky
// *
// * ************************************************************

using System;
using System.Runtime.InteropServices;

namespace CO2_CORE_DLL.Security.Cryptography
{
    public unsafe class CAST5
    {
        private readonly UInt32[][] SBoxes = new UInt32[8][] {
            new UInt32[]
                  { 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, 
                    0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, 
                    0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, 
                    0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, 
                    0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, 
                    0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, 
                    0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, 
                    0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, 
                    0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, 
                    0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, 
                    0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, 
                    0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, 
                    0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, 
                    0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, 
                    0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, 
                    0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, 
                    0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, 
                    0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, 
                    0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, 
                    0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, 
                    0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, 
                    0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, 
                    0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, 
                    0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, 
                    0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, 
                    0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, 
                    0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, 
                    0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, 
                    0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, 
                    0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, 
                    0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, 
                    0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf },

            new UInt32[]
                  { 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, 
                    0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, 
                    0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, 
                    0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, 
                    0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, 
                    0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, 
                    0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, 
                    0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, 
                    0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, 
                    0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, 
                    0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, 
                    0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, 
                    0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, 
                    0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, 
                    0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, 
                    0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, 
                    0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, 
                    0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, 
                    0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, 
                    0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, 
                    0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, 
                    0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, 
                    0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, 
                    0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, 
                    0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, 
                    0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, 
                    0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, 
                    0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, 
                    0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, 
                    0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, 
                    0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, 
                    0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1 },

            new UInt32[]
                  { 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, 
                    0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, 
                    0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, 
                    0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, 
                    0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, 
                    0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, 
                    0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, 
                    0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, 
                    0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, 
                    0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, 
                    0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, 
                    0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, 
                    0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, 
                    0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, 
                    0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, 
                    0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, 
                    0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, 
                    0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, 
                    0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, 
                    0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, 
                    0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, 
                    0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, 
                    0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, 
                    0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, 
                    0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, 
                    0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, 
                    0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, 
                    0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, 
                    0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, 
                    0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, 
                    0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, 
                    0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783 },

            new UInt32[]
                  { 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, 
                    0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, 
                    0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, 
                    0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, 
                    0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, 
                    0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, 
                    0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, 
                    0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, 
                    0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, 
                    0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, 
                    0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, 
                    0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, 
                    0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, 
                    0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, 
                    0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, 
                    0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, 
                    0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, 
                    0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, 
                    0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, 
                    0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 
                    0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, 
                    0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, 
                    0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 
                    0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, 
                    0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, 
                    0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 
                    0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, 
                    0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, 
                    0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 
                    0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, 
                    0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, 
                    0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 },
            
            new UInt32[]
                  { 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, 
                    0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, 
                    0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, 
                    0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, 
                    0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, 
                    0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, 
                    0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, 
                    0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, 
                    0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, 
                    0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, 
                    0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, 
                    0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, 
                    0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, 
                    0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, 
                    0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, 
                    0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, 
                    0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, 
                    0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, 
                    0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, 
                    0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, 
                    0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, 
                    0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, 
                    0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, 
                    0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, 
                    0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, 
                    0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, 
                    0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, 
                    0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, 
                    0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, 
                    0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, 
                    0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, 
                    0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4 },

            new UInt32[]
                  { 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, 
                    0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, 
                    0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, 
                    0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, 
                    0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, 
                    0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, 
                    0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, 
                    0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, 
                    0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, 
                    0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, 
                    0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, 
                    0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, 
                    0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, 
                    0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, 
                    0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, 
                    0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, 
                    0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, 
                    0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, 
                    0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, 
                    0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, 
                    0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, 
                    0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, 
                    0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, 
                    0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, 
                    0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, 
                    0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, 
                    0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, 
                    0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, 
                    0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, 
                    0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, 
                    0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, 
                    0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f },

            new UInt32[]
                  { 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, 
                    0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, 
                    0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, 
                    0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, 
                    0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, 
                    0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, 
                    0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, 
                    0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, 
                    0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, 
                    0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, 
                    0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, 
                    0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, 
                    0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, 
                    0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, 
                    0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, 
                    0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, 
                    0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, 
                    0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, 
                    0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, 
                    0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, 
                    0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, 
                    0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, 
                    0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, 
                    0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, 
                    0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, 
                    0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, 
                    0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, 
                    0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, 
                    0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, 
                    0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, 
                    0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, 
                    0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3 },

            new UInt32[]
                  { 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, 
                    0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, 
                    0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, 
                    0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, 
                    0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, 
                    0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, 
                    0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, 
                    0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, 
                    0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, 
                    0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, 
                    0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, 
                    0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, 
                    0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, 
                    0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, 
                    0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, 
                    0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, 
                    0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, 
                    0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, 
                    0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, 
                    0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, 
                    0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, 
                    0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, 
                    0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, 
                    0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, 
                    0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, 
                    0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, 
                    0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, 
                    0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, 
                    0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, 
                    0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, 
                    0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, 
                    0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e } };

        public const Int32 CAST5_BLOCK_SIZE = 8; //64 bits
        public const Int32 CAST5_ROUNDS = 16;   //16 rounds
        public const Int32 CAST5_KEY_SIZE = 16; //128 bits

        public const Int32 CAST5_EXT_KEY_SIZE = CAST5_KEY_SIZE * 2;

        private UInt32* Key = null;
        private Int32 ShortKey = 0;

        private Byte* EncryptIV = null;
        private Byte* DecryptIV = null;
        private Int32 EncryptNum = 0;
        private Int32 DecryptNum = 0;

        /// <summary>
        /// Create a new CAST5 instance.
        /// </summary>
        public CAST5()
        {
            Key = (UInt32*)Kernel.malloc(sizeof(UInt32) * CAST5_EXT_KEY_SIZE);
            EncryptIV = (Byte*)Kernel.malloc(CAST5_BLOCK_SIZE);
            DecryptIV = (Byte*)Kernel.malloc(CAST5_BLOCK_SIZE);

            Kernel.memset(Key, 0, sizeof(UInt32) * CAST5_EXT_KEY_SIZE);
            Kernel.memset(EncryptIV, 0, CAST5_BLOCK_SIZE);
            Kernel.memset(DecryptIV, 0, CAST5_BLOCK_SIZE);
        }

        ~CAST5()
        {
            if (Key != null)
                Kernel.free(Key);
            if (EncryptIV != null)
                Kernel.free(EncryptIV);
            if (DecryptIV != null)
                Kernel.free(DecryptIV);
        }

        /// <summary>
        /// Generates a key by using less or 16 octets.
        /// </summary>
        public void GenerateKey(Byte* pKey, Int32 Length)
        {
            Kernel.assert(pKey != null);
            Kernel.assert(Length > 0);

            Kernel.memset(Key, 0, sizeof(UInt32) * CAST5_EXT_KEY_SIZE);
            EncryptNum = 0;
            DecryptNum = 0;

            UInt32* x = stackalloc UInt32[CAST5_KEY_SIZE];
            UInt32* z = stackalloc UInt32[CAST5_KEY_SIZE];
            UInt32* k = stackalloc UInt32[CAST5_EXT_KEY_SIZE];
            UInt32* X = stackalloc UInt32[4];
            UInt32* Z = stackalloc UInt32[4];
            UInt32* K;

            UInt32 l;
            Int32 i;

            for (i = 0; i < CAST5_KEY_SIZE; i++)
                x[i] = 0;

            if (Length > CAST5_KEY_SIZE)
                Length = CAST5_KEY_SIZE;

            for (i = 0; i < Length; i++)
                x[i] = pKey[i];

            if (Length <= 10)
                ShortKey = 1;
            else
                ShortKey = 0;

            K = &k[0];
            X[0] = (((x[0x00] << 24) | (x[0x01] << 16) | (x[0x02] << 8) | x[0x03]) & 0xFFFFFFFF);
            X[1] = (((x[0x04] << 24) | (x[0x05] << 16) | (x[0x06] << 8) | x[0x07]) & 0xFFFFFFFF);
            X[2] = (((x[0x08] << 24) | (x[0x09] << 16) | (x[0x0A] << 8) | x[0x0B]) & 0xFFFFFFFF);
            X[3] = (((x[0x0C] << 24) | (x[0x0D] << 16) | (x[0x0E] << 8) | x[0x0F]) & 0xFFFFFFFF);

            for (; ; )
            {
                l = X[0] ^ SBoxes[4][x[13]] ^ SBoxes[5][x[15]] ^ SBoxes[6][x[12]] ^ SBoxes[7][x[14]] ^ SBoxes[6][x[8]];
                CAST_exp(l, Z, z, 0);
                l = X[2] ^ SBoxes[4][z[0]] ^ SBoxes[5][z[2]] ^ SBoxes[6][z[1]] ^ SBoxes[7][z[3]] ^ SBoxes[7][x[10]];
                CAST_exp(l, Z, z, 4);
                l = X[3] ^ SBoxes[4][z[7]] ^ SBoxes[5][z[6]] ^ SBoxes[6][z[5]] ^ SBoxes[7][z[4]] ^ SBoxes[4][x[9]];
                CAST_exp(l, Z, z, 8);
                l = X[1] ^ SBoxes[4][z[10]] ^ SBoxes[5][z[9]] ^ SBoxes[6][z[11]] ^ SBoxes[7][z[8]] ^ SBoxes[5][x[11]];
                CAST_exp(l, Z, z, 12);

                K[0] = SBoxes[4][z[8]] ^ SBoxes[5][z[9]] ^ SBoxes[6][z[7]] ^ SBoxes[7][z[6]] ^ SBoxes[4][z[2]];
                K[1] = SBoxes[4][z[10]] ^ SBoxes[5][z[11]] ^ SBoxes[6][z[5]] ^ SBoxes[7][z[4]] ^ SBoxes[5][z[6]];
                K[2] = SBoxes[4][z[12]] ^ SBoxes[5][z[13]] ^ SBoxes[6][z[3]] ^ SBoxes[7][z[2]] ^ SBoxes[6][z[9]];
                K[3] = SBoxes[4][z[14]] ^ SBoxes[5][z[15]] ^ SBoxes[6][z[1]] ^ SBoxes[7][z[0]] ^ SBoxes[7][z[12]];

                l = Z[2] ^ SBoxes[4][z[5]] ^ SBoxes[5][z[7]] ^ SBoxes[6][z[4]] ^ SBoxes[7][z[6]] ^ SBoxes[6][z[0]];
                CAST_exp(l, X, x, 0);
                l = Z[0] ^ SBoxes[4][x[0]] ^ SBoxes[5][x[2]] ^ SBoxes[6][x[1]] ^ SBoxes[7][x[3]] ^ SBoxes[7][z[2]];
                CAST_exp(l, X, x, 4);
                l = Z[1] ^ SBoxes[4][x[7]] ^ SBoxes[5][x[6]] ^ SBoxes[6][x[5]] ^ SBoxes[7][x[4]] ^ SBoxes[4][z[1]];
                CAST_exp(l, X, x, 8);
                l = Z[3] ^ SBoxes[4][x[10]] ^ SBoxes[5][x[9]] ^ SBoxes[6][x[11]] ^ SBoxes[7][x[8]] ^ SBoxes[5][z[3]];
                CAST_exp(l, X, x, 12);

                K[4] = SBoxes[4][x[3]] ^ SBoxes[5][x[2]] ^ SBoxes[6][x[12]] ^ SBoxes[7][x[13]] ^ SBoxes[4][x[8]];
                K[5] = SBoxes[4][x[1]] ^ SBoxes[5][x[0]] ^ SBoxes[6][x[14]] ^ SBoxes[7][x[15]] ^ SBoxes[5][x[13]];
                K[6] = SBoxes[4][x[7]] ^ SBoxes[5][x[6]] ^ SBoxes[6][x[8]] ^ SBoxes[7][x[9]] ^ SBoxes[6][x[3]];
                K[7] = SBoxes[4][x[5]] ^ SBoxes[5][x[4]] ^ SBoxes[6][x[10]] ^ SBoxes[7][x[11]] ^ SBoxes[7][x[7]];

                l = X[0] ^ SBoxes[4][x[13]] ^ SBoxes[5][x[15]] ^ SBoxes[6][x[12]] ^ SBoxes[7][x[14]] ^ SBoxes[6][x[8]];
                CAST_exp(l, Z, z, 0);
                l = X[2] ^ SBoxes[4][z[0]] ^ SBoxes[5][z[2]] ^ SBoxes[6][z[1]] ^ SBoxes[7][z[3]] ^ SBoxes[7][x[10]];
                CAST_exp(l, Z, z, 4);
                l = X[3] ^ SBoxes[4][z[7]] ^ SBoxes[5][z[6]] ^ SBoxes[6][z[5]] ^ SBoxes[7][z[4]] ^ SBoxes[4][x[9]];
                CAST_exp(l, Z, z, 8);
                l = X[1] ^ SBoxes[4][z[10]] ^ SBoxes[5][z[9]] ^ SBoxes[6][z[11]] ^ SBoxes[7][z[8]] ^ SBoxes[5][x[11]];
                CAST_exp(l, Z, z, 12);

                K[8] = SBoxes[4][z[3]] ^ SBoxes[5][z[2]] ^ SBoxes[6][z[12]] ^ SBoxes[7][z[13]] ^ SBoxes[4][z[9]];
                K[9] = SBoxes[4][z[1]] ^ SBoxes[5][z[0]] ^ SBoxes[6][z[14]] ^ SBoxes[7][z[15]] ^ SBoxes[5][z[12]];
                K[10] = SBoxes[4][z[7]] ^ SBoxes[5][z[6]] ^ SBoxes[6][z[8]] ^ SBoxes[7][z[9]] ^ SBoxes[6][z[2]];
                K[11] = SBoxes[4][z[5]] ^ SBoxes[5][z[4]] ^ SBoxes[6][z[10]] ^ SBoxes[7][z[11]] ^ SBoxes[7][z[6]];

                l = Z[2] ^ SBoxes[4][z[5]] ^ SBoxes[5][z[7]] ^ SBoxes[6][z[4]] ^ SBoxes[7][z[6]] ^ SBoxes[6][z[0]];
                CAST_exp(l, X, x, 0);
                l = Z[0] ^ SBoxes[4][x[0]] ^ SBoxes[5][x[2]] ^ SBoxes[6][x[1]] ^ SBoxes[7][x[3]] ^ SBoxes[7][z[2]];
                CAST_exp(l, X, x, 4);
                l = Z[1] ^ SBoxes[4][x[7]] ^ SBoxes[5][x[6]] ^ SBoxes[6][x[5]] ^ SBoxes[7][x[4]] ^ SBoxes[4][z[1]];
                CAST_exp(l, X, x, 8);
                l = Z[3] ^ SBoxes[4][x[10]] ^ SBoxes[5][x[9]] ^ SBoxes[6][x[11]] ^ SBoxes[7][x[8]] ^ SBoxes[5][z[3]];
                CAST_exp(l, X, x, 12);

                K[12] = SBoxes[4][x[8]] ^ SBoxes[5][x[9]] ^ SBoxes[6][x[7]] ^ SBoxes[7][x[6]] ^ SBoxes[4][x[3]];
                K[13] = SBoxes[4][x[10]] ^ SBoxes[5][x[11]] ^ SBoxes[6][x[5]] ^ SBoxes[7][x[4]] ^ SBoxes[5][x[7]];
                K[14] = SBoxes[4][x[12]] ^ SBoxes[5][x[13]] ^ SBoxes[6][x[3]] ^ SBoxes[7][x[2]] ^ SBoxes[6][x[8]];
                K[15] = SBoxes[4][x[14]] ^ SBoxes[5][x[15]] ^ SBoxes[6][x[1]] ^ SBoxes[7][x[0]] ^ SBoxes[7][x[13]];

                if (K != k)
                    break;
                K += 16;
            }

            for (i = 0; i < CAST5_KEY_SIZE; i++)
            {
                Key[i * 2] = k[i];
                Key[i * 2 + 1] = ((k[i + CAST5_KEY_SIZE]) + CAST5_KEY_SIZE) & 0x1F;
            }
        }

        private UInt32 rotl(UInt32 Value, UInt32 Count)
        { return (Value << (Int32)(Count % 32)) | (Value >> (Int32)(32 - (Count % 32))); }

        private UInt32 rotr(UInt32 Value, UInt32 Count)
        { return (Value >> (Int32)(Count % 32)) | (Value << (Int32)(32 - (Count % 32))); }

        private void CAST_exp(UInt32 l, UInt32* A, UInt32* a, UInt32 n)
        {
            A[n / 4] = l;
            a[n + 3] = (l) & 0xFF;
            a[n + 2] = (l >> 8) & 0xFF;
            a[n + 1] = (l >> 16) & 0xFF;
            a[n + 0] = (l >> 24) & 0xFF;
        }

        private void E_CAST(UInt32 n, UInt32* key, ref UInt32 t, ref UInt32 L, ref UInt32 R, Int32 OP1, Int32 OP2, Int32 OP3)
        {
            UInt32 a, b, c, d;

            if (OP1 == 0)
                t = (key[n * 2] + R) & 0xFFFFFFFF;
            else if (OP1 == 1)
                t = (key[n * 2] - R) & 0xFFFFFFFF;
            else if (OP1 == 2)
                t = (key[n * 2] ^ R) & 0xFFFFFFFF;

            t = rotl(t, key[n * 2 + 1]);
            a = SBoxes[0][(t >> 8) & 0xFF];
            b = SBoxes[1][(t) & 0xff];
            c = SBoxes[2][(t >> 24) & 0xff];
            d = SBoxes[3][(t >> 16) & 0xff];

            UInt32 ABCD = 0;
            if (OP2 == 0)
                ABCD = ((a + b) & 0xFFFFFFFF);
            else if (OP2 == 1)
                ABCD = ((a - b) & 0xFFFFFFFF);
            else if (OP2 == 2)
                ABCD = ((a ^ b) & 0xFFFFFFFF);

            if (OP3 == 0)
                ABCD = ((ABCD + c) & 0xFFFFFFFF);
            else if (OP3 == 1)
                ABCD = ((ABCD - c) & 0xFFFFFFFF);
            else if (OP3 == 2)
                ABCD = ((ABCD ^ c) & 0xFFFFFFFF);

            if (OP1 == 0)
                ABCD = ((ABCD + d) & 0xFFFFFFFF);
            else if (OP1 == 1)
                ABCD = ((ABCD - d) & 0xFFFFFFFF);
            else if (OP1 == 2)
                ABCD = ((ABCD ^ d) & 0xFFFFFFFF);

            L ^= ABCD;
        }

        /// <summary>
        /// 'Encipher' function of the CAST5 algorithm.
        /// Twelve/Sixteen round encipher of block.
        /// </summary>
        private void Encipher(Byte* pData)
        {
            UInt32 l, r, t = 0;
            UInt32* k;

            k = &(Key[0]);
            l = ((UInt32*)pData)[0];
            r = ((UInt32*)pData)[1];

            Int32 Round = ShortKey == 0 ? CAST5_ROUNDS : CAST5_ROUNDS - 4;

            Int32 OP1 = 0; // +
            Int32 OP2 = 2; // ^
            Int32 OP3 = 1; // -
            for (UInt32 i = 0; i < Round; i++)
            {
                if (i % 2 == 0)
                    E_CAST(i, k, ref t, ref l, ref r, Math.Abs(OP1), Math.Abs(OP2), Math.Abs(OP3));
                else
                    E_CAST(i, k, ref t, ref r, ref l, Math.Abs(OP1), Math.Abs(OP2), Math.Abs(OP3));

                OP1 = (OP1 - 1) & 0x03;
                OP1 = OP1 == 3 ? 2 : OP1;
                OP2 = (OP2 - 1) & 0x03;
                OP2 = OP2 == 3 ? 2 : OP2;
                OP3 = (OP3 - 1) & 0x03;
                OP3 = OP3 == 3 ? 2 : OP3;
            }

            ((UInt32*)pData)[1] = (l & 0xFFFFFFFF);
            ((UInt32*)pData)[0] = (r & 0xFFFFFFFF);
        }

        /// <summary>
        /// Sets the initialization vectors for the encryption and the decryption.
        /// </summary>
        public void SetIVs(Byte* pEncryptIV, Byte* pDecryptIV)
        {
            Kernel.assert(pEncryptIV != null && pDecryptIV != null);

            Kernel.memcpy(EncryptIV, pEncryptIV, CAST5_BLOCK_SIZE);

            //Little-Endian only! Byte-swapping. 
            ((UInt32*)EncryptIV)[0] = (((UInt32*)EncryptIV)[0] & 0xFF000000) >> 24 |
                                       (((UInt32*)EncryptIV)[0] & 0x00FF0000) >> 8 |
                                       (((UInt32*)EncryptIV)[0] & 0x0000FF00) << 8 |
                                       (((UInt32*)EncryptIV)[0] & 0x000000FF) << 24;
            ((UInt32*)EncryptIV)[1] = (((UInt32*)EncryptIV)[1] & 0xFF000000) >> 24 |
                                       (((UInt32*)EncryptIV)[1] & 0x00FF0000) >> 8 |
                                       (((UInt32*)EncryptIV)[1] & 0x0000FF00) << 8 |
                                       (((UInt32*)EncryptIV)[1] & 0x000000FF) << 24;

            Kernel.memcpy(DecryptIV, pDecryptIV, CAST5_BLOCK_SIZE);

            //Little-Endian only! Byte-swapping. 
            ((UInt32*)DecryptIV)[0] = (((UInt32*)DecryptIV)[0] & 0xFF000000) >> 24 |
                                       (((UInt32*)DecryptIV)[0] & 0x00FF0000) >> 8 |
                                       (((UInt32*)DecryptIV)[0] & 0x0000FF00) << 8 |
                                       (((UInt32*)DecryptIV)[0] & 0x000000FF) << 24;
            ((UInt32*)DecryptIV)[1] = (((UInt32*)DecryptIV)[1] & 0xFF000000) >> 24 |
                                       (((UInt32*)DecryptIV)[1] & 0x00FF0000) >> 8 |
                                       (((UInt32*)DecryptIV)[1] & 0x0000FF00) << 8 |
                                       (((UInt32*)DecryptIV)[1] & 0x000000FF) << 24;
        }

        /// <summary>
        /// Encrypts data with the CAST5 algorithm using the Cipher Feedback method.
        /// </summary>
        public void Encrypt(Byte* pBuf, Int32 Length)
        {
            Kernel.assert(pBuf != null);
            Kernel.assert(Length > 0);

            Byte* pBlock = stackalloc Byte[CAST5_BLOCK_SIZE];
            Kernel.memcpy(pBlock, EncryptIV, CAST5_BLOCK_SIZE);

            while (Length-- > 0)
            {
                if (EncryptNum == 0)
                    Encipher(pBlock);

                Byte val = (Byte)(*pBuf ^ pBlock[EncryptNum ^ 3]);

                pBlock[EncryptNum ^ 3] = val;
                *(pBuf++) = val;

                EncryptNum = (EncryptNum + 1) & (CAST5_BLOCK_SIZE - 1);
            }
            Kernel.memcpy(EncryptIV, pBlock, CAST5_BLOCK_SIZE);
        }

        /// <summary>
        /// Decrypts data with the CAST5 algorithm using the Cipher Feedback method.
        /// </summary>
        public void Decrypt(Byte* pBuf, Int32 Length)
        {
            Kernel.assert(pBuf != null);
            Kernel.assert(Length > 0);

            Byte* pBlock = stackalloc Byte[CAST5_BLOCK_SIZE];
            Kernel.memcpy(pBlock, DecryptIV, CAST5_BLOCK_SIZE);

            while (Length-- > 0)
            {
                if (DecryptNum == 0)
                    Encipher(pBlock);

                Byte val = (Byte)(*pBuf ^ pBlock[DecryptNum ^ 3]);
                Byte tmp = *pBuf;

                pBlock[DecryptNum ^ 3] = tmp;
                *(pBuf++) = val;

                DecryptNum = (DecryptNum + 1) & (CAST5_BLOCK_SIZE - 1);
            }
            Kernel.memcpy(DecryptIV, pBlock, CAST5_BLOCK_SIZE);
        }

        /// <summary>
        /// Generates a key by using less or 16 octets from the CP-1252 string.
        /// </summary>
        public void GenerateKey(String BufKey)
        {
            Kernel.assert(BufKey != null);
            Kernel.assert(BufKey.Length > 0);

            Byte* pBufKey = BufKey.ToPointer();
            Int32 Length = Kernel.strlen(pBufKey);
            GenerateKey(pBufKey, Length);
        }

        /// <summary>
        /// Generates a key by using less or 16 octets.
        /// </summary>
        public void GenerateKey(Byte[] BufKey)
        {
            Kernel.assert(BufKey != null);
            Kernel.assert(BufKey.Length > 0);

            fixed (Byte* pBufKey = BufKey)
                GenerateKey(pBufKey, BufKey.Length);
        }

        /// <summary>
        /// Sets the initialization vectors for the encryption and the decryption.
        /// </summary>
        public void SetIVs(Byte[] EncryptIV, Byte[] DecryptIV)
        {
            Kernel.assert(EncryptIV != null && DecryptIV != null);
            Kernel.assert(EncryptIV.Length == CAST5_BLOCK_SIZE && DecryptIV.Length == CAST5_BLOCK_SIZE);

            fixed (Byte* pEncryptIV = EncryptIV)
            fixed (Byte* pDecryptIV = DecryptIV)
                SetIVs(pEncryptIV, pDecryptIV);
        }

        /// <summary>
        /// Encrypts data with the CAST5 algorithm using the Cipher Feedback method.
        /// </summary>
        public void Encrypt(ref Byte[] Buf)
        {
            Kernel.assert(Buf != null);
            Kernel.assert(Buf.Length > 0);

            fixed (Byte* pBuf = Buf)
                Encrypt(pBuf, Buf.Length);
        }

        /// <summary>
        /// Decrypts data with the CAST5 algorithm using the Cipher Feedback method.
        /// </summary>
        public void Decrypt(ref Byte[] Buf)
        {
            Kernel.assert(Buf != null);
            Kernel.assert(Buf.Length > 0);

            fixed (Byte* pBuf = Buf)
                Decrypt(pBuf, Buf.Length);
        }
    }
}

// * ************************************************************
// * * END:                                            cast5.cs *
// * ************************************************************



CptSky is offline  
Thanks
6 Users
Old 04/01/2012, 02:39   #2
 
elite*gold: 0
Join Date: Jun 2009
Posts: 378
Received Thanks: 139
Looks very nice, organized and detailed. First post


ImFlamedCOD is offline  
Old 04/01/2012, 11:45   #3
 
elite*gold: 0
Join Date: Jun 2009
Posts: 372
Received Thanks: 53
lemme act lke i understand any of it and say wow this looks very nice
chickmagnet is offline  
Old 04/01/2012, 11:56   #4
 
elite*gold: 0
Join Date: Jul 2006
Posts: 1,931
Received Thanks: 662
Not to be rude or anything, but if you took the work to do this in base C# instead of loading DLLs, you could eliminate the Windows specific code like memcpy to make it run on Mono as well. Nice work nonetheless!


KraHen is offline  
Old 04/01/2012, 16:32   #5

 
elite*gold: 0
Join Date: Jan 2008
Posts: 1,394
Received Thanks: 1,055
Quote:
Originally Posted by KraHen View Post
Not to be rude or anything, but if you took the work to do this in base C# instead of loading DLLs, you could eliminate the Windows specific code like memcpy to make it run on Mono as well. Nice work nonetheless!
The Kernel class contains bunch of C functions like memcpy, but in pure C#. It will work on Mono without any modification. There is no WinAPI call.
CptSky is offline  
Old 04/01/2012, 22:05   #6
 
elite*gold: 0
Join Date: Jul 2006
Posts: 1,931
Received Thanks: 662
Lol, I should`ve expected that.
KraHen is offline  
Old 04/03/2012, 01:50   #7
 
elite*gold: 12
Join Date: Jul 2011
Posts: 7,015
Received Thanks: 3,368
Here's a C++ implementation of DH if you want to make a C# implementation for the project.
This might be helpful too:
Attached Files
File Type: rar dh.rar (3.4 KB, 17 views)
Spirited is offline  
Old 04/03/2012, 05:04   #8

 
elite*gold: 0
Join Date: Jan 2008
Posts: 1,394
Received Thanks: 1,055
Quote:
Originally Posted by Fаng View Post
Here's a C++ implementation of DH if you want to make a C# implementation for the project.
This might be helpful too:
I already did one and it doesn't require any implementation to understand this simple key exchange I just never post it separately, but it's in the CO2_CORE_DLL. But thanks anyway for the intention.
CptSky is offline  
Old 04/03/2012, 06:04   #9
 
elite*gold: 12
Join Date: Jul 2011
Posts: 7,015
Received Thanks: 3,368
Quote:
Originally Posted by CptSky View Post
I already did one and it doesn't require any implementation to understand this simple key exchange I just never post it separately, but it's in the CO2_CORE_DLL. But thanks anyway for the intention.
Ah. Well... let's see what else I can think of.... Have you done the 5176 - 5531 password cipher? Otherwise... I think you have most of everything down up to patch 5527.
Spirited is offline  
Old 04/04/2012, 23:43   #10

 
elite*gold: 0
Join Date: Jan 2008
Posts: 1,394
Received Thanks: 1,055
Quote:
Originally Posted by Fаng View Post
Ah. Well... let's see what else I can think of.... Have you done the 5176 - 5531 password cipher? Otherwise... I think you have most of everything down up to patch 5527.
Maybe I'll do it at some point.
CptSky is offline  
Old 04/07/2012, 21:47   #11

 
elite*gold: 0
Join Date: Jan 2008
Posts: 1,394
Received Thanks: 1,055
Everyone that is using this implementation should update with the new version! There was a memory leak (some variable weren't deleted in the key generation routine). I updated the post and the CO2_CORE_DLL.

I profited of the moment to change some things. I tried to reduce the number of dynamic allocation by forcing the use of the stack. (Unsafe in C#) I will not update other topics, so, you may take a look to the CO2_CORE_DLL if you also use some others implementations.

Sorry for the memory problem.


CptSky is offline  
Thanks
1 User
Reply

Tags
cast-128, cast5, cfb64, co2, openssl



« [Release]Table Converter Open Source | [Release] Socket Sample »

Similar Threads
Frage zu Cast-Quest - Cast Rüssi Schurkin 777
11/17/2012 - Last Chaos Private Server - 17 Replies
Huhu wollte mal wissen wo man die Quest für die Casting sachen annimmt und bei welchen Mops man die droppt ... mit oder ohne rolle mit oder ohne samen? xD gibtn thanks danke gute nacht
-170-171 Assasine ExtremLC | 120% Cast-147+12 Cast Helm~~H0T~~
10/25/2011 - Last Chaos Trading - 4 Replies
Verkaufe hier meine Assasine / Fullskilled / mit einen der BESTEN Equip von Assa auf den Server! Lvl 170-171 120% Cast Waffen: 165+15 Daggz 40% 165+11 Armi / Skillbug 40% Rüstung:
Cast128/cast5 encryption
09/20/2011 - CO2 Programming - 3 Replies
Maybe some1 can explain how it works ? bcouse wih my cast5 cipher i can decrypt serverdh packet but can decrypt client dh packet. public byte Decrypt(byte buffer) { //System.out.println(Arrays.toString(Security.getProviders())); cii =...
[ExtremLC] [S] min. 10kkk+ Gold gebe 165 Hunter 50% Cast ** HOT** Cast
08/27/2011 - Last Chaos Trading - 1 Replies
Equip. 146+5 Hose 165 Helm 145 Handis 165+4 xBoW 85+15 y3 xBoW
*##WTB CAST SCHMUCK ODER CAST RüSTUNG Knight 85!Eternia##*
12/26/2010 - Last Chaos Trading - 5 Replies
Huhu LC Zocker.. Ich bin auf der Suche nach Cast Schmuck(Skill Cooldown) oder Ritter Rüstungsteile die Cast besitzen. MUSS EVA Siegeln haben! 85-87er! oder 105er oder 115er aber b6e ist pflicht^^ Natürlich auf Eternia Games.. Geplusst...



All times are GMT +2. The time now is 06:55.


Powered by vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2018 elitepvpers All Rights Reserved.