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

package org.bouncycastle.asn1;

import java.io.IOException;

public abstract class ASN1Null extends ASN1Primitive
{
    static final ASN1UniversalType TYPE;
    
    public static ASN1Null getInstance(final Object o) {
        if (o instanceof ASN1Null) {
            return (ASN1Null)o;
        }
        if (o != null) {
            try {
                return (ASN1Null)ASN1Null.TYPE.fromByteArray((byte[])o);
            }
            catch (final IOException ex) {
                throw new IllegalArgumentException("failed to construct NULL from byte[]: " + ex.getMessage());
            }
        }
        return null;
    }
    
    public static ASN1Null getInstance(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return (ASN1Null)ASN1Null.TYPE.getContextTagged(asn1TaggedObject, b);
    }
    
    public static ASN1Null getTagged(final ASN1TaggedObject asn1TaggedObject, final boolean b) {
        return (ASN1Null)ASN1Null.TYPE.getTagged(asn1TaggedObject, b);
    }
    
    ASN1Null() {
    }
    
    @Override
    public int hashCode() {
        return -1;
    }
    
    @Override
    boolean asn1Equals(final ASN1Primitive asn1Primitive) {
        return asn1Primitive instanceof ASN1Null;
    }
    
    @Override
    public String toString() {
        return "NULL";
    }
    
    static void checkContentsLength(final int n) {
        if (0 != n) {
            throw new IllegalStateException("malformed NULL encoding encountered");
        }
    }
    
    static ASN1Null createPrimitive() {
        return DERNull.INSTANCE;
    }
    
    static {
        TYPE = new ASN1UniversalType(5) {
            @Override
            ASN1Primitive fromImplicitPrimitive(final DEROctetString derOctetString) {
                ASN1Null.checkContentsLength(derOctetString.getOctetsLength());
                return ASN1Null.createPrimitive();
            }
        };
    }
}
