package org.bouncycastle.pqc.crypto.xmss;
import org.bouncycastle.util.Pack;
final class HashTreeAddress
extends XMSSAddress
{
private static final int TYPE = 0x02;
private static final int PADDING = 0x00;
private final int padding;
private final int treeHeight;
private final int treeIndex;
private HashTreeAddress(Builder builder)
{
super(builder);
padding = PADDING;
treeHeight = builder.treeHeight;
treeIndex = builder.treeIndex;
}
protected static class Builder
extends XMSSAddress.Builder<Builder>
{
private int treeHeight = 0;
private int treeIndex = 0;
protected Builder()
{
super(TYPE);
}
protected Builder withTreeHeight(int val)
{
treeHeight = val;
return this;
}
protected Builder withTreeIndex(int val)
{
treeIndex = val;
return this;
}
@Override
protected XMSSAddress build()
{
return new HashTreeAddress(this);
}
@Override
protected Builder getThis()
{
return this;
}
}
@Override
protected byte[] toByteArray()
{
byte[] byteRepresentation = super.toByteArray();
Pack.intToBigEndian(padding, byteRepresentation,16);
Pack.intToBigEndian(treeHeight, byteRepresentation, 20);
Pack.intToBigEndian(treeIndex, byteRepresentation, 24);
return byteRepresentation;
}
protected int getPadding()
{
return padding;
}
protected int getTreeHeight()
{
return treeHeight;
}
protected int getTreeIndex()
{
return treeIndex;
}
}