| package org.bouncycastle.pqc.crypto.xmss; |
| |
| import org.bouncycastle.crypto.Digest; |
| |
| /** |
| * WOTS+ Parameters. |
| */ |
| public final class WOTSPlusParameters { |
| |
| /** |
| * OID. |
| */ |
| private final XMSSOid oid; |
| /** |
| * Digest used in WOTS+. |
| */ |
| private final Digest digest; |
| /** |
| * The message digest size. |
| */ |
| private final int digestSize; |
| /** |
| * The Winternitz parameter (currently fixed to 16). |
| */ |
| private final int winternitzParameter; |
| /** |
| * The number of n-byte string elements in a WOTS+ secret key, public key, |
| * and signature. |
| */ |
| private final int len; |
| /** |
| * len1. |
| */ |
| private final int len1; |
| /** |
| * len2. |
| */ |
| private final int len2; |
| |
| /** |
| * Constructor... |
| * |
| * @param digest |
| * The digest used for WOTS+. |
| */ |
| protected WOTSPlusParameters(Digest digest) { |
| super(); |
| if (digest == null) { |
| throw new NullPointerException("digest == null"); |
| } |
| this.digest = digest; |
| digestSize = XMSSUtil.getDigestSize(digest); |
| winternitzParameter = 16; |
| len1 = (int) Math.ceil((double) (8 * digestSize) / XMSSUtil.log2(winternitzParameter)); |
| len2 = (int) Math.floor(XMSSUtil.log2(len1 * (winternitzParameter - 1)) / XMSSUtil.log2(winternitzParameter)) |
| + 1; |
| len = len1 + len2; |
| oid = WOTSPlusOid.lookup(digest.getAlgorithmName(), digestSize, winternitzParameter, len); |
| if (oid == null) { |
| throw new IllegalArgumentException("cannot find OID for digest algorithm: " + digest.getAlgorithmName()); |
| } |
| } |
| |
| /** |
| * Getter OID. |
| * |
| * @return WOTS+ OID. |
| */ |
| protected XMSSOid getOid() { |
| return oid; |
| } |
| |
| /** |
| * Getter digest. |
| * |
| * @return digest. |
| */ |
| protected Digest getDigest() { |
| return digest; |
| } |
| |
| /** |
| * Getter digestSize. |
| * |
| * @return digestSize. |
| */ |
| protected int getDigestSize() { |
| return digestSize; |
| } |
| |
| /** |
| * Getter WinternitzParameter. |
| * |
| * @return winternitzParameter. |
| */ |
| protected int getWinternitzParameter() { |
| return winternitzParameter; |
| } |
| |
| /** |
| * Getter len. |
| * |
| * @return len. |
| */ |
| protected int getLen() { |
| return len; |
| } |
| |
| /** |
| * Getter len1. |
| * |
| * @return len1. |
| */ |
| protected int getLen1() { |
| return len1; |
| } |
| |
| /** |
| * Getter len2. |
| * |
| * @return len2. |
| */ |
| protected int getLen2() { |
| return len2; |
| } |
| } |