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

package org.bouncycastle.asn1.tsp;

import org.bouncycastle.asn1.ASN1Primitive;
import java.util.Enumeration;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Object;

public class PartialHashtree extends ASN1Object
{
    private final ASN1Sequence values;
    
    public static PartialHashtree getInstance(final Object o) {
        if (o instanceof PartialHashtree) {
            return (PartialHashtree)o;
        }
        if (o != null) {
            return new PartialHashtree(ASN1Sequence.getInstance(o));
        }
        return null;
    }
    
    private PartialHashtree(final ASN1Sequence values) {
        for (int i = 0; i != values.size(); ++i) {
            if (!(values.getObjectAt(i) instanceof ASN1OctetString)) {
                throw new IllegalArgumentException("unknown object in constructor: " + values.getObjectAt(i).getClass().getName());
            }
        }
        this.values = values;
    }
    
    public PartialHashtree(final byte[] array) {
        this(new byte[][] { array });
    }
    
    public PartialHashtree(final byte[][] array) {
        final ASN1EncodableVector asn1EncodableVector = new ASN1EncodableVector(array.length);
        for (int i = 0; i != array.length; ++i) {
            asn1EncodableVector.add(new DEROctetString(Arrays.clone(array[i])));
        }
        this.values = new DERSequence(asn1EncodableVector);
    }
    
    public int getValueCount() {
        return this.values.size();
    }
    
    public byte[][] getValues() {
        final byte[][] array = new byte[this.values.size()][];
        for (int i = 0; i != array.length; ++i) {
            array[i] = Arrays.clone(ASN1OctetString.getInstance(this.values.getObjectAt(i)).getOctets());
        }
        return array;
    }
    
    public boolean containsHash(final byte[] array) {
        final Enumeration objects = this.values.getObjects();
        while (objects.hasMoreElements()) {
            if (Arrays.constantTimeAreEqual(array, ASN1OctetString.getInstance(objects.nextElement()).getOctets())) {
                return true;
            }
        }
        return false;
    }
    
    @Override
    public ASN1Primitive toASN1Primitive() {
        return this.values;
    }
}
