HBASE-26613 The logic of the method incrementIV in Encryption class has problem (#3968)
Signed-off-by: Duo Zhang <zhangduo@apache.org>
This commit is contained in:
parent
68d8573c09
commit
c6aac613a0
|
@ -640,20 +640,17 @@ public final class Encryption {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void incrementIv(byte[] iv, int v) {
|
public static void incrementIv(byte[] iv, int v) {
|
||||||
|
// v should be > 0
|
||||||
int length = iv.length;
|
int length = iv.length;
|
||||||
boolean carry = true;
|
int sum = 0;
|
||||||
// TODO: Optimize for v > 1, e.g. 16, 32
|
|
||||||
do {
|
|
||||||
for (int i = 0; i < length; i++) {
|
for (int i = 0; i < length; i++) {
|
||||||
if (carry) {
|
if (v <= 0) {
|
||||||
iv[i] = (byte) ((iv[i] + 1) & 0xFF);
|
|
||||||
carry = 0 == iv[i];
|
|
||||||
} else {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
sum = v + (iv[i] & 0xFF);
|
||||||
|
v = sum / 256;
|
||||||
|
iv[i] = (byte)(sum % 256);
|
||||||
}
|
}
|
||||||
v--;
|
|
||||||
} while (v > 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -89,6 +89,26 @@ public class TestEncryption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIncrementIV() {
|
||||||
|
byte[] iv = new byte[] {1, 2, 3};
|
||||||
|
byte[] iv_neg = new byte[] {-3, -13, 25};
|
||||||
|
Encryption.incrementIv(iv);
|
||||||
|
assertTrue(Bytes.equals(iv, new byte[] {2, 2, 3}));
|
||||||
|
|
||||||
|
Encryption.incrementIv(iv, 255);
|
||||||
|
assertTrue(Bytes.equals(iv, new byte[] {1, 3, 3}));
|
||||||
|
|
||||||
|
Encryption.incrementIv(iv, 1024);
|
||||||
|
assertTrue(Bytes.equals(iv, new byte[] {1, 7, 3}));
|
||||||
|
|
||||||
|
Encryption.incrementIv(iv_neg);
|
||||||
|
assertTrue(Bytes.equals(iv_neg, new byte[] {-2, -13, 25}));
|
||||||
|
|
||||||
|
Encryption.incrementIv(iv_neg, 5);
|
||||||
|
assertTrue(Bytes.equals(iv_neg, new byte[] {3, -12, 25}));
|
||||||
|
}
|
||||||
|
|
||||||
private void checkTransformSymmetry(byte[] keyBytes, byte[] iv, byte[] plaintext)
|
private void checkTransformSymmetry(byte[] keyBytes, byte[] iv, byte[] plaintext)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
LOG.info("checkTransformSymmetry: AES, plaintext length = " + plaintext.length);
|
LOG.info("checkTransformSymmetry: AES, plaintext length = " + plaintext.length);
|
||||||
|
|
Loading…
Reference in New Issue