// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.asn1.gm;

import java.util.Enumeration;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.util.Strings;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import java.math.BigInteger;
import org.bouncycastle.math.ec.WNafUtil;
import org.bouncycastle.util.encoders.Hex;
import org.bouncycastle.asn1.x9.X9ECPoint;
import org.bouncycastle.math.ec.ECCurve;
import java.util.Hashtable;
import org.bouncycastle.asn1.x9.X9ECParametersHolder;

public class GMNamedCurves
{
    static X9ECParametersHolder sm2p256v1;
    static X9ECParametersHolder wapip192v1;
    static final Hashtable objIds;
    static final Hashtable curves;
    static final Hashtable names;
    
    private static X9ECPoint configureBasepoint(final ECCurve ecCurve, final String s) {
        final X9ECPoint x9ECPoint = new X9ECPoint(ecCurve, Hex.decodeStrict(s));
        WNafUtil.configureBasepoint(x9ECPoint.getPoint());
        return x9ECPoint;
    }
    
    private static ECCurve configureCurve(final ECCurve ecCurve) {
        return ecCurve;
    }
    
    private static BigInteger fromHex(final String s) {
        return new BigInteger(1, Hex.decodeStrict(s));
    }
    
    static void defineCurve(final String value, final ASN1ObjectIdentifier key, final X9ECParametersHolder value2) {
        GMNamedCurves.objIds.put(Strings.toLowerCase(value), key);
        GMNamedCurves.names.put(key, value);
        GMNamedCurves.curves.put(key, value2);
    }
    
    public static X9ECParameters getByName(final String s) {
        final ASN1ObjectIdentifier oid = getOID(s);
        return (oid == null) ? null : getByOID(oid);
    }
    
    public static X9ECParametersHolder getByNameLazy(final String s) {
        final ASN1ObjectIdentifier oid = getOID(s);
        return (oid == null) ? null : getByOIDLazy(oid);
    }
    
    public static X9ECParameters getByOID(final ASN1ObjectIdentifier asn1ObjectIdentifier) {
        final X9ECParametersHolder byOIDLazy = getByOIDLazy(asn1ObjectIdentifier);
        return (byOIDLazy == null) ? null : byOIDLazy.getParameters();
    }
    
    public static X9ECParametersHolder getByOIDLazy(final ASN1ObjectIdentifier key) {
        return GMNamedCurves.curves.get(key);
    }
    
    public static ASN1ObjectIdentifier getOID(final String s) {
        return GMNamedCurves.objIds.get(Strings.toLowerCase(s));
    }
    
    public static String getName(final ASN1ObjectIdentifier key) {
        return GMNamedCurves.names.get(key);
    }
    
    public static Enumeration getNames() {
        return GMNamedCurves.names.elements();
    }
    
    static {
        GMNamedCurves.sm2p256v1 = new X9ECParametersHolder() {
            @Override
            protected ECCurve createCurve() {
                return configureCurve(new ECCurve.Fp(fromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF"), fromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC"), fromHex("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93"), fromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123"), BigInteger.valueOf(1L), true));
            }
            
            @Override
            protected X9ECParameters createParameters() {
                final byte[] array = null;
                final ECCurve curve = this.getCurve();
                return new X9ECParameters(curve, configureBasepoint(curve, "0432C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"), curve.getOrder(), curve.getCofactor(), array);
            }
        };
        GMNamedCurves.wapip192v1 = new X9ECParametersHolder() {
            @Override
            protected ECCurve createCurve() {
                return configureCurve(new ECCurve.Fp(fromHex("BDB6F4FE3E8B1D9E0DA8C0D46F4C318CEFE4AFE3B6B8551F"), fromHex("BB8E5E8FBC115E139FE6A814FE48AAA6F0ADA1AA5DF91985"), fromHex("1854BEBDC31B21B7AEFC80AB0ECD10D5B1B3308E6DBF11C1"), fromHex("BDB6F4FE3E8B1D9E0DA8C0D40FC962195DFAE76F56564677"), BigInteger.valueOf(1L), true));
            }
            
            @Override
            protected X9ECParameters createParameters() {
                final byte[] array = null;
                final ECCurve curve = this.getCurve();
                return new X9ECParameters(curve, configureBasepoint(curve, "044AD5F7048DE709AD51236DE65E4D4B482C836DC6E410664002BB3A02D4AAADACAE24817A4CA3A1B014B5270432DB27D2"), curve.getOrder(), curve.getCofactor(), array);
            }
        };
        objIds = new Hashtable();
        curves = new Hashtable();
        names = new Hashtable();
        defineCurve("wapip192v1", GMObjectIdentifiers.wapip192v1, GMNamedCurves.wapip192v1);
        defineCurve("wapi192v1", GMObjectIdentifiers.wapi192v1, GMNamedCurves.wapip192v1);
        defineCurve("sm2p256v1", GMObjectIdentifiers.sm2p256v1, GMNamedCurves.sm2p256v1);
    }
}
