public static void testMac()

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());
        }
    }