blob: c278787758bf8aa0bf67b40e1ae4154d2100b2da [file] [log] [blame]
package org.bouncycastle.jce.provider.test;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.test.SimpleTest;
public class ThreefishTest
extends SimpleTest
{
private static final byte[] SECRET_KEY_1024 =
{
-15, -32, 56, 110, 22, -42, -26, 34, 25, 17, -83, -2, -78, 112, 49, 127, -4, 70, -110, -21, -10, -114, -82, -122,
78, 53, -105, -44, 34, 45, -102, -19, -30, 73, 87, 19, 25, -92, -64, -72, 11, 125, -92, -124, -126, -70, -92, 54,
46, 3, 86, -108, 71, -42, 44, -110, -36, -31, -48, -84, -19, 102, 124, -118, 17, -84, -119, 126, 37, -8, -13, 21,
-4, 86, 104, -85, -44, 82, 60, -61, -95, -9, -92, 68, -123, -111, -53, -36, -47, 36, -92, 121, 95, 25, 73, 124,
-13, -7, -106, -32, 75, -30, -25, -95, 120, 88, 2, 55, 68, -113, -60, 104, 59, 57, -86, -79, -110, -126, -44,
-18, 73, -37, -128, -40, -62, -15, 23, 87
};
private static final byte[] TEST_BYTES = new byte[1536];
public String getName()
{
return "Threefish";
}
public void performTest()
throws Exception
{
// padding test at 128 pad bytes.
final SecretKey secretKey = new SecretKeySpec(SECRET_KEY_1024, "Threefish-1024");
Cipher cipher = Cipher.getInstance("Threefish-1024/CBC/ISO10126Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(new byte[128]));
byte[] iv = cipher.getIV();
byte[] ciphertext = cipher.doFinal(TEST_BYTES);
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
byte[] cleartext = cipher.doFinal(ciphertext);
if (!Arrays.areEqual(TEST_BYTES, cleartext))
{
fail("Invalid cleartext - ISO10126Padding.");
}
cipher = Cipher.getInstance("Threefish-1024/CBC/PKCS7Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
iv = cipher.getIV();
ciphertext = cipher.doFinal(TEST_BYTES);
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
cleartext = cipher.doFinal(ciphertext);
if (!Arrays.areEqual(TEST_BYTES, cleartext))
{
fail("Invalid cleartext - PKCS7.");
}
}
public static void main(final String[] args)
throws Exception
{
Security.addProvider(new BouncyCastleProvider());
runTest(new ThreefishTest());
}
}