Showing the changes to java/pkg/com/sun/crypto/provider/DESCrypt.java (1 of 18352 files). Show all
Unified · Split
| @@ -0,0 +1,1145 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package com.sun.crypto.provider; | ||
| 27 | |||
| 28 | import java.security.InvalidKeyException; | ||
| 29 | |||
| 30 | /** | ||
| 31 | * This is the internal DES class responsible for encryption and | ||
| 32 | * decryption of a byte array of size <code>DES_BLOCK_SIZE</code>. | ||
| 33 | * | ||
| 34 | * @author Gigi Ankeny | ||
| 35 | * @author Jan Luehe | ||
| 36 | * | ||
| 37 | * | ||
| 38 | * @see DESConstants | ||
| 39 | * @see DESCipher | ||
| 40 | */ | ||
| 41 | |||
| 42 | class DESCrypt extends SymmetricCipher implements DESConstants { | ||
| 43 | private static final int s0p[] = { | ||
| 44 | 0x00410100, 0x00010000, 0x40400000, 0x40410100, 0x00400000, | ||
| 45 | 0x40010100, 0x40010000, 0x40400000, 0x40010100, 0x00410100, | ||
| 46 | 0x00410000, 0x40000100, 0x40400100, 0x00400000, 0x00000000, | ||
| 47 | 0x40010000, 0x00010000, 0x40000000, 0x00400100, 0x00010100, | ||
| 48 | 0x40410100, 0x00410000, 0x40000100, 0x00400100, 0x40000000, | ||
| 49 | 0x00000100, 0x00010100, 0x40410000, 0x00000100, 0x40400100, | ||
| 50 | 0x40410000, 0x00000000, 0x00000000, 0x40410100, 0x00400100, | ||
| 51 | 0x40010000, 0x00410100, 0x00010000, 0x40000100, 0x00400100, | ||
| 52 | 0x40410000, 0x00000100, 0x00010100, 0x40400000, 0x40010100, | ||
| 53 | 0x40000000, 0x40400000, 0x00410000, 0x40410100, 0x00010100, | ||
| 54 | 0x00410000, 0x40400100, 0x00400000, 0x40000100, 0x40010000, | ||
| 55 | 0x00000000, 0x00010000, 0x00400000, 0x40400100, 0x00410100, | ||
| 56 | 0x40000000, 0x40410000, 0x00000100, 0x40010100, | ||
| 57 | }; | ||
| 58 | |||
| 59 | private static final int s1p[] = { | ||
| 60 | 0x08021002, 0x00000000, 0x00021000, 0x08020000, 0x08000002, | ||
| 61 | 0x00001002, 0x08001000, 0x00021000, 0x00001000, 0x08020002, | ||
| 62 | 0x00000002, 0x08001000, 0x00020002, 0x08021000, 0x08020000, | ||
| 63 | 0x00000002, 0x00020000, 0x08001002, 0x08020002, 0x00001000, | ||
| 64 | 0x00021002, 0x08000000, 0x00000000, 0x00020002, 0x08001002, | ||
| 65 | 0x00021002, 0x08021000, 0x08000002, 0x08000000, 0x00020000, | ||
| 66 | 0x00001002, 0x08021002, 0x00020002, 0x08021000, 0x08001000, | ||
| 67 | 0x00021002, 0x08021002, 0x00020002, 0x08000002, 0x00000000, | ||
| 68 | 0x08000000, 0x00001002, 0x00020000, 0x08020002, 0x00001000, | ||
| 69 | 0x08000000, 0x00021002, 0x08001002, 0x08021000, 0x00001000, | ||
| 70 | 0x00000000, 0x08000002, 0x00000002, 0x08021002, 0x00021000, | ||
| 71 | 0x08020000, 0x08020002, 0x00020000, 0x00001002, 0x08001000, | ||
| 72 | 0x08001002, 0x00000002, 0x08020000, 0x00021000, | ||
| 73 | }; | ||
| 74 | |||
| 75 | private static final int s2p[] = { | ||
| 76 | 0x20800000, 0x00808020, 0x00000020, 0x20800020, 0x20008000, | ||
| 77 | 0x00800000, 0x20800020, 0x00008020, 0x00800020, 0x00008000, | ||
| 78 | 0x00808000, 0x20000000, 0x20808020, 0x20000020, 0x20000000, | ||
| 79 | 0x20808000, 0x00000000, 0x20008000, 0x00808020, 0x00000020, | ||
| 80 | 0x20000020, 0x20808020, 0x00008000, 0x20800000, 0x20808000, | ||
| 81 | 0x00800020, 0x20008020, 0x00808000, 0x00008020, 0x00000000, | ||
| 82 | 0x00800000, 0x20008020, 0x00808020, 0x00000020, 0x20000000, | ||
| 83 | 0x00008000, 0x20000020, 0x20008000, 0x00808000, 0x20800020, | ||
| 84 | 0x00000000, 0x00808020, 0x00008020, 0x20808000, 0x20008000, | ||
| 85 | 0x00800000, 0x20808020, 0x20000000, 0x20008020, 0x20800000, | ||
| 86 | 0x00800000, 0x20808020, 0x00008000, 0x00800020, 0x20800020, | ||
| 87 | 0x00008020, 0x00800020, 0x00000000, 0x20808000, 0x20000020, | ||
| 88 | 0x20800000, 0x20008020, 0x00000020, 0x00808000, | ||
| 89 | }; | ||
| 90 | |||
| 91 | private static final int s3p[] = { | ||
| 92 | 0x00080201, 0x02000200, 0x00000001, 0x02080201, 0x00000000, | ||
| 93 | 0x02080000, 0x02000201, 0x00080001, 0x02080200, 0x02000001, | ||
| 94 | 0x02000000, 0x00000201, 0x02000001, 0x00080201, 0x00080000, | ||
| 95 | 0x02000000, 0x02080001, 0x00080200, 0x00000200, 0x00000001, | ||
| 96 | 0x00080200, 0x02000201, 0x02080000, 0x00000200, 0x00000201, | ||
| 97 | 0x00000000, 0x00080001, 0x02080200, 0x02000200, 0x02080001, | ||
| 98 | 0x02080201, 0x00080000, 0x02080001, 0x00000201, 0x00080000, | ||
| 99 | 0x02000001, 0x00080200, 0x02000200, 0x00000001, 0x02080000, | ||
| 100 | 0x02000201, 0x00000000, 0x00000200, 0x00080001, 0x00000000, | ||
| 101 | 0x02080001, 0x02080200, 0x00000200, 0x02000000, 0x02080201, | ||
| 102 | 0x00080201, 0x00080000, 0x02080201, 0x00000001, 0x02000200, | ||
| 103 | 0x00080201, 0x00080001, 0x00080200, 0x02080000, 0x02000201, | ||
| 104 | 0x00000201, 0x02000000, 0x02000001, 0x02080200, | ||
| 105 | }; | ||
| 106 | |||
| 107 | private static final int s4p[] = { | ||
| 108 | 0x01000000, 0x00002000, 0x00000080, 0x01002084, 0x01002004, | ||
| 109 | 0x01000080, 0x00002084, 0x01002000, 0x00002000, 0x00000004, | ||
| 110 | 0x01000004, 0x00002080, 0x01000084, 0x01002004, 0x01002080, | ||
| 111 | 0x00000000, 0x00002080, 0x01000000, 0x00002004, 0x00000084, | ||
| 112 | 0x01000080, 0x00002084, 0x00000000, 0x01000004, 0x00000004, | ||
| 113 | 0x01000084, 0x01002084, 0x00002004, 0x01002000, 0x00000080, | ||
| 114 | 0x00000084, 0x01002080, 0x01002080, 0x01000084, 0x00002004, | ||
| 115 | 0x01002000, 0x00002000, 0x00000004, 0x01000004, 0x01000080, | ||
| 116 | 0x01000000, 0x00002080, 0x01002084, 0x00000000, 0x00002084, | ||
| 117 | 0x01000000, 0x00000080, 0x00002004, 0x01000084, 0x00000080, | ||
| 118 | 0x00000000, 0x01002084, 0x01002004, 0x01002080, 0x00000084, | ||
| 119 | 0x00002000, 0x00002080, 0x01002004, 0x01000080, 0x00000084, | ||
| 120 | 0x00000004, 0x00002084, 0x01002000, 0x01000004, | ||
| 121 | }; | ||
| 122 | |||
| 123 | private static final int s5p[] = { | ||
| 124 | 0x10000008, 0x00040008, 0x00000000, 0x10040400, 0x00040008, | ||
| 125 | 0x00000400, 0x10000408, 0x00040000, 0x00000408, 0x10040408, | ||
| 126 | 0x00040400, 0x10000000, 0x10000400, 0x10000008, 0x10040000, | ||
| 127 | 0x00040408, 0x00040000, 0x10000408, 0x10040008, 0x00000000, | ||
| 128 | 0x00000400, 0x00000008, 0x10040400, 0x10040008, 0x10040408, | ||
| 129 | 0x10040000, 0x10000000, 0x00000408, 0x00000008, 0x00040400, | ||
| 130 | 0x00040408, 0x10000400, 0x00000408, 0x10000000, 0x10000400, | ||
| 131 | 0x00040408, 0x10040400, 0x00040008, 0x00000000, 0x10000400, | ||
| 132 | 0x10000000, 0x00000400, 0x10040008, 0x00040000, 0x00040008, | ||
| 133 | 0x10040408, 0x00040400, 0x00000008, 0x10040408, 0x00040400, | ||
| 134 | 0x00040000, 0x10000408, 0x10000008, 0x10040000, 0x00040408, | ||
| 135 | 0x00000000, 0x00000400, 0x10000008, 0x10000408, 0x10040400, | ||
| 136 | 0x10040000, 0x00000408, 0x00000008, 0x10040008, | ||
| 137 | }; | ||
| 138 | |||
| 139 | private static final int s6p[] = { | ||
| 140 | 0x00000800, 0x00000040, 0x00200040, 0x80200000, 0x80200840, | ||
| 141 | 0x80000800, 0x00000840, 0x00000000, 0x00200000, 0x80200040, | ||
| 142 | 0x80000040, 0x00200800, 0x80000000, 0x00200840, 0x00200800, | ||
| 143 | 0x80000040, 0x80200040, 0x00000800, 0x80000800, 0x80200840, | ||
| 144 | 0x00000000, 0x00200040, 0x80200000, 0x00000840, 0x80200800, | ||
| 145 | 0x80000840, 0x00200840, 0x80000000, 0x80000840, 0x80200800, | ||
| 146 | 0x00000040, 0x00200000, 0x80000840, 0x00200800, 0x80200800, | ||
| 147 | 0x80000040, 0x00000800, 0x00000040, 0x00200000, 0x80200800, | ||
| 148 | 0x80200040, 0x80000840, 0x00000840, 0x00000000, 0x00000040, | ||
| 149 | 0x80200000, 0x80000000, 0x00200040, 0x00000000, 0x80200040, | ||
| 150 | 0x00200040, 0x00000840, 0x80000040, 0x00000800, 0x80200840, | ||
| 151 | 0x00200000, 0x00200840, 0x80000000, 0x80000800, 0x80200840, | ||
| 152 | 0x80200000, 0x00200840, 0x00200800, 0x80000800, | ||
| 153 | }; | ||
| 154 | |||
| 155 | private static final int s7p[] = { | ||
| 156 | 0x04100010, 0x04104000, 0x00004010, 0x00000000, 0x04004000, | ||
| 157 | 0x00100010, 0x04100000, 0x04104010, 0x00000010, 0x04000000, | ||
| 158 | 0x00104000, 0x00004010, 0x00104010, 0x04004010, 0x04000010, | ||
| 159 | 0x04100000, 0x00004000, 0x00104010, 0x00100010, 0x04004000, | ||
| 160 | 0x04104010, 0x04000010, 0x00000000, 0x00104000, 0x04000000, | ||
| 161 | 0x00100000, 0x04004010, 0x04100010, 0x00100000, 0x00004000, | ||
| 162 | 0x04104000, 0x00000010, 0x00100000, 0x00004000, 0x04000010, | ||
| 163 | 0x04104010, 0x00004010, 0x04000000, 0x00000000, 0x00104000, | ||
| 164 | 0x04100010, 0x04004010, 0x04004000, 0x00100010, 0x04104000, | ||
| 165 | 0x00000010, 0x00100010, 0x04004000, 0x04104010, 0x00100000, | ||
| 166 | 0x04100000, 0x04000010, 0x00104000, 0x00004010, 0x04004010, | ||
| 167 | 0x04100000, 0x00000010, 0x04104000, 0x00104010, 0x00000000, | ||
| 168 | 0x04000000, 0x04100010, 0x00004000, 0x00104010, | ||
| 169 | }; | ||
| 170 | |||
| 171 | private static final int permRight0[] = { | ||
| 172 | 0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00004000, | ||
| 173 | 0x40004000, 0x00404000, 0x40404000, 0x00000040, 0x40000040, | ||
| 174 | 0x00400040, 0x40400040, 0x00004040, 0x40004040, 0x00404040, | ||
| 175 | 0x40404040, | ||
| 176 | }; | ||
| 177 | |||
| 178 | private static final int permLeft1[] = { | ||
| 179 | 0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00004000, | ||
| 180 | 0x40004000, 0x00404000, 0x40404000, 0x00000040, 0x40000040, | ||
| 181 | 0x00400040, 0x40400040, 0x00004040, 0x40004040, 0x00404040, | ||
| 182 | 0x40404040, | ||
| 183 | }; | ||
| 184 | |||
| 185 | private static final int permRight2[] = { | ||
| 186 | 0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00001000, | ||
| 187 | 0x10001000, 0x00101000, 0x10101000, 0x00000010, 0x10000010, | ||
| 188 | 0x00100010, 0x10100010, 0x00001010, 0x10001010, 0x00101010, | ||
| 189 | 0x10101010, | ||
| 190 | }; | ||
| 191 | |||
| 192 | private static final int permLeft3[] = { | ||
| 193 | 0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00001000, | ||
| 194 | 0x10001000, 0x00101000, 0x10101000, 0x00000010, 0x10000010, | ||
| 195 | 0x00100010, 0x10100010, 0x00001010, 0x10001010, 0x00101010, | ||
| 196 | 0x10101010, | ||
| 197 | }; | ||
| 198 | |||
| 199 | private static final int permRight4[] = { | ||
| 200 | 0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400, | ||
| 201 | 0x04000400, 0x00040400, 0x04040400, 0x00000004, 0x04000004, | ||
| 202 | 0x00040004, 0x04040004, 0x00000404, 0x04000404, 0x00040404, | ||
| 203 | 0x04040404, | ||
| 204 | }; | ||
| 205 | |||
| 206 | private static final int permLeft5[] = { | ||
| 207 | 0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400, | ||
| 208 | 0x04000400, 0x00040400, 0x04040400, 0x00000004, 0x04000004, | ||
| 209 | 0x00040004, 0x04040004, 0x00000404, 0x04000404, 0x00040404, | ||
| 210 | 0x04040404, | ||
| 211 | }; | ||
| 212 | |||
| 213 | private static final int permRight6[] = { | ||
| 214 | 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, | ||
| 215 | 0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001, | ||
| 216 | 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, | ||
| 217 | 0x01010101, | ||
| 218 | }; | ||
| 219 | |||
| 220 | private static final int permLeft7[] = { | ||
| 221 | 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, | ||
| 222 | 0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001, | ||
| 223 | 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, | ||
| 224 | 0x01010101, | ||
| 225 | }; | ||
| 226 | |||
| 227 | private static final int permRight8[] = { | ||
| 228 | 0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00008000, | ||
| 229 | 0x80008000, 0x00808000, 0x80808000, 0x00000080, 0x80000080, | ||
| 230 | 0x00800080, 0x80800080, 0x00008080, 0x80008080, 0x00808080, | ||
| 231 | 0x80808080, | ||
| 232 | }; | ||
| 233 | |||
| 234 | private static final int permLeft9[] = { | ||
| 235 | 0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00008000, | ||
| 236 | 0x80008000, 0x00808000, 0x80808000, 0x00000080, 0x80000080, | ||
| 237 | 0x00800080, 0x80800080, 0x00008080, 0x80008080, 0x00808080, | ||
| 238 | 0x80808080, | ||
| 239 | }; | ||
| 240 | |||
| 241 | private static final int permRightA[] = { | ||
| 242 | 0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00002000, | ||
| 243 | 0x20002000, 0x00202000, 0x20202000, 0x00000020, 0x20000020, | ||
| 244 | 0x00200020, 0x20200020, 0x00002020, 0x20002020, 0x00202020, | ||
| 245 | 0x20202020, | ||
| 246 | }; | ||
| 247 | |||
| 248 | private static final int permLeftB[] = { | ||
| 249 | 0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00002000, | ||
| 250 | 0x20002000, 0x00202000, 0x20202000, 0x00000020, 0x20000020, | ||
| 251 | 0x00200020, 0x20200020, 0x00002020, 0x20002020, 0x00202020, | ||
| 252 | 0x20202020, | ||
| 253 | }; | ||
| 254 | |||
| 255 | private static final int permRightC[] = { | ||
| 256 | 0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00000800, | ||
| 257 | 0x08000800, 0x00080800, 0x08080800, 0x00000008, 0x08000008, | ||
| 258 | 0x00080008, 0x08080008, 0x00000808, 0x08000808, 0x00080808, | ||
| 259 | 0x08080808, | ||
| 260 | }; | ||
| 261 | |||
| 262 | private static final int permLeftD[] = { | ||
| 263 | 0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00000800, | ||
| 264 | 0x08000800, 0x00080800, 0x08080800, 0x00000008, 0x08000008, | ||
| 265 | 0x00080008, 0x08080008, 0x00000808, 0x08000808, 0x00080808, | ||
| 266 | 0x08080808, | ||
| 267 | }; | ||
| 268 | |||
| 269 | private static final int permRightE[] = { | ||
| 270 | 0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200, | ||
| 271 | 0x02000200, 0x00020200, 0x02020200, 0x00000002, 0x02000002, | ||
| 272 | 0x00020002, 0x02020002, 0x00000202, 0x02000202, 0x00020202, | ||
| 273 | 0x02020202, | ||
| 274 | }; | ||
| 275 | |||
| 276 | private static final int permLeftF[] = { | ||
| 277 | 0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00000200, | ||
| 278 | 0x02000200, 0x00020200, 0x02020200, 0x00000002, 0x02000002, | ||
| 279 | 0x00020002, 0x02020002, 0x00000202, 0x02000202, 0x00020202, | ||
| 280 | 0x02020202, | ||
| 281 | }; | ||
| 282 | |||
| 283 | /* | ||
| 284 | * Initial Permutation | ||
| 285 | */ | ||
| 286 | private static final int initPermLeft0[] = { | ||
| 287 | 0x00000000, 0x00008000, 0x00000000, 0x00008000, 0x00000080, | ||
| 288 | 0x00008080, 0x00000080, 0x00008080, 0x00000000, 0x00008000, | ||
| 289 | 0x00000000, 0x00008000, 0x00000080, 0x00008080, 0x00000080, | ||
| 290 | 0x00008080, | ||
| 291 | }; | ||
| 292 | |||
| 293 | private static final int initPermRight0[] = { | ||
| 294 | 0x00000000, 0x00000000, 0x00008000, 0x00008000, 0x00000000, | ||
| 295 | 0x00000000, 0x00008000, 0x00008000, 0x00000080, 0x00000080, | ||
| 296 | 0x00008080, 0x00008080, 0x00000080, 0x00000080, 0x00008080, | ||
| 297 | 0x00008080, | ||
| 298 | }; | ||
| 299 | |||
| 300 | private static final int initPermLeft1[] = { | ||
| 301 | 0x00000000, 0x80000000, 0x00000000, 0x80000000, 0x00800000, | ||
| 302 | 0x80800000, 0x00800000, 0x80800000, 0x00000000, 0x80000000, | ||
| 303 | 0x00000000, 0x80000000, 0x00800000, 0x80800000, 0x00800000, | ||
| 304 | 0x80800000, | ||
| 305 | }; | ||
| 306 | |||
| 307 | private static final int initPermRight1[] = { | ||
| 308 | 0x00000000, 0x00000000, 0x80000000, 0x80000000, 0x00000000, | ||
| 309 | 0x00000000, 0x80000000, 0x80000000, 0x00800000, 0x00800000, | ||
| 310 | 0x80800000, 0x80800000, 0x00800000, 0x00800000, 0x80800000, | ||
| 311 | 0x80800000, | ||
| 312 | }; | ||
| 313 | |||
| 314 | private static final int initPermLeft2[] = { | ||
| 315 | 0x00000000, 0x00004000, 0x00000000, 0x00004000, 0x00000040, | ||
| 316 | 0x00004040, 0x00000040, 0x00004040, 0x00000000, 0x00004000, | ||
| 317 | 0x00000000, 0x00004000, 0x00000040, 0x00004040, 0x00000040, | ||
| 318 | 0x00004040, | ||
| 319 | }; | ||
| 320 | |||
| 321 | private static final int initPermRight2[] = { | ||
| 322 | 0x00000000, 0x00000000, 0x00004000, 0x00004000, 0x00000000, | ||
| 323 | 0x00000000, 0x00004000, 0x00004000, 0x00000040, 0x00000040, | ||
| 324 | 0x00004040, 0x00004040, 0x00000040, 0x00000040, 0x00004040, | ||
| 325 | 0x00004040, | ||
| 326 | }; | ||
| 327 | |||
| 328 | private static final int initPermLeft3[] = { | ||
| 329 | 0x00000000, 0x40000000, 0x00000000, 0x40000000, 0x00400000, | ||
| 330 | 0x40400000, 0x00400000, 0x40400000, 0x00000000, 0x40000000, | ||
| 331 | 0x00000000, 0x40000000, 0x00400000, 0x40400000, 0x00400000, | ||
| 332 | 0x40400000, | ||
| 333 | }; | ||
| 334 | |||
| 335 | private static final int initPermRight3[] = { | ||
| 336 | 0x00000000, 0x00000000, 0x40000000, 0x40000000, 0x00000000, | ||
| 337 | 0x00000000, 0x40000000, 0x40000000, 0x00400000, 0x00400000, | ||
| 338 | 0x40400000, 0x40400000, 0x00400000, 0x00400000, 0x40400000, | ||
| 339 | 0x40400000, | ||
| 340 | }; | ||
| 341 | |||
| 342 | private static final int initPermLeft4[] = { | ||
| 343 | 0x00000000, 0x00002000, 0x00000000, 0x00002000, 0x00000020, | ||
| 344 | 0x00002020, 0x00000020, 0x00002020, 0x00000000, 0x00002000, | ||
| 345 | 0x00000000, 0x00002000, 0x00000020, 0x00002020, 0x00000020, | ||
| 346 | 0x00002020, | ||
| 347 | }; | ||
| 348 | |||
| 349 | private static final int initPermRight4[] = { | ||
| 350 | 0x00000000, 0x00000000, 0x00002000, 0x00002000, 0x00000000, | ||
| 351 | 0x00000000, 0x00002000, 0x00002000, 0x00000020, 0x00000020, | ||
| 352 | 0x00002020, 0x00002020, 0x00000020, 0x00000020, 0x00002020, | ||
| 353 | 0x00002020, | ||
| 354 | }; | ||
| 355 | |||
| 356 | private static final int initPermLeft5[] = { | ||
| 357 | 0x00000000, 0x20000000, 0x00000000, 0x20000000, 0x00200000, | ||
| 358 | 0x20200000, 0x00200000, 0x20200000, 0x00000000, 0x20000000, | ||
| 359 | 0x00000000, 0x20000000, 0x00200000, 0x20200000, 0x00200000, | ||
| 360 | 0x20200000, | ||
| 361 | }; | ||
| 362 | |||
| 363 | private static final int initPermRight5[] = { | ||
| 364 | 0x00000000, 0x00000000, 0x20000000, 0x20000000, 0x00000000, | ||
| 365 | 0x00000000, 0x20000000, 0x20000000, 0x00200000, 0x00200000, | ||
| 366 | 0x20200000, 0x20200000, 0x00200000, 0x00200000, 0x20200000, | ||
| 367 | 0x20200000, | ||
| 368 | }; | ||
| 369 | |||
| 370 | private static final int initPermLeft6[] = { | ||
| 371 | 0x00000000, 0x00001000, 0x00000000, 0x00001000, 0x00000010, | ||
| 372 | 0x00001010, 0x00000010, 0x00001010, 0x00000000, 0x00001000, | ||
| 373 | 0x00000000, 0x00001000, 0x00000010, 0x00001010, 0x00000010, | ||
| 374 | 0x00001010, | ||
| 375 | }; | ||
| 376 | |||
| 377 | private static final int initPermRight6[] = { | ||
| 378 | 0x00000000, 0x00000000, 0x00001000, 0x00001000, 0x00000000, | ||
| 379 | 0x00000000, 0x00001000, 0x00001000, 0x00000010, 0x00000010, | ||
| 380 | 0x00001010, 0x00001010, 0x00000010, 0x00000010, 0x00001010, | ||
| 381 | 0x00001010, | ||
| 382 | }; | ||
| 383 | |||
| 384 | private static final int initPermLeft7[] = { | ||
| 385 | 0x00000000, 0x10000000, 0x00000000, 0x10000000, 0x00100000, | ||
| 386 | 0x10100000, 0x00100000, 0x10100000, 0x00000000, 0x10000000, | ||
| 387 | 0x00000000, 0x10000000, 0x00100000, 0x10100000, 0x00100000, | ||
| 388 | 0x10100000, | ||
| 389 | }; | ||
| 390 | |||
| 391 | private static final int initPermRight7[] = { | ||
| 392 | 0x00000000, 0x00000000, 0x10000000, 0x10000000, 0x00000000, | ||
| 393 | 0x00000000, 0x10000000, 0x10000000, 0x00100000, 0x00100000, | ||
| 394 | 0x10100000, 0x10100000, 0x00100000, 0x00100000, 0x10100000, | ||
| 395 | 0x10100000, | ||
| 396 | }; | ||
| 397 | |||
| 398 | private static final int initPermLeft8[] = { | ||
| 399 | 0x00000000, 0x00000800, 0x00000000, 0x00000800, 0x00000008, | ||
| 400 | 0x00000808, 0x00000008, 0x00000808, 0x00000000, 0x00000800, | ||
| 401 | 0x00000000, 0x00000800, 0x00000008, 0x00000808, 0x00000008, | ||
| 402 | 0x00000808, | ||
| 403 | }; | ||
| 404 | |||
| 405 | private static final int initPermRight8[] = { | ||
| 406 | 0x00000000, 0x00000000, 0x00000800, 0x00000800, 0x00000000, | ||
| 407 | 0x00000000, 0x00000800, 0x00000800, 0x00000008, 0x00000008, | ||
| 408 | 0x00000808, 0x00000808, 0x00000008, 0x00000008, 0x00000808, | ||
| 409 | 0x00000808, | ||
| 410 | }; | ||
| 411 | |||
| 412 | private static final int initPermLeft9[] = { | ||
| 413 | 0x00000000, 0x08000000, 0x00000000, 0x08000000, 0x00080000, | ||
| 414 | 0x08080000, 0x00080000, 0x08080000, 0x00000000, 0x08000000, | ||
| 415 | 0x00000000, 0x08000000, 0x00080000, 0x08080000, 0x00080000, | ||
| 416 | 0x08080000, | ||
| 417 | }; | ||
| 418 | |||
| 419 | private static final int initPermRight9[] = { | ||
| 420 | 0x00000000, 0x00000000, 0x08000000, 0x08000000, 0x00000000, | ||
| 421 | 0x00000000, 0x08000000, 0x08000000, 0x00080000, 0x00080000, | ||
| 422 | 0x08080000, 0x08080000, 0x00080000, 0x00080000, 0x08080000, | ||
| 423 | 0x08080000, | ||
| 424 | }; | ||
| 425 | |||
| 426 | private static final int initPermLeftA[] = { | ||
| 427 | 0x00000000, 0x00000400, 0x00000000, 0x00000400, 0x00000004, | ||
| 428 | 0x00000404, 0x00000004, 0x00000404, 0x00000000, 0x00000400, | ||
| 429 | 0x00000000, 0x00000400, 0x00000004, 0x00000404, 0x00000004, | ||
| 430 | 0x00000404, | ||
| 431 | }; | ||
| 432 | |||
| 433 | private static final int initPermRightA[] = { | ||
| 434 | 0x00000000, 0x00000000, 0x00000400, 0x00000400, 0x00000000, | ||
| 435 | 0x00000000, 0x00000400, 0x00000400, 0x00000004, 0x00000004, | ||
| 436 | 0x00000404, 0x00000404, 0x00000004, 0x00000004, 0x00000404, | ||
| 437 | 0x00000404, | ||
| 438 | }; | ||
| 439 | |||
| 440 | private static final int initPermLeftB[] = { | ||
| 441 | 0x00000000, 0x04000000, 0x00000000, 0x04000000, 0x00040000, | ||
| 442 | 0x04040000, 0x00040000, 0x04040000, 0x00000000, 0x04000000, | ||
| 443 | 0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00040000, | ||
| 444 | 0x04040000, | ||
| 445 | }; | ||
| 446 | |||
| 447 | private static final int initPermRightB[] = { | ||
| 448 | 0x00000000, 0x00000000, 0x04000000, 0x04000000, 0x00000000, | ||
| 449 | 0x00000000, 0x04000000, 0x04000000, 0x00040000, 0x00040000, | ||
| 450 | 0x04040000, 0x04040000, 0x00040000, 0x00040000, 0x04040000, | ||
| 451 | 0x04040000, | ||
| 452 | }; | ||
| 453 | |||
| 454 | private static final int initPermLeftC[] = { | ||
| 455 | 0x00000000, 0x00000200, 0x00000000, 0x00000200, 0x00000002, | ||
| 456 | 0x00000202, 0x00000002, 0x00000202, 0x00000000, 0x00000200, | ||
| 457 | 0x00000000, 0x00000200, 0x00000002, 0x00000202, 0x00000002, | ||
| 458 | 0x00000202, | ||
| 459 | }; | ||
| 460 | |||
| 461 | private static final int initPermRightC[] = { | ||
| 462 | 0x00000000, 0x00000000, 0x00000200, 0x00000200, 0x00000000, | ||
| 463 | 0x00000000, 0x00000200, 0x00000200, 0x00000002, 0x00000002, | ||
| 464 | 0x00000202, 0x00000202, 0x00000002, 0x00000002, 0x00000202, | ||
| 465 | 0x00000202, | ||
| 466 | }; | ||
| 467 | |||
| 468 | private static final int initPermLeftD[] = { | ||
| 469 | 0x00000000, 0x02000000, 0x00000000, 0x02000000, 0x00020000, | ||
| 470 | 0x02020000, 0x00020000, 0x02020000, 0x00000000, 0x02000000, | ||
| 471 | 0x00000000, 0x02000000, 0x00020000, 0x02020000, 0x00020000, | ||
| 472 | 0x02020000, | ||
| 473 | }; | ||
| 474 | |||
| 475 | private static final int initPermRightD[] = { | ||
| 476 | 0x00000000, 0x00000000, 0x02000000, 0x02000000, 0x00000000, | ||
| 477 | 0x00000000, 0x02000000, 0x02000000, 0x00020000, 0x00020000, | ||
| 478 | 0x02020000, 0x02020000, 0x00020000, 0x00020000, 0x02020000, | ||
| 479 | 0x02020000, | ||
| 480 | }; | ||
| 481 | |||
| 482 | private static final int initPermLeftE[] = { | ||
| 483 | 0x00000000, 0x00000100, 0x00000000, 0x00000100, 0x00000001, | ||
| 484 | 0x00000101, 0x00000001, 0x00000101, 0x00000000, 0x00000100, | ||
| 485 | 0x00000000, 0x00000100, 0x00000001, 0x00000101, 0x00000001, | ||
| 486 | 0x00000101, | ||
| 487 | }; | ||
| 488 | |||
| 489 | private static final int initPermRightE[] = { | ||
| 490 | 0x00000000, 0x00000000, 0x00000100, 0x00000100, 0x00000000, | ||
| 491 | 0x00000000, 0x00000100, 0x00000100, 0x00000001, 0x00000001, | ||
| 492 | 0x00000101, 0x00000101, 0x00000001, 0x00000001, 0x00000101, | ||
| 493 | 0x00000101, | ||
| 494 | }; | ||
| 495 | |||
| 496 | private static final int initPermLeftF[] = { | ||
| 497 | 0x00000000, 0x01000000, 0x00000000, 0x01000000, 0x00010000, | ||
| 498 | 0x01010000, 0x00010000, 0x01010000, 0x00000000, 0x01000000, | ||
| 499 | 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00010000, | ||
| 500 | 0x01010000, | ||
| 501 | }; | ||
| 502 | |||
| 503 | private static final int initPermRightF[] = { | ||
| 504 | 0x00000000, 0x00000000, 0x01000000, 0x01000000, 0x00000000, | ||
| 505 | 0x00000000, 0x01000000, 0x01000000, 0x00010000, 0x00010000, | ||
| 506 | 0x01010000, 0x01010000, 0x00010000, 0x00010000, 0x01010000, | ||
| 507 | 0x01010000, | ||
| 508 | }; | ||
| 509 | |||
| 510 | /* | ||
| 511 | * the encryption key array after expansion and permutation | ||
| 512 | */ | ||
| 513 | byte[] expandedKey = null; | ||
| 514 | |||
| 515 | /* | ||
| 516 | * Are we encrypting or decrypting? | ||
| 517 | */ | ||
| 518 | boolean decrypting = false; | ||
| 519 | |||
| 520 | /** | ||
| 521 | * Returns this cipher's block size. | ||
| 522 | * | ||
| 523 | * @return this cipher's block size | ||
| 524 | */ | ||
| 525 | int getBlockSize() { | ||
| 526 | return DES_BLOCK_SIZE; | ||
| 527 | } | ||
| 528 | |||
| 529 | void init(boolean decrypting, String algorithm, byte[] rawKey) | ||
| 530 | throws InvalidKeyException { | ||
| 531 | this.decrypting = decrypting; | ||
| 532 | if (!algorithm.equalsIgnoreCase("DES")) { | ||
| 533 | throw new InvalidKeyException("Wrong algorithm: DES required"); | ||
| 534 | } | ||
| 535 | if (rawKey.length != DES_BLOCK_SIZE) { | ||
| 536 | throw new InvalidKeyException("Wrong key size"); | ||
| 537 | } | ||
| 538 | expandKey(rawKey); | ||
| 539 | } | ||
| 540 | |||
| 541 | /** | ||
| 542 | * Performs encryption operation. | ||
| 543 | * | ||
| 544 | * <p>The input plain text <code>plain</code>, starting at | ||
| 545 | * <code>plainOffset</code> and ending at | ||
| 546 | * <code>(plainOffset + len - 1)</code>, is encrypted. | ||
| 547 | * The result is stored in <code>cipher</code>, starting at | ||
| 548 | * <code>cipherOffset</code>. | ||
| 549 | * | ||
| 550 | * <p>The subclass that implements Cipher should ensure that | ||
| 551 | * <code>init</code> has been called before this method is called. | ||
| 552 | * | ||
| 553 | * @param plain the buffer with the input data to be encrypted | ||
| 554 | * @param plainOffset the offset in <code>plain</code> | ||
| 555 | * @param plainLen the length of the input data | ||
| 556 | * @param cipher the buffer for the result | ||
| 557 | * @param cipherOffset the offset in <code>cipher</code> | ||
| 558 | * | ||
| 559 | * @exception IllegalBlockSizeException if the input length is different | ||
| 560 | * from the cipher's block size | ||
| 561 | */ | ||
| 562 | void encryptBlock(byte[] plain, int plainOffset, | ||
| 563 | byte[] cipher, int cipherOffset) | ||
| 564 | { | ||
| 565 | cipherBlock(plain, plainOffset, cipher, cipherOffset); | ||
| 566 | } | ||
| 567 | |||
| 568 | /** | ||
| 569 | * Performs decryption operation. | ||
| 570 | * | ||
| 571 | * <p>The input cipher text <code>cipher</code>, starting at | ||
| 572 | * <code>cipherOffset</code> and ending at | ||
| 573 | * <code>(cipherOffset + len - 1)</code>, is decrypted. | ||
| 574 | * The result is stored in <code>plain</code>, starting at | ||
| 575 | * <code>plainOffset</code>. | ||
| 576 | * | ||
| 577 | * <p>The subclass that implements Cipher should ensure that | ||
| 578 | * <code>init</code> has been called before this method is called. | ||
| 579 | * | ||
| 580 | * @param cipher the buffer with the input data to be decrypted | ||
| 581 | * @param cipherOffset the offset in <code>cipherOffset</code> | ||
| 582 | * @param cipherLen the length of the input data | ||
| 583 | * @param plain the buffer for the result | ||
| 584 | * @param plainOffset the offset in <code>plain</code> | ||
| 585 | * | ||
| 586 | * @exception IllegalBlockSizeException if the input length is different | ||
| 587 | * from the cipher's block size | ||
| 588 | */ | ||
| 589 | void decryptBlock(byte[] cipher, int cipherOffset, | ||
| 590 | byte[] plain, int plainOffset) | ||
| 591 | { | ||
| 592 | cipherBlock(cipher, cipherOffset, plain, plainOffset); | ||
| 593 | } | ||
| 594 | |||
| 595 | |||
| 596 | void cipherBlock(byte[] in, int inOffset, byte[] out, int outOffset) { | ||
| 597 | byte key[]; | ||
| 598 | int temp; | ||
| 599 | int i, j; | ||
| 600 | int offset; | ||
| 601 | int left, right; | ||
| 602 | |||
| 603 | left = initialPermutationLeft(in, inOffset); | ||
| 604 | right = initialPermutationRight(in, inOffset); | ||
| 605 | |||
| 606 | key = expandedKey; | ||
| 607 | |||
| 608 | if (decrypting) { | ||
| 609 | offset = 16 - DES_BLOCK_SIZE; | ||
| 610 | j = 128 - DES_BLOCK_SIZE; | ||
| 611 | |||
| 612 | } else { | ||
| 613 | offset = 0 - DES_BLOCK_SIZE; | ||
| 614 | j = 0; | ||
| 615 | } | ||
| 616 | |||
| 617 | for (i = 0; i < 16; i++) { | ||
| 618 | // make the first and last bit adjacent | ||
| 619 | // move the first bit to the last | ||
| 620 | temp = (right << 1) | ((right >> 31) & 1); | ||
| 621 | |||
| 622 | // mangler function: | ||
| 623 | // every 6 bit is fed into the sbox, which | ||
| 624 | // produces 4-bit output | ||
| 625 | left ^= s0p[(int)((temp & 0x3f) ^ key[j+0])] | ||
| 626 | ^ s1p[(int)(((temp >> 4) & 0x3f) ^ key[j+1])] | ||
| 627 | ^ s2p[(int)(((temp >> 8) & 0x3f) ^ key[j+2])] | ||
| 628 | ^ s3p[(int)(((temp >> 12) & 0x3f) ^ key[j+3])] | ||
| 629 | ^ s4p[(int)(((temp >> 16) & 0x3f) ^ key[j+4])] | ||
| 630 | ^ s5p[(int)(((temp >> 20) & 0x3f) ^ key[j+5])] | ||
| 631 | ^ s6p[(int)(((temp >> 24) & 0x3f) ^ key[j+6])]; | ||
| 632 | |||
| 633 | // make the last sbox input the last bit from right[0] | ||
| 634 | temp = ((right & 1) << 5) | ((right >> 27) & 0x1f); | ||
| 635 | left ^= s7p[(int)(temp ^ key[j+7])]; | ||
| 636 | temp = left; | ||
| 637 | left = right; | ||
| 638 | right = temp; | ||
| 639 | j -= offset; | ||
| 640 | } | ||
| 641 | |||
| 642 | temp = left; | ||
| 643 | left = right; | ||
| 644 | right = temp; | ||
| 645 | perm(left, right, out, outOffset); | ||
| 646 | } | ||
| 647 | |||
| 648 | private static void perm(int left, int right, | ||
| 649 | byte out[], int offset) { | ||
| 650 | int low, high, temp; | ||
| 651 | |||
| 652 | temp = left; | ||
| 653 | high = permRight0[temp & 0x0000000f]; | ||
| 654 | temp >>= 4; | ||
| 655 | low = permLeft1[temp & 0x0000000f]; | ||
| 656 | temp >>= 4; | ||
| 657 | high |= permRight2[temp & 0x0000000f]; | ||
| 658 | temp >>= 4; | ||
| 659 | low |= permLeft3[temp & 0x0000000f]; | ||
| 660 | temp >>= 4; | ||
| 661 | high |= permRight4[temp & 0x0000000f]; | ||
| 662 | temp >>= 4; | ||
| 663 | low |= permLeft5[temp & 0x0000000f]; | ||
| 664 | temp >>= 4; | ||
| 665 | high |= permRight6[temp & 0x0000000f]; | ||
| 666 | temp >>= 4; | ||
| 667 | low |= permLeft7[temp & 0x0000000f]; | ||
| 668 | |||
| 669 | temp = right; | ||
| 670 | high |= permRight8[temp & 0x0000000f]; | ||
| 671 | temp >>= 4; | ||
| 672 | low |= permLeft9[temp & 0x0000000f]; | ||
| 673 | temp >>= 4; | ||
| 674 | high |= permRightA[temp & 0x0000000f]; | ||
| 675 | temp >>= 4; | ||
| 676 | low |= permLeftB[temp & 0x0000000f]; | ||
| 677 | temp >>= 4; | ||
| 678 | high |= permRightC[temp & 0x0000000f]; | ||
| 679 | temp >>= 4; | ||
| 680 | low |= permLeftD[temp & 0x0000000f]; | ||
| 681 | temp >>= 4; | ||
| 682 | high |= permRightE[temp & 0x0000000f]; | ||
| 683 | temp >>= 4; | ||
| 684 | low |= permLeftF[temp & 0x0000000f]; | ||
| 685 | |||
| 686 | |||
| 687 | out[offset + 0] = (byte)low; | ||
| 688 | out[offset + 1] = (byte)(low >> 8); | ||
| 689 | out[offset + 2] = (byte)(low >> 16); | ||
| 690 | out[offset + 3] = (byte)(low >> 24); | ||
| 691 | out[offset + 4] = (byte)high; | ||
| 692 | out[offset + 5] = (byte)(high >> 8); | ||
| 693 | out[offset + 6] = (byte)(high >> 16); | ||
| 694 | out[offset + 7] = (byte)(high >> 24); | ||
| 695 | |||
| 696 | } | ||
| 697 | |||
| 698 | private static int initialPermutationLeft(byte block[], int offset) { | ||
| 699 | int l; | ||
| 700 | |||
| 701 | l = initPermLeft1[block[offset] & 0xf]; | ||
| 702 | l |= initPermLeft0[(block[offset] >> 4) & 0xf]; | ||
| 703 | l |= initPermLeft3[block[offset + 1] & 0xf]; | ||
| 704 | l |= initPermLeft2[(block[offset + 1] >> 4) & 0xf]; | ||
| 705 | l |= initPermLeft5[block[offset + 2] & 0xf]; | ||
| 706 | l |= initPermLeft4[(block[offset + 2] >> 4) & 0xf]; | ||
| 707 | l |= initPermLeft7[block[offset + 3] & 0xf]; | ||
| 708 | l |= initPermLeft6[(block[offset + 3] >> 4) & 0xf]; | ||
| 709 | l |= initPermLeft9[block[offset + 4] & 0xf]; | ||
| 710 | l |= initPermLeft8[(block[offset + 4] >> 4) & 0xf]; | ||
| 711 | l |= initPermLeftB[block[offset + 5] & 0xf]; | ||
| 712 | l |= initPermLeftA[(block[offset + 5] >> 4) & 0xf]; | ||
| 713 | l |= initPermLeftD[block[offset + 6] & 0xf]; | ||
| 714 | l |= initPermLeftC[(block[offset + 6] >> 4) & 0xf]; | ||
| 715 | l |= initPermLeftF[block[offset + 7] & 0xf]; | ||
| 716 | l |= initPermLeftE[(block[offset + 7] >> 4) & 0xf]; | ||
| 717 | return l; | ||
| 718 | } | ||
| 719 | |||
| 720 | private static int initialPermutationRight(byte block[], int offset) { | ||
| 721 | int l; | ||
| 722 | |||
| 723 | l = initPermRight1[block[offset] & 0xf]; | ||
| 724 | l |= initPermRight0[(block[offset] >> 4) & 0xf]; | ||
| 725 | l |= initPermRight3[block[offset + 1] & 0xf]; | ||
| 726 | l |= initPermRight2[(block[offset + 1] >> 4) & 0xf]; | ||
| 727 | l |= initPermRight5[block[offset + 2] & 0xf]; | ||
| 728 | l |= initPermRight4[(block[offset + 2] >> 4) & 0xf]; | ||
| 729 | l |= initPermRight7[block[offset + 3] & 0xf]; | ||
| 730 | l |= initPermRight6[(block[offset + 3] >> 4) & 0xf]; | ||
| 731 | l |= initPermRight9[block[offset + 4] & 0xf]; | ||
| 732 | l |= initPermRight8[(block[offset + 4] >> 4) & 0xf]; | ||
| 733 | l |= initPermRightB[block[offset + 5] & 0xf]; | ||
| 734 | l |= initPermRightA[(block[offset + 5] >> 4) & 0xf]; | ||
| 735 | l |= initPermRightD[block[offset + 6] & 0xf]; | ||
| 736 | l |= initPermRightC[(block[offset + 6] >> 4) & 0xf]; | ||
| 737 | l |= initPermRightF[block[offset + 7] & 0xf]; | ||
| 738 | l |= initPermRightE[(block[offset + 7] >> 4) & 0xf]; | ||
| 739 | return l; | ||
| 740 | } | ||
| 741 | |||
| 742 | void expandKey(byte key[]) { | ||
| 743 | int octet; | ||
| 744 | byte ek[] = new byte[128]; | ||
| 745 | |||
| 746 | octet = key[0]; | ||
| 747 | if ((octet & 0x80) != 0) { | ||
| 748 | ek[ 3] |= 2; ek[ 9] |= 8; ek[ 18] |= 8; | ||
| 749 | ek[ 27] |= 32; ek[ 33] |= 2; ek[ 42] |= 16; | ||
| 750 | ek[ 48] |= 8; ek[ 65] |= 16; ek[ 74] |= 2; | ||
| 751 | ek[ 80] |= 2; ek[ 89] |= 4; ek[ 99] |= 16; | ||
| 752 | ek[104] |= 4; ek[122] |= 32; | ||
| 753 | } | ||
| 754 | if ((octet & 0x40) != 0) { | ||
| 755 | ek[ 1] |= 4; ek[ 8] |= 1; ek[ 18] |= 4; | ||
| 756 | ek[ 25] |= 32; ek[ 34] |= 32; ek[ 41] |= 8; | ||
| 757 | ek[ 50] |= 8; ek[ 59] |= 32; ek[ 64] |= 16; | ||
| 758 | ek[ 75] |= 4; ek[ 90] |= 1; ek[ 97] |= 16; | ||
| 759 | ek[106] |= 2; ek[112] |= 2; ek[123] |= 1; | ||
| 760 | } | ||
| 761 | if ((octet & 0x20) != 0) { | ||
| 762 | ek[ 2] |= 1; ek[ 19] |= 8; ek[ 35] |= 1; | ||
| 763 | ek[ 40] |= 1; ek[ 50] |= 4; ek[ 57] |= 32; | ||
| 764 | ek[ 75] |= 2; ek[ 80] |= 32; ek[ 89] |= 1; | ||
| 765 | ek[ 96] |= 16; ek[107] |= 4; ek[120] |= 8; | ||
| 766 | } | ||
| 767 | if ((octet & 0x10) != 0) { | ||
| 768 | ek[ 4] |= 32; ek[ 20] |= 2; ek[ 31] |= 4; | ||
| 769 | ek[ 37] |= 32; ek[ 47] |= 1; ek[ 54] |= 1; | ||
| 770 | ek[ 63] |= 2; ek[ 68] |= 1; ek[ 78] |= 4; | ||
| 771 | ek[ 84] |= 8; ek[101] |= 16; ek[108] |= 4; | ||
| 772 | ek[119] |= 16; ek[126] |= 8; | ||
| 773 | } | ||
| 774 | if ((octet & 0x8) != 0) { | ||
| 775 | ek[ 5] |= 4; ek[ 15] |= 4; ek[ 21] |= 32; | ||
| 776 | ek[ 31] |= 1; ek[ 38] |= 1; ek[ 47] |= 2; | ||
| 777 | ek[ 53] |= 2; ek[ 68] |= 8; ek[ 85] |= 16; | ||
| 778 | ek[ 92] |= 4; ek[103] |= 16; ek[108] |= 32; | ||
| 779 | ek[118] |= 32; ek[124] |= 2; | ||
| 780 | } | ||
| 781 | if ((octet & 0x4) != 0) { | ||
| 782 | ek[ 15] |= 2; ek[ 21] |= 2; ek[ 39] |= 8; | ||
| 783 | ek[ 46] |= 16; ek[ 55] |= 32; ek[ 61] |= 1; | ||
| 784 | ek[ 71] |= 16; ek[ 76] |= 32; ek[ 86] |= 32; | ||
| 785 | ek[ 93] |= 4; ek[102] |= 2; ek[108] |= 16; | ||
| 786 | ek[117] |= 8; ek[126] |= 1; | ||
| 787 | } | ||
| 788 | if ((octet & 0x2) != 0) { | ||
| 789 | ek[ 14] |= 16; ek[ 23] |= 32; ek[ 29] |= 1; | ||
| 790 | ek[ 38] |= 8; ek[ 52] |= 2; ek[ 63] |= 4; | ||
| 791 | ek[ 70] |= 2; ek[ 76] |= 16; ek[ 85] |= 8; | ||
| 792 | ek[100] |= 1; ek[110] |= 4; ek[116] |= 8; | ||
| 793 | ek[127] |= 8; | ||
| 794 | } | ||
| 795 | octet = key[1]; | ||
| 796 | if ((octet & 0x80) != 0) { | ||
| 797 | ek[ 1] |= 8; ek[ 8] |= 32; ek[ 17] |= 1; | ||
| 798 | ek[ 24] |= 16; ek[ 35] |= 4; ek[ 50] |= 1; | ||
| 799 | ek[ 57] |= 16; ek[ 67] |= 8; ek[ 83] |= 1; | ||
| 800 | ek[ 88] |= 1; ek[ 98] |= 4; ek[105] |= 32; | ||
| 801 | ek[114] |= 32; ek[123] |= 2; | ||
| 802 | } | ||
| 803 | if ((octet & 0x40) != 0) { | ||
| 804 | ek[ 0] |= 1; ek[ 11] |= 16; ek[ 16] |= 4; | ||
| 805 | ek[ 35] |= 2; ek[ 40] |= 32; ek[ 49] |= 1; | ||
| 806 | ek[ 56] |= 16; ek[ 65] |= 2; ek[ 74] |= 16; | ||
| 807 | ek[ 80] |= 8; ek[ 99] |= 8; ek[115] |= 1; | ||
| 808 | ek[121] |= 4; | ||
| 809 | } | ||
| 810 | if ((octet & 0x20) != 0) { | ||
| 811 | ek[ 9] |= 16; ek[ 18] |= 2; ek[ 24] |= 2; | ||
| 812 | ek[ 33] |= 4; ek[ 43] |= 16; ek[ 48] |= 4; | ||
| 813 | ek[ 66] |= 32; ek[ 73] |= 8; ek[ 82] |= 8; | ||
| 814 | ek[ 91] |= 32; ek[ 97] |= 2; ek[106] |= 16; | ||
| 815 | ek[112] |= 8; ek[122] |= 1; | ||
| 816 | } | ||
| 817 | if ((octet & 0x10) != 0) { | ||
| 818 | ek[ 14] |= 32; ek[ 21] |= 4; ek[ 30] |= 2; | ||
| 819 | ek[ 36] |= 16; ek[ 45] |= 8; ek[ 60] |= 1; | ||
| 820 | ek[ 69] |= 2; ek[ 87] |= 8; ek[ 94] |= 16; | ||
| 821 | ek[103] |= 32; ek[109] |= 1; ek[118] |= 8; | ||
| 822 | ek[124] |= 32; | ||
| 823 | } | ||
| 824 | if ((octet & 0x8) != 0) { | ||
| 825 | ek[ 7] |= 4; ek[ 14] |= 2; ek[ 20] |= 16; | ||
| 826 | ek[ 29] |= 8; ek[ 44] |= 1; ek[ 54] |= 4; | ||
| 827 | ek[ 60] |= 8; ek[ 71] |= 8; ek[ 78] |= 16; | ||
| 828 | ek[ 87] |= 32; ek[ 93] |= 1; ek[102] |= 8; | ||
| 829 | ek[116] |= 2; ek[125] |= 4; | ||
| 830 | } | ||
| 831 | if ((octet & 0x4) != 0) { | ||
| 832 | ek[ 7] |= 2; ek[ 12] |= 1; ek[ 22] |= 4; | ||
| 833 | ek[ 28] |= 8; ek[ 45] |= 16; ek[ 52] |= 4; | ||
| 834 | ek[ 63] |= 16; ek[ 70] |= 8; ek[ 84] |= 2; | ||
| 835 | ek[ 95] |= 4; ek[101] |= 32; ek[111] |= 1; | ||
| 836 | ek[118] |= 1; | ||
| 837 | } | ||
| 838 | if ((octet & 0x2) != 0) { | ||
| 839 | ek[ 6] |= 16; ek[ 13] |= 16; ek[ 20] |= 4; | ||
| 840 | ek[ 31] |= 16; ek[ 36] |= 32; ek[ 46] |= 32; | ||
| 841 | ek[ 53] |= 4; ek[ 62] |= 2; ek[ 69] |= 32; | ||
| 842 | ek[ 79] |= 1; ek[ 86] |= 1; ek[ 95] |= 2; | ||
| 843 | ek[101] |= 2; ek[119] |= 8; | ||
| 844 | } | ||
| 845 | octet = key[2]; | ||
| 846 | if ((octet & 0x80) != 0) { | ||
| 847 | ek[ 0] |= 32; ek[ 10] |= 8; ek[ 19] |= 32; | ||
| 848 | ek[ 25] |= 2; ek[ 34] |= 16; ek[ 40] |= 8; | ||
| 849 | ek[ 59] |= 8; ek[ 66] |= 2; ek[ 72] |= 2; | ||
| 850 | ek[ 81] |= 4; ek[ 91] |= 16; ek[ 96] |= 4; | ||
| 851 | ek[115] |= 2; ek[121] |= 8; | ||
| 852 | } | ||
| 853 | if ((octet & 0x40) != 0) { | ||
| 854 | ek[ 3] |= 16; ek[ 10] |= 4; ek[ 17] |= 32; | ||
| 855 | ek[ 26] |= 32; ek[ 33] |= 8; ek[ 42] |= 8; | ||
| 856 | ek[ 51] |= 32; ek[ 57] |= 2; ek[ 67] |= 4; | ||
| 857 | ek[ 82] |= 1; ek[ 89] |= 16; ek[ 98] |= 2; | ||
| 858 | ek[104] |= 2; ek[113] |= 4; ek[120] |= 1; | ||
| 859 | } | ||
| 860 | if ((octet & 0x20) != 0) { | ||
| 861 | ek[ 1] |= 16; ek[ 11] |= 8; ek[ 27] |= 1; | ||
| 862 | ek[ 32] |= 1; ek[ 42] |= 4; ek[ 49] |= 32; | ||
| 863 | ek[ 58] |= 32; ek[ 67] |= 2; ek[ 72] |= 32; | ||
| 864 | ek[ 81] |= 1; ek[ 88] |= 16; ek[ 99] |= 4; | ||
| 865 | ek[114] |= 1; | ||
| 866 | } | ||
| 867 | if ((octet & 0x10) != 0) { | ||
| 868 | ek[ 6] |= 32; ek[ 12] |= 2; ek[ 23] |= 4; | ||
| 869 | ek[ 29] |= 32; ek[ 39] |= 1; ek[ 46] |= 1; | ||
| 870 | ek[ 55] |= 2; ek[ 61] |= 2; ek[ 70] |= 4; | ||
| 871 | ek[ 76] |= 8; ek[ 93] |= 16; ek[100] |= 4; | ||
| 872 | ek[111] |= 16; ek[116] |= 32; | ||
| 873 | } | ||
| 874 | if ((octet & 0x8) != 0) { | ||
| 875 | ek[ 6] |= 2; ek[ 13] |= 32; ek[ 23] |= 1; | ||
| 876 | ek[ 30] |= 1; ek[ 39] |= 2; ek[ 45] |= 2; | ||
| 877 | ek[ 63] |= 8; ek[ 77] |= 16; ek[ 84] |= 4; | ||
| 878 | ek[ 95] |= 16; ek[100] |= 32; ek[110] |= 32; | ||
| 879 | ek[117] |= 4; ek[127] |= 4; | ||
| 880 | } | ||
| 881 | if ((octet & 0x4) != 0) { | ||
| 882 | ek[ 4] |= 1; ek[ 13] |= 2; ek[ 31] |= 8; | ||
| 883 | ek[ 38] |= 16; ek[ 47] |= 32; ek[ 53] |= 1; | ||
| 884 | ek[ 62] |= 8; ek[ 68] |= 32; ek[ 78] |= 32; | ||
| 885 | ek[ 85] |= 4; ek[ 94] |= 2; ek[100] |= 16; | ||
| 886 | ek[109] |= 8; ek[127] |= 2; | ||
| 887 | } | ||
| 888 | if ((octet & 0x2) != 0) { | ||
| 889 | ek[ 5] |= 16; ek[ 15] |= 32; ek[ 21] |= 1; | ||
| 890 | ek[ 30] |= 8; ek[ 44] |= 2; ek[ 55] |= 4; | ||
| 891 | ek[ 61] |= 32; ek[ 68] |= 16; ek[ 77] |= 8; | ||
| 892 | ek[ 92] |= 1; ek[102] |= 4; ek[108] |= 8; | ||
| 893 | ek[126] |= 16; | ||
| 894 | } | ||
| 895 | octet = key[3]; | ||
| 896 | if ((octet & 0x80) != 0) { | ||
| 897 | ek[ 2] |= 8; ek[ 9] |= 1; ek[ 16] |= 16; | ||
| 898 | ek[ 27] |= 4; ek[ 42] |= 1; ek[ 49] |= 16; | ||
| 899 | ek[ 58] |= 2; ek[ 75] |= 1; ek[ 80] |= 1; | ||
| 900 | ek[ 90] |= 4; ek[ 97] |= 32; ek[106] |= 32; | ||
| 901 | ek[113] |= 8; ek[120] |= 32; | ||
| 902 | } | ||
| 903 | if ((octet & 0x40) != 0) { | ||
| 904 | ek[ 2] |= 4; ek[ 8] |= 4; ek[ 27] |= 2; | ||
| 905 | ek[ 32] |= 32; ek[ 41] |= 1; ek[ 48] |= 16; | ||
| 906 | ek[ 59] |= 4; ek[ 66] |= 16; ek[ 72] |= 8; | ||
| 907 | ek[ 91] |= 8; ek[107] |= 1; ek[112] |= 1; | ||
| 908 | ek[123] |= 16; | ||
| 909 | } | ||
| 910 | if ((octet & 0x20) != 0) { | ||
| 911 | ek[ 3] |= 8; ek[ 10] |= 2; ek[ 16] |= 2; | ||
| 912 | ek[ 25] |= 4; ek[ 35] |= 16; ek[ 40] |= 4; | ||
| 913 | ek[ 59] |= 2; ek[ 65] |= 8; ek[ 74] |= 8; | ||
| 914 | ek[ 83] |= 32; ek[ 89] |= 2; ek[ 98] |= 16; | ||
| 915 | ek[104] |= 8; ek[121] |= 16; | ||
| 916 | } | ||
| 917 | if ((octet & 0x10) != 0) { | ||
| 918 | ek[ 4] |= 2; ek[ 13] |= 4; ek[ 22] |= 2; | ||
| 919 | ek[ 28] |= 16; ek[ 37] |= 8; ek[ 52] |= 1; | ||
| 920 | ek[ 62] |= 4; ek[ 79] |= 8; ek[ 86] |= 16; | ||
| 921 | ek[ 95] |= 32; ek[101] |= 1; ek[110] |= 8; | ||
| 922 | ek[126] |= 32; | ||
| 923 | } | ||
| 924 | if ((octet & 0x8) != 0) { | ||
| 925 | ek[ 5] |= 32; ek[ 12] |= 16; ek[ 21] |= 8; | ||
| 926 | ek[ 36] |= 1; ek[ 46] |= 4; ek[ 52] |= 8; | ||
| 927 | ek[ 70] |= 16; ek[ 79] |= 32; ek[ 85] |= 1; | ||
| 928 | ek[ 94] |= 8; ek[108] |= 2; ek[119] |= 4; | ||
| 929 | ek[126] |= 2; | ||
| 930 | } | ||
| 931 | if ((octet & 0x4) != 0) { | ||
| 932 | ek[ 5] |= 2; ek[ 14] |= 4; ek[ 20] |= 8; | ||
| 933 | ek[ 37] |= 16; ek[ 44] |= 4; ek[ 55] |= 16; | ||
| 934 | ek[ 60] |= 32; ek[ 76] |= 2; ek[ 87] |= 4; | ||
| 935 | ek[ 93] |= 32; ek[103] |= 1; ek[110] |= 1; | ||
| 936 | ek[119] |= 2; ek[124] |= 1; | ||
| 937 | } | ||
| 938 | if ((octet & 0x2) != 0) { | ||
| 939 | ek[ 7] |= 32; ek[ 12] |= 4; ek[ 23] |= 16; | ||
| 940 | ek[ 28] |= 32; ek[ 38] |= 32; ek[ 45] |= 4; | ||
| 941 | ek[ 54] |= 2; ek[ 60] |= 16; ek[ 71] |= 1; | ||
| 942 | ek[ 78] |= 1; ek[ 87] |= 2; ek[ 93] |= 2; | ||
| 943 | ek[111] |= 8; ek[118] |= 16; ek[125] |= 16; | ||
| 944 | } | ||
| 945 | octet = key[4]; | ||
| 946 | if ((octet & 0x80) != 0) { | ||
| 947 | ek[ 1] |= 1; ek[ 11] |= 32; ek[ 17] |= 2; | ||
| 948 | ek[ 26] |= 16; ek[ 32] |= 8; ek[ 51] |= 8; | ||
| 949 | ek[ 64] |= 2; ek[ 73] |= 4; ek[ 83] |= 16; | ||
| 950 | ek[ 88] |= 4; ek[107] |= 2; ek[112] |= 32; | ||
| 951 | ek[122] |= 8; | ||
| 952 | } | ||
| 953 | if ((octet & 0x40) != 0) { | ||
| 954 | ek[ 0] |= 4; ek[ 9] |= 32; ek[ 18] |= 32; | ||
| 955 | ek[ 25] |= 8; ek[ 34] |= 8; ek[ 43] |= 32; | ||
| 956 | ek[ 49] |= 2; ek[ 58] |= 16; ek[ 74] |= 1; | ||
| 957 | ek[ 81] |= 16; ek[ 90] |= 2; ek[ 96] |= 2; | ||
| 958 | ek[105] |= 4; ek[115] |= 16; ek[122] |= 4; | ||
| 959 | } | ||
| 960 | if ((octet & 0x20) != 0) { | ||
| 961 | ek[ 2] |= 2; ek[ 19] |= 1; ek[ 24] |= 1; | ||
| 962 | ek[ 34] |= 4; ek[ 41] |= 32; ek[ 50] |= 32; | ||
| 963 | ek[ 57] |= 8; ek[ 64] |= 32; ek[ 73] |= 1; | ||
| 964 | ek[ 80] |= 16; ek[ 91] |= 4; ek[106] |= 1; | ||
| 965 | ek[113] |= 16; ek[123] |= 8; | ||
| 966 | } | ||
| 967 | if ((octet & 0x10) != 0) { | ||
| 968 | ek[ 3] |= 4; ek[ 10] |= 16; ek[ 16] |= 8; | ||
| 969 | ek[ 35] |= 8; ek[ 51] |= 1; ek[ 56] |= 1; | ||
| 970 | ek[ 67] |= 16; ek[ 72] |= 4; ek[ 91] |= 2; | ||
| 971 | ek[ 96] |= 32; ek[105] |= 1; ek[112] |= 16; | ||
| 972 | ek[121] |= 2; | ||
| 973 | } | ||
| 974 | if ((octet & 0x8) != 0) { | ||
| 975 | ek[ 4] |= 16; ek[ 15] |= 1; ek[ 22] |= 1; | ||
| 976 | ek[ 31] |= 2; ek[ 37] |= 2; ek[ 55] |= 8; | ||
| 977 | ek[ 62] |= 16; ek[ 69] |= 16; ek[ 76] |= 4; | ||
| 978 | ek[ 87] |= 16; ek[ 92] |= 32; ek[102] |= 32; | ||
| 979 | ek[109] |= 4; ek[118] |= 2; ek[125] |= 32; | ||
| 980 | } | ||
| 981 | if ((octet & 0x4) != 0) { | ||
| 982 | ek[ 6] |= 4; ek[ 23] |= 8; ek[ 30] |= 16; | ||
| 983 | ek[ 39] |= 32; ek[ 45] |= 1; ek[ 54] |= 8; | ||
| 984 | ek[ 70] |= 32; ek[ 77] |= 4; ek[ 86] |= 2; | ||
| 985 | ek[ 92] |= 16; ek[101] |= 8; ek[116] |= 1; | ||
| 986 | ek[125] |= 2; | ||
| 987 | } | ||
| 988 | if ((octet & 0x2) != 0) { | ||
| 989 | ek[ 4] |= 4; ek[ 13] |= 1; ek[ 22] |= 8; | ||
| 990 | ek[ 36] |= 2; ek[ 47] |= 4; ek[ 53] |= 32; | ||
| 991 | ek[ 63] |= 1; ek[ 69] |= 8; ek[ 84] |= 1; | ||
| 992 | ek[ 94] |= 4; ek[100] |= 8; ek[117] |= 16; | ||
| 993 | ek[127] |= 32; | ||
| 994 | } | ||
| 995 | octet = key[5]; | ||
| 996 | if ((octet & 0x80) != 0) { | ||
| 997 | ek[ 3] |= 32; ek[ 8] |= 16; ek[ 19] |= 4; | ||
| 998 | ek[ 34] |= 1; ek[ 41] |= 16; ek[ 50] |= 2; | ||
| 999 | ek[ 56] |= 2; ek[ 67] |= 1; ek[ 72] |= 1; | ||
| 1000 | ek[ 82] |= 4; ek[ 89] |= 32; ek[ 98] |= 32; | ||
| 1001 | ek[105] |= 8; ek[114] |= 8; ek[121] |= 1; | ||
| 1002 | } | ||
| 1003 | if ((octet & 0x40) != 0) { | ||
| 1004 | ek[ 1] |= 32; ek[ 19] |= 2; ek[ 24] |= 32; | ||
| 1005 | ek[ 33] |= 1; ek[ 40] |= 16; ek[ 51] |= 4; | ||
| 1006 | ek[ 64] |= 8; ek[ 83] |= 8; ek[ 99] |= 1; | ||
| 1007 | ek[104] |= 1; ek[114] |= 4; ek[120] |= 4; | ||
| 1008 | } | ||
| 1009 | if ((octet & 0x20) != 0) { | ||
| 1010 | ek[ 8] |= 2; ek[ 17] |= 4; ek[ 27] |= 16; | ||
| 1011 | ek[ 32] |= 4; ek[ 51] |= 2; ek[ 56] |= 32; | ||
| 1012 | ek[ 66] |= 8; ek[ 75] |= 32; ek[ 81] |= 2; | ||
| 1013 | ek[ 90] |= 16; ek[ 96] |= 8; ek[115] |= 8; | ||
| 1014 | ek[122] |= 2; | ||
| 1015 | } | ||
| 1016 | if ((octet & 0x10) != 0) { | ||
| 1017 | ek[ 2] |= 16; ek[ 18] |= 1; ek[ 25] |= 16; | ||
| 1018 | ek[ 34] |= 2; ek[ 40] |= 2; ek[ 49] |= 4; | ||
| 1019 | ek[ 59] |= 16; ek[ 66] |= 4; ek[ 73] |= 32; | ||
| 1020 | ek[ 82] |= 32; ek[ 89] |= 8; ek[ 98] |= 8; | ||
| 1021 | ek[107] |= 32; ek[113] |= 2; ek[123] |= 4; | ||
| 1022 | } | ||
| 1023 | if ((octet & 0x8) != 0) { | ||
| 1024 | ek[ 7] |= 1; ek[ 13] |= 8; ek[ 28] |= 1; | ||
| 1025 | ek[ 38] |= 4; ek[ 44] |= 8; ek[ 61] |= 16; | ||
| 1026 | ek[ 71] |= 32; ek[ 77] |= 1; ek[ 86] |= 8; | ||
| 1027 | ek[100] |= 2; ek[111] |= 4; ek[117] |= 32; | ||
| 1028 | ek[124] |= 16; | ||
| 1029 | } | ||
| 1030 | if ((octet & 0x4) != 0) { | ||
| 1031 | ek[ 12] |= 8; ek[ 29] |= 16; ek[ 36] |= 4; | ||
| 1032 | ek[ 47] |= 16; ek[ 52] |= 32; ek[ 62] |= 32; | ||
| 1033 | ek[ 68] |= 2; ek[ 79] |= 4; ek[ 85] |= 32; | ||
| 1034 | ek[ 95] |= 1; ek[102] |= 1; ek[111] |= 2; | ||
| 1035 | ek[117] |= 2; ek[126] |= 4; | ||
| 1036 | } | ||
| 1037 | if ((octet & 0x2) != 0) { | ||
| 1038 | ek[ 5] |= 1; ek[ 15] |= 16; ek[ 20] |= 32; | ||
| 1039 | ek[ 30] |= 32; ek[ 37] |= 4; ek[ 46] |= 2; | ||
| 1040 | ek[ 52] |= 16; ek[ 61] |= 8; ek[ 70] |= 1; | ||
| 1041 | ek[ 79] |= 2; ek[ 85] |= 2; ek[103] |= 8; | ||
| 1042 | ek[110] |= 16; ek[119] |= 32; ek[124] |= 4; | ||
| 1043 | } | ||
| 1044 | octet = key[6]; | ||
| 1045 | if ((octet & 0x80) != 0) { | ||
| 1046 | ek[ 0] |= 16; ek[ 9] |= 2; ek[ 18] |= 16; | ||
| 1047 | ek[ 24] |= 8; ek[ 43] |= 8; ek[ 59] |= 1; | ||
| 1048 | ek[ 65] |= 4; ek[ 75] |= 16; ek[ 80] |= 4; | ||
| 1049 | ek[ 99] |= 2; ek[104] |= 32; ek[113] |= 1; | ||
| 1050 | ek[123] |= 32; | ||
| 1051 | } | ||
| 1052 | if ((octet & 0x40) != 0) { | ||
| 1053 | ek[ 10] |= 32; ek[ 17] |= 8; ek[ 26] |= 8; | ||
| 1054 | ek[ 35] |= 32; ek[ 41] |= 2; ek[ 50] |= 16; | ||
| 1055 | ek[ 56] |= 8; ek[ 66] |= 1; ek[ 73] |= 16; | ||
| 1056 | ek[ 82] |= 2; ek[ 88] |= 2; ek[ 97] |= 4; | ||
| 1057 | ek[107] |= 16; ek[112] |= 4; ek[121] |= 32; | ||
| 1058 | } | ||
| 1059 | if ((octet & 0x20) != 0) { | ||
| 1060 | ek[ 0] |= 2; ek[ 11] |= 1; ek[ 16] |= 1; | ||
| 1061 | ek[ 26] |= 4; ek[ 33] |= 32; ek[ 42] |= 32; | ||
| 1062 | ek[ 49] |= 8; ek[ 58] |= 8; ek[ 65] |= 1; | ||
| 1063 | ek[ 72] |= 16; ek[ 83] |= 4; ek[ 98] |= 1; | ||
| 1064 | ek[105] |= 16; ek[114] |= 2; | ||
| 1065 | } | ||
| 1066 | if ((octet & 0x10) != 0) { | ||
| 1067 | ek[ 8] |= 8; ek[ 27] |= 8; ek[ 43] |= 1; | ||
| 1068 | ek[ 48] |= 1; ek[ 58] |= 4; ek[ 64] |= 4; | ||
| 1069 | ek[ 83] |= 2; ek[ 88] |= 32; ek[ 97] |= 1; | ||
| 1070 | ek[104] |= 16; ek[115] |= 4; ek[122] |= 16; | ||
| 1071 | } | ||
| 1072 | if ((octet & 0x8) != 0) { | ||
| 1073 | ek[ 5] |= 8; ek[ 14] |= 1; ek[ 23] |= 2; | ||
| 1074 | ek[ 29] |= 2; ek[ 47] |= 8; ek[ 54] |= 16; | ||
| 1075 | ek[ 63] |= 32; ek[ 68] |= 4; ek[ 79] |= 16; | ||
| 1076 | ek[ 84] |= 32; ek[ 94] |= 32; ek[101] |= 4; | ||
| 1077 | ek[110] |= 2; ek[116] |= 16; ek[127] |= 1; | ||
| 1078 | } | ||
| 1079 | if ((octet & 0x4) != 0) { | ||
| 1080 | ek[ 4] |= 8; ek[ 15] |= 8; ek[ 22] |= 16; | ||
| 1081 | ek[ 31] |= 32; ek[ 37] |= 1; ek[ 46] |= 8; | ||
| 1082 | ek[ 60] |= 2; ek[ 69] |= 4; ek[ 78] |= 2; | ||
| 1083 | ek[ 84] |= 16; ek[ 93] |= 8; ek[108] |= 1; | ||
| 1084 | ek[118] |= 4; | ||
| 1085 | } | ||
| 1086 | if ((octet & 0x2) != 0) { | ||
| 1087 | ek[ 7] |= 16; ek[ 14] |= 8; ek[ 28] |= 2; | ||
| 1088 | ek[ 39] |= 4; ek[ 45] |= 32; ek[ 55] |= 1; | ||
| 1089 | ek[ 62] |= 1; ek[ 76] |= 1; ek[ 86] |= 4; | ||
| 1090 | ek[ 92] |= 8; ek[109] |= 16; ek[116] |= 4; | ||
| 1091 | ek[125] |= 1; | ||
| 1092 | } | ||
| 1093 | octet = key[7]; | ||
| 1094 | if ((octet & 0x80) != 0) { | ||
| 1095 | ek[ 1] |= 2; ek[ 11] |= 4; ek[ 26] |= 1; | ||
| 1096 | ek[ 33] |= 16; ek[ 42] |= 2; ek[ 48] |= 2; | ||
| 1097 | ek[ 57] |= 4; ek[ 64] |= 1; ek[ 74] |= 4; | ||
| 1098 | ek[ 81] |= 32; ek[ 90] |= 32; ek[ 97] |= 8; | ||
| 1099 | ek[106] |= 8; ek[115] |= 32; ek[120] |= 16; | ||
| 1100 | } | ||
| 1101 | if ((octet & 0x40) != 0) { | ||
| 1102 | ek[ 2] |= 32; ek[ 11] |= 2; ek[ 16] |= 32; | ||
| 1103 | ek[ 25] |= 1; ek[ 32] |= 16; ek[ 43] |= 4; | ||
| 1104 | ek[ 58] |= 1; ek[ 75] |= 8; ek[ 91] |= 1; | ||
| 1105 | ek[ 96] |= 1; ek[106] |= 4; ek[113] |= 32; | ||
| 1106 | } | ||
| 1107 | if ((octet & 0x20) != 0) { | ||
| 1108 | ek[ 3] |= 1; ek[ 9] |= 4; ek[ 19] |= 16; | ||
| 1109 | ek[ 24] |= 4; ek[ 43] |= 2; ek[ 48] |= 32; | ||
| 1110 | ek[ 57] |= 1; ek[ 67] |= 32; ek[ 73] |= 2; | ||
| 1111 | ek[ 82] |= 16; ek[ 88] |= 8; ek[107] |= 8; | ||
| 1112 | ek[120] |= 2; | ||
| 1113 | } | ||
| 1114 | if ((octet & 0x10) != 0) { | ||
| 1115 | ek[ 0] |= 8; ek[ 10] |= 1; ek[ 17] |= 16; | ||
| 1116 | ek[ 26] |= 2; ek[ 32] |= 2; ek[ 41] |= 4; | ||
| 1117 | ek[ 51] |= 16; ek[ 56] |= 4; ek[ 65] |= 32; | ||
| 1118 | ek[ 74] |= 32; ek[ 81] |= 8; ek[ 90] |= 8; | ||
| 1119 | ek[ 99] |= 32; ek[105] |= 2; ek[114] |= 16; | ||
| 1120 | } | ||
| 1121 | if ((octet & 0x8) != 0) { | ||
| 1122 | ek[ 6] |= 1; ek[ 20] |= 1; ek[ 30] |= 4; | ||
| 1123 | ek[ 36] |= 8; ek[ 53] |= 16; ek[ 60] |= 4; | ||
| 1124 | ek[ 69] |= 1; ek[ 78] |= 8; ek[ 92] |= 2; | ||
| 1125 | ek[103] |= 4; ek[109] |= 32; ek[119] |= 1; | ||
| 1126 | ek[125] |= 8; | ||
| 1127 | } | ||
| 1128 | if ((octet & 0x4) != 0) { | ||
| 1129 | ek[ 7] |= 8; ek[ 21] |= 16; ek[ 28] |= 4; | ||
| 1130 | ek[ 39] |= 16; ek[ 44] |= 32; ek[ 54] |= 32; | ||
| 1131 | ek[ 61] |= 4; ek[ 71] |= 4; ek[ 77] |= 32; | ||
| 1132 | ek[ 87] |= 1; ek[ 94] |= 1; ek[103] |= 2; | ||
| 1133 | ek[109] |= 2; ek[124] |= 8; | ||
| 1134 | } | ||
| 1135 | if ((octet & 0x2) != 0) { | ||
| 1136 | ek[ 6] |= 8; ek[ 12] |= 32; ek[ 22] |= 32; | ||
| 1137 | ek[ 29] |= 4; ek[ 38] |= 2; ek[ 44] |= 16; | ||
| 1138 | ek[ 53] |= 8; ek[ 71] |= 2; ek[ 77] |= 2; | ||
| 1139 | ek[ 95] |= 8; ek[102] |= 16; ek[111] |= 32; | ||
| 1140 | ek[117] |= 1; ek[127] |= 16; | ||
| 1141 | } | ||
| 1142 | |||
| 1143 | expandedKey = ek; | ||
| 1144 | } | ||
| 1145 | } | ||