blob: d456cbcb85eae6703630f3ff3a64dfac31aa20ba [file] [log] [blame]
package org.bouncycastle.pqc.crypto.xmss;
import org.bouncycastle.pqc.crypto.xmss.XMSSUtil;
/**
* Hash tree address.
*
*/
public 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> {
/* optional */
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();
XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, padding, 16);
XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, treeHeight, 20);
XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, treeIndex, 24);
return byteRepresentation;
}
protected int getPadding() {
return padding;
}
protected int getTreeHeight() {
return treeHeight;
}
protected int getTreeIndex() {
return treeIndex;
}
}