org.bouncycastle.tls.crypto.impl.AbstractTlsCrypto Maven / Gradle / Ivy
package org.bouncycastle.tls.crypto.impl;
import java.io.IOException;
import org.bouncycastle.tls.EncryptionAlgorithm;
import org.bouncycastle.tls.MACAlgorithm;
import org.bouncycastle.tls.crypto.TlsCertificate;
import org.bouncycastle.tls.crypto.TlsCipher;
import org.bouncycastle.tls.crypto.TlsCrypto;
import org.bouncycastle.tls.crypto.TlsCryptoParameters;
import org.bouncycastle.tls.crypto.TlsSecret;
/**
* Base class for a TlsCrypto implementation that provides some needed methods from elsewhere in the impl package.
*/
public abstract class AbstractTlsCrypto
implements TlsCrypto
{
/**
* Adopt the passed in secret, creating a new copy of it..
*
* @param secret the secret to make a copy of.
* @return a TlsSecret based the original secret.
*/
public TlsSecret adoptSecret(TlsSecret secret)
{
if (secret instanceof AbstractTlsSecret)
{
AbstractTlsSecret sec = (AbstractTlsSecret)secret;
return createSecret(sec.copyData());
}
throw new IllegalArgumentException("unrecognized TlsSecret - cannot copy data: " + secret.getClass().getName());
}
/**
* Create a cipher for the specified encryption and MAC algorithms.
*
* See enumeration classes {@link EncryptionAlgorithm}, {@link MACAlgorithm} for appropriate argument values.
*
* @param cryptoParams context specific parameters.
* @param encryptionAlgorithm the encryption algorithm to be employed by the cipher.
* @param macAlgorithm the MAC algorithm to be employed by the cipher.
* @return a {@link TlsCipher} implementing the encryption and MAC algorithm.
* @throws IOException
*/
protected abstract TlsCipher createCipher(TlsCryptoParameters cryptoParams, int encryptionAlgorithm, int macAlgorithm)
throws IOException;
/**
* Return an encryptor based on the public key in certificate.
*
* @param certificate the certificate carrying the public key.
* @return a TlsEncryptor based on the certificate's public key.
*/
protected abstract TlsEncryptor createEncryptor(TlsCertificate certificate)
throws IOException;
}