[ Index ] |
|
Code source de Horde 3.1.3 |
1 <?php 2 /** 3 * The Cipher_cast128:: class implements the Cipher interface encryption data 4 * using the CAST128 (aka Cast5) algorithm as defined in RFC2144. 5 * 6 * $Horde: framework/Cipher/Cipher/cast128.php,v 1.7.12.8 2006/01/01 21:28:10 jan Exp $ 7 * 8 * Copyright 2002-2006 Mike Cochrane <mike@graftonhall.co.nz> 9 * 10 * See the enclosed file COPYING for license information (LGPL). If you 11 * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. 12 * 13 * @author Mike Cochrane <mike@graftonhall.co.nz> 14 * @since Horde 2.2 15 * @package Horde_Cipher 16 */ 17 class Horde_Cipher_cast128 extends Horde_Cipher { 18 19 /** 20 * S box (s1) 21 * 22 * @var array 23 */ 24 var $s1 = array( 25 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, 26 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, 27 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, 28 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, 29 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, 30 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, 31 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, 32 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, 33 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, 34 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, 35 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, 36 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, 37 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, 38 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, 39 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, 40 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, 41 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, 42 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, 43 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, 44 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, 45 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, 46 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, 47 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, 48 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, 49 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, 50 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, 51 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, 52 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, 53 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, 54 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, 55 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, 56 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf); 57 58 /** 59 * S box (s2) 60 * 61 * @var array 62 */ 63 var $s2 = array( 64 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, 65 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, 66 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, 67 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, 68 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, 69 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, 70 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, 71 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, 72 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, 73 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, 74 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, 75 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, 76 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, 77 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, 78 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, 79 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, 80 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, 81 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, 82 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, 83 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, 84 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, 85 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, 86 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, 87 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, 88 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, 89 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, 90 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, 91 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, 92 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, 93 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, 94 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, 95 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1); 96 97 /** 98 * S box (s3) 99 * 100 * @var array 101 */ 102 var $s3 = array( 103 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, 104 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, 105 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, 106 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, 107 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, 108 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, 109 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, 110 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, 111 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, 112 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, 113 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, 114 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, 115 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, 116 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, 117 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, 118 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, 119 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, 120 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, 121 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, 122 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, 123 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, 124 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, 125 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, 126 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, 127 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, 128 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, 129 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, 130 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, 131 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, 132 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, 133 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, 134 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783); 135 136 /** 137 * S box (s4) 138 * 139 * @var array 140 */ 141 var $s4 = array( 142 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, 143 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, 144 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, 145 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, 146 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, 147 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, 148 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, 149 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, 150 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, 151 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, 152 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, 153 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, 154 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, 155 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, 156 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, 157 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, 158 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, 159 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, 160 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, 161 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 162 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, 163 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, 164 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 165 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, 166 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, 167 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 168 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, 169 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, 170 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 171 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, 172 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, 173 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2); 174 175 /** 176 * S box (s5) 177 * 178 * @var array 179 */ 180 var $s5 = array( 181 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, 182 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, 183 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, 184 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, 185 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, 186 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, 187 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, 188 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, 189 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, 190 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, 191 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, 192 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, 193 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, 194 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, 195 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, 196 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, 197 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, 198 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, 199 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, 200 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, 201 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, 202 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, 203 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, 204 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, 205 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, 206 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, 207 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, 208 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, 209 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, 210 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, 211 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, 212 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4); 213 214 /** 215 * S box (s6) 216 * 217 * @var array 218 */ 219 var $s6 = array( 220 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, 221 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, 222 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, 223 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, 224 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, 225 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, 226 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, 227 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, 228 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, 229 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, 230 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, 231 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, 232 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, 233 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, 234 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, 235 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, 236 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, 237 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, 238 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, 239 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, 240 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, 241 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, 242 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, 243 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, 244 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, 245 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, 246 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, 247 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, 248 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, 249 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, 250 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, 251 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f); 252 253 /** 254 * S box (s7) 255 * 256 * @var array 257 */ 258 var $s7 = array( 259 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, 260 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, 261 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, 262 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, 263 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, 264 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, 265 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, 266 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, 267 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, 268 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, 269 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, 270 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, 271 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, 272 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, 273 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, 274 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, 275 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, 276 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, 277 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, 278 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, 279 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, 280 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, 281 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, 282 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, 283 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, 284 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, 285 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, 286 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, 287 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, 288 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, 289 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, 290 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3); 291 292 /** 293 * S box (s8) 294 * 295 * @var array 296 */ 297 var $s8 = array( 298 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, 299 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, 300 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, 301 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, 302 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, 303 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, 304 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, 305 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, 306 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, 307 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, 308 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, 309 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, 310 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, 311 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, 312 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, 313 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, 314 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, 315 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, 316 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, 317 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, 318 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, 319 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, 320 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, 321 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, 322 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, 323 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, 324 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, 325 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, 326 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, 327 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, 328 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, 329 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e); 330 331 /** 332 * Masking Keys 333 * 334 * @var array 335 */ 336 var $_Km = array(); 337 338 /** 339 * Rotate Keys 340 * 341 * @var array 342 */ 343 var $_Kr = array(); 344 345 /** 346 * The number of rounds to do 347 * 348 * @var integer 349 */ 350 var $_rounds = 16; 351 352 /** 353 * Set the key to be used for en/decryption. 354 * 355 * @param string $key The key to use. 356 */ 357 function setKey($key) 358 { 359 if (!is_null($key)) { 360 $this->_rounds = (strlen($key) < 11) ? 12 : 16; 361 $key = $this->_formatKey($key); 362 $keySchedule = $this->_keySchedule($key); 363 } 364 } 365 366 /** 367 * Return the size of the blocks that this cipher needs. 368 * 369 * @return integer The number of characters per block. 370 */ 371 function getBlockSize() 372 { 373 return 8; 374 } 375 376 /** 377 * Encrypt a block of data. 378 * 379 * @param string $block The data to encrypt. 380 * @param string $key The key to use. 381 * 382 * @return string The encrypted output. 383 */ 384 function encryptBlock($block, $key = null) 385 { 386 if (!is_null($key)) { 387 $this->_rounds = (strlen($key) < 11) ? 12 : 16; 388 $key = $this->_formatKey($key); 389 $keySchedule = $this->_keySchedule($key); 390 } 391 392 $L = $this->_formatData(substr($block, 0, 4)); 393 $R = $this->_formatData(substr($block, 4, 4)); 394 395 $L ^= $this->f1($R, $this->_Km[1], $this->_Kr[1]); 396 $R ^= $this->f2($L, $this->_Km[2], $this->_Kr[2]); 397 $L ^= $this->f3($R, $this->_Km[3], $this->_Kr[3]); 398 $R ^= $this->f1($L, $this->_Km[4], $this->_Kr[4]); 399 $L ^= $this->f2($R, $this->_Km[5], $this->_Kr[5]); 400 $R ^= $this->f3($L, $this->_Km[6], $this->_Kr[6]); 401 $L ^= $this->f1($R, $this->_Km[7], $this->_Kr[7]); 402 $R ^= $this->f2($L, $this->_Km[8], $this->_Kr[8]); 403 $L ^= $this->f3($R, $this->_Km[9], $this->_Kr[9]); 404 $R ^= $this->f1($L, $this->_Km[10], $this->_Kr[10]); 405 $L ^= $this->f2($R, $this->_Km[11], $this->_Kr[11]); 406 $R ^= $this->f3($L, $this->_Km[12], $this->_Kr[12]); 407 if ($this->_rounds > 12) { 408 $L ^= $this->f1($R, $this->_Km[13], $this->_Kr[13]); 409 $R ^= $this->f2($L, $this->_Km[14], $this->_Kr[14]); 410 $L ^= $this->f3($R, $this->_Km[15], $this->_Kr[15]); 411 $R ^= $this->f1($L, $this->_Km[16], $this->_Kr[16]); 412 } 413 414 $encrypted = pack("N", $R) . pack("N", $L); 415 416 return $encrypted; 417 } 418 419 /** 420 * Decrypt a block of data. 421 * 422 * @param string $block The data to decrypt. 423 * @param string $key The key to use. 424 * 425 * @return string The decrypted output. 426 */ 427 function decryptBlock($block, $key = null) 428 { 429 if (!is_null($key)) { 430 $this->_rounds = (strlen($key) < 11) ? 12 : 16; 431 $key = $this->_formatKey($key); 432 $keySchedule = $this->_keySchedule($key); 433 } 434 435 $R = $this->_formatData(substr($block, 0, 4)); 436 $L = $this->_formatData(substr($block, 4, 4)); 437 438 if ($this->_rounds > 12) { 439 $R ^= $this->f1($L, $this->_Km[16], $this->_Kr[16]); 440 $L ^= $this->f3($R, $this->_Km[15], $this->_Kr[15]); 441 $R ^= $this->f2($L, $this->_Km[14], $this->_Kr[14]); 442 $L ^= $this->f1($R, $this->_Km[13], $this->_Kr[13]); 443 } 444 445 $R ^= $this->f3($L, $this->_Km[12], $this->_Kr[12]); 446 $L ^= $this->f2($R, $this->_Km[11], $this->_Kr[11]); 447 $R ^= $this->f1($L, $this->_Km[10], $this->_Kr[10]); 448 $L ^= $this->f3($R, $this->_Km[9], $this->_Kr[9]); 449 $R ^= $this->f2($L, $this->_Km[8], $this->_Kr[8]); 450 $L ^= $this->f1($R, $this->_Km[7], $this->_Kr[7]); 451 $R ^= $this->f3($L, $this->_Km[6], $this->_Kr[6]); 452 $L ^= $this->f2($R, $this->_Km[5], $this->_Kr[5]); 453 $R ^= $this->f1($L, $this->_Km[4], $this->_Kr[4]); 454 $L ^= $this->f3($R, $this->_Km[3], $this->_Kr[3]); 455 $R ^= $this->f2($L, $this->_Km[2], $this->_Kr[2]); 456 $L ^= $this->f1($R, $this->_Km[1], $this->_Kr[1]); 457 458 $decrypted = pack("N", $L) . pack("N", $R); 459 460 return $decrypted; 461 } 462 463 /** 464 * f1() 465 */ 466 function f1($d, $Km, $Kr) 467 { 468 $I = $Km + $d; 469 470 /* Nasty Fix as 471 * $I << $Kr | $I >> (32 - $Kr) 472 * Doesn't always give the correct answer 473 */ 474 $bin = str_pad(decbin($I), 32, '0', STR_PAD_LEFT); 475 $I = bindec(substr($bin, $Kr) . substr($bin, 0, $Kr)); 476 477 $f = $this->s1[($I >> 24) & 0xFF] ^ $this->s2[($I >> 16) & 0xFF]; 478 $f = $f - $this->s3[($I >> 8) & 0xFF]; 479 $f = $f + $this->s4[$I & 0xFF]; 480 return $f; 481 } 482 483 /** 484 * f2() 485 */ 486 function f2($d, $Km, $Kr) 487 { 488 $I = $Km ^ $d; 489 490 /* Nasty Fix as 491 * $I << $Kr | $I >> (32 - $Kr) 492 * Doesn't always give the correct answer 493 */ 494 $bin = str_pad(decbin($I), 32, '0', STR_PAD_LEFT); 495 $I = bindec(substr($bin, $Kr) . substr($bin, 0, $Kr)); 496 497 $f = $this->s1[($I >> 24) & 0xFF] - $this->s2[($I >> 16) & 0xFF]; 498 $f = $f + $this->s3[($I >> 8) & 0xFF]; 499 $f = $f ^ $this->s4[$I & 0xFF]; 500 return $f; 501 } 502 503 /** 504 * f3() 505 */ 506 function f3($d, $Km, $Kr) 507 { 508 $I = 0xFFFFFFFF & ($Km - $d); 509 510 /* Nasty Fix as 511 * $I << $Kr | $I >> (32 - $Kr) 512 * Doesn't always give the correct answer 513 */ 514 $bin = str_pad(decbin($I), 32, '0', STR_PAD_LEFT); 515 $I = bindec(substr($bin, $Kr) . substr($bin, 0, $Kr)); 516 517 $f = ($this->s1[($I >> 24) & 0xFF] + $this->s2[($I >> 16) & 0xFF]); 518 $f = $f ^ $this->s3[($I >> 8) & 0xFF]; 519 $f = 0xFFFFFFFF & ($f - $this->s4[$I & 0xFF]); 520 return $f; 521 } 522 523 /** 524 * Convert a string into a array of the ordinates of its characters. 525 * 526 * @param string $data Data to convert. 527 * 528 * @return array The converted data. 529 */ 530 function _formatData($data) 531 { 532 return $this->_combine4(unpack('C*', $data), 0x1); 533 } 534 535 /** 536 * Converts a text key into an array padded with \0's to a length of 128 537 * bits. 538 * 539 * @param string $key The key to format. 540 * 541 * @return array The padded key. 542 */ 543 function _formatKey($key) 544 { 545 $res = array_values(unpack('C*', $key)); 546 for ($i = count($res); $i < 16; $i++) { 547 $res[$i] = 0; 548 } 549 return $res; 550 } 551 552 /** 553 * Create the complete key shedule. 554 * 555 * @param array $key The key to use. 556 */ 557 function _keySchedule($key) 558 { 559 $x0x1x2x3 = $this->_combine4($key, 0x0); 560 $x4x5x6x7 = $this->_combine4($key, 0x4); 561 $x8x9xAxB = $this->_combine4($key, 0x8); 562 $xCxDxExF = $this->_combine4($key, 0xC); 563 564 $b = $this->_split($x0x1x2x3); $x0 = $b[0]; $x1 = $b[1]; $x2 = $b[2]; $x3 = $b[3]; 565 $b = $this->_split($x4x5x6x7); $x4 = $b[0]; $x5 = $b[1]; $x6 = $b[2]; $x7 = $b[3]; 566 $b = $this->_split($x8x9xAxB); $x8 = $b[0]; $x9 = $b[1]; $xA = $b[2]; $xB = $b[3]; 567 $b = $this->_split($xCxDxExF); $xC = $b[0]; $xD = $b[1]; $xE = $b[2]; $xF = $b[3]; 568 569 $z0z1z2z3 = $x0x1x2x3 ^ $this->s5[$xD] ^ $this->s6[$xF] ^ $this->s7[$xC] ^ $this->s8[$xE] ^ $this->s7[$x8]; 570 $b = $this->_split($z0z1z2z3); $z0 = $b[0]; $z1 = $b[1]; $z2 = $b[2]; $z3 = $b[3]; 571 $z4z5z6z7 = $x8x9xAxB ^ $this->s5[$z0] ^ $this->s6[$z2] ^ $this->s7[$z1] ^ $this->s8[$z3] ^ $this->s8[$xA]; 572 $b = $this->_split($z4z5z6z7); $z4 = $b[0]; $z5 = $b[1]; $z6 = $b[2]; $z7 = $b[3]; 573 $z8z9zAzB = $xCxDxExF ^ $this->s5[$z7] ^ $this->s6[$z6] ^ $this->s7[$z5] ^ $this->s8[$z4] ^ $this->s5[$x9]; 574 $b = $this->_split($z8z9zAzB); $z8 = $b[0]; $z9 = $b[1]; $zA = $b[2]; $zB = $b[3]; 575 $zCzDzEzF = $x4x5x6x7 ^ $this->s5[$zA] ^ $this->s6[$z9] ^ $this->s7[$zB] ^ $this->s8[$z8] ^ $this->s6[$xB]; 576 $b = $this->_split($zCzDzEzF); $zC = $b[0]; $zD = $b[1]; $zE = $b[2]; $zF = $b[3]; 577 578 $this->_Km[1] = $this->s5[$z8] ^ $this->s6[$z9] ^ $this->s7[$z7] ^ $this->s8[$z6] ^ $this->s5[$z2]; 579 $this->_Km[2] = $this->s5[$zA] ^ $this->s6[$zB] ^ $this->s7[$z5] ^ $this->s8[$z4] ^ $this->s6[$z6]; 580 $this->_Km[3] = $this->s5[$zC] ^ $this->s6[$zD] ^ $this->s7[$z3] ^ $this->s8[$z2] ^ $this->s7[$z9]; 581 $this->_Km[4] = $this->s5[$zE] ^ $this->s6[$zF] ^ $this->s7[$z1] ^ $this->s8[$z0] ^ $this->s8[$zC]; 582 583 $x0x1x2x3 = $z8z9zAzB ^ $this->s5[$z5] ^ $this->s6[$z7] ^ $this->s7[$z4] ^ $this->s8[$z6] ^ $this->s7[$z0]; 584 $b = $this->_split($x0x1x2x3); $x0 = $b[0]; $x1 = $b[1]; $x2 = $b[2]; $x3 = $b[3]; 585 $x4x5x6x7 = $z0z1z2z3 ^ $this->s5[$x0] ^ $this->s6[$x2] ^ $this->s7[$x1] ^ $this->s8[$x3] ^ $this->s8[$z2]; 586 $b = $this->_split($x4x5x6x7); $x4 = $b[0]; $x5 = $b[1]; $x6 = $b[2]; $x7 = $b[3]; 587 $x8x9xAxB = $z4z5z6z7 ^ $this->s5[$x7] ^ $this->s6[$x6] ^ $this->s7[$x5] ^ $this->s8[$x4] ^ $this->s5[$z1]; 588 $b = $this->_split($x8x9xAxB); $x8 = $b[0]; $x9 = $b[1]; $xA = $b[2]; $xB = $b[3]; 589 $xCxDxExF = $zCzDzEzF ^ $this->s5[$xA] ^ $this->s6[$x9] ^ $this->s7[$xB] ^ $this->s8[$x8] ^ $this->s6[$z3]; 590 $b = $this->_split($xCxDxExF); $xC = $b[0]; $xD = $b[1]; $xE = $b[2]; $xF = $b[3]; 591 592 $this->_Km[5] = $this->s5[$x3] ^ $this->s6[$x2] ^ $this->s7[$xC] ^ $this->s8[$xD] ^ $this->s5[$x8]; 593 $this->_Km[6] = $this->s5[$x1] ^ $this->s6[$x0] ^ $this->s7[$xE] ^ $this->s8[$xF] ^ $this->s6[$xD]; 594 $this->_Km[7] = $this->s5[$x7] ^ $this->s6[$x6] ^ $this->s7[$x8] ^ $this->s8[$x9] ^ $this->s7[$x3]; 595 $this->_Km[8] = $this->s5[$x5] ^ $this->s6[$x4] ^ $this->s7[$xA] ^ $this->s8[$xB] ^ $this->s8[$x7]; 596 597 $z0z1z2z3 = $x0x1x2x3 ^ $this->s5[$xD] ^ $this->s6[$xF] ^ $this->s7[$xC] ^ $this->s8[$xE] ^ $this->s7[$x8]; 598 $b = $this->_split($z0z1z2z3); $z0 = $b[0]; $z1 = $b[1]; $z2 = $b[2]; $z3 = $b[3]; 599 $z4z5z6z7 = $x8x9xAxB ^ $this->s5[$z0] ^ $this->s6[$z2] ^ $this->s7[$z1] ^ $this->s8[$z3] ^ $this->s8[$xA]; 600 $b = $this->_split($z4z5z6z7); $z4 = $b[0]; $z5 = $b[1]; $z6 = $b[2]; $z7 = $b[3]; 601 $z8z9zAzB = $xCxDxExF ^ $this->s5[$z7] ^ $this->s6[$z6] ^ $this->s7[$z5] ^ $this->s8[$z4] ^ $this->s5[$x9]; 602 $b = $this->_split($z8z9zAzB); $z8 = $b[0]; $z9 = $b[1]; $zA = $b[2]; $zB = $b[3]; 603 $zCzDzEzF = $x4x5x6x7 ^ $this->s5[$zA] ^ $this->s6[$z9] ^ $this->s7[$zB] ^ $this->s8[$z8] ^ $this->s6[$xB]; 604 $b = $this->_split($zCzDzEzF); $zC = $b[0]; $zD = $b[1]; $zE = $b[2]; $zF = $b[3]; 605 606 $this->_Km[9] = $this->s5[$z3] ^ $this->s6[$z2] ^ $this->s7[$zC] ^ $this->s8[$zD] ^ $this->s5[$z9]; 607 $this->_Km[10] = $this->s5[$z1] ^ $this->s6[$z0] ^ $this->s7[$zE] ^ $this->s8[$zF] ^ $this->s6[$zC]; 608 $this->_Km[11] = $this->s5[$z7] ^ $this->s6[$z6] ^ $this->s7[$z8] ^ $this->s8[$z9] ^ $this->s7[$z2]; 609 $this->_Km[12] = $this->s5[$z5] ^ $this->s6[$z4] ^ $this->s7[$zA] ^ $this->s8[$zB] ^ $this->s8[$z6]; 610 611 $x0x1x2x3 = $z8z9zAzB ^ $this->s5[$z5] ^ $this->s6[$z7] ^ $this->s7[$z4] ^ $this->s8[$z6] ^ $this->s7[$z0]; 612 $b = $this->_split($x0x1x2x3); $x0 = $b[0]; $x1 = $b[1]; $x2 = $b[2]; $x3 = $b[3]; 613 $x4x5x6x7 = $z0z1z2z3 ^ $this->s5[$x0] ^ $this->s6[$x2] ^ $this->s7[$x1] ^ $this->s8[$x3] ^ $this->s8[$z2]; 614 $b = $this->_split($x4x5x6x7); $x4 = $b[0]; $x5 = $b[1]; $x6 = $b[2]; $x7 = $b[3]; 615 $x8x9xAxB = $z4z5z6z7 ^ $this->s5[$x7] ^ $this->s6[$x6] ^ $this->s7[$x5] ^ $this->s8[$x4] ^ $this->s5[$z1]; 616 $b = $this->_split($x8x9xAxB); $x8 = $b[0]; $x9 = $b[1]; $xA = $b[2]; $xB = $b[3]; 617 $xCxDxExF = $zCzDzEzF ^ $this->s5[$xA] ^ $this->s6[$x9] ^ $this->s7[$xB] ^ $this->s8[$x8] ^ $this->s6[$z3]; 618 $b = $this->_split($xCxDxExF); $xC = $b[0]; $xD = $b[1]; $xE = $b[2]; $xF = $b[3]; 619 620 $this->_Km[13] = $this->s5[$x8] ^ $this->s6[$x9] ^ $this->s7[$x7] ^ $this->s8[$x6] ^ $this->s5[$x3]; 621 $this->_Km[14] = $this->s5[$xA] ^ $this->s6[$xB] ^ $this->s7[$x5] ^ $this->s8[$x4] ^ $this->s6[$x7]; 622 $this->_Km[15] = $this->s5[$xC] ^ $this->s6[$xD] ^ $this->s7[$x3] ^ $this->s8[$x2] ^ $this->s7[$x8]; 623 $this->_Km[16] = $this->s5[$xE] ^ $this->s6[$xF] ^ $this->s7[$x1] ^ $this->s8[$x0] ^ $this->s8[$xD]; 624 625 $z0z1z2z3 = $x0x1x2x3 ^ $this->s5[$xD] ^ $this->s6[$xF] ^ $this->s7[$xC] ^ $this->s8[$xE] ^ $this->s7[$x8]; 626 $b = $this->_split($z0z1z2z3); $z0 = $b[0]; $z1 = $b[1]; $z2 = $b[2]; $z3 = $b[3]; 627 $z4z5z6z7 = $x8x9xAxB ^ $this->s5[$z0] ^ $this->s6[$z2] ^ $this->s7[$z1] ^ $this->s8[$z3] ^ $this->s8[$xA]; 628 $b = $this->_split($z4z5z6z7); $z4 = $b[0]; $z5 = $b[1]; $z6 = $b[2]; $z7 = $b[3]; 629 $z8z9zAzB = $xCxDxExF ^ $this->s5[$z7] ^ $this->s6[$z6] ^ $this->s7[$z5] ^ $this->s8[$z4] ^ $this->s5[$x9]; 630 $b = $this->_split($z8z9zAzB); $z8 = $b[0]; $z9 = $b[1]; $zA = $b[2]; $zB = $b[3]; 631 $zCzDzEzF = $x4x5x6x7 ^ $this->s5[$zA] ^ $this->s6[$z9] ^ $this->s7[$zB] ^ $this->s8[$z8] ^ $this->s6[$xB]; 632 $b = $this->_split($zCzDzEzF); $zC = $b[0]; $zD = $b[1]; $zE = $b[2]; $zF = $b[3]; 633 634 $this->_Kr[1] = 0x1F & ($this->s5[$z8] ^ $this->s6[$z9] ^ $this->s7[$z7] ^ $this->s8[$z6] ^ $this->s5[$z2]); 635 $this->_Kr[2] = 0x1F & ($this->s5[$zA] ^ $this->s6[$zB] ^ $this->s7[$z5] ^ $this->s8[$z4] ^ $this->s6[$z6]); 636 $this->_Kr[3] = 0x1F & ($this->s5[$zC] ^ $this->s6[$zD] ^ $this->s7[$z3] ^ $this->s8[$z2] ^ $this->s7[$z9]); 637 $this->_Kr[4] = 0x1F & ($this->s5[$zE] ^ $this->s6[$zF] ^ $this->s7[$z1] ^ $this->s8[$z0] ^ $this->s8[$zC]); 638 639 $x0x1x2x3 = $z8z9zAzB ^ $this->s5[$z5] ^ $this->s6[$z7] ^ $this->s7[$z4] ^ $this->s8[$z6] ^ $this->s7[$z0]; 640 $b = $this->_split($x0x1x2x3); $x0 = $b[0]; $x1 = $b[1]; $x2 = $b[2]; $x3 = $b[3]; 641 $x4x5x6x7 = $z0z1z2z3 ^ $this->s5[$x0] ^ $this->s6[$x2] ^ $this->s7[$x1] ^ $this->s8[$x3] ^ $this->s8[$z2]; 642 $b = $this->_split($x4x5x6x7); $x4 = $b[0]; $x5 = $b[1]; $x6 = $b[2]; $x7 = $b[3]; 643 $x8x9xAxB = $z4z5z6z7 ^ $this->s5[$x7] ^ $this->s6[$x6] ^ $this->s7[$x5] ^ $this->s8[$x4] ^ $this->s5[$z1]; 644 $b = $this->_split($x8x9xAxB); $x8 = $b[0]; $x9 = $b[1]; $xA = $b[2]; $xB = $b[3]; 645 $xCxDxExF = $zCzDzEzF ^ $this->s5[$xA] ^ $this->s6[$x9] ^ $this->s7[$xB] ^ $this->s8[$x8] ^ $this->s6[$z3]; 646 $b = $this->_split($xCxDxExF); $xC = $b[0]; $xD = $b[1]; $xE = $b[2]; $xF = $b[3]; 647 648 $this->_Kr[5] = 0x1F & ($this->s5[$x3] ^ $this->s6[$x2] ^ $this->s7[$xC] ^ $this->s8[$xD] ^ $this->s5[$x8]); 649 $this->_Kr[6] = 0x1F & ($this->s5[$x1] ^ $this->s6[$x0] ^ $this->s7[$xE] ^ $this->s8[$xF] ^ $this->s6[$xD]); 650 $this->_Kr[7] = 0x1F & ($this->s5[$x7] ^ $this->s6[$x6] ^ $this->s7[$x8] ^ $this->s8[$x9] ^ $this->s7[$x3]); 651 $this->_Kr[8] = 0x1F & ($this->s5[$x5] ^ $this->s6[$x4] ^ $this->s7[$xA] ^ $this->s8[$xB] ^ $this->s8[$x7]); 652 653 $z0z1z2z3 = $x0x1x2x3 ^ $this->s5[$xD] ^ $this->s6[$xF] ^ $this->s7[$xC] ^ $this->s8[$xE] ^ $this->s7[$x8]; 654 $b = $this->_split($z0z1z2z3); $z0 = $b[0]; $z1 = $b[1]; $z2 = $b[2]; $z3 = $b[3]; 655 $z4z5z6z7 = $x8x9xAxB ^ $this->s5[$z0] ^ $this->s6[$z2] ^ $this->s7[$z1] ^ $this->s8[$z3] ^ $this->s8[$xA]; 656 $b = $this->_split($z4z5z6z7); $z4 = $b[0]; $z5 = $b[1]; $z6 = $b[2]; $z7 = $b[3]; 657 $z8z9zAzB = $xCxDxExF ^ $this->s5[$z7] ^ $this->s6[$z6] ^ $this->s7[$z5] ^ $this->s8[$z4] ^ $this->s5[$x9]; 658 $b = $this->_split($z8z9zAzB); $z8 = $b[0]; $z9 = $b[1]; $zA = $b[2]; $zB = $b[3]; 659 $zCzDzEzF = $x4x5x6x7 ^ $this->s5[$zA] ^ $this->s6[$z9] ^ $this->s7[$zB] ^ $this->s8[$z8] ^ $this->s6[$xB]; 660 $b = $this->_split($zCzDzEzF); $zC = $b[0]; $zD = $b[1]; $zE = $b[2]; $zF = $b[3]; 661 662 $this->_Kr[9] = 0x1F & ($this->s5[$z3] ^ $this->s6[$z2] ^ $this->s7[$zC] ^ $this->s8[$zD] ^ $this->s5[$z9]); 663 $this->_Kr[10] = 0x1F & ($this->s5[$z1] ^ $this->s6[$z0] ^ $this->s7[$zE] ^ $this->s8[$zF] ^ $this->s6[$zC]); 664 $this->_Kr[11] = 0x1F & ($this->s5[$z7] ^ $this->s6[$z6] ^ $this->s7[$z8] ^ $this->s8[$z9] ^ $this->s7[$z2]); 665 $this->_Kr[12] = 0x1F & ($this->s5[$z5] ^ $this->s6[$z4] ^ $this->s7[$zA] ^ $this->s8[$zB] ^ $this->s8[$z6]); 666 667 $x0x1x2x3 = $z8z9zAzB ^ $this->s5[$z5] ^ $this->s6[$z7] ^ $this->s7[$z4] ^ $this->s8[$z6] ^ $this->s7[$z0]; 668 $b = $this->_split($x0x1x2x3); $x0 = $b[0]; $x1 = $b[1]; $x2 = $b[2]; $x3 = $b[3]; 669 $x4x5x6x7 = $z0z1z2z3 ^ $this->s5[$x0] ^ $this->s6[$x2] ^ $this->s7[$x1] ^ $this->s8[$x3] ^ $this->s8[$z2]; 670 $b = $this->_split($x4x5x6x7); $x4 = $b[0]; $x5 = $b[1]; $x6 = $b[2]; $x7 = $b[3]; 671 $x8x9xAxB = $z4z5z6z7 ^ $this->s5[$x7] ^ $this->s6[$x6] ^ $this->s7[$x5] ^ $this->s8[$x4] ^ $this->s5[$z1]; 672 $b = $this->_split($x8x9xAxB); $x8 = $b[0]; $x9 = $b[1]; $xA = $b[2]; $xB = $b[3]; 673 $xCxDxExF = $zCzDzEzF ^ $this->s5[$xA] ^ $this->s6[$x9] ^ $this->s7[$xB] ^ $this->s8[$x8] ^ $this->s6[$z3]; 674 $b = $this->_split($xCxDxExF); $xC = $b[0]; $xD = $b[1]; $xE = $b[2]; $xF = $b[3]; 675 676 $this->_Kr[13] = 0x1F & ($this->s5[$x8] ^ $this->s6[$x9] ^ $this->s7[$x7] ^ $this->s8[$x6] ^ $this->s5[$x3]); 677 $this->_Kr[14] = 0x1F & ($this->s5[$xA] ^ $this->s6[$xB] ^ $this->s7[$x5] ^ $this->s8[$x4] ^ $this->s6[$x7]); 678 $this->_Kr[15] = 0x1F & ($this->s5[$xC] ^ $this->s6[$xD] ^ $this->s7[$x3] ^ $this->s8[$x2] ^ $this->s7[$x8]); 679 $this->_Kr[16] = 0x1F & ($this->s5[$xE] ^ $this->s6[$xF] ^ $this->s7[$x1] ^ $this->s8[$x0] ^ $this->s8[$xD]); 680 } 681 682 /** 683 * Unpack the 32 bit value into an array of four 8 bit values. 684 * 685 * @param integer $x 32 bit value. 686 * 687 * @return array Four 8 bit values MS to LS. 688 */ 689 function _split($x) 690 { 691 return array(($x >> 24) & 0xFF, ($x >> 16) & 0xFF, ($x >> 8) & 0xFF, $x & 0xFF); 692 } 693 694 /** 695 * Pack four 8 bit values into one 32 bit value. 696 * 697 * @param array $key Array of 8 bit values. 698 * @param integer $start Start position in array to get 4 values from. 699 * 700 * @return integer 32 bit value. 701 */ 702 function _combine4($key, $start = 0) 703 { 704 $res = 0; 705 if (array_key_exists($start, $key)) { 706 $res |= ($key[$start]) << 24; 707 } 708 if (array_key_exists($start + 1, $key)) { 709 $res |= ($key[$start + 1]) << 16; 710 } 711 if (array_key_exists($start + 2, $key)) { 712 $res |= ($key[$start + 2]) << 8; 713 } 714 if (array_key_exists($start + 3, $key)) { 715 $res |= ($key[$start + 3]); 716 } 717 return $res; 718 } 719 720 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 18:01:28 2007 | par Balluche grâce à PHPXref 0.7 |