package org.bouncycastle.jcajce.provider.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.bouncycastle.jcajce.provider.digest.GOST3411;
import org.bouncycastle.jcajce.provider.digest.MD2;
import org.bouncycastle.jcajce.provider.digest.MD4;
import org.bouncycastle.jcajce.provider.digest.MD5;
import org.bouncycastle.jcajce.provider.digest.RIPEMD128;
import org.bouncycastle.jcajce.provider.digest.RIPEMD160;
import org.bouncycastle.jcajce.provider.digest.RIPEMD256;
import org.bouncycastle.jcajce.provider.digest.RIPEMD320;
import org.bouncycastle.jcajce.provider.digest.SHA1;
import org.bouncycastle.jcajce.provider.digest.SHA224;
import org.bouncycastle.jcajce.provider.digest.SHA256;
import org.bouncycastle.jcajce.provider.digest.SHA3;
import org.bouncycastle.jcajce.provider.digest.SHA384;
import org.bouncycastle.jcajce.provider.digest.SHA512;
import org.bouncycastle.jcajce.provider.digest.SM3;
import org.bouncycastle.jcajce.provider.digest.Tiger;
import org.bouncycastle.jcajce.provider.digest.Whirlpool;
import org.bouncycastle.jcajce.provider.symmetric.AES;
import org.bouncycastle.jcajce.provider.symmetric.ARC4;
import org.bouncycastle.jcajce.provider.symmetric.Blowfish;
import org.bouncycastle.jcajce.provider.symmetric.CAST5;
import org.bouncycastle.jcajce.provider.symmetric.CAST6;
import org.bouncycastle.jcajce.provider.symmetric.Camellia;
import org.bouncycastle.jcajce.provider.symmetric.ChaCha;
import org.bouncycastle.jcajce.provider.symmetric.DES;
import org.bouncycastle.jcajce.provider.symmetric.DESede;
import org.bouncycastle.jcajce.provider.symmetric.GOST28147;
import org.bouncycastle.jcajce.provider.symmetric.Grain128;
import org.bouncycastle.jcajce.provider.symmetric.Grainv1;
import org.bouncycastle.jcajce.provider.symmetric.HC128;
import org.bouncycastle.jcajce.provider.symmetric.HC256;
import org.bouncycastle.jcajce.provider.symmetric.IDEA;
import org.bouncycastle.jcajce.provider.symmetric.Noekeon;
import org.bouncycastle.jcajce.provider.symmetric.PBEPBKDF2;
import org.bouncycastle.jcajce.provider.symmetric.PBEPKCS12;
import org.bouncycastle.jcajce.provider.symmetric.RC2;
import org.bouncycastle.jcajce.provider.symmetric.RC5;
import org.bouncycastle.jcajce.provider.symmetric.RC6;
import org.bouncycastle.jcajce.provider.symmetric.Rijndael;
import org.bouncycastle.jcajce.provider.symmetric.SEED;
import org.bouncycastle.jcajce.provider.symmetric.Salsa20;
import org.bouncycastle.jcajce.provider.symmetric.Serpent;
import org.bouncycastle.jcajce.provider.symmetric.Skipjack;
import org.bouncycastle.jcajce.provider.symmetric.TEA;
import org.bouncycastle.jcajce.provider.symmetric.Twofish;
import org.bouncycastle.jcajce.provider.symmetric.VMPC;
import org.bouncycastle.jcajce.provider.symmetric.VMPCKSA3;
import org.bouncycastle.jcajce.provider.symmetric.XSalsa20;
import org.bouncycastle.jcajce.provider.symmetric.XTEA;
public class PrivateConstructorTest
extends TestCase
{
public void testSymmetric()
throws Exception
{
evilNoConstructionTest(AES.class);
evilNoConstructionTest(ARC4.class);
evilNoConstructionTest(Blowfish.class);
evilNoConstructionTest(Camellia.class);
evilNoConstructionTest(CAST5.class);
evilNoConstructionTest(CAST6.class);
evilNoConstructionTest(DESede.class);
evilNoConstructionTest(DES.class);
evilNoConstructionTest(GOST28147.class);
evilNoConstructionTest(Grain128.class);
evilNoConstructionTest(Grainv1.class);
evilNoConstructionTest(HC128.class);
evilNoConstructionTest(HC256.class);
evilNoConstructionTest(IDEA.class);
evilNoConstructionTest(Noekeon.class);
evilNoConstructionTest(PBEPBKDF2.class);
evilNoConstructionTest(PBEPKCS12.class);
evilNoConstructionTest(RC2.class);
evilNoConstructionTest(RC5.class);
evilNoConstructionTest(RC6.class);
evilNoConstructionTest(Rijndael.class);
evilNoConstructionTest(ChaCha.class);
evilNoConstructionTest(Salsa20.class);
evilNoConstructionTest(XSalsa20.class);
evilNoConstructionTest(SEED.class);
evilNoConstructionTest(Serpent.class);
evilNoConstructionTest(Skipjack.class);
evilNoConstructionTest(TEA.class);
evilNoConstructionTest(Twofish.class);
evilNoConstructionTest(VMPC.class);
evilNoConstructionTest(VMPCKSA3.class);
evilNoConstructionTest(XTEA.class);
}
public void testDigest()
throws Exception
{
evilNoConstructionTest(GOST3411.class);
evilNoConstructionTest(MD2.class);
evilNoConstructionTest(MD4.class);
evilNoConstructionTest(MD5.class);
evilNoConstructionTest(RIPEMD128.class);
evilNoConstructionTest(RIPEMD160.class);
evilNoConstructionTest(RIPEMD256.class);
evilNoConstructionTest(RIPEMD320.class);
evilNoConstructionTest(SHA1.class);
evilNoConstructionTest(SHA224.class);
evilNoConstructionTest(SHA256.class);
evilNoConstructionTest(SHA384.class);
evilNoConstructionTest(SHA3.class);
evilNoConstructionTest(SHA512.class);
evilNoConstructionTest(SM3.class);
evilNoConstructionTest(Tiger.class);
evilNoConstructionTest(Whirlpool.class);
}
private static void evilNoConstructionTest(Class clazz)
throws InvocationTargetException, IllegalAccessException, InstantiationException
{
Constructor[] constructors = clazz.getDeclaredConstructors();
Assert.assertEquals("Class should only have one constructor", 1, constructors.length);
Constructor constructor = constructors[0];
Assert.assertEquals("Constructor should be private", Modifier.PRIVATE, constructor.getModifiers());
Assert.assertFalse("Constructor should be inaccessible", constructor.isAccessible());
constructor.setAccessible(true); // don't try this at home
Assert.assertEquals("Constructor return type wrong!!", clazz, constructor.newInstance().getClass());
}
}