package org.apache.kerberos.kerb.crypto.enc.provider;
import org.apache.kerberos.kerb.KrbException;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.GeneralSecurityException;
public abstract class AesProvider extends AbstractEncryptProvider {
public AesProvider(int blockSize, int keyInputSize, int keySize) {
super(blockSize, keyInputSize, keySize);
}
@Override
protected void doEncrypt(byte[] data, byte[] key,
byte[] cipherState, boolean encrypt) throws KrbException {
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES/CTS/NoPadding");
} catch (GeneralSecurityException e) {
KrbException ke = new KrbException("JCE provider may not be installed. "
+ e.getMessage());
ke.initCause(e);
throw ke;
}
try {
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
IvParameterSpec param = new IvParameterSpec(cipherState);
cipher.init(encrypt ?
Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE, secretKey, param);
byte[] output = cipher.doFinal(data);
System.arraycopy(output, 0, data, 0, output.length);
} catch (GeneralSecurityException e) {
KrbException ke = new KrbException(e.getMessage());
ke.initCause(e);
throw ke;
}
}
}