package org.apache.kerberos.kerb.crypto.enc.provider; import org.apache.kerberos.kerb.crypto.Camellia; import org.apache.kerberos.kerb.KrbException; public abstract class CamelliaProvider extends AbstractEncryptProvider { public CamelliaProvider(int blockSize, int keyInputSize, int keySize) { super(blockSize, keyInputSize, keySize); } @Override protected void doEncrypt(byte[] data, byte[] key, byte[] cipherState, boolean encrypt) throws KrbException { Camellia cipher = new Camellia(); cipher.setKey(encrypt, key); if (encrypt) { cipher.encrypt(data, cipherState); } else { cipher.decrypt(data, cipherState); } } @Override public boolean supportCbcMac() { return true; } @Override public byte[] cbcMac(byte[] key, byte[] cipherState, byte[] data) { Camellia cipher = new Camellia(); cipher.setKey(true, key); int blocksNum = data.length / blockSize(); cipher.cbcEnc(data, 0, blocksNum, cipherState); return data; } }