package org.bouncycastle.asn1.tsp;

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

Implementation of PartialHashtree, as defined in RFC 4998.

The ASN.1 notation for a PartialHashTree is:

PartialHashtree ::= SEQUENCE OF OCTET STRING

/** * Implementation of PartialHashtree, as defined in RFC 4998. * <p> * The ASN.1 notation for a PartialHashTree is: * <p> * PartialHashtree ::= SEQUENCE OF OCTET STRING */
public class PartialHashtree extends ASN1Object {
Hash values that constitute the hash tree, as ASN.1 Octet Strings.
/** * Hash values that constitute the hash tree, as ASN.1 Octet Strings. */
private ASN1Sequence values;
Return a PartialHashtree from the given object.
Params:
  • obj – the object we want converted.
Throws:
Returns:a PartialHashtree instance, or null.
/** * Return a PartialHashtree from the given object. * * @param obj the object we want converted. * @return a PartialHashtree instance, or null. * @throws IllegalArgumentException if the object cannot be converted. */
public static PartialHashtree getInstance(final Object obj) { if (obj instanceof PartialHashtree) { return (PartialHashtree)obj; } else if (obj != null) { return new PartialHashtree(ASN1Sequence.getInstance(obj)); } return null; } private PartialHashtree(final ASN1Sequence values) { for (int i = 0; i != values.size(); i++) { if (!(values.getObjectAt(i) instanceof DEROctetString)) { throw new IllegalArgumentException("unknown object in constructor: " + values .getObjectAt(i).getClass().getName()); } } this.values = values; } public PartialHashtree(byte[] values) { this(new byte[][] { values }); } public PartialHashtree(byte[][] values) { ASN1EncodableVector v = new ASN1EncodableVector(); for (int i = 0; i != values.length; i++) { v.add(new DEROctetString(Arrays.clone(values[i]))); } this.values = new DERSequence(v); } public byte[][] getValues() { byte[][] rv = new byte[values.size()][]; for (int i = 0; i != rv.length; i++) { rv[i] = Arrays.clone(ASN1OctetString.getInstance(values.getObjectAt(i)).getOctets()); } return rv; } public ASN1Primitive toASN1Primitive() { return values; } }