18212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompackage org.bouncycastle.jce.provider.asymmetric.ec;
28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
38212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.DERObjectIdentifier;
48212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// BEGIN android-removed
58212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
68212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// END android-removed
78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.nist.NISTNamedCurves;
88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.sec.SECNamedCurves;
98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// BEGIN android-removed
108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// END android-removed
128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.x9.X962NamedCurves;
138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.asn1.x9.X9ECParameters;
148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.crypto.params.AsymmetricKeyParameter;
158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.crypto.params.ECDomainParameters;
168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.crypto.params.ECPrivateKeyParameters;
178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.crypto.params.ECPublicKeyParameters;
188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.jce.interfaces.ECPrivateKey;
198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.jce.interfaces.ECPublicKey;
208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.jce.spec.ECParameterSpec;
218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.jce.provider.ProviderUtil;
228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport org.bouncycastle.jce.provider.JCEECPublicKey;
238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.InvalidKeyException;
258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.PrivateKey;
268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromimport java.security.PublicKey;
278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom/**
298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * utility class for converting jce/jca ECDSA, ECDH, and ECDHC
308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * objects into their org.bouncycastle.crypto counterparts.
318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */
328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrompublic class ECUtil
338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{
348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    /**
358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * Returns a sorted array of middle terms of the reduction polynomial.
368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * @param k The unsorted array of middle terms of the reduction polynomial
378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * of length 1 or 3.
388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * @return the sorted array of middle terms of the reduction polynomial.
398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     * This array always has length 3.
408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom     */
418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    static int[] convertMidTerms(
428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        int[] k)
438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        int[] res = new int[3];
458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (k.length == 1)
478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            res[0] = k[0];
498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        else
518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (k.length != 3)
538212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                throw new IllegalArgumentException("Only Trinomials and pentanomials supported");
558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (k[0] < k[1] && k[0] < k[2])
588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
598212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                res[0] = k[0];
608212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                if (k[1] < k[2])
618212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                {
628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[1] = k[1];
638212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[2] = k[2];
648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                }
658212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                else
668212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                {
678212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[1] = k[2];
688212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[2] = k[1];
698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                }
708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            else if (k[1] < k[2])
728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                res[0] = k[1];
748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                if (k[0] < k[2])
758212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                {
768212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[1] = k[0];
778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[2] = k[2];
788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                }
798212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                else
808212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                {
818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[1] = k[2];
828212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[2] = k[0];
838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                }
848212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            else
868212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
878212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                res[0] = k[2];
888212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                if (k[0] < k[1])
898212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                {
908212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[1] = k[0];
918212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[2] = k[1];
928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                }
938212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                else
948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                {
958212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[1] = k[1];
968212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                    res[2] = k[0];
978212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                }
988212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
998212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
1008212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1018212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return res;
1028212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
1038212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1048212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static AsymmetricKeyParameter generatePublicKeyParameter(
1058212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        PublicKey    key)
1068212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        throws InvalidKeyException
1078212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
1088212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (key instanceof ECPublicKey)
1098212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
1108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            ECPublicKey    k = (ECPublicKey)key;
1118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            ECParameterSpec s = k.getParameters();
1128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (s == null)
1148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
1158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                s = ProviderUtil.getEcImplicitlyCa();
1168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                return new ECPublicKeyParameters(
1188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            ((JCEECPublicKey)k).engineGetQ(),
1198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            new ECDomainParameters(s.getCurve(), s.getG(), s.getN(), s.getH(), s.getSeed()));
1208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
1218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            else
1228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
1238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                return new ECPublicKeyParameters(
1248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            k.getQ(),
1258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            new ECDomainParameters(s.getCurve(), s.getG(), s.getN(), s.getH(), s.getSeed()));
1268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
1278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
1288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        else if (key instanceof java.security.interfaces.ECPublicKey)
1298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
1308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            java.security.interfaces.ECPublicKey pubKey = (java.security.interfaces.ECPublicKey)key;
1318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            ECParameterSpec s = EC5Util.convertSpec(pubKey.getParams(), false);
1328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            return new ECPublicKeyParameters(
1338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                EC5Util.convertPoint(pubKey.getParams(), pubKey.getW(), false),
1348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            new ECDomainParameters(s.getCurve(), s.getG(), s.getN(), s.getH(), s.getSeed()));
1358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
1368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        throw new InvalidKeyException("cannot identify EC public key.");
1388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
1398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static AsymmetricKeyParameter generatePrivateKeyParameter(
1418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        PrivateKey    key)
1428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        throws InvalidKeyException
1438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
1448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (key instanceof ECPrivateKey)
1458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
1468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            ECPrivateKey  k = (ECPrivateKey)key;
1478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            ECParameterSpec s = k.getParameters();
1488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (s == null)
1508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
1518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                s = ProviderUtil.getEcImplicitlyCa();
1528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
1538212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            return new ECPrivateKeyParameters(
1558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            k.getD(),
1568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                            new ECDomainParameters(s.getCurve(), s.getG(), s.getN(), s.getH(), s.getSeed()));
1578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
1588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1598212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        throw new InvalidKeyException("can't identify EC private key.");
1608212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
1618212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static DERObjectIdentifier getNamedCurveOid(
1638212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        String name)
1648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
1658212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        DERObjectIdentifier oid = X962NamedCurves.getOID(name);
1668212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1678212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (oid == null)
1688212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
1698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            oid = SECNamedCurves.getOID(name);
1708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (oid == null)
1718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
1728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                oid = NISTNamedCurves.getOID(name);
1738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
1748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // BEGIN android-removed
1758212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // if (oid == null)
1768212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // {
1778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            //     oid = TeleTrusTNamedCurves.getOID(name);
1788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // }
1798212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // if (oid == null)
1808212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // {
1818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            //     oid = ECGOST3410NamedCurves.getOID(name);
1828212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // }
1838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // END android-removed
1848212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
1858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1868212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return oid;
1878212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
1888212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1898212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static X9ECParameters getNamedCurveByOid(
1908212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        DERObjectIdentifier oid)
1918212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
1928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        X9ECParameters params = X962NamedCurves.getByOID(oid);
1938212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
1948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (params == null)
1958212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
1968212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            params = SECNamedCurves.getByOID(oid);
1978212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (params == null)
1988212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
1998212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                params = NISTNamedCurves.getByOID(oid);
2008212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
2018212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // BEGIN android-removed
2028212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // if (params == null)
2038212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // {
2048212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            //     params = TeleTrusTNamedCurves.getByOID(oid);
2058212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // }
2068212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // END android-removed
2078212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
2088212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
2098212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return params;
2108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
2118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
2128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    public static String getCurveName(
2138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        DERObjectIdentifier oid)
2148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    {
2158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        String name = X962NamedCurves.getName(oid);
2168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
2178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        if (name == null)
2188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        {
2198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            name = SECNamedCurves.getName(oid);
2208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            if (name == null)
2218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            {
2228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom                name = NISTNamedCurves.getName(oid);
2238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            }
2248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // BEGIN android-removed
2258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // if (name == null)
2268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // {
2278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            //     name = TeleTrusTNamedCurves.getName(oid);
2288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // }
2298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // if (name == null)
2308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // {
2318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            //     name = ECGOST3410NamedCurves.getName(oid);
2328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // }
2338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom            // END android-removed
2348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        }
2358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom
2368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom        return name;
2378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom    }
2388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom}
239