package org.apache.kerberos.kerb.crypto.cksum;
import org.apache.kerberos.kerb.crypto.BytesUtil;
import org.apache.kerberos.kerb.crypto.enc.EncryptProvider;
import org.apache.kerberos.kerb.crypto.key.DkKeyMaker;
import org.apache.kerberos.kerb.KrbException;
public abstract class KcCheckSum extends AbstractKeyedCheckSumTypeHandler {
public KcCheckSum(EncryptProvider encProvider, HashProvider hashProvider,
int computeSize, int outputSize) {
super(encProvider, hashProvider, computeSize, outputSize);
}
@Override
protected byte[] doChecksumWithKey(byte[] data, int start, int len,
byte[] key, int usage) throws KrbException {
byte[] Kc;
byte[] constant = new byte[5];
BytesUtil.int2bytes(usage, constant, 0, true);
constant[4] = (byte) 0x99;
Kc = ((DkKeyMaker) keyMaker()).dk(key, constant);
byte[] mac = mac(Kc, data, start, len);
return mac;
}
protected abstract byte[] mac(byte[] Kc, byte[] data, int start, int len) throws KrbException;
}