import java.security.SecureRandom;
import java.nio.ByteBuffer;
+
+import java.util.*;
+
/**
* This class provides a communication API to the webserver. It also
* validates the HMACs on the slots and handles encryption.
class CloudComm {
private static final int SALT_SIZE = 8;
- private static final int TIMEOUT_MILLIS = 2000; // 100
+ private static final int TIMEOUT_MILLIS = 5000; // 100
public static final int IV_SIZE = 16;
/** Sets the size for the HMAC. */
private byte[] createIV(long machineId, long localSequenceNumber) {
ByteBuffer buffer = ByteBuffer.allocate(IV_SIZE);
buffer.putLong(machineId);
- buffer.putLong(localSequenceNumber);
+ long localSequenceNumberShifted = localSequenceNumber << 16;
+ buffer.putLong(localSequenceNumberShifted);
return buffer.array();
}
private byte[] encryptSlotAndPrependIV(byte[] rawData, byte[] ivBytes) {
try {
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
- Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding");
+ Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
byte[] encryptedBytes = cipher.doFinal(rawData);
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
- Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding");
+ Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
-
return cipher.doFinal(encryptedBytes);
} catch (Exception e) {