package org.apache.kerberos.kerb.crypto.cksum;
import org.apache.kerberos.kerb.crypto.enc.EncryptProvider;
import org.apache.kerberos.kerb.crypto.key.KeyMaker;
import org.apache.kerberos.kerb.KrbException;
public abstract class AbstractKeyedCheckSumTypeHandler extends AbstractCheckSumTypeHandler {
private KeyMaker keyMaker;
public AbstractKeyedCheckSumTypeHandler(EncryptProvider encProvider, HashProvider hashProvider,
int computeSize, int outputSize) {
super(encProvider, hashProvider, computeSize, outputSize);
}
protected void keyMaker(KeyMaker keyMaker) {
this.keyMaker = keyMaker;
}
protected KeyMaker keyMaker() {
return keyMaker;
}
@Override
public byte[] checksumWithKey(byte[] data,
byte[] key, int usage) throws KrbException {
return checksumWithKey(data, 0, data.length, key, usage);
}
@Override
public byte[] checksumWithKey(byte[] data, int start, int len,
byte[] key, int usage) throws KrbException {
int outputSize = outputSize();
byte[] tmp = doChecksumWithKey(data, start, len, key, usage);
if (outputSize < tmp.length) {
byte[] output = new byte[outputSize];
System.arraycopy(tmp, 0, output, 0, outputSize);
return output;
} else {
return tmp;
}
}
protected byte[] doChecksumWithKey(byte[] data, int start, int len,
byte[] key, int usage) throws KrbException {
return new byte[0];
}
@Override
public boolean verifyWithKey(byte[] data, byte[] key,
int usage, byte[] checksum) throws KrbException {
byte[] newCksum = checksumWithKey(data, key, usage);
return checksumEqual(checksum, newCksum);
}
}