org.bouncycastle.tls.crypto.impl.TlsImplUtils Maven / Gradle / Ivy
package org.bouncycastle.tls.crypto.impl;
import org.bouncycastle.tls.ExporterLabel;
import org.bouncycastle.tls.ProtocolVersion;
import org.bouncycastle.tls.SecurityParameters;
import org.bouncycastle.tls.crypto.TlsCryptoParameters;
import org.bouncycastle.tls.crypto.TlsSecret;
import org.bouncycastle.util.Arrays;
/**
* Useful utility methods.
*/
public class TlsImplUtils
{
public static boolean isSSL(TlsCryptoParameters cryptoParams)
{
return cryptoParams.getServerVersion().isSSL();
}
public static boolean isTLSv10(ProtocolVersion version)
{
return ProtocolVersion.TLSv10.isEqualOrEarlierVersionOf(version.getEquivalentTLSVersion());
}
public static boolean isTLSv10(TlsCryptoParameters cryptoParams)
{
return isTLSv10(cryptoParams.getServerVersion());
}
public static boolean isTLSv11(ProtocolVersion version)
{
return ProtocolVersion.TLSv11.isEqualOrEarlierVersionOf(version.getEquivalentTLSVersion());
}
public static boolean isTLSv11(TlsCryptoParameters cryptoParams)
{
return isTLSv11(cryptoParams.getServerVersion());
}
public static boolean isTLSv12(ProtocolVersion version)
{
return ProtocolVersion.TLSv12.isEqualOrEarlierVersionOf(version.getEquivalentTLSVersion());
}
public static boolean isTLSv12(TlsCryptoParameters cryptoParams)
{
return isTLSv12(cryptoParams.getServerVersion());
}
public static boolean isTLSv13(ProtocolVersion version)
{
return ProtocolVersion.TLSv13.isEqualOrEarlierVersionOf(version.getEquivalentTLSVersion());
}
public static boolean isTLSv13(TlsCryptoParameters cryptoParams)
{
return isTLSv13(cryptoParams.getServerVersion());
}
public static byte[] calculateKeyBlock(TlsCryptoParameters cryptoParams, int length)
{
SecurityParameters securityParameters = cryptoParams.getSecurityParametersHandshake();
TlsSecret master_secret = securityParameters.getMasterSecret();
int prfAlgorithm = securityParameters.getPRFAlgorithm();
byte[] seed = Arrays.concatenate(securityParameters.getServerRandom(), securityParameters.getClientRandom());
return master_secret.deriveUsingPRF(prfAlgorithm, ExporterLabel.key_expansion, seed, length).extract();
}
}