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

package org.bouncycastle.crypto.util;

import java.util.Iterator;
import java.util.Enumeration;
import org.bouncycastle.crypto.ec.CustomNamedCurves;
import java.util.Collections;
import org.bouncycastle.asn1.sec.SECObjectIdentifiers;
import org.bouncycastle.crypto.params.ECNamedDomainParameters;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.asn1.nist.NISTNamedCurves;
import org.bouncycastle.util.Strings;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.math.ec.ECCurve;
import java.util.HashMap;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import java.util.Map;

public class SSHNamedCurves
{
    private static final Map<ASN1ObjectIdentifier, String> oidToName;
    private static final Map<String, ASN1ObjectIdentifier> oidMap;
    private static final Map<String, String> curveNameToSSHName;
    private static HashMap<ECCurve, String> curveMap;
    
    public static ASN1ObjectIdentifier getByName(final String s) {
        return SSHNamedCurves.oidMap.get(s);
    }
    
    public static X9ECParameters getParameters(final String s) {
        return NISTNamedCurves.getByOID(SSHNamedCurves.oidMap.get(Strings.toLowerCase(s)));
    }
    
    public static X9ECParameters getParameters(final ASN1ObjectIdentifier asn1ObjectIdentifier) {
        return NISTNamedCurves.getByOID(asn1ObjectIdentifier);
    }
    
    public static String getName(final ASN1ObjectIdentifier asn1ObjectIdentifier) {
        return SSHNamedCurves.oidToName.get(asn1ObjectIdentifier);
    }
    
    public static String getNameForParameters(final ECDomainParameters ecDomainParameters) {
        if (ecDomainParameters instanceof ECNamedDomainParameters) {
            return getName(((ECNamedDomainParameters)ecDomainParameters).getName());
        }
        return getNameForParameters(ecDomainParameters.getCurve());
    }
    
    public static String getNameForParameters(final ECCurve key) {
        return SSHNamedCurves.curveNameToSSHName.get(SSHNamedCurves.curveMap.get(key));
    }
    
    static {
        oidMap = Collections.unmodifiableMap((Map<? extends String, ? extends ASN1ObjectIdentifier>)new HashMap<String, ASN1ObjectIdentifier>() {
            {
                this.put("nistp256", SECObjectIdentifiers.secp256r1);
                this.put("nistp384", SECObjectIdentifiers.secp384r1);
                this.put("nistp521", SECObjectIdentifiers.secp521r1);
                this.put("nistk163", SECObjectIdentifiers.sect163k1);
                this.put("nistp192", SECObjectIdentifiers.secp192r1);
                this.put("nistp224", SECObjectIdentifiers.secp224r1);
                this.put("nistk233", SECObjectIdentifiers.sect233k1);
                this.put("nistb233", SECObjectIdentifiers.sect233r1);
                this.put("nistk283", SECObjectIdentifiers.sect283k1);
                this.put("nistk409", SECObjectIdentifiers.sect409k1);
                this.put("nistb409", SECObjectIdentifiers.sect409r1);
                this.put("nistt571", SECObjectIdentifiers.sect571k1);
            }
        });
        curveNameToSSHName = Collections.unmodifiableMap((Map<? extends String, ? extends String>)new HashMap<String, String>() {
            {
                final String[][] array = { { "secp256r1", "nistp256" }, { "secp384r1", "nistp384" }, { "secp521r1", "nistp521" }, { "sect163k1", "nistk163" }, { "secp192r1", "nistp192" }, { "secp224r1", "nistp224" }, { "sect233k1", "nistk233" }, { "sect233r1", "nistb233" }, { "sect283k1", "nistk283" }, { "sect409k1", "nistk409" }, { "sect409r1", "nistb409" }, { "sect571k1", "nistt571" } };
                for (int i = 0; i != array.length; ++i) {
                    final String[] array2 = array[i];
                    this.put(array2[0], array2[1]);
                }
            }
        });
        SSHNamedCurves.curveMap = new HashMap<ECCurve, String>() {
            {
                final Enumeration names = CustomNamedCurves.getNames();
                while (names.hasMoreElements()) {
                    final String value = names.nextElement();
                    this.put(CustomNamedCurves.getByNameLazy(value).getCurve(), value);
                }
            }
        };
        oidToName = Collections.unmodifiableMap((Map<? extends ASN1ObjectIdentifier, ? extends String>)new HashMap<ASN1ObjectIdentifier, String>() {
            {
                for (final String value : SSHNamedCurves.oidMap.keySet()) {
                    this.put((ASN1ObjectIdentifier)SSHNamedCurves.oidMap.get(value), value);
                }
            }
        });
    }
}
