package org.bouncycastle.pqc.crypto.xmss; import org.bouncycastle.pqc.crypto.xmss.XMSSUtil; /** * OTS hash address. * */ public final class OTSHashAddress extends XMSSAddress { private static final int TYPE = 0x00; private final int otsAddress; private final int chainAddress; private final int hashAddress; private OTSHashAddress(Builder builder) { super(builder); otsAddress = builder.otsAddress; chainAddress = builder.chainAddress; hashAddress = builder.hashAddress; } protected static class Builder extends XMSSAddress.Builder<Builder> { /* optional */ private int otsAddress = 0; private int chainAddress = 0; private int hashAddress = 0; protected Builder() { super(TYPE); } protected Builder withOTSAddress(int val) { otsAddress = val; return this; } protected Builder withChainAddress(int val) { chainAddress = val; return this; } protected Builder withHashAddress(int val) { hashAddress = val; return this; } @Override protected XMSSAddress build() { return new OTSHashAddress(this); } @Override protected Builder getThis() { return this; } } @Override protected byte[] toByteArray() { byte[] byteRepresentation = super.toByteArray(); XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, otsAddress, 16); XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, chainAddress, 20); XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, hashAddress, 24); return byteRepresentation; } protected int getOTSAddress() { return otsAddress; } protected int getChainAddress() { return chainAddress; } protected int getHashAddress() { return hashAddress; } }