package org.apache.kerberos.kerb.crypto.enc.provider;
import org.apache.kerberos.kerb.crypto.enc.EncryptProvider;
import org.apache.kerberos.kerb.KrbException;
public abstract class AbstractEncryptProvider implements EncryptProvider {
private int blockSize;
private int keyInputSize;
private int keySize;
public AbstractEncryptProvider(int blockSize, int keyInputSize, int keySize) {
this.blockSize = blockSize;
this.keyInputSize = keyInputSize;
this.keySize = keySize;
}
@Override
public int keyInputSize() {
return keyInputSize;
}
@Override
public int keySize() {
return keySize;
}
@Override
public int blockSize() {
return blockSize;
}
@Override
public byte[] initState(byte[] key, int keyUsage) {
return new byte[0];
}
@Override
public void encrypt(byte[] key, byte[] cipherState, byte[] data) throws KrbException {
doEncrypt(data, key, cipherState, true);
}
@Override
public void decrypt(byte[] key, byte[] cipherState, byte[] data) throws KrbException {
doEncrypt(data, key, cipherState, false);
}
@Override
public void encrypt(byte[] key, byte[] data) throws KrbException {
byte[] cipherState = new byte[blockSize()];
encrypt(key, cipherState, data);
}
@Override
public void decrypt(byte[] key, byte[] data) throws KrbException {
byte[] cipherState = new byte[blockSize()];
decrypt(key, cipherState, data);
}
protected abstract void doEncrypt(byte[] data, byte[] key, byte[] cipherState, boolean encrypt) throws KrbException;
@Override
public byte[] cbcMac(byte[] key, byte[] iv, byte[] data) throws KrbException {
throw new UnsupportedOperationException();
}
@Override
public boolean supportCbcMac() {
return false;
}
@Override
public void cleanState() {
}
@Override
public void cleanKey() {
}
}