| 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()); |
| } |
| } |