package org.apache.kerberos.kerb.crypto.key; import org.apache.kerberos.kerb.KrbException; import org.apache.kerberos.kerb.crypto.Pbkdf; import org.apache.kerberos.kerb.crypto.enc.provider.AesProvider; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; public class AesKeyMaker extends DkKeyMaker { public AesKeyMaker(AesProvider encProvider) { super(encProvider); } @Override public byte[] random2Key(byte[] randomBits) throws KrbException { return randomBits; } @Override public byte[] str2key(String string, String salt, byte[] param) throws KrbException { int iterCount = getIterCount(param, 4096); byte[] saltBytes = null; try { saltBytes = getSaltBytes(salt, null); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } int keySize = encProvider().keySize(); byte[] random = new byte[0]; try { random = Pbkdf.PBKDF2(string.toCharArray(), saltBytes, iterCount, keySize); } catch (GeneralSecurityException e) { throw new KrbException("PBKDF2 failed", e); } byte[] tmpKey = random2Key(random); byte[] result = dk(tmpKey, KERBEROS_CONSTANT); return result; } }