package org.bouncycastle.jcajce.provider.test;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.security.spec.ECGenParameterSpec;
import java.security.spec.ECParameterSpec;
import junit.framework.TestCase;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class ECAlgorithmParametersTest
extends TestCase
{
public static String[] entries = {
"secp112r1",
"1.3.132.0.6",
"secp112r2",
"1.3.132.0.7",
"secp128r1",
"1.3.132.0.28",
"secp128r2",
"1.3.132.0.29",
"secp160k1",
"1.3.132.0.9",
"secp160r1",
"1.3.132.0.8",
"secp160r2",
"1.3.132.0.30",
"secp192k1",
"1.3.132.0.31",
"secp192r1",
"NIST P-192",
"X9.62 prime192v1",
"1.2.840.10045.3.1.1",
"secp224k1",
"1.3.132.0.32",
"secp224r1",
"NIST P-224",
"1.3.132.0.33",
"secp256k1",
"1.3.132.0.10",
"secp256r1",
"NIST P-256",
"X9.62 prime256v1",
"1.2.840.10045.3.1.7",
"secp384r1",
"NIST P-384",
"1.3.132.0.34",
"secp521r1",
"NIST P-521",
"1.3.132.0.35",
"X9.62 prime192v2",
"1.2.840.10045.3.1.2",
"X9.62 prime192v3",
"1.2.840.10045.3.1.3",
"X9.62 prime239v1",
"1.2.840.10045.3.1.4",
"X9.62 prime239v2",
"1.2.840.10045.3.1.5",
"X9.62 prime239v3",
"1.2.840.10045.3.1.6",
"sect113r1",
"1.3.132.0.4",
"sect113r2",
"1.3.132.0.5",
"sect131r1",
"1.3.132.0.22",
"sect131r2",
"1.3.132.0.23",
"sect163k1",
"NIST K-163",
"1.3.132.0.1",
"sect163r1",
"1.3.132.0.2",
"sect163r2",
"NIST B-163",
"1.3.132.0.15",
"sect193r1",
"1.3.132.0.24",
"sect193r2",
"1.3.132.0.25",
"sect233k1",
"NIST K-233",
"1.3.132.0.26",
"sect233r1",
"NIST B-233",
"1.3.132.0.27",
"sect239k1",
"1.3.132.0.3",
"sect283k1",
"NIST K-283",
"1.3.132.0.16",
"sect283r1",
"NIST B-283",
"1.3.132.0.17",
"sect409k1",
"NIST K-409",
"1.3.132.0.36",
"sect409r1",
"NIST B-409",
"1.3.132.0.37",
"sect571k1",
"NIST K-571",
"1.3.132.0.38",
"sect571r1",
"NIST B-571",
"1.3.132.0.39",
"X9.62 c2tnb191v1",
"1.2.840.10045.3.0.5",
"X9.62 c2tnb191v2",
"1.2.840.10045.3.0.6",
"X9.62 c2tnb191v3",
"1.2.840.10045.3.0.7",
"X9.62 c2tnb239v1",
"1.2.840.10045.3.0.11",
"X9.62 c2tnb239v2",
"1.2.840.10045.3.0.12",
"X9.62 c2tnb239v3",
"1.2.840.10045.3.0.13",
"X9.62 c2tnb359v1",
"1.2.840.10045.3.0.18",
"X9.62 c2tnb431r1",
"1.2.840.10045.3.0.20",
"X9.62 c2pnb163v1",
"1.2.840.10045.3.0.1",
"X9.62 c2pnb163v2",
"1.2.840.10045.3.0.2",
"X9.62 c2pnb163v3",
"1.2.840.10045.3.0.3",
"X9.62 c2pnb176w1",
"1.2.840.10045.3.0.4",
"X9.62 c2pnb208w1",
"1.2.840.10045.3.0.10",
"X9.62 c2pnb272w1",
"1.2.840.10045.3.0.16",
"X9.62 c2pnb304w1",
"1.2.840.10045.3.0.17",
"X9.62 c2pnb368w1",
"1.2.840.10045.3.0.19"};
public void testRecogniseStandardCurveNames()
throws Exception
{
Security.addProvider(new BouncyCastleProvider());
int testCount = 0;
for (int i = 0; i != entries.length; i++)
{
AlgorithmParameters algParams = AlgorithmParameters.getInstance("EC", "BC");
try
{
algParams.init(new ECGenParameterSpec(entries[i]));
}
catch (IllegalArgumentException e)
{
// ignore - this is due to a JDK 1.5 bug
continue;
}
testCount++;
ECParameterSpec ecSpec = null;
ecSpec = algParams.getParameterSpec(ECParameterSpec.class);
ECGenParameterSpec spec = algParams.getParameterSpec(ECGenParameterSpec.class);
TestCase.assertEquals(nextOid(i), spec.getName());
if (ecSpec != null)
{
AlgorithmParameters algParams2 = AlgorithmParameters.getInstance("EC", "BC");
algParams2.init(new ECParameterSpec(ecSpec.getCurve(), ecSpec.getGenerator(), ecSpec.getOrder(), ecSpec.getCofactor()));
spec = algParams2.getParameterSpec(ECGenParameterSpec.class);
TestCase.assertEquals(nextOid(i), spec.getName());
algParams.getEncoded(); // check that we can get an encoded spec.
}
}
TestCase.assertTrue(testCount != 0); // at least one test must work!
}
private String nextOid(int index)
{
for (int i = index; i < entries.length; i++)
{
if (entries[i].charAt(0) >= '0' && entries[i].charAt(0) <= '2')
{
return entries[i];
}
}
return null;
}
}