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

package org.bouncycastle.asn1.eac;

import java.util.HashMap;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.DERSequence;
import java.io.IOException;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.util.Integers;
import java.util.Map;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.ASN1Object;

public class CertificateHolderAuthorization extends ASN1Object
{
    public static final ASN1ObjectIdentifier id_role_EAC;
    public static final int CVCA = 192;
    public static final int DV_DOMESTIC = 128;
    public static final int DV_FOREIGN = 64;
    public static final int IS = 0;
    public static final int RADG4 = 2;
    public static final int RADG3 = 1;
    static Map RightsDecodeMap;
    static BidirectionalMap AuthorizationRole;
    private ASN1ObjectIdentifier oid;
    private byte accessRights;
    
    public static String getRoleDescription(final int n) {
        return CertificateHolderAuthorization.AuthorizationRole.get(Integers.valueOf(n));
    }
    
    public static int getFlag(final String str) {
        final Integer n = (Integer)CertificateHolderAuthorization.AuthorizationRole.getReverse(str);
        if (n == null) {
            throw new IllegalArgumentException("Unknown value " + str);
        }
        return n;
    }
    
    private void setPrivateData(final ASN1Sequence asn1Sequence) {
        final ASN1Primitive asn1Primitive = (ASN1Primitive)asn1Sequence.getObjectAt(0);
        if (!(asn1Primitive instanceof ASN1ObjectIdentifier)) {
            throw new IllegalArgumentException("no Oid in CerticateHolderAuthorization");
        }
        this.oid = (ASN1ObjectIdentifier)asn1Primitive;
        final ASN1Primitive asn1Primitive2 = (ASN1Primitive)asn1Sequence.getObjectAt(1);
        if (asn1Primitive2 instanceof ASN1TaggedObject) {
            this.accessRights = ASN1OctetString.getInstance(ASN1TaggedObject.getInstance(asn1Primitive2, 64, 19).getBaseUniversal(false, 4)).getOctets()[0];
            return;
        }
        throw new IllegalArgumentException("No access rights in CerticateHolderAuthorization");
    }
    
    public CertificateHolderAuthorization(final ASN1ObjectIdentifier oid, final int n) throws IOException {
        this.setOid(oid);
        this.setAccessRights((byte)n);
    }
    
    public CertificateHolderAuthorization(final ASN1TaggedObject asn1TaggedObject) throws IOException {
        if (asn1TaggedObject.hasTag(64, 76)) {
            this.setPrivateData(ASN1Sequence.getInstance(asn1TaggedObject.getBaseUniversal(false, 16)));
            return;
        }
        throw new IllegalArgumentException("Unrecognized object in CerticateHolderAuthorization");
    }
    
    public int getAccessRights() {
        return this.accessRights & 0xFF;
    }
    
    private void setAccessRights(final byte accessRights) {
        this.accessRights = accessRights;
    }
    
    public ASN1ObjectIdentifier getOid() {
        return this.oid;
    }
    
    private void setOid(final ASN1ObjectIdentifier oid) {
        this.oid = oid;
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        return EACTagged.create(76, new DERSequence(this.oid, EACTagged.create(19, new byte[] { this.accessRights })));
    }
    
    static {
        id_role_EAC = EACObjectIdentifiers.bsi_de.branch("3.1.2.1");
        CertificateHolderAuthorization.RightsDecodeMap = new HashMap();
        CertificateHolderAuthorization.AuthorizationRole = new BidirectionalMap();
        CertificateHolderAuthorization.RightsDecodeMap.put(Integers.valueOf(2), "RADG4");
        CertificateHolderAuthorization.RightsDecodeMap.put(Integers.valueOf(1), "RADG3");
        CertificateHolderAuthorization.AuthorizationRole.put(Integers.valueOf(192), "CVCA");
        CertificateHolderAuthorization.AuthorizationRole.put(Integers.valueOf(128), "DV_DOMESTIC");
        CertificateHolderAuthorization.AuthorizationRole.put(Integers.valueOf(64), "DV_FOREIGN");
        CertificateHolderAuthorization.AuthorizationRole.put(Integers.valueOf(0), "IS");
    }
}
