/**
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
*
* Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH
*
* Licensed under Apache License 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*/
package de.rub.nds.tlsattacker.tls.crypto;
import de.rub.nds.tlsattacker.tls.constants.PRFAlgorithm;
import java.util.Random;
import mockit.Mocked;
import mockit.NonStrictExpectations;
import org.bouncycastle.crypto.tls.ProtocolVersion;
import org.bouncycastle.crypto.tls.SecurityParameters;
import org.bouncycastle.crypto.tls.TlsContext;
import org.bouncycastle.crypto.tls.TlsUtils;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Juraj Somorovsky <juraj.somorovsky@rub.de>
*/
public class PseudoRandomFunctionTest {
public PseudoRandomFunctionTest() {
}
/**
* Test of compute method, of class PseudoRandomFunction.
*
* @param mockedTlsContext
* @param mockedParameters
*/
@Test
public void testComputeForTls12(@Mocked final TlsContext mockedTlsContext,
@Mocked final SecurityParameters mockedParameters) {
// Record expectations if/as needed:
new NonStrictExpectations() {
{
mockedTlsContext.getServerVersion();
result = ProtocolVersion.TLSv12;
}
{
mockedTlsContext.getSecurityParameters();
result = mockedParameters;
}
{
mockedParameters.getPrfAlgorithm();
result = 1;
}
};
byte[] secret = new byte[48];
String label = "master secret";
byte[] seed = new byte[60];
Random r = new Random();
r.nextBytes(seed);
int size = 48;
byte[] result1 = TlsUtils.PRF(mockedTlsContext, secret, label, seed, size);
byte[] result2 = PseudoRandomFunction.compute(PRFAlgorithm.TLS_PRF_SHA256, secret, label, seed, size);
assertArrayEquals(result1, result2);
new NonStrictExpectations() {
{
mockedParameters.getPrfAlgorithm();
result = 2;
}
};
result1 = TlsUtils.PRF(mockedTlsContext, secret, label, seed, size);
result2 = PseudoRandomFunction.compute(PRFAlgorithm.TLS_PRF_SHA384, secret, label, seed, size);
assertArrayEquals(result1, result2);
}
/**
* Test of compute method, of class PseudoRandomFunction.
*/
@Test
public void testComputeForTls11() {
byte[] secret = new byte[48];
String label = "master secret";
byte[] seed = new byte[60];
Random r = new Random();
r.nextBytes(seed);
int size = 48;
byte[] result1 = TlsUtils.PRF_legacy(secret, label, seed, size);
byte[] result2 = PseudoRandomFunction.compute(PRFAlgorithm.TLS_PRF_LEGACY, secret, label, seed, size);
assertArrayEquals(result1, result2);
}
}