Annotation of truecrypt/crypto/cast.c, revision 1.1

1.1     ! root        1: // cast.cpp - written and placed in the public domain by Wei Dai and Leonard Janke
        !             2: // based on Steve Reid's public domain cast.c
        !             3: 
        !             4: /* Adapted for TrueCrypt by the TrueCrypt Foundation */
        !             5: 
        !             6: #include <memory.h>
        !             7: #include "Common/Tcdefs.h"
        !             8: #include "Common/Endian.h"
        !             9: #include "Cast.h"
        !            10: 
        !            11: #define word32 unsigned __int32
        !            12: #define byte unsigned __int8
        !            13: #define GETBYTE(x, y) (unsigned int)(byte)((x)>>(8*(y)))
        !            14: 
        !            15: /* Macros to access 8-bit bytes out of a 32-bit word */
        !            16: #define U8a(x) GETBYTE(x,3)
        !            17: #define U8b(x) GETBYTE(x,2)
        !            18: #define U8c(x) GETBYTE(x,1)
        !            19: #define U8d(x) GETBYTE(x,0)
        !            20: 
        !            21: static word32 rotlVariable (word32 x, unsigned int y)
        !            22: {
        !            23:        return (word32)((x<<y) | (x>>(sizeof(word32)*8-y)));
        !            24: }
        !            25: 
        !            26: 
        !            27: // CAST S-boxes
        !            28: 
        !            29: static const word32 S[8][256] = {
        !            30: {
        !            31:        0x30FB40D4UL, 0x9FA0FF0BUL, 0x6BECCD2FUL, 0x3F258C7AUL,
        !            32:        0x1E213F2FUL, 0x9C004DD3UL, 0x6003E540UL, 0xCF9FC949UL,
        !            33:        0xBFD4AF27UL, 0x88BBBDB5UL, 0xE2034090UL, 0x98D09675UL,
        !            34:        0x6E63A0E0UL, 0x15C361D2UL, 0xC2E7661DUL, 0x22D4FF8EUL,
        !            35:        0x28683B6FUL, 0xC07FD059UL, 0xFF2379C8UL, 0x775F50E2UL,
        !            36:        0x43C340D3UL, 0xDF2F8656UL, 0x887CA41AUL, 0xA2D2BD2DUL,
        !            37:        0xA1C9E0D6UL, 0x346C4819UL, 0x61B76D87UL, 0x22540F2FUL,
        !            38:        0x2ABE32E1UL, 0xAA54166BUL, 0x22568E3AUL, 0xA2D341D0UL,
        !            39:        0x66DB40C8UL, 0xA784392FUL, 0x004DFF2FUL, 0x2DB9D2DEUL,
        !            40:        0x97943FACUL, 0x4A97C1D8UL, 0x527644B7UL, 0xB5F437A7UL,
        !            41:        0xB82CBAEFUL, 0xD751D159UL, 0x6FF7F0EDUL, 0x5A097A1FUL,
        !            42:        0x827B68D0UL, 0x90ECF52EUL, 0x22B0C054UL, 0xBC8E5935UL,
        !            43:        0x4B6D2F7FUL, 0x50BB64A2UL, 0xD2664910UL, 0xBEE5812DUL,
        !            44:        0xB7332290UL, 0xE93B159FUL, 0xB48EE411UL, 0x4BFF345DUL,
        !            45:        0xFD45C240UL, 0xAD31973FUL, 0xC4F6D02EUL, 0x55FC8165UL,
        !            46:        0xD5B1CAADUL, 0xA1AC2DAEUL, 0xA2D4B76DUL, 0xC19B0C50UL,
        !            47:        0x882240F2UL, 0x0C6E4F38UL, 0xA4E4BFD7UL, 0x4F5BA272UL,
        !            48:        0x564C1D2FUL, 0xC59C5319UL, 0xB949E354UL, 0xB04669FEUL,
        !            49:        0xB1B6AB8AUL, 0xC71358DDUL, 0x6385C545UL, 0x110F935DUL,
        !            50:        0x57538AD5UL, 0x6A390493UL, 0xE63D37E0UL, 0x2A54F6B3UL,
        !            51:        0x3A787D5FUL, 0x6276A0B5UL, 0x19A6FCDFUL, 0x7A42206AUL,
        !            52:        0x29F9D4D5UL, 0xF61B1891UL, 0xBB72275EUL, 0xAA508167UL,
        !            53:        0x38901091UL, 0xC6B505EBUL, 0x84C7CB8CUL, 0x2AD75A0FUL,
        !            54:        0x874A1427UL, 0xA2D1936BUL, 0x2AD286AFUL, 0xAA56D291UL,
        !            55:        0xD7894360UL, 0x425C750DUL, 0x93B39E26UL, 0x187184C9UL,
        !            56:        0x6C00B32DUL, 0x73E2BB14UL, 0xA0BEBC3CUL, 0x54623779UL,
        !            57:        0x64459EABUL, 0x3F328B82UL, 0x7718CF82UL, 0x59A2CEA6UL,
        !            58:        0x04EE002EUL, 0x89FE78E6UL, 0x3FAB0950UL, 0x325FF6C2UL,
        !            59:        0x81383F05UL, 0x6963C5C8UL, 0x76CB5AD6UL, 0xD49974C9UL,
        !            60:        0xCA180DCFUL, 0x380782D5UL, 0xC7FA5CF6UL, 0x8AC31511UL,
        !            61:        0x35E79E13UL, 0x47DA91D0UL, 0xF40F9086UL, 0xA7E2419EUL,
        !            62:        0x31366241UL, 0x051EF495UL, 0xAA573B04UL, 0x4A805D8DUL,
        !            63:        0x548300D0UL, 0x00322A3CUL, 0xBF64CDDFUL, 0xBA57A68EUL,
        !            64:        0x75C6372BUL, 0x50AFD341UL, 0xA7C13275UL, 0x915A0BF5UL,
        !            65:        0x6B54BFABUL, 0x2B0B1426UL, 0xAB4CC9D7UL, 0x449CCD82UL,
        !            66:        0xF7FBF265UL, 0xAB85C5F3UL, 0x1B55DB94UL, 0xAAD4E324UL,
        !            67:        0xCFA4BD3FUL, 0x2DEAA3E2UL, 0x9E204D02UL, 0xC8BD25ACUL,
        !            68:        0xEADF55B3UL, 0xD5BD9E98UL, 0xE31231B2UL, 0x2AD5AD6CUL,
        !            69:        0x954329DEUL, 0xADBE4528UL, 0xD8710F69UL, 0xAA51C90FUL,
        !            70:        0xAA786BF6UL, 0x22513F1EUL, 0xAA51A79BUL, 0x2AD344CCUL,
        !            71:        0x7B5A41F0UL, 0xD37CFBADUL, 0x1B069505UL, 0x41ECE491UL,
        !            72:        0xB4C332E6UL, 0x032268D4UL, 0xC9600ACCUL, 0xCE387E6DUL,
        !            73:        0xBF6BB16CUL, 0x6A70FB78UL, 0x0D03D9C9UL, 0xD4DF39DEUL,
        !            74:        0xE01063DAUL, 0x4736F464UL, 0x5AD328D8UL, 0xB347CC96UL,
        !            75:        0x75BB0FC3UL, 0x98511BFBUL, 0x4FFBCC35UL, 0xB58BCF6AUL,
        !            76:        0xE11F0ABCUL, 0xBFC5FE4AUL, 0xA70AEC10UL, 0xAC39570AUL,
        !            77:        0x3F04442FUL, 0x6188B153UL, 0xE0397A2EUL, 0x5727CB79UL,
        !            78:        0x9CEB418FUL, 0x1CACD68DUL, 0x2AD37C96UL, 0x0175CB9DUL,
        !            79:        0xC69DFF09UL, 0xC75B65F0UL, 0xD9DB40D8UL, 0xEC0E7779UL,
        !            80:        0x4744EAD4UL, 0xB11C3274UL, 0xDD24CB9EUL, 0x7E1C54BDUL,
        !            81:        0xF01144F9UL, 0xD2240EB1UL, 0x9675B3FDUL, 0xA3AC3755UL,
        !            82:        0xD47C27AFUL, 0x51C85F4DUL, 0x56907596UL, 0xA5BB15E6UL,
        !            83:        0x580304F0UL, 0xCA042CF1UL, 0x011A37EAUL, 0x8DBFAADBUL,
        !            84:        0x35BA3E4AUL, 0x3526FFA0UL, 0xC37B4D09UL, 0xBC306ED9UL,
        !            85:        0x98A52666UL, 0x5648F725UL, 0xFF5E569DUL, 0x0CED63D0UL,
        !            86:        0x7C63B2CFUL, 0x700B45E1UL, 0xD5EA50F1UL, 0x85A92872UL,
        !            87:        0xAF1FBDA7UL, 0xD4234870UL, 0xA7870BF3UL, 0x2D3B4D79UL,
        !            88:        0x42E04198UL, 0x0CD0EDE7UL, 0x26470DB8UL, 0xF881814CUL,
        !            89:        0x474D6AD7UL, 0x7C0C5E5CUL, 0xD1231959UL, 0x381B7298UL,
        !            90:        0xF5D2F4DBUL, 0xAB838653UL, 0x6E2F1E23UL, 0x83719C9EUL,
        !            91:        0xBD91E046UL, 0x9A56456EUL, 0xDC39200CUL, 0x20C8C571UL,
        !            92:        0x962BDA1CUL, 0xE1E696FFUL, 0xB141AB08UL, 0x7CCA89B9UL,
        !            93:        0x1A69E783UL, 0x02CC4843UL, 0xA2F7C579UL, 0x429EF47DUL,
        !            94:        0x427B169CUL, 0x5AC9F049UL, 0xDD8F0F00UL, 0x5C8165BFUL
        !            95: },
        !            96: 
        !            97: {
        !            98:        0x1F201094UL, 0xEF0BA75BUL, 0x69E3CF7EUL, 0x393F4380UL,
        !            99:        0xFE61CF7AUL, 0xEEC5207AUL, 0x55889C94UL, 0x72FC0651UL,
        !           100:        0xADA7EF79UL, 0x4E1D7235UL, 0xD55A63CEUL, 0xDE0436BAUL,
        !           101:        0x99C430EFUL, 0x5F0C0794UL, 0x18DCDB7DUL, 0xA1D6EFF3UL,
        !           102:        0xA0B52F7BUL, 0x59E83605UL, 0xEE15B094UL, 0xE9FFD909UL,
        !           103:        0xDC440086UL, 0xEF944459UL, 0xBA83CCB3UL, 0xE0C3CDFBUL,
        !           104:        0xD1DA4181UL, 0x3B092AB1UL, 0xF997F1C1UL, 0xA5E6CF7BUL,
        !           105:        0x01420DDBUL, 0xE4E7EF5BUL, 0x25A1FF41UL, 0xE180F806UL,
        !           106:        0x1FC41080UL, 0x179BEE7AUL, 0xD37AC6A9UL, 0xFE5830A4UL,
        !           107:        0x98DE8B7FUL, 0x77E83F4EUL, 0x79929269UL, 0x24FA9F7BUL,
        !           108:        0xE113C85BUL, 0xACC40083UL, 0xD7503525UL, 0xF7EA615FUL,
        !           109:        0x62143154UL, 0x0D554B63UL, 0x5D681121UL, 0xC866C359UL,
        !           110:        0x3D63CF73UL, 0xCEE234C0UL, 0xD4D87E87UL, 0x5C672B21UL,
        !           111:        0x071F6181UL, 0x39F7627FUL, 0x361E3084UL, 0xE4EB573BUL,
        !           112:        0x602F64A4UL, 0xD63ACD9CUL, 0x1BBC4635UL, 0x9E81032DUL,
        !           113:        0x2701F50CUL, 0x99847AB4UL, 0xA0E3DF79UL, 0xBA6CF38CUL,
        !           114:        0x10843094UL, 0x2537A95EUL, 0xF46F6FFEUL, 0xA1FF3B1FUL,
        !           115:        0x208CFB6AUL, 0x8F458C74UL, 0xD9E0A227UL, 0x4EC73A34UL,
        !           116:        0xFC884F69UL, 0x3E4DE8DFUL, 0xEF0E0088UL, 0x3559648DUL,
        !           117:        0x8A45388CUL, 0x1D804366UL, 0x721D9BFDUL, 0xA58684BBUL,
        !           118:        0xE8256333UL, 0x844E8212UL, 0x128D8098UL, 0xFED33FB4UL,
        !           119:        0xCE280AE1UL, 0x27E19BA5UL, 0xD5A6C252UL, 0xE49754BDUL,
        !           120:        0xC5D655DDUL, 0xEB667064UL, 0x77840B4DUL, 0xA1B6A801UL,
        !           121:        0x84DB26A9UL, 0xE0B56714UL, 0x21F043B7UL, 0xE5D05860UL,
        !           122:        0x54F03084UL, 0x066FF472UL, 0xA31AA153UL, 0xDADC4755UL,
        !           123:        0xB5625DBFUL, 0x68561BE6UL, 0x83CA6B94UL, 0x2D6ED23BUL,
        !           124:        0xECCF01DBUL, 0xA6D3D0BAUL, 0xB6803D5CUL, 0xAF77A709UL,
        !           125:        0x33B4A34CUL, 0x397BC8D6UL, 0x5EE22B95UL, 0x5F0E5304UL,
        !           126:        0x81ED6F61UL, 0x20E74364UL, 0xB45E1378UL, 0xDE18639BUL,
        !           127:        0x881CA122UL, 0xB96726D1UL, 0x8049A7E8UL, 0x22B7DA7BUL,
        !           128:        0x5E552D25UL, 0x5272D237UL, 0x79D2951CUL, 0xC60D894CUL,
        !           129:        0x488CB402UL, 0x1BA4FE5BUL, 0xA4B09F6BUL, 0x1CA815CFUL,
        !           130:        0xA20C3005UL, 0x8871DF63UL, 0xB9DE2FCBUL, 0x0CC6C9E9UL,
        !           131:        0x0BEEFF53UL, 0xE3214517UL, 0xB4542835UL, 0x9F63293CUL,
        !           132:        0xEE41E729UL, 0x6E1D2D7CUL, 0x50045286UL, 0x1E6685F3UL,
        !           133:        0xF33401C6UL, 0x30A22C95UL, 0x31A70850UL, 0x60930F13UL,
        !           134:        0x73F98417UL, 0xA1269859UL, 0xEC645C44UL, 0x52C877A9UL,
        !           135:        0xCDFF33A6UL, 0xA02B1741UL, 0x7CBAD9A2UL, 0x2180036FUL,
        !           136:        0x50D99C08UL, 0xCB3F4861UL, 0xC26BD765UL, 0x64A3F6ABUL,
        !           137:        0x80342676UL, 0x25A75E7BUL, 0xE4E6D1FCUL, 0x20C710E6UL,
        !           138:        0xCDF0B680UL, 0x17844D3BUL, 0x31EEF84DUL, 0x7E0824E4UL,
        !           139:        0x2CCB49EBUL, 0x846A3BAEUL, 0x8FF77888UL, 0xEE5D60F6UL,
        !           140:        0x7AF75673UL, 0x2FDD5CDBUL, 0xA11631C1UL, 0x30F66F43UL,
        !           141:        0xB3FAEC54UL, 0x157FD7FAUL, 0xEF8579CCUL, 0xD152DE58UL,
        !           142:        0xDB2FFD5EUL, 0x8F32CE19UL, 0x306AF97AUL, 0x02F03EF8UL,
        !           143:        0x99319AD5UL, 0xC242FA0FUL, 0xA7E3EBB0UL, 0xC68E4906UL,
        !           144:        0xB8DA230CUL, 0x80823028UL, 0xDCDEF3C8UL, 0xD35FB171UL,
        !           145:        0x088A1BC8UL, 0xBEC0C560UL, 0x61A3C9E8UL, 0xBCA8F54DUL,
        !           146:        0xC72FEFFAUL, 0x22822E99UL, 0x82C570B4UL, 0xD8D94E89UL,
        !           147:        0x8B1C34BCUL, 0x301E16E6UL, 0x273BE979UL, 0xB0FFEAA6UL,
        !           148:        0x61D9B8C6UL, 0x00B24869UL, 0xB7FFCE3FUL, 0x08DC283BUL,
        !           149:        0x43DAF65AUL, 0xF7E19798UL, 0x7619B72FUL, 0x8F1C9BA4UL,
        !           150:        0xDC8637A0UL, 0x16A7D3B1UL, 0x9FC393B7UL, 0xA7136EEBUL,
        !           151:        0xC6BCC63EUL, 0x1A513742UL, 0xEF6828BCUL, 0x520365D6UL,
        !           152:        0x2D6A77ABUL, 0x3527ED4BUL, 0x821FD216UL, 0x095C6E2EUL,
        !           153:        0xDB92F2FBUL, 0x5EEA29CBUL, 0x145892F5UL, 0x91584F7FUL,
        !           154:        0x5483697BUL, 0x2667A8CCUL, 0x85196048UL, 0x8C4BACEAUL,
        !           155:        0x833860D4UL, 0x0D23E0F9UL, 0x6C387E8AUL, 0x0AE6D249UL,
        !           156:        0xB284600CUL, 0xD835731DUL, 0xDCB1C647UL, 0xAC4C56EAUL,
        !           157:        0x3EBD81B3UL, 0x230EABB0UL, 0x6438BC87UL, 0xF0B5B1FAUL,
        !           158:        0x8F5EA2B3UL, 0xFC184642UL, 0x0A036B7AUL, 0x4FB089BDUL,
        !           159:        0x649DA589UL, 0xA345415EUL, 0x5C038323UL, 0x3E5D3BB9UL,
        !           160:        0x43D79572UL, 0x7E6DD07CUL, 0x06DFDF1EUL, 0x6C6CC4EFUL,
        !           161:        0x7160A539UL, 0x73BFBE70UL, 0x83877605UL, 0x4523ECF1UL
        !           162: },
        !           163: 
        !           164: {
        !           165:        0x8DEFC240UL, 0x25FA5D9FUL, 0xEB903DBFUL, 0xE810C907UL,
        !           166:        0x47607FFFUL, 0x369FE44BUL, 0x8C1FC644UL, 0xAECECA90UL,
        !           167:        0xBEB1F9BFUL, 0xEEFBCAEAUL, 0xE8CF1950UL, 0x51DF07AEUL,
        !           168:        0x920E8806UL, 0xF0AD0548UL, 0xE13C8D83UL, 0x927010D5UL,
        !           169:        0x11107D9FUL, 0x07647DB9UL, 0xB2E3E4D4UL, 0x3D4F285EUL,
        !           170:        0xB9AFA820UL, 0xFADE82E0UL, 0xA067268BUL, 0x8272792EUL,
        !           171:        0x553FB2C0UL, 0x489AE22BUL, 0xD4EF9794UL, 0x125E3FBCUL,
        !           172:        0x21FFFCEEUL, 0x825B1BFDUL, 0x9255C5EDUL, 0x1257A240UL,
        !           173:        0x4E1A8302UL, 0xBAE07FFFUL, 0x528246E7UL, 0x8E57140EUL,
        !           174:        0x3373F7BFUL, 0x8C9F8188UL, 0xA6FC4EE8UL, 0xC982B5A5UL,
        !           175:        0xA8C01DB7UL, 0x579FC264UL, 0x67094F31UL, 0xF2BD3F5FUL,
        !           176:        0x40FFF7C1UL, 0x1FB78DFCUL, 0x8E6BD2C1UL, 0x437BE59BUL,
        !           177:        0x99B03DBFUL, 0xB5DBC64BUL, 0x638DC0E6UL, 0x55819D99UL,
        !           178:        0xA197C81CUL, 0x4A012D6EUL, 0xC5884A28UL, 0xCCC36F71UL,
        !           179:        0xB843C213UL, 0x6C0743F1UL, 0x8309893CUL, 0x0FEDDD5FUL,
        !           180:        0x2F7FE850UL, 0xD7C07F7EUL, 0x02507FBFUL, 0x5AFB9A04UL,
        !           181:        0xA747D2D0UL, 0x1651192EUL, 0xAF70BF3EUL, 0x58C31380UL,
        !           182:        0x5F98302EUL, 0x727CC3C4UL, 0x0A0FB402UL, 0x0F7FEF82UL,
        !           183:        0x8C96FDADUL, 0x5D2C2AAEUL, 0x8EE99A49UL, 0x50DA88B8UL,
        !           184:        0x8427F4A0UL, 0x1EAC5790UL, 0x796FB449UL, 0x8252DC15UL,
        !           185:        0xEFBD7D9BUL, 0xA672597DUL, 0xADA840D8UL, 0x45F54504UL,
        !           186:        0xFA5D7403UL, 0xE83EC305UL, 0x4F91751AUL, 0x925669C2UL,
        !           187:        0x23EFE941UL, 0xA903F12EUL, 0x60270DF2UL, 0x0276E4B6UL,
        !           188:        0x94FD6574UL, 0x927985B2UL, 0x8276DBCBUL, 0x02778176UL,
        !           189:        0xF8AF918DUL, 0x4E48F79EUL, 0x8F616DDFUL, 0xE29D840EUL,
        !           190:        0x842F7D83UL, 0x340CE5C8UL, 0x96BBB682UL, 0x93B4B148UL,
        !           191:        0xEF303CABUL, 0x984FAF28UL, 0x779FAF9BUL, 0x92DC560DUL,
        !           192:        0x224D1E20UL, 0x8437AA88UL, 0x7D29DC96UL, 0x2756D3DCUL,
        !           193:        0x8B907CEEUL, 0xB51FD240UL, 0xE7C07CE3UL, 0xE566B4A1UL,
        !           194:        0xC3E9615EUL, 0x3CF8209DUL, 0x6094D1E3UL, 0xCD9CA341UL,
        !           195:        0x5C76460EUL, 0x00EA983BUL, 0xD4D67881UL, 0xFD47572CUL,
        !           196:        0xF76CEDD9UL, 0xBDA8229CUL, 0x127DADAAUL, 0x438A074EUL,
        !           197:        0x1F97C090UL, 0x081BDB8AUL, 0x93A07EBEUL, 0xB938CA15UL,
        !           198:        0x97B03CFFUL, 0x3DC2C0F8UL, 0x8D1AB2ECUL, 0x64380E51UL,
        !           199:        0x68CC7BFBUL, 0xD90F2788UL, 0x12490181UL, 0x5DE5FFD4UL,
        !           200:        0xDD7EF86AUL, 0x76A2E214UL, 0xB9A40368UL, 0x925D958FUL,
        !           201:        0x4B39FFFAUL, 0xBA39AEE9UL, 0xA4FFD30BUL, 0xFAF7933BUL,
        !           202:        0x6D498623UL, 0x193CBCFAUL, 0x27627545UL, 0x825CF47AUL,
        !           203:        0x61BD8BA0UL, 0xD11E42D1UL, 0xCEAD04F4UL, 0x127EA392UL,
        !           204:        0x10428DB7UL, 0x8272A972UL, 0x9270C4A8UL, 0x127DE50BUL,
        !           205:        0x285BA1C8UL, 0x3C62F44FUL, 0x35C0EAA5UL, 0xE805D231UL,
        !           206:        0x428929FBUL, 0xB4FCDF82UL, 0x4FB66A53UL, 0x0E7DC15BUL,
        !           207:        0x1F081FABUL, 0x108618AEUL, 0xFCFD086DUL, 0xF9FF2889UL,
        !           208:        0x694BCC11UL, 0x236A5CAEUL, 0x12DECA4DUL, 0x2C3F8CC5UL,
        !           209:        0xD2D02DFEUL, 0xF8EF5896UL, 0xE4CF52DAUL, 0x95155B67UL,
        !           210:        0x494A488CUL, 0xB9B6A80CUL, 0x5C8F82BCUL, 0x89D36B45UL,
        !           211:        0x3A609437UL, 0xEC00C9A9UL, 0x44715253UL, 0x0A874B49UL,
        !           212:        0xD773BC40UL, 0x7C34671CUL, 0x02717EF6UL, 0x4FEB5536UL,
        !           213:        0xA2D02FFFUL, 0xD2BF60C4UL, 0xD43F03C0UL, 0x50B4EF6DUL,
        !           214:        0x07478CD1UL, 0x006E1888UL, 0xA2E53F55UL, 0xB9E6D4BCUL,
        !           215:        0xA2048016UL, 0x97573833UL, 0xD7207D67UL, 0xDE0F8F3DUL,
        !           216:        0x72F87B33UL, 0xABCC4F33UL, 0x7688C55DUL, 0x7B00A6B0UL,
        !           217:        0x947B0001UL, 0x570075D2UL, 0xF9BB88F8UL, 0x8942019EUL,
        !           218:        0x4264A5FFUL, 0x856302E0UL, 0x72DBD92BUL, 0xEE971B69UL,
        !           219:        0x6EA22FDEUL, 0x5F08AE2BUL, 0xAF7A616DUL, 0xE5C98767UL,
        !           220:        0xCF1FEBD2UL, 0x61EFC8C2UL, 0xF1AC2571UL, 0xCC8239C2UL,
        !           221:        0x67214CB8UL, 0xB1E583D1UL, 0xB7DC3E62UL, 0x7F10BDCEUL,
        !           222:        0xF90A5C38UL, 0x0FF0443DUL, 0x606E6DC6UL, 0x60543A49UL,
        !           223:        0x5727C148UL, 0x2BE98A1DUL, 0x8AB41738UL, 0x20E1BE24UL,
        !           224:        0xAF96DA0FUL, 0x68458425UL, 0x99833BE5UL, 0x600D457DUL,
        !           225:        0x282F9350UL, 0x8334B362UL, 0xD91D1120UL, 0x2B6D8DA0UL,
        !           226:        0x642B1E31UL, 0x9C305A00UL, 0x52BCE688UL, 0x1B03588AUL,
        !           227:        0xF7BAEFD5UL, 0x4142ED9CUL, 0xA4315C11UL, 0x83323EC5UL,
        !           228:        0xDFEF4636UL, 0xA133C501UL, 0xE9D3531CUL, 0xEE353783UL
        !           229: },
        !           230: 
        !           231: {
        !           232:        0x9DB30420UL, 0x1FB6E9DEUL, 0xA7BE7BEFUL, 0xD273A298UL,
        !           233:        0x4A4F7BDBUL, 0x64AD8C57UL, 0x85510443UL, 0xFA020ED1UL,
        !           234:        0x7E287AFFUL, 0xE60FB663UL, 0x095F35A1UL, 0x79EBF120UL,
        !           235:        0xFD059D43UL, 0x6497B7B1UL, 0xF3641F63UL, 0x241E4ADFUL,
        !           236:        0x28147F5FUL, 0x4FA2B8CDUL, 0xC9430040UL, 0x0CC32220UL,
        !           237:        0xFDD30B30UL, 0xC0A5374FUL, 0x1D2D00D9UL, 0x24147B15UL,
        !           238:        0xEE4D111AUL, 0x0FCA5167UL, 0x71FF904CUL, 0x2D195FFEUL,
        !           239:        0x1A05645FUL, 0x0C13FEFEUL, 0x081B08CAUL, 0x05170121UL,
        !           240:        0x80530100UL, 0xE83E5EFEUL, 0xAC9AF4F8UL, 0x7FE72701UL,
        !           241:        0xD2B8EE5FUL, 0x06DF4261UL, 0xBB9E9B8AUL, 0x7293EA25UL,
        !           242:        0xCE84FFDFUL, 0xF5718801UL, 0x3DD64B04UL, 0xA26F263BUL,
        !           243:        0x7ED48400UL, 0x547EEBE6UL, 0x446D4CA0UL, 0x6CF3D6F5UL,
        !           244:        0x2649ABDFUL, 0xAEA0C7F5UL, 0x36338CC1UL, 0x503F7E93UL,
        !           245:        0xD3772061UL, 0x11B638E1UL, 0x72500E03UL, 0xF80EB2BBUL,
        !           246:        0xABE0502EUL, 0xEC8D77DEUL, 0x57971E81UL, 0xE14F6746UL,
        !           247:        0xC9335400UL, 0x6920318FUL, 0x081DBB99UL, 0xFFC304A5UL,
        !           248:        0x4D351805UL, 0x7F3D5CE3UL, 0xA6C866C6UL, 0x5D5BCCA9UL,
        !           249:        0xDAEC6FEAUL, 0x9F926F91UL, 0x9F46222FUL, 0x3991467DUL,
        !           250:        0xA5BF6D8EUL, 0x1143C44FUL, 0x43958302UL, 0xD0214EEBUL,
        !           251:        0x022083B8UL, 0x3FB6180CUL, 0x18F8931EUL, 0x281658E6UL,
        !           252:        0x26486E3EUL, 0x8BD78A70UL, 0x7477E4C1UL, 0xB506E07CUL,
        !           253:        0xF32D0A25UL, 0x79098B02UL, 0xE4EABB81UL, 0x28123B23UL,
        !           254:        0x69DEAD38UL, 0x1574CA16UL, 0xDF871B62UL, 0x211C40B7UL,
        !           255:        0xA51A9EF9UL, 0x0014377BUL, 0x041E8AC8UL, 0x09114003UL,
        !           256:        0xBD59E4D2UL, 0xE3D156D5UL, 0x4FE876D5UL, 0x2F91A340UL,
        !           257:        0x557BE8DEUL, 0x00EAE4A7UL, 0x0CE5C2ECUL, 0x4DB4BBA6UL,
        !           258:        0xE756BDFFUL, 0xDD3369ACUL, 0xEC17B035UL, 0x06572327UL,
        !           259:        0x99AFC8B0UL, 0x56C8C391UL, 0x6B65811CUL, 0x5E146119UL,
        !           260:        0x6E85CB75UL, 0xBE07C002UL, 0xC2325577UL, 0x893FF4ECUL,
        !           261:        0x5BBFC92DUL, 0xD0EC3B25UL, 0xB7801AB7UL, 0x8D6D3B24UL,
        !           262:        0x20C763EFUL, 0xC366A5FCUL, 0x9C382880UL, 0x0ACE3205UL,
        !           263:        0xAAC9548AUL, 0xECA1D7C7UL, 0x041AFA32UL, 0x1D16625AUL,
        !           264:        0x6701902CUL, 0x9B757A54UL, 0x31D477F7UL, 0x9126B031UL,
        !           265:        0x36CC6FDBUL, 0xC70B8B46UL, 0xD9E66A48UL, 0x56E55A79UL,
        !           266:        0x026A4CEBUL, 0x52437EFFUL, 0x2F8F76B4UL, 0x0DF980A5UL,
        !           267:        0x8674CDE3UL, 0xEDDA04EBUL, 0x17A9BE04UL, 0x2C18F4DFUL,
        !           268:        0xB7747F9DUL, 0xAB2AF7B4UL, 0xEFC34D20UL, 0x2E096B7CUL,
        !           269:        0x1741A254UL, 0xE5B6A035UL, 0x213D42F6UL, 0x2C1C7C26UL,
        !           270:        0x61C2F50FUL, 0x6552DAF9UL, 0xD2C231F8UL, 0x25130F69UL,
        !           271:        0xD8167FA2UL, 0x0418F2C8UL, 0x001A96A6UL, 0x0D1526ABUL,
        !           272:        0x63315C21UL, 0x5E0A72ECUL, 0x49BAFEFDUL, 0x187908D9UL,
        !           273:        0x8D0DBD86UL, 0x311170A7UL, 0x3E9B640CUL, 0xCC3E10D7UL,
        !           274:        0xD5CAD3B6UL, 0x0CAEC388UL, 0xF73001E1UL, 0x6C728AFFUL,
        !           275:        0x71EAE2A1UL, 0x1F9AF36EUL, 0xCFCBD12FUL, 0xC1DE8417UL,
        !           276:        0xAC07BE6BUL, 0xCB44A1D8UL, 0x8B9B0F56UL, 0x013988C3UL,
        !           277:        0xB1C52FCAUL, 0xB4BE31CDUL, 0xD8782806UL, 0x12A3A4E2UL,
        !           278:        0x6F7DE532UL, 0x58FD7EB6UL, 0xD01EE900UL, 0x24ADFFC2UL,
        !           279:        0xF4990FC5UL, 0x9711AAC5UL, 0x001D7B95UL, 0x82E5E7D2UL,
        !           280:        0x109873F6UL, 0x00613096UL, 0xC32D9521UL, 0xADA121FFUL,
        !           281:        0x29908415UL, 0x7FBB977FUL, 0xAF9EB3DBUL, 0x29C9ED2AUL,
        !           282:        0x5CE2A465UL, 0xA730F32CUL, 0xD0AA3FE8UL, 0x8A5CC091UL,
        !           283:        0xD49E2CE7UL, 0x0CE454A9UL, 0xD60ACD86UL, 0x015F1919UL,
        !           284:        0x77079103UL, 0xDEA03AF6UL, 0x78A8565EUL, 0xDEE356DFUL,
        !           285:        0x21F05CBEUL, 0x8B75E387UL, 0xB3C50651UL, 0xB8A5C3EFUL,
        !           286:        0xD8EEB6D2UL, 0xE523BE77UL, 0xC2154529UL, 0x2F69EFDFUL,
        !           287:        0xAFE67AFBUL, 0xF470C4B2UL, 0xF3E0EB5BUL, 0xD6CC9876UL,
        !           288:        0x39E4460CUL, 0x1FDA8538UL, 0x1987832FUL, 0xCA007367UL,
        !           289:        0xA99144F8UL, 0x296B299EUL, 0x492FC295UL, 0x9266BEABUL,
        !           290:        0xB5676E69UL, 0x9BD3DDDAUL, 0xDF7E052FUL, 0xDB25701CUL,
        !           291:        0x1B5E51EEUL, 0xF65324E6UL, 0x6AFCE36CUL, 0x0316CC04UL,
        !           292:        0x8644213EUL, 0xB7DC59D0UL, 0x7965291FUL, 0xCCD6FD43UL,
        !           293:        0x41823979UL, 0x932BCDF6UL, 0xB657C34DUL, 0x4EDFD282UL,
        !           294:        0x7AE5290CUL, 0x3CB9536BUL, 0x851E20FEUL, 0x9833557EUL,
        !           295:        0x13ECF0B0UL, 0xD3FFB372UL, 0x3F85C5C1UL, 0x0AEF7ED2UL
        !           296: },
        !           297: 
        !           298: {
        !           299:        0x7EC90C04UL, 0x2C6E74B9UL, 0x9B0E66DFUL, 0xA6337911UL,
        !           300:        0xB86A7FFFUL, 0x1DD358F5UL, 0x44DD9D44UL, 0x1731167FUL,
        !           301:        0x08FBF1FAUL, 0xE7F511CCUL, 0xD2051B00UL, 0x735ABA00UL,
        !           302:        0x2AB722D8UL, 0x386381CBUL, 0xACF6243AUL, 0x69BEFD7AUL,
        !           303:        0xE6A2E77FUL, 0xF0C720CDUL, 0xC4494816UL, 0xCCF5C180UL,
        !           304:        0x38851640UL, 0x15B0A848UL, 0xE68B18CBUL, 0x4CAADEFFUL,
        !           305:        0x5F480A01UL, 0x0412B2AAUL, 0x259814FCUL, 0x41D0EFE2UL,
        !           306:        0x4E40B48DUL, 0x248EB6FBUL, 0x8DBA1CFEUL, 0x41A99B02UL,
        !           307:        0x1A550A04UL, 0xBA8F65CBUL, 0x7251F4E7UL, 0x95A51725UL,
        !           308:        0xC106ECD7UL, 0x97A5980AUL, 0xC539B9AAUL, 0x4D79FE6AUL,
        !           309:        0xF2F3F763UL, 0x68AF8040UL, 0xED0C9E56UL, 0x11B4958BUL,
        !           310:        0xE1EB5A88UL, 0x8709E6B0UL, 0xD7E07156UL, 0x4E29FEA7UL,
        !           311:        0x6366E52DUL, 0x02D1C000UL, 0xC4AC8E05UL, 0x9377F571UL,
        !           312:        0x0C05372AUL, 0x578535F2UL, 0x2261BE02UL, 0xD642A0C9UL,
        !           313:        0xDF13A280UL, 0x74B55BD2UL, 0x682199C0UL, 0xD421E5ECUL,
        !           314:        0x53FB3CE8UL, 0xC8ADEDB3UL, 0x28A87FC9UL, 0x3D959981UL,
        !           315:        0x5C1FF900UL, 0xFE38D399UL, 0x0C4EFF0BUL, 0x062407EAUL,
        !           316:        0xAA2F4FB1UL, 0x4FB96976UL, 0x90C79505UL, 0xB0A8A774UL,
        !           317:        0xEF55A1FFUL, 0xE59CA2C2UL, 0xA6B62D27UL, 0xE66A4263UL,
        !           318:        0xDF65001FUL, 0x0EC50966UL, 0xDFDD55BCUL, 0x29DE0655UL,
        !           319:        0x911E739AUL, 0x17AF8975UL, 0x32C7911CUL, 0x89F89468UL,
        !           320:        0x0D01E980UL, 0x524755F4UL, 0x03B63CC9UL, 0x0CC844B2UL,
        !           321:        0xBCF3F0AAUL, 0x87AC36E9UL, 0xE53A7426UL, 0x01B3D82BUL,
        !           322:        0x1A9E7449UL, 0x64EE2D7EUL, 0xCDDBB1DAUL, 0x01C94910UL,
        !           323:        0xB868BF80UL, 0x0D26F3FDUL, 0x9342EDE7UL, 0x04A5C284UL,
        !           324:        0x636737B6UL, 0x50F5B616UL, 0xF24766E3UL, 0x8ECA36C1UL,
        !           325:        0x136E05DBUL, 0xFEF18391UL, 0xFB887A37UL, 0xD6E7F7D4UL,
        !           326:        0xC7FB7DC9UL, 0x3063FCDFUL, 0xB6F589DEUL, 0xEC2941DAUL,
        !           327:        0x26E46695UL, 0xB7566419UL, 0xF654EFC5UL, 0xD08D58B7UL,
        !           328:        0x48925401UL, 0xC1BACB7FUL, 0xE5FF550FUL, 0xB6083049UL,
        !           329:        0x5BB5D0E8UL, 0x87D72E5AUL, 0xAB6A6EE1UL, 0x223A66CEUL,
        !           330:        0xC62BF3CDUL, 0x9E0885F9UL, 0x68CB3E47UL, 0x086C010FUL,
        !           331:        0xA21DE820UL, 0xD18B69DEUL, 0xF3F65777UL, 0xFA02C3F6UL,
        !           332:        0x407EDAC3UL, 0xCBB3D550UL, 0x1793084DUL, 0xB0D70EBAUL,
        !           333:        0x0AB378D5UL, 0xD951FB0CUL, 0xDED7DA56UL, 0x4124BBE4UL,
        !           334:        0x94CA0B56UL, 0x0F5755D1UL, 0xE0E1E56EUL, 0x6184B5BEUL,
        !           335:        0x580A249FUL, 0x94F74BC0UL, 0xE327888EUL, 0x9F7B5561UL,
        !           336:        0xC3DC0280UL, 0x05687715UL, 0x646C6BD7UL, 0x44904DB3UL,
        !           337:        0x66B4F0A3UL, 0xC0F1648AUL, 0x697ED5AFUL, 0x49E92FF6UL,
        !           338:        0x309E374FUL, 0x2CB6356AUL, 0x85808573UL, 0x4991F840UL,
        !           339:        0x76F0AE02UL, 0x083BE84DUL, 0x28421C9AUL, 0x44489406UL,
        !           340:        0x736E4CB8UL, 0xC1092910UL, 0x8BC95FC6UL, 0x7D869CF4UL,
        !           341:        0x134F616FUL, 0x2E77118DUL, 0xB31B2BE1UL, 0xAA90B472UL,
        !           342:        0x3CA5D717UL, 0x7D161BBAUL, 0x9CAD9010UL, 0xAF462BA2UL,
        !           343:        0x9FE459D2UL, 0x45D34559UL, 0xD9F2DA13UL, 0xDBC65487UL,
        !           344:        0xF3E4F94EUL, 0x176D486FUL, 0x097C13EAUL, 0x631DA5C7UL,
        !           345:        0x445F7382UL, 0x175683F4UL, 0xCDC66A97UL, 0x70BE0288UL,
        !           346:        0xB3CDCF72UL, 0x6E5DD2F3UL, 0x20936079UL, 0x459B80A5UL,
        !           347:        0xBE60E2DBUL, 0xA9C23101UL, 0xEBA5315CUL, 0x224E42F2UL,
        !           348:        0x1C5C1572UL, 0xF6721B2CUL, 0x1AD2FFF3UL, 0x8C25404EUL,
        !           349:        0x324ED72FUL, 0x4067B7FDUL, 0x0523138EUL, 0x5CA3BC78UL,
        !           350:        0xDC0FD66EUL, 0x75922283UL, 0x784D6B17UL, 0x58EBB16EUL,
        !           351:        0x44094F85UL, 0x3F481D87UL, 0xFCFEAE7BUL, 0x77B5FF76UL,
        !           352:        0x8C2302BFUL, 0xAAF47556UL, 0x5F46B02AUL, 0x2B092801UL,
        !           353:        0x3D38F5F7UL, 0x0CA81F36UL, 0x52AF4A8AUL, 0x66D5E7C0UL,
        !           354:        0xDF3B0874UL, 0x95055110UL, 0x1B5AD7A8UL, 0xF61ED5ADUL,
        !           355:        0x6CF6E479UL, 0x20758184UL, 0xD0CEFA65UL, 0x88F7BE58UL,
        !           356:        0x4A046826UL, 0x0FF6F8F3UL, 0xA09C7F70UL, 0x5346ABA0UL,
        !           357:        0x5CE96C28UL, 0xE176EDA3UL, 0x6BAC307FUL, 0x376829D2UL,
        !           358:        0x85360FA9UL, 0x17E3FE2AUL, 0x24B79767UL, 0xF5A96B20UL,
        !           359:        0xD6CD2595UL, 0x68FF1EBFUL, 0x7555442CUL, 0xF19F06BEUL,
        !           360:        0xF9E0659AUL, 0xEEB9491DUL, 0x34010718UL, 0xBB30CAB8UL,
        !           361:        0xE822FE15UL, 0x88570983UL, 0x750E6249UL, 0xDA627E55UL,
        !           362:        0x5E76FFA8UL, 0xB1534546UL, 0x6D47DE08UL, 0xEFE9E7D4UL
        !           363: },
        !           364: 
        !           365: {
        !           366:        0xF6FA8F9DUL, 0x2CAC6CE1UL, 0x4CA34867UL, 0xE2337F7CUL,
        !           367:        0x95DB08E7UL, 0x016843B4UL, 0xECED5CBCUL, 0x325553ACUL,
        !           368:        0xBF9F0960UL, 0xDFA1E2EDUL, 0x83F0579DUL, 0x63ED86B9UL,
        !           369:        0x1AB6A6B8UL, 0xDE5EBE39UL, 0xF38FF732UL, 0x8989B138UL,
        !           370:        0x33F14961UL, 0xC01937BDUL, 0xF506C6DAUL, 0xE4625E7EUL,
        !           371:        0xA308EA99UL, 0x4E23E33CUL, 0x79CBD7CCUL, 0x48A14367UL,
        !           372:        0xA3149619UL, 0xFEC94BD5UL, 0xA114174AUL, 0xEAA01866UL,
        !           373:        0xA084DB2DUL, 0x09A8486FUL, 0xA888614AUL, 0x2900AF98UL,
        !           374:        0x01665991UL, 0xE1992863UL, 0xC8F30C60UL, 0x2E78EF3CUL,
        !           375:        0xD0D51932UL, 0xCF0FEC14UL, 0xF7CA07D2UL, 0xD0A82072UL,
        !           376:        0xFD41197EUL, 0x9305A6B0UL, 0xE86BE3DAUL, 0x74BED3CDUL,
        !           377:        0x372DA53CUL, 0x4C7F4448UL, 0xDAB5D440UL, 0x6DBA0EC3UL,
        !           378:        0x083919A7UL, 0x9FBAEED9UL, 0x49DBCFB0UL, 0x4E670C53UL,
        !           379:        0x5C3D9C01UL, 0x64BDB941UL, 0x2C0E636AUL, 0xBA7DD9CDUL,
        !           380:        0xEA6F7388UL, 0xE70BC762UL, 0x35F29ADBUL, 0x5C4CDD8DUL,
        !           381:        0xF0D48D8CUL, 0xB88153E2UL, 0x08A19866UL, 0x1AE2EAC8UL,
        !           382:        0x284CAF89UL, 0xAA928223UL, 0x9334BE53UL, 0x3B3A21BFUL,
        !           383:        0x16434BE3UL, 0x9AEA3906UL, 0xEFE8C36EUL, 0xF890CDD9UL,
        !           384:        0x80226DAEUL, 0xC340A4A3UL, 0xDF7E9C09UL, 0xA694A807UL,
        !           385:        0x5B7C5ECCUL, 0x221DB3A6UL, 0x9A69A02FUL, 0x68818A54UL,
        !           386:        0xCEB2296FUL, 0x53C0843AUL, 0xFE893655UL, 0x25BFE68AUL,
        !           387:        0xB4628ABCUL, 0xCF222EBFUL, 0x25AC6F48UL, 0xA9A99387UL,
        !           388:        0x53BDDB65UL, 0xE76FFBE7UL, 0xE967FD78UL, 0x0BA93563UL,
        !           389:        0x8E342BC1UL, 0xE8A11BE9UL, 0x4980740DUL, 0xC8087DFCUL,
        !           390:        0x8DE4BF99UL, 0xA11101A0UL, 0x7FD37975UL, 0xDA5A26C0UL,
        !           391:        0xE81F994FUL, 0x9528CD89UL, 0xFD339FEDUL, 0xB87834BFUL,
        !           392:        0x5F04456DUL, 0x22258698UL, 0xC9C4C83BUL, 0x2DC156BEUL,
        !           393:        0x4F628DAAUL, 0x57F55EC5UL, 0xE2220ABEUL, 0xD2916EBFUL,
        !           394:        0x4EC75B95UL, 0x24F2C3C0UL, 0x42D15D99UL, 0xCD0D7FA0UL,
        !           395:        0x7B6E27FFUL, 0xA8DC8AF0UL, 0x7345C106UL, 0xF41E232FUL,
        !           396:        0x35162386UL, 0xE6EA8926UL, 0x3333B094UL, 0x157EC6F2UL,
        !           397:        0x372B74AFUL, 0x692573E4UL, 0xE9A9D848UL, 0xF3160289UL,
        !           398:        0x3A62EF1DUL, 0xA787E238UL, 0xF3A5F676UL, 0x74364853UL,
        !           399:        0x20951063UL, 0x4576698DUL, 0xB6FAD407UL, 0x592AF950UL,
        !           400:        0x36F73523UL, 0x4CFB6E87UL, 0x7DA4CEC0UL, 0x6C152DAAUL,
        !           401:        0xCB0396A8UL, 0xC50DFE5DUL, 0xFCD707ABUL, 0x0921C42FUL,
        !           402:        0x89DFF0BBUL, 0x5FE2BE78UL, 0x448F4F33UL, 0x754613C9UL,
        !           403:        0x2B05D08DUL, 0x48B9D585UL, 0xDC049441UL, 0xC8098F9BUL,
        !           404:        0x7DEDE786UL, 0xC39A3373UL, 0x42410005UL, 0x6A091751UL,
        !           405:        0x0EF3C8A6UL, 0x890072D6UL, 0x28207682UL, 0xA9A9F7BEUL,
        !           406:        0xBF32679DUL, 0xD45B5B75UL, 0xB353FD00UL, 0xCBB0E358UL,
        !           407:        0x830F220AUL, 0x1F8FB214UL, 0xD372CF08UL, 0xCC3C4A13UL,
        !           408:        0x8CF63166UL, 0x061C87BEUL, 0x88C98F88UL, 0x6062E397UL,
        !           409:        0x47CF8E7AUL, 0xB6C85283UL, 0x3CC2ACFBUL, 0x3FC06976UL,
        !           410:        0x4E8F0252UL, 0x64D8314DUL, 0xDA3870E3UL, 0x1E665459UL,
        !           411:        0xC10908F0UL, 0x513021A5UL, 0x6C5B68B7UL, 0x822F8AA0UL,
        !           412:        0x3007CD3EUL, 0x74719EEFUL, 0xDC872681UL, 0x073340D4UL,
        !           413:        0x7E432FD9UL, 0x0C5EC241UL, 0x8809286CUL, 0xF592D891UL,
        !           414:        0x08A930F6UL, 0x957EF305UL, 0xB7FBFFBDUL, 0xC266E96FUL,
        !           415:        0x6FE4AC98UL, 0xB173ECC0UL, 0xBC60B42AUL, 0x953498DAUL,
        !           416:        0xFBA1AE12UL, 0x2D4BD736UL, 0x0F25FAABUL, 0xA4F3FCEBUL,
        !           417:        0xE2969123UL, 0x257F0C3DUL, 0x9348AF49UL, 0x361400BCUL,
        !           418:        0xE8816F4AUL, 0x3814F200UL, 0xA3F94043UL, 0x9C7A54C2UL,
        !           419:        0xBC704F57UL, 0xDA41E7F9UL, 0xC25AD33AUL, 0x54F4A084UL,
        !           420:        0xB17F5505UL, 0x59357CBEUL, 0xEDBD15C8UL, 0x7F97C5ABUL,
        !           421:        0xBA5AC7B5UL, 0xB6F6DEAFUL, 0x3A479C3AUL, 0x5302DA25UL,
        !           422:        0x653D7E6AUL, 0x54268D49UL, 0x51A477EAUL, 0x5017D55BUL,
        !           423:        0xD7D25D88UL, 0x44136C76UL, 0x0404A8C8UL, 0xB8E5A121UL,
        !           424:        0xB81A928AUL, 0x60ED5869UL, 0x97C55B96UL, 0xEAEC991BUL,
        !           425:        0x29935913UL, 0x01FDB7F1UL, 0x088E8DFAUL, 0x9AB6F6F5UL,
        !           426:        0x3B4CBF9FUL, 0x4A5DE3ABUL, 0xE6051D35UL, 0xA0E1D855UL,
        !           427:        0xD36B4CF1UL, 0xF544EDEBUL, 0xB0E93524UL, 0xBEBB8FBDUL,
        !           428:        0xA2D762CFUL, 0x49C92F54UL, 0x38B5F331UL, 0x7128A454UL,
        !           429:        0x48392905UL, 0xA65B1DB8UL, 0x851C97BDUL, 0xD675CF2FUL
        !           430: },
        !           431: 
        !           432: {
        !           433:        0x85E04019UL, 0x332BF567UL, 0x662DBFFFUL, 0xCFC65693UL,
        !           434:        0x2A8D7F6FUL, 0xAB9BC912UL, 0xDE6008A1UL, 0x2028DA1FUL,
        !           435:        0x0227BCE7UL, 0x4D642916UL, 0x18FAC300UL, 0x50F18B82UL,
        !           436:        0x2CB2CB11UL, 0xB232E75CUL, 0x4B3695F2UL, 0xB28707DEUL,
        !           437:        0xA05FBCF6UL, 0xCD4181E9UL, 0xE150210CUL, 0xE24EF1BDUL,
        !           438:        0xB168C381UL, 0xFDE4E789UL, 0x5C79B0D8UL, 0x1E8BFD43UL,
        !           439:        0x4D495001UL, 0x38BE4341UL, 0x913CEE1DUL, 0x92A79C3FUL,
        !           440:        0x089766BEUL, 0xBAEEADF4UL, 0x1286BECFUL, 0xB6EACB19UL,
        !           441:        0x2660C200UL, 0x7565BDE4UL, 0x64241F7AUL, 0x8248DCA9UL,
        !           442:        0xC3B3AD66UL, 0x28136086UL, 0x0BD8DFA8UL, 0x356D1CF2UL,
        !           443:        0x107789BEUL, 0xB3B2E9CEUL, 0x0502AA8FUL, 0x0BC0351EUL,
        !           444:        0x166BF52AUL, 0xEB12FF82UL, 0xE3486911UL, 0xD34D7516UL,
        !           445:        0x4E7B3AFFUL, 0x5F43671BUL, 0x9CF6E037UL, 0x4981AC83UL,
        !           446:        0x334266CEUL, 0x8C9341B7UL, 0xD0D854C0UL, 0xCB3A6C88UL,
        !           447:        0x47BC2829UL, 0x4725BA37UL, 0xA66AD22BUL, 0x7AD61F1EUL,
        !           448:        0x0C5CBAFAUL, 0x4437F107UL, 0xB6E79962UL, 0x42D2D816UL,
        !           449:        0x0A961288UL, 0xE1A5C06EUL, 0x13749E67UL, 0x72FC081AUL,
        !           450:        0xB1D139F7UL, 0xF9583745UL, 0xCF19DF58UL, 0xBEC3F756UL,
        !           451:        0xC06EBA30UL, 0x07211B24UL, 0x45C28829UL, 0xC95E317FUL,
        !           452:        0xBC8EC511UL, 0x38BC46E9UL, 0xC6E6FA14UL, 0xBAE8584AUL,
        !           453:        0xAD4EBC46UL, 0x468F508BUL, 0x7829435FUL, 0xF124183BUL,
        !           454:        0x821DBA9FUL, 0xAFF60FF4UL, 0xEA2C4E6DUL, 0x16E39264UL,
        !           455:        0x92544A8BUL, 0x009B4FC3UL, 0xABA68CEDUL, 0x9AC96F78UL,
        !           456:        0x06A5B79AUL, 0xB2856E6EUL, 0x1AEC3CA9UL, 0xBE838688UL,
        !           457:        0x0E0804E9UL, 0x55F1BE56UL, 0xE7E5363BUL, 0xB3A1F25DUL,
        !           458:        0xF7DEBB85UL, 0x61FE033CUL, 0x16746233UL, 0x3C034C28UL,
        !           459:        0xDA6D0C74UL, 0x79AAC56CUL, 0x3CE4E1ADUL, 0x51F0C802UL,
        !           460:        0x98F8F35AUL, 0x1626A49FUL, 0xEED82B29UL, 0x1D382FE3UL,
        !           461:        0x0C4FB99AUL, 0xBB325778UL, 0x3EC6D97BUL, 0x6E77A6A9UL,
        !           462:        0xCB658B5CUL, 0xD45230C7UL, 0x2BD1408BUL, 0x60C03EB7UL,
        !           463:        0xB9068D78UL, 0xA33754F4UL, 0xF430C87DUL, 0xC8A71302UL,
        !           464:        0xB96D8C32UL, 0xEBD4E7BEUL, 0xBE8B9D2DUL, 0x7979FB06UL,
        !           465:        0xE7225308UL, 0x8B75CF77UL, 0x11EF8DA4UL, 0xE083C858UL,
        !           466:        0x8D6B786FUL, 0x5A6317A6UL, 0xFA5CF7A0UL, 0x5DDA0033UL,
        !           467:        0xF28EBFB0UL, 0xF5B9C310UL, 0xA0EAC280UL, 0x08B9767AUL,
        !           468:        0xA3D9D2B0UL, 0x79D34217UL, 0x021A718DUL, 0x9AC6336AUL,
        !           469:        0x2711FD60UL, 0x438050E3UL, 0x069908A8UL, 0x3D7FEDC4UL,
        !           470:        0x826D2BEFUL, 0x4EEB8476UL, 0x488DCF25UL, 0x36C9D566UL,
        !           471:        0x28E74E41UL, 0xC2610ACAUL, 0x3D49A9CFUL, 0xBAE3B9DFUL,
        !           472:        0xB65F8DE6UL, 0x92AEAF64UL, 0x3AC7D5E6UL, 0x9EA80509UL,
        !           473:        0xF22B017DUL, 0xA4173F70UL, 0xDD1E16C3UL, 0x15E0D7F9UL,
        !           474:        0x50B1B887UL, 0x2B9F4FD5UL, 0x625ABA82UL, 0x6A017962UL,
        !           475:        0x2EC01B9CUL, 0x15488AA9UL, 0xD716E740UL, 0x40055A2CUL,
        !           476:        0x93D29A22UL, 0xE32DBF9AUL, 0x058745B9UL, 0x3453DC1EUL,
        !           477:        0xD699296EUL, 0x496CFF6FUL, 0x1C9F4986UL, 0xDFE2ED07UL,
        !           478:        0xB87242D1UL, 0x19DE7EAEUL, 0x053E561AUL, 0x15AD6F8CUL,
        !           479:        0x66626C1CUL, 0x7154C24CUL, 0xEA082B2AUL, 0x93EB2939UL,
        !           480:        0x17DCB0F0UL, 0x58D4F2AEUL, 0x9EA294FBUL, 0x52CF564CUL,
        !           481:        0x9883FE66UL, 0x2EC40581UL, 0x763953C3UL, 0x01D6692EUL,
        !           482:        0xD3A0C108UL, 0xA1E7160EUL, 0xE4F2DFA6UL, 0x693ED285UL,
        !           483:        0x74904698UL, 0x4C2B0EDDUL, 0x4F757656UL, 0x5D393378UL,
        !           484:        0xA132234FUL, 0x3D321C5DUL, 0xC3F5E194UL, 0x4B269301UL,
        !           485:        0xC79F022FUL, 0x3C997E7EUL, 0x5E4F9504UL, 0x3FFAFBBDUL,
        !           486:        0x76F7AD0EUL, 0x296693F4UL, 0x3D1FCE6FUL, 0xC61E45BEUL,
        !           487:        0xD3B5AB34UL, 0xF72BF9B7UL, 0x1B0434C0UL, 0x4E72B567UL,
        !           488:        0x5592A33DUL, 0xB5229301UL, 0xCFD2A87FUL, 0x60AEB767UL,
        !           489:        0x1814386BUL, 0x30BCC33DUL, 0x38A0C07DUL, 0xFD1606F2UL,
        !           490:        0xC363519BUL, 0x589DD390UL, 0x5479F8E6UL, 0x1CB8D647UL,
        !           491:        0x97FD61A9UL, 0xEA7759F4UL, 0x2D57539DUL, 0x569A58CFUL,
        !           492:        0xE84E63ADUL, 0x462E1B78UL, 0x6580F87EUL, 0xF3817914UL,
        !           493:        0x91DA55F4UL, 0x40A230F3UL, 0xD1988F35UL, 0xB6E318D2UL,
        !           494:        0x3FFA50BCUL, 0x3D40F021UL, 0xC3C0BDAEUL, 0x4958C24CUL,
        !           495:        0x518F36B2UL, 0x84B1D370UL, 0x0FEDCE83UL, 0x878DDADAUL,
        !           496:        0xF2A279C7UL, 0x94E01BE8UL, 0x90716F4BUL, 0x954B8AA3UL
        !           497: },
        !           498: 
        !           499: {
        !           500:        0xE216300DUL, 0xBBDDFFFCUL, 0xA7EBDABDUL, 0x35648095UL,
        !           501:        0x7789F8B7UL, 0xE6C1121BUL, 0x0E241600UL, 0x052CE8B5UL,
        !           502:        0x11A9CFB0UL, 0xE5952F11UL, 0xECE7990AUL, 0x9386D174UL,
        !           503:        0x2A42931CUL, 0x76E38111UL, 0xB12DEF3AUL, 0x37DDDDFCUL,
        !           504:        0xDE9ADEB1UL, 0x0A0CC32CUL, 0xBE197029UL, 0x84A00940UL,
        !           505:        0xBB243A0FUL, 0xB4D137CFUL, 0xB44E79F0UL, 0x049EEDFDUL,
        !           506:        0x0B15A15DUL, 0x480D3168UL, 0x8BBBDE5AUL, 0x669DED42UL,
        !           507:        0xC7ECE831UL, 0x3F8F95E7UL, 0x72DF191BUL, 0x7580330DUL,
        !           508:        0x94074251UL, 0x5C7DCDFAUL, 0xABBE6D63UL, 0xAA402164UL,
        !           509:        0xB301D40AUL, 0x02E7D1CAUL, 0x53571DAEUL, 0x7A3182A2UL,
        !           510:        0x12A8DDECUL, 0xFDAA335DUL, 0x176F43E8UL, 0x71FB46D4UL,
        !           511:        0x38129022UL, 0xCE949AD4UL, 0xB84769ADUL, 0x965BD862UL,
        !           512:        0x82F3D055UL, 0x66FB9767UL, 0x15B80B4EUL, 0x1D5B47A0UL,
        !           513:        0x4CFDE06FUL, 0xC28EC4B8UL, 0x57E8726EUL, 0x647A78FCUL,
        !           514:        0x99865D44UL, 0x608BD593UL, 0x6C200E03UL, 0x39DC5FF6UL,
        !           515:        0x5D0B00A3UL, 0xAE63AFF2UL, 0x7E8BD632UL, 0x70108C0CUL,
        !           516:        0xBBD35049UL, 0x2998DF04UL, 0x980CF42AUL, 0x9B6DF491UL,
        !           517:        0x9E7EDD53UL, 0x06918548UL, 0x58CB7E07UL, 0x3B74EF2EUL,
        !           518:        0x522FFFB1UL, 0xD24708CCUL, 0x1C7E27CDUL, 0xA4EB215BUL,
        !           519:        0x3CF1D2E2UL, 0x19B47A38UL, 0x424F7618UL, 0x35856039UL,
        !           520:        0x9D17DEE7UL, 0x27EB35E6UL, 0xC9AFF67BUL, 0x36BAF5B8UL,
        !           521:        0x09C467CDUL, 0xC18910B1UL, 0xE11DBF7BUL, 0x06CD1AF8UL,
        !           522:        0x7170C608UL, 0x2D5E3354UL, 0xD4DE495AUL, 0x64C6D006UL,
        !           523:        0xBCC0C62CUL, 0x3DD00DB3UL, 0x708F8F34UL, 0x77D51B42UL,
        !           524:        0x264F620FUL, 0x24B8D2BFUL, 0x15C1B79EUL, 0x46A52564UL,
        !           525:        0xF8D7E54EUL, 0x3E378160UL, 0x7895CDA5UL, 0x859C15A5UL,
        !           526:        0xE6459788UL, 0xC37BC75FUL, 0xDB07BA0CUL, 0x0676A3ABUL,
        !           527:        0x7F229B1EUL, 0x31842E7BUL, 0x24259FD7UL, 0xF8BEF472UL,
        !           528:        0x835FFCB8UL, 0x6DF4C1F2UL, 0x96F5B195UL, 0xFD0AF0FCUL,
        !           529:        0xB0FE134CUL, 0xE2506D3DUL, 0x4F9B12EAUL, 0xF215F225UL,
        !           530:        0xA223736FUL, 0x9FB4C428UL, 0x25D04979UL, 0x34C713F8UL,
        !           531:        0xC4618187UL, 0xEA7A6E98UL, 0x7CD16EFCUL, 0x1436876CUL,
        !           532:        0xF1544107UL, 0xBEDEEE14UL, 0x56E9AF27UL, 0xA04AA441UL,
        !           533:        0x3CF7C899UL, 0x92ECBAE6UL, 0xDD67016DUL, 0x151682EBUL,
        !           534:        0xA842EEDFUL, 0xFDBA60B4UL, 0xF1907B75UL, 0x20E3030FUL,
        !           535:        0x24D8C29EUL, 0xE139673BUL, 0xEFA63FB8UL, 0x71873054UL,
        !           536:        0xB6F2CF3BUL, 0x9F326442UL, 0xCB15A4CCUL, 0xB01A4504UL,
        !           537:        0xF1E47D8DUL, 0x844A1BE5UL, 0xBAE7DFDCUL, 0x42CBDA70UL,
        !           538:        0xCD7DAE0AUL, 0x57E85B7AUL, 0xD53F5AF6UL, 0x20CF4D8CUL,
        !           539:        0xCEA4D428UL, 0x79D130A4UL, 0x3486EBFBUL, 0x33D3CDDCUL,
        !           540:        0x77853B53UL, 0x37EFFCB5UL, 0xC5068778UL, 0xE580B3E6UL,
        !           541:        0x4E68B8F4UL, 0xC5C8B37EUL, 0x0D809EA2UL, 0x398FEB7CUL,
        !           542:        0x132A4F94UL, 0x43B7950EUL, 0x2FEE7D1CUL, 0x223613BDUL,
        !           543:        0xDD06CAA2UL, 0x37DF932BUL, 0xC4248289UL, 0xACF3EBC3UL,
        !           544:        0x5715F6B7UL, 0xEF3478DDUL, 0xF267616FUL, 0xC148CBE4UL,
        !           545:        0x9052815EUL, 0x5E410FABUL, 0xB48A2465UL, 0x2EDA7FA4UL,
        !           546:        0xE87B40E4UL, 0xE98EA084UL, 0x5889E9E1UL, 0xEFD390FCUL,
        !           547:        0xDD07D35BUL, 0xDB485694UL, 0x38D7E5B2UL, 0x57720101UL,
        !           548:        0x730EDEBCUL, 0x5B643113UL, 0x94917E4FUL, 0x503C2FBAUL,
        !           549:        0x646F1282UL, 0x7523D24AUL, 0xE0779695UL, 0xF9C17A8FUL,
        !           550:        0x7A5B2121UL, 0xD187B896UL, 0x29263A4DUL, 0xBA510CDFUL,
        !           551:        0x81F47C9FUL, 0xAD1163EDUL, 0xEA7B5965UL, 0x1A00726EUL,
        !           552:        0x11403092UL, 0x00DA6D77UL, 0x4A0CDD61UL, 0xAD1F4603UL,
        !           553:        0x605BDFB0UL, 0x9EEDC364UL, 0x22EBE6A8UL, 0xCEE7D28AUL,
        !           554:        0xA0E736A0UL, 0x5564A6B9UL, 0x10853209UL, 0xC7EB8F37UL,
        !           555:        0x2DE705CAUL, 0x8951570FUL, 0xDF09822BUL, 0xBD691A6CUL,
        !           556:        0xAA12E4F2UL, 0x87451C0FUL, 0xE0F6A27AUL, 0x3ADA4819UL,
        !           557:        0x4CF1764FUL, 0x0D771C2BUL, 0x67CDB156UL, 0x350D8384UL,
        !           558:        0x5938FA0FUL, 0x42399EF3UL, 0x36997B07UL, 0x0E84093DUL,
        !           559:        0x4AA93E61UL, 0x8360D87BUL, 0x1FA98B0CUL, 0x1149382CUL,
        !           560:        0xE97625A5UL, 0x0614D1B7UL, 0x0E25244BUL, 0x0C768347UL,
        !           561:        0x589E8D82UL, 0x0D2059D1UL, 0xA466BB1EUL, 0xF8DA0A82UL,
        !           562:        0x04F19130UL, 0xBA6E4EC0UL, 0x99265164UL, 0x1EE7230DUL,
        !           563:        0x50B2AD80UL, 0xEAEE6801UL, 0x8DB2A283UL, 0xEA8BF59EUL
        !           564: }};
        !           565: 
        !           566: /* CAST uses three different round functions */
        !           567: #define f1(l, r, km, kr) \
        !           568:        t = rotlVariable(km + r, kr); \
        !           569:        l ^= ((S[0][U8a(t)] ^ S[1][U8b(t)]) - \
        !           570:         S[2][U8c(t)]) + S[3][U8d(t)];
        !           571: #define f2(l, r, km, kr) \
        !           572:        t = rotlVariable(km ^ r, kr); \
        !           573:        l ^= ((S[0][U8a(t)] - S[1][U8b(t)]) + \
        !           574:         S[2][U8c(t)]) ^ S[3][U8d(t)];
        !           575: #define f3(l, r, km, kr) \
        !           576:        t = rotlVariable(km - r, kr); \
        !           577:        l ^= ((S[0][U8a(t)] + S[1][U8b(t)]) ^ \
        !           578:         S[2][U8c(t)]) - S[3][U8d(t)];
        !           579: 
        !           580: #define F1(l, r, i, j) f1(l, r, K[i], K[i+j])
        !           581: #define F2(l, r, i, j) f2(l, r, K[i], K[i+j])
        !           582: #define F3(l, r, i, j) f3(l, r, K[i], K[i+j])
        !           583: 
        !           584: 
        !           585: void Cast5Encrypt (const byte *inBlock, byte *outBlock, CAST_KEY *key)
        !           586: {
        !           587:        word32 l = BE32 (((word32 *)inBlock)[0]);
        !           588:        word32 r = BE32 (((word32 *)inBlock)[1]);
        !           589:        word32 *K = key->K;
        !           590:        word32 t;
        !           591: 
        !           592:        /* Do the work */
        !           593:        F1(l, r,  0, 16);
        !           594:        F2(r, l,  1, 16);
        !           595:        F3(l, r,  2, 16);
        !           596:        F1(r, l,  3, 16);
        !           597:        F2(l, r,  4, 16);
        !           598:        F3(r, l,  5, 16);
        !           599:        F1(l, r,  6, 16);
        !           600:        F2(r, l,  7, 16);
        !           601:        F3(l, r,  8, 16);
        !           602:        F1(r, l,  9, 16);
        !           603:        F2(l, r, 10, 16);
        !           604:        F3(r, l, 11, 16);
        !           605:        F1(l, r, 12, 16);
        !           606:        F2(r, l, 13, 16);
        !           607:        F3(l, r, 14, 16);
        !           608:        F1(r, l, 15, 16);
        !           609: 
        !           610:        /* Put l,r into outblock */
        !           611:        ((word32 *)outBlock)[0] = BE32 (r);
        !           612:        ((word32 *)outBlock)[1] = BE32 (l);
        !           613: }
        !           614: 
        !           615: 
        !           616: void Cast5Decrypt (const byte *inBlock, byte *outBlock, CAST_KEY *key)
        !           617: {
        !           618:        word32 r = BE32 (((word32 *)inBlock)[0]);
        !           619:        word32 l = BE32 (((word32 *)inBlock)[1]);
        !           620:        word32 *K = key->K;
        !           621:        word32 t;
        !           622: 
        !           623:        /* Only do full 16 rounds if key length > 80 bits */
        !           624:        F1(r, l, 15, 16);
        !           625:        F3(l, r, 14, 16);
        !           626:        F2(r, l, 13, 16);
        !           627:        F1(l, r, 12, 16);
        !           628:        F3(r, l, 11, 16);
        !           629:        F2(l, r, 10, 16);
        !           630:        F1(r, l,  9, 16);
        !           631:        F3(l, r,  8, 16);
        !           632:        F2(r, l,  7, 16);
        !           633:        F1(l, r,  6, 16);
        !           634:        F3(r, l,  5, 16);
        !           635:        F2(l, r,  4, 16);
        !           636:        F1(r, l,  3, 16);
        !           637:        F3(l, r,  2, 16);
        !           638:        F2(r, l,  1, 16);
        !           639:        F1(l, r,  0, 16);
        !           640:        /* Put l,r into outblock */
        !           641:        ((word32 *)outBlock)[0] = BE32 (l);
        !           642:        ((word32 *)outBlock)[1] = BE32 (r);
        !           643:        /* Wipe clean */
        !           644:        t = l = r = 0;
        !           645: }
        !           646: 
        !           647: void Cast5SetKey (CAST_KEY *key, unsigned int keylength, const byte *userKey)
        !           648: {
        !           649:        unsigned int i;
        !           650:        word32 *K = key->K;
        !           651:        word32 X[4], Z[4];
        !           652: 
        !           653:        X[0] = BE32 (((word32 *)userKey)[0]);
        !           654:        X[1] = BE32 (((word32 *)userKey)[1]);
        !           655:        X[2] = BE32 (((word32 *)userKey)[2]);
        !           656:        X[3] = BE32 (((word32 *)userKey)[3]);
        !           657: 
        !           658: #define x(i) GETBYTE(X[i/4], 3-i%4)
        !           659: #define z(i) GETBYTE(Z[i/4], 3-i%4)
        !           660: 
        !           661:        for (i=0; i<=16; i+=16)
        !           662:        {
        !           663:                // this part is copied directly from RFC 2144 (with some search and replace) by Wei Dai
        !           664:                Z[0] = X[0] ^ S[4][x(0xD)] ^ S[5][x(0xF)] ^ S[6][x(0xC)] ^ S[7][x(0xE)] ^ S[6][x(0x8)];
        !           665:                Z[1] = X[2] ^ S[4][z(0x0)] ^ S[5][z(0x2)] ^ S[6][z(0x1)] ^ S[7][z(0x3)] ^ S[7][x(0xA)];
        !           666:                Z[2] = X[3] ^ S[4][z(0x7)] ^ S[5][z(0x6)] ^ S[6][z(0x5)] ^ S[7][z(0x4)] ^ S[4][x(0x9)];
        !           667:                Z[3] = X[1] ^ S[4][z(0xA)] ^ S[5][z(0x9)] ^ S[6][z(0xB)] ^ S[7][z(0x8)] ^ S[5][x(0xB)];
        !           668:                K[i+0] = S[4][z(0x8)] ^ S[5][z(0x9)] ^ S[6][z(0x7)] ^ S[7][z(0x6)] ^ S[4][z(0x2)];
        !           669:                K[i+1] = S[4][z(0xA)] ^ S[5][z(0xB)] ^ S[6][z(0x5)] ^ S[7][z(0x4)] ^ S[5][z(0x6)];
        !           670:                K[i+2] = S[4][z(0xC)] ^ S[5][z(0xD)] ^ S[6][z(0x3)] ^ S[7][z(0x2)] ^ S[6][z(0x9)];
        !           671:                K[i+3] = S[4][z(0xE)] ^ S[5][z(0xF)] ^ S[6][z(0x1)] ^ S[7][z(0x0)] ^ S[7][z(0xC)];
        !           672:                X[0] = Z[2] ^ S[4][z(0x5)] ^ S[5][z(0x7)] ^ S[6][z(0x4)] ^ S[7][z(0x6)] ^ S[6][z(0x0)];
        !           673:                X[1] = Z[0] ^ S[4][x(0x0)] ^ S[5][x(0x2)] ^ S[6][x(0x1)] ^ S[7][x(0x3)] ^ S[7][z(0x2)];
        !           674:                X[2] = Z[1] ^ S[4][x(0x7)] ^ S[5][x(0x6)] ^ S[6][x(0x5)] ^ S[7][x(0x4)] ^ S[4][z(0x1)];
        !           675:                X[3] = Z[3] ^ S[4][x(0xA)] ^ S[5][x(0x9)] ^ S[6][x(0xB)] ^ S[7][x(0x8)] ^ S[5][z(0x3)];
        !           676:                K[i+4] = S[4][x(0x3)] ^ S[5][x(0x2)] ^ S[6][x(0xC)] ^ S[7][x(0xD)] ^ S[4][x(0x8)];
        !           677:                K[i+5] = S[4][x(0x1)] ^ S[5][x(0x0)] ^ S[6][x(0xE)] ^ S[7][x(0xF)] ^ S[5][x(0xD)];
        !           678:                K[i+6] = S[4][x(0x7)] ^ S[5][x(0x6)] ^ S[6][x(0x8)] ^ S[7][x(0x9)] ^ S[6][x(0x3)];
        !           679:                K[i+7] = S[4][x(0x5)] ^ S[5][x(0x4)] ^ S[6][x(0xA)] ^ S[7][x(0xB)] ^ S[7][x(0x7)];
        !           680:                Z[0] = X[0] ^ S[4][x(0xD)] ^ S[5][x(0xF)] ^ S[6][x(0xC)] ^ S[7][x(0xE)] ^ S[6][x(0x8)];
        !           681:                Z[1] = X[2] ^ S[4][z(0x0)] ^ S[5][z(0x2)] ^ S[6][z(0x1)] ^ S[7][z(0x3)] ^ S[7][x(0xA)];
        !           682:                Z[2] = X[3] ^ S[4][z(0x7)] ^ S[5][z(0x6)] ^ S[6][z(0x5)] ^ S[7][z(0x4)] ^ S[4][x(0x9)];
        !           683:                Z[3] = X[1] ^ S[4][z(0xA)] ^ S[5][z(0x9)] ^ S[6][z(0xB)] ^ S[7][z(0x8)] ^ S[5][x(0xB)];
        !           684:                K[i+8] = S[4][z(0x3)] ^ S[5][z(0x2)] ^ S[6][z(0xC)] ^ S[7][z(0xD)] ^ S[4][z(0x9)];
        !           685:                K[i+9] = S[4][z(0x1)] ^ S[5][z(0x0)] ^ S[6][z(0xE)] ^ S[7][z(0xF)] ^ S[5][z(0xC)];
        !           686:                K[i+10] = S[4][z(0x7)] ^ S[5][z(0x6)] ^ S[6][z(0x8)] ^ S[7][z(0x9)] ^ S[6][z(0x2)];
        !           687:                K[i+11] = S[4][z(0x5)] ^ S[5][z(0x4)] ^ S[6][z(0xA)] ^ S[7][z(0xB)] ^ S[7][z(0x6)];
        !           688:                X[0] = Z[2] ^ S[4][z(0x5)] ^ S[5][z(0x7)] ^ S[6][z(0x4)] ^ S[7][z(0x6)] ^ S[6][z(0x0)];
        !           689:                X[1] = Z[0] ^ S[4][x(0x0)] ^ S[5][x(0x2)] ^ S[6][x(0x1)] ^ S[7][x(0x3)] ^ S[7][z(0x2)];
        !           690:                X[2] = Z[1] ^ S[4][x(0x7)] ^ S[5][x(0x6)] ^ S[6][x(0x5)] ^ S[7][x(0x4)] ^ S[4][z(0x1)];
        !           691:                X[3] = Z[3] ^ S[4][x(0xA)] ^ S[5][x(0x9)] ^ S[6][x(0xB)] ^ S[7][x(0x8)] ^ S[5][z(0x3)];
        !           692:                K[i+12] = S[4][x(0x8)] ^ S[5][x(0x9)] ^ S[6][x(0x7)] ^ S[7][x(0x6)] ^ S[4][x(0x3)];
        !           693:                K[i+13] = S[4][x(0xA)] ^ S[5][x(0xB)] ^ S[6][x(0x5)] ^ S[7][x(0x4)] ^ S[5][x(0x7)];
        !           694:                K[i+14] = S[4][x(0xC)] ^ S[5][x(0xD)] ^ S[6][x(0x3)] ^ S[7][x(0x2)] ^ S[6][x(0x8)];
        !           695:                K[i+15] = S[4][x(0xE)] ^ S[5][x(0xF)] ^ S[6][x(0x1)] ^ S[7][x(0x0)] ^ S[7][x(0xD)];
        !           696:        }
        !           697: 
        !           698:        for (i=16; i<32; i++)
        !           699:                K[i] &= 0x1f;
        !           700: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.