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

package org.bouncycastle.jcajce.provider.asymmetric.ec;

import org.bouncycastle.math.ec.ECCurve;
import java.math.BigInteger;
import org.bouncycastle.asn1.x9.X9ECPoint;
import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util;
import org.bouncycastle.asn1.ASN1Null;
import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.jce.spec.ECNamedCurveSpec;
import org.bouncycastle.asn1.x9.X962Parameters;
import java.security.spec.ECParameterSpec;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.jcajce.provider.config.ProviderConfiguration;
import java.security.spec.ECGenParameterSpec;
import java.security.PrivateKey;
import java.security.InvalidKeyException;
import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import java.security.PublicKey;

class ECUtils
{
    static AsymmetricKeyParameter generatePublicKeyParameter(final PublicKey publicKey) throws InvalidKeyException {
        return (publicKey instanceof BCECPublicKey) ? ((BCECPublicKey)publicKey).engineGetKeyParameters() : ECUtil.generatePublicKeyParameter(publicKey);
    }
    
    static AsymmetricKeyParameter generatePrivateKeyParameter(final PrivateKey privateKey) throws InvalidKeyException {
        return (privateKey instanceof BCECPrivateKey) ? ((BCECPrivateKey)privateKey).engineGetKeyParameters() : ECUtil.generatePrivateKeyParameter(privateKey);
    }
    
    static X9ECParameters getDomainParametersFromGenSpec(final ECGenParameterSpec ecGenParameterSpec, final ProviderConfiguration providerConfiguration) {
        return getDomainParametersFromName(ecGenParameterSpec.getName(), providerConfiguration);
    }
    
    static X9ECParameters getDomainParametersFromName(String substring, final ProviderConfiguration providerConfiguration) {
        if (null == substring || substring.length() < 1) {
            return null;
        }
        final int index = substring.indexOf(32);
        if (index > 0) {
            substring = substring.substring(index + 1);
        }
        final ASN1ObjectIdentifier oid = getOID(substring);
        if (null == oid) {
            return ECUtil.getNamedCurveByName(substring);
        }
        X9ECParameters namedCurveByOid = ECUtil.getNamedCurveByOid(oid);
        if (null == namedCurveByOid && null != providerConfiguration) {
            namedCurveByOid = providerConfiguration.getAdditionalECParameters().get(oid);
        }
        return namedCurveByOid;
    }
    
    static X962Parameters getDomainParametersFromName(final ECParameterSpec ecParameterSpec, final boolean b) {
        X962Parameters x962Parameters;
        if (ecParameterSpec instanceof ECNamedCurveSpec) {
            ASN1ObjectIdentifier namedCurveOid = ECUtil.getNamedCurveOid(((ECNamedCurveSpec)ecParameterSpec).getName());
            if (namedCurveOid == null) {
                namedCurveOid = new ASN1ObjectIdentifier(((ECNamedCurveSpec)ecParameterSpec).getName());
            }
            x962Parameters = new X962Parameters(namedCurveOid);
        }
        else if (ecParameterSpec == null) {
            x962Parameters = new X962Parameters(DERNull.INSTANCE);
        }
        else {
            final ECCurve convertCurve = EC5Util.convertCurve(ecParameterSpec.getCurve());
            x962Parameters = new X962Parameters(new X9ECParameters(convertCurve, new X9ECPoint(EC5Util.convertPoint(convertCurve, ecParameterSpec.getGenerator()), b), ecParameterSpec.getOrder(), BigInteger.valueOf(ecParameterSpec.getCofactor()), ecParameterSpec.getCurve().getSeed()));
        }
        return x962Parameters;
    }
    
    private static ASN1ObjectIdentifier getOID(final String s) {
        final char char1 = s.charAt(0);
        if (char1 >= '0' && char1 <= '2') {
            try {
                return new ASN1ObjectIdentifier(s);
            }
            catch (final Exception ex) {}
        }
        return null;
    }
}
