| 107 | } |
| 108 | |
| 109 | private static byte[] CF(byte[] vi, byte[] bi) throws IOException { |
| 110 | int a, b, c, d, e, f, g, h; |
| 111 | a = toInteger(vi, 0); |
| 112 | b = toInteger(vi, 1); |
| 113 | c = toInteger(vi, 2); |
| 114 | d = toInteger(vi, 3); |
| 115 | e = toInteger(vi, 4); |
| 116 | f = toInteger(vi, 5); |
| 117 | g = toInteger(vi, 6); |
| 118 | h = toInteger(vi, 7); |
| 119 | |
| 120 | int[] w = new int[68]; |
| 121 | int[] w1 = new int[64]; |
| 122 | for (int i = 0; i < 16; i++) { |
| 123 | w[i] = toInteger(bi, i); |
| 124 | } |
| 125 | for (int j = 16; j < 68; j++) { |
| 126 | w[j] = P1(w[j - 16] ^ w[j - 9] ^ Integer.rotateLeft(w[j - 3], 15)) |
| 127 | ^ Integer.rotateLeft(w[j - 13], 7) ^ w[j - 6]; |
| 128 | } |
| 129 | for (int j = 0; j < 64; j++) { |
| 130 | w1[j] = w[j] ^ w[j + 4]; |
| 131 | } |
| 132 | int ss1, ss2, tt1, tt2; |
| 133 | for (int j = 0; j < 64; j++) { |
| 134 | ss1 = Integer |
| 135 | .rotateLeft( |
| 136 | Integer.rotateLeft(a, 12) + e |
| 137 | + Integer.rotateLeft(T(j), j), 7); |
| 138 | ss2 = ss1 ^ Integer.rotateLeft(a, 12); |
| 139 | tt1 = FF(a, b, c, j) + d + ss2 + w1[j]; |
| 140 | tt2 = GG(e, f, g, j) + h + ss1 + w[j]; |
| 141 | d = c; |
| 142 | c = Integer.rotateLeft(b, 9); |
| 143 | b = a; |
| 144 | a = tt1; |
| 145 | h = g; |
| 146 | g = Integer.rotateLeft(f, 19); |
| 147 | f = e; |
| 148 | e = P0(tt2); |
| 149 | } |
| 150 | byte[] v = toByteArray(a, b, c, d, e, f, g, h); |
| 151 | for (int i = 0; i < v.length; i++) { |
| 152 | v[i] = (byte) (v[i] ^ vi[i]); |
| 153 | } |
| 154 | return v; |
| 155 | } |
| 156 | |
| 157 | private static int toInteger(byte[] source, int index) { |
| 158 | StringBuilder valueStr = new StringBuilder(); |