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

package org.bouncycastle.its.operator;

import org.bouncycastle.oer.its.ieee1609dot2.basetypes.EccP384CurvePoint;
import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.EccP256CurvePoint;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.sec.SECObjectIdentifiers;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import java.io.IOException;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.util.BigIntegers;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.EcdsaP384Signature;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.EcdsaP256Signature;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.Signature;

public class ECDSAEncoder
{
    public static byte[] toX962(final Signature signature) {
        byte[] array;
        byte[] array2;
        if (signature.getChoice() == 0 || signature.getChoice() == 1) {
            final EcdsaP256Signature instance = EcdsaP256Signature.getInstance(signature.getSignature());
            array = ASN1OctetString.getInstance(instance.getRSig().getEccp256CurvePoint()).getOctets();
            array2 = instance.getSSig().getOctets();
        }
        else {
            final EcdsaP384Signature instance2 = EcdsaP384Signature.getInstance(signature.getSignature());
            array = ASN1OctetString.getInstance(instance2.getRSig().getEccP384CurvePoint()).getOctets();
            array2 = instance2.getSSig().getOctets();
        }
        try {
            return new DERSequence(new ASN1Encodable[] { new ASN1Integer(BigIntegers.fromUnsignedByteArray(array)), new ASN1Integer(BigIntegers.fromUnsignedByteArray(array2)) }).getEncoded();
        }
        catch (final IOException ex) {
            throw new RuntimeException("der encoding r & s");
        }
    }
    
    public static Signature toITS(final ASN1ObjectIdentifier asn1ObjectIdentifier, final byte[] array) {
        final ASN1Sequence instance = ASN1Sequence.getInstance(array);
        if (asn1ObjectIdentifier.equals(SECObjectIdentifiers.secp256r1)) {
            return new Signature(0, new EcdsaP256Signature(new EccP256CurvePoint(0, new DEROctetString(BigIntegers.asUnsignedByteArray(32, ASN1Integer.getInstance(instance.getObjectAt(0)).getValue()))), new DEROctetString(BigIntegers.asUnsignedByteArray(32, ASN1Integer.getInstance(instance.getObjectAt(1)).getValue()))));
        }
        if (asn1ObjectIdentifier.equals(TeleTrusTObjectIdentifiers.brainpoolP256r1)) {
            return new Signature(1, new EcdsaP256Signature(new EccP256CurvePoint(0, new DEROctetString(BigIntegers.asUnsignedByteArray(32, ASN1Integer.getInstance(instance.getObjectAt(0)).getValue()))), new DEROctetString(BigIntegers.asUnsignedByteArray(32, ASN1Integer.getInstance(instance.getObjectAt(1)).getValue()))));
        }
        if (asn1ObjectIdentifier.equals(TeleTrusTObjectIdentifiers.brainpoolP384r1)) {
            return new Signature(2, new EcdsaP384Signature(new EccP384CurvePoint(0, new DEROctetString(BigIntegers.asUnsignedByteArray(48, ASN1Integer.getInstance(instance.getObjectAt(0)).getValue()))), new DEROctetString(BigIntegers.asUnsignedByteArray(48, ASN1Integer.getInstance(instance.getObjectAt(1)).getValue()))));
        }
        throw new IllegalArgumentException("unknown curveID");
    }
}
