package org.apache.kerberos.kerb.crypto.key; import org.apache.kerberos.kerb.crypto.BytesUtil; import org.apache.kerberos.kerb.crypto.enc.EncryptProvider; import org.apache.kerberos.kerb.KrbException; import java.io.UnsupportedEncodingException; public abstract class AbstractKeyMaker implements KeyMaker { protected static final byte[] KERBEROS_CONSTANT = "kerberos".getBytes(); private EncryptProvider encProvider; public AbstractKeyMaker(EncryptProvider encProvider) { this.encProvider = encProvider; } protected EncryptProvider encProvider() { return encProvider; } @Override public byte[] random2Key(byte[] randomBits) throws KrbException { return new byte[0]; } protected static char[] makePasswdSalt(String password, String salt) { char[] result = new char[password.length() + salt.length()]; System.arraycopy(password.toCharArray(), 0, result, 0, password.length()); System.arraycopy(salt.toCharArray(), 0, result, password.length(), salt.length()); return result; } protected static int getIterCount(byte[] param, int defCount) { int iterCount = defCount; if (param != null) { if (param.length != 4) { throw new IllegalArgumentException("Invalid param to str2Key"); } iterCount = BytesUtil.bytes2int(param, 0, true); } return iterCount; } protected static byte[] getSaltBytes(String salt, String pepper) throws UnsupportedEncodingException { byte[] saltBytes = salt.getBytes("UTF-8"); if (pepper != null && ! pepper.isEmpty()) { byte[] pepperBytes = pepper.getBytes("UTF-8"); int len = saltBytes.length; len += 1 + pepperBytes.length; byte[] results = new byte[len]; System.arraycopy(pepperBytes, 0, results, 0, pepperBytes.length); results[pepperBytes.length] = (byte) 0; System.arraycopy(saltBytes, 0, results, pepperBytes.length + 1, saltBytes.length); return results; } else { return saltBytes; } } }