84static u_char key_perm[56] = { 85 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 86 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 87 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 88 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 89}; 90 91static u_char key_shifts[16] = { 92 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 93}; 94 95static u_char inv_comp_perm[56]; 96static u_char comp_perm[48] = { 97 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 98 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 99 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 100 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 101}; 102 103/* 104 * No E box is used, as it's replaced by some ANDs, shifts, and ORs. 105 */ 106 107static u_char u_sbox[8][64]; 108static u_char sbox[8][64] = { 109 { 110 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 111 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 112 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 113 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 114 }, 115 { 116 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 117 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 118 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 119 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 120 }, 121 { 122 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 123 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 124 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 125 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 126 }, 127 { 128 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 129 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 130 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 131 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 132 }, 133 { 134 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 135 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 136 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 137 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 138 }, 139 { 140 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 141 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 142 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 143 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 144 }, 145 { 146 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 147 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 148 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 149 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 150 }, 151 { 152 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 153 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 154 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 155 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 156 } 157}; 158 159static u_char un_pbox[32]; 160static u_char pbox[32] = { 161 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 162 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 163}; 164 165static u_int32_t bits32[32] = 166{ 167 0x80000000, 0x40000000, 0x20000000, 0x10000000, 168 0x08000000, 0x04000000, 0x02000000, 0x01000000, 169 0x00800000, 0x00400000, 0x00200000, 0x00100000, 170 0x00080000, 0x00040000, 0x00020000, 0x00010000, 171 0x00008000, 0x00004000, 0x00002000, 0x00001000, 172 0x00000800, 0x00000400, 0x00000200, 0x00000100, 173 0x00000080, 0x00000040, 0x00000020, 0x00000010, 174 0x00000008, 0x00000004, 0x00000002, 0x00000001 175}; 176 177static u_char bits8[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; 178 179static u_int32_t saltbits;
| 85static u_char key_perm[56] = { 86 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 87 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 88 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 89 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 90}; 91 92static u_char key_shifts[16] = { 93 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 94}; 95 96static u_char inv_comp_perm[56]; 97static u_char comp_perm[48] = { 98 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 99 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 100 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 101 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 102}; 103 104/* 105 * No E box is used, as it's replaced by some ANDs, shifts, and ORs. 106 */ 107 108static u_char u_sbox[8][64]; 109static u_char sbox[8][64] = { 110 { 111 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 112 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 113 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 114 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 115 }, 116 { 117 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 118 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 119 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 120 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 121 }, 122 { 123 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 124 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 125 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 126 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 127 }, 128 { 129 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 130 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 131 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 132 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 133 }, 134 { 135 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 136 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 137 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 138 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 139 }, 140 { 141 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 142 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 143 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 144 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 145 }, 146 { 147 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 148 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 149 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 150 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 151 }, 152 { 153 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 154 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 155 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 156 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 157 } 158}; 159 160static u_char un_pbox[32]; 161static u_char pbox[32] = { 162 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 163 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25 164}; 165 166static u_int32_t bits32[32] = 167{ 168 0x80000000, 0x40000000, 0x20000000, 0x10000000, 169 0x08000000, 0x04000000, 0x02000000, 0x01000000, 170 0x00800000, 0x00400000, 0x00200000, 0x00100000, 171 0x00080000, 0x00040000, 0x00020000, 0x00010000, 172 0x00008000, 0x00004000, 0x00002000, 0x00001000, 173 0x00000800, 0x00000400, 0x00000200, 0x00000100, 174 0x00000080, 0x00000040, 0x00000020, 0x00000010, 175 0x00000008, 0x00000004, 0x00000002, 0x00000001 176}; 177 178static u_char bits8[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; 179 180static u_int32_t saltbits;
|