org.bouncycastle.pqc.crypto.xmss.XMSSAddress Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-jdk15on Show documentation
Show all versions of bcprov-jdk15on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for JDK 1.5 to JDK 1.8.
The newest version!
package org.bouncycastle.pqc.crypto.xmss;
import org.bouncycastle.pqc.crypto.xmss.XMSSUtil;
/**
* XMSS address.
*
*/
public abstract class XMSSAddress {
private final int layerAddress;
private final long treeAddress;
private final int type;
private final int keyAndMask;
protected XMSSAddress(Builder builder) {
layerAddress = builder.layerAddress;
treeAddress = builder.treeAddress;
type = builder.type;
keyAndMask = builder.keyAndMask;
}
protected static abstract class Builder {
/* mandatory */
private final int type;
/* optional */
private int layerAddress = 0;
private long treeAddress = 0L;
private int keyAndMask = 0;
protected Builder(int type) {
super();
this.type = type;
}
protected T withLayerAddress(int val) {
layerAddress = val;
return getThis();
}
protected T withTreeAddress(long val) {
treeAddress = val;
return getThis();
}
protected T withKeyAndMask(int val) {
keyAndMask = val;
return getThis();
}
protected abstract XMSSAddress build();
protected abstract T getThis();
}
protected byte[] toByteArray() {
byte[] byteRepresentation = new byte[32];
XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, layerAddress, 0);
XMSSUtil.longToBytesBigEndianOffset(byteRepresentation, treeAddress, 4);
XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, type, 12);
XMSSUtil.intToBytesBigEndianOffset(byteRepresentation, keyAndMask, 28);
return byteRepresentation;
}
protected final int getLayerAddress() {
return layerAddress;
}
protected final long getTreeAddress() {
return treeAddress;
}
public final int getType() {
return type;
}
public final int getKeyAndMask() {
return keyAndMask;
}
}