private static void calculateSubkey(byte[] key, byte[] K1, byte[] K2) { byte[] zero = new byte[0x10]; byte[] L = new byte[0x10]; ToolsImpl.aesecbEncrypt(key, zero, 0, L, 0, zero.Length); BigInteger aux = new BigInteger(ConversionUtils.reverseByteWithSizeFIX(L)); if ((L[0] & 0x80) != 0) { //Case MSB is set aux = (aux << 1) ^ (new BigInteger(0x87)); } else { aux = aux << 1; } byte[] aux1 = ConversionUtils.reverseByteWithSizeFIX(aux.ToByteArray()); if (aux1.Length >= 0x10) { ConversionUtils.arraycopy(aux1, aux1.Length - 0x10, K1, 0, 0x10); } else { ConversionUtils.arraycopy(zero, 0, K1, 0, zero.Length); ConversionUtils.arraycopy(aux1, 0, K1, 0x10 - aux1.Length, aux1.Length); } aux = new BigInteger(ConversionUtils.reverseByteWithSizeFIX(K1)); if ((K1[0] & 0x80) != 0) { aux = (aux << 1) ^ (new BigInteger(0x87)); } else { aux = aux << 1; } aux1 = ConversionUtils.reverseByteWithSizeFIX(aux.ToByteArray()); if (aux1.Length >= 0x10) { ConversionUtils.arraycopy(aux1, aux1.Length - 0x10, K2, 0, 0x10); } else { ConversionUtils.arraycopy(zero, 0, K2, 0, zero.Length); ConversionUtils.arraycopy(aux1, 0, K2, 0x10 - aux1.Length, aux1.Length); } }
private static void calculateSubkey(byte[] key, byte[] K1, byte[] K2) { byte[] i = new byte[0x10]; byte[] o = new byte[0x10]; aesecbEncrypt(key, i, 0, o, 0, i.Length); BigInteger integer = new BigInteger(ConversionUtils.reverseByteWithSizeFIX(o)); if ((o[0] & 0x80) != 0) { integer = (integer << 1) ^ new BigInteger(0x87); } else { integer = integer << 1; } byte[] src = ConversionUtils.reverseByteWithSizeFIX(integer.ToByteArray()); if (src.Length >= 0x10) { ConversionUtils.arraycopy(src, src.Length - 0x10, K1, 0L, 0x10); } else { ConversionUtils.arraycopy(i, 0, K1, 0L, i.Length); ConversionUtils.arraycopy(src, 0, K1, (long)(0x10 - src.Length), src.Length); } integer = new BigInteger(ConversionUtils.reverseByteWithSizeFIX(K1)); if ((K1[0] & 0x80) != 0) { integer = (integer << 1) ^ new BigInteger(0x87); } else { integer = integer << 1; } src = ConversionUtils.reverseByteWithSizeFIX(integer.ToByteArray()); if (src.Length >= 0x10) { ConversionUtils.arraycopy(src, src.Length - 0x10, K2, 0L, 0x10); } else { ConversionUtils.arraycopy(i, 0, K2, 0L, i.Length); ConversionUtils.arraycopy(src, 0, K2, (long)(0x10 - src.Length), src.Length); } }