@Test
    void requested_key_size_is_bounded_and_checked() {
        var ikm  = unhex("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b");
        var salt = unhex("000102030405060708090a0b0c");
        var hkdf = HKDF.extractedFrom(salt, ikm);

        assertThrows(IllegalArgumentException.class, () -> hkdf.expand(-1)); // Can't request negative output size

        assertThrows(IllegalArgumentException.class, () -> hkdf.expand(0)); // Need at least 1 key byte

        assertThrows(IllegalArgumentException.class, () -> hkdf.expand(HKDF.MAX_OUTPUT_SIZE + 1)); // 1 too large
    }
HKDF tests that ensure that the output of our own implementation matches the test
vectors given in <a href="https://tools.ietf.org/html/rfc5869">RFC-5869</a>.

We don't expose the internal PRK (pseudo-random key) value of the HKDF itself,
so we don't test it explicitly. The actual OKM (output keying material) inherently
depends on it, so its correctness is verified transitively.

@author vekterli
security-utils/src/test/java/com/yahoo/security/HKDFTest.java