in sdk1/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/internal/Hkdf.java [217:252]
public void deriveKey(final byte[] info, final int length, final byte[] output, final int offset)
throws ShortBufferException, IllegalStateException {
assertInitialized();
if (length < 0) {
throw new IllegalArgumentException("Length must be a non-negative value.");
}
if (output.length < offset + length) {
throw new ShortBufferException();
}
Mac mac = createMac();
if (length > 255 * mac.getMacLength()) {
throw new IllegalArgumentException(
"Requested keys may not be longer than 255 times the underlying HMAC length.");
}
byte[] t = EMPTY_ARRAY;
try {
int loc = 0;
byte i = 1;
while (loc < length) {
mac.update(t);
mac.update(info);
mac.update(i);
t = mac.doFinal();
for (int x = 0; x < t.length && loc < length; x++, loc++) {
output[loc] = t[x];
}
i++;
}
} finally {
Arrays.fill(t, (byte) 0); // Zeroize temporary array
}
}