org.bouncycastle.jcajce.spec.TLSKeyMaterialSpec Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-ext-debug-jdk14 Show documentation
Show all versions of bcprov-ext-debug-jdk14 Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.4. Note: this package includes the NTRU encryption algorithms.
package org.bouncycastle.jcajce.spec;
import java.security.spec.KeySpec;
import org.bouncycastle.util.Arrays;
/**
* Key Spec class for generating TLS key/iv material.
*/
public class TLSKeyMaterialSpec
implements KeySpec
{
public static final String MASTER_SECRET = "master secret";
public static final String KEY_EXPANSION = "key expansion";
private final byte[] secret;
private final String label;
private final int length;
private final byte[] seed;
/**
* Constructor specifying the basic parameters for a TLS KDF
*
* @param secret secret to use
* @param label e.g. 'master secret', or 'key expansion'
* @param length number of bytes of material to be generated
* @param seedMaterial1 first element of seed material
* @param seedMaterial2 second element of seed material
*/
public TLSKeyMaterialSpec(byte[] secret, String label, int length, byte[] seedMaterial1, byte[] seedMaterial2)
{
this.secret = Arrays.clone(secret);
this.label = label;
this.length = length;
this.seed = Arrays.concatenate(seedMaterial1, seedMaterial2);
}
/**
* Constructor specifying the basic parameters for a TLS KDF
*
* @param secret secret to use
* @param label e.g. 'master secret', or 'key expansion'
* @param length number of bytes of material to be generated
* @param seedMaterial1 first element of seed material
* @param seedMaterial2 second element of seed material
* @param seedMaterial3 third element of seed material
*/
public TLSKeyMaterialSpec(byte[] secret, String label, int length, byte[] seedMaterial1, byte[] seedMaterial2, byte[] seedMaterial3)
{
this.secret = Arrays.clone(secret);
this.label = label;
this.length = length;
this.seed = Arrays.concatenate(seedMaterial1, seedMaterial2, seedMaterial3);
}
/**
* Return the label associated with this spec.
*
* @return the label to be used with the TLS KDF.
*/
public String getLabel()
{
return label;
}
/**
* Return the number of bytes of key material to be generated for this spec.
*
* @return the length in bytes of the result.
*/
public int getLength()
{
return length;
}
/**
* Return the secret associated with this spec.
*
* @return a copy of the secret.
*/
public byte[] getSecret()
{
return Arrays.clone(secret);
}
/**
* Return the full seed for the spec.
*
* @return a copy of the seed.
*/
public byte[] getSeed()
{
return Arrays.clone(seed);
}
}