in src/com/amazon/corretto/crypto/provider/Utils.java [199:296]
public static void testMac(Mac mac, SecretKey key, byte[] message, byte[] expected) throws GeneralSecurityException {
mac.init(key);
final int[] lengths = new int[] { 1, 3, 4, 7, 8, 16, 32, 48, 64, 128, 256 };
final String alg = mac.getAlgorithm();
assertArrayEquals(alg, expected, mac.doFinal(message));
for (int x = 0; x < message.length; x++) {
mac.update(message[x]);
}
assertArrayEquals(alg + "-Byte", expected, mac.doFinal());
for (final int length : lengths) {
for (int x = 0; x < message.length; x += length) {
final int len = x + length > message.length ? message.length - x : length;
mac.update(message, x, len);
}
assertArrayEquals(alg + "-" + length, expected, mac.doFinal());
}
// Byte buffer wrapping
mac.update(ByteBuffer.wrap(message));
assertArrayEquals(alg + "-ByteBuffer-Wrap", expected, mac.doFinal());
for (final int length : lengths) {
for (int x = 0; x < message.length; x += length) {
final int len = x + length > message.length ? message.length - x : length;
mac.update(ByteBuffer.wrap(message, x, len));
}
assertArrayEquals(alg + "-ByteBuffer-Wrap-" + length, expected, mac.doFinal());
}
// Byte buffer wrapping, read-only
mac.update(ByteBuffer.wrap(message).asReadOnlyBuffer());
assertArrayEquals(alg + "-ByteBuffer-Wrap-RO", expected, mac.doFinal());
for (final int length : lengths) {
for (int x = 0; x < message.length; x += length) {
final int len = x + length > message.length ? message.length - x : length;
mac.update(ByteBuffer.wrap(message, x, len).asReadOnlyBuffer());
}
assertArrayEquals(alg + "-ByteBuffer-Wrap-RO-" + length, expected, mac.doFinal());
}
// Byte buffer non-direct
ByteBuffer bbuff = ByteBuffer.allocate(message.length);
bbuff.put(message);
bbuff.flip();
mac.update(bbuff);
assertArrayEquals(alg + "-ByteBuffer-NonDirect", expected, mac.doFinal());
for (final int length : lengths) {
bbuff = ByteBuffer.allocate(length);
for (int x = 0; x < message.length; x += length) {
final int len = x + length > message.length ? message.length - x : length;
bbuff.clear();
bbuff.put(message, x, len);
bbuff.flip();
mac.update(bbuff);
}
assertArrayEquals(alg + "-ByteBuffer-NonDirect-" + length, expected, mac.doFinal());
}
// Byte buffer direct
bbuff = ByteBuffer.allocateDirect(message.length);
bbuff.put(message);
bbuff.flip();
mac.update(bbuff);
assertArrayEquals(alg + "-ByteBuffer-Direct", expected, mac.doFinal());
for (final int length : lengths) {
bbuff = ByteBuffer.allocateDirect(length);
for (int x = 0; x < message.length; x += length) {
final int len = x + length > message.length ? message.length - x : length;
bbuff.clear();
bbuff.put(message, x, len);
bbuff.flip();
mac.update(bbuff);
}
assertArrayEquals(alg + "-ByteBuffer-Direct-" + length, expected, mac.doFinal());
}
// Byte buffer direct, read-only
bbuff = ByteBuffer.allocateDirect(message.length);
bbuff.put(message);
bbuff.flip();
mac.update(bbuff.asReadOnlyBuffer());
assertArrayEquals(alg + "-ByteBuffer-Direct", expected, mac.doFinal());
for (final int length : lengths) {
bbuff = ByteBuffer.allocateDirect(length);
for (int x = 0; x < message.length; x += length) {
final int len = x + length > message.length ? message.length - x : length;
bbuff.clear();
bbuff.put(message, x, len);
bbuff.flip();
mac.update(bbuff.asReadOnlyBuffer());
}
assertArrayEquals(alg + "-ByteBuffer-Direct-" + length, expected, mac.doFinal());
}
}