int logW = XMSSUtil.log2(w); if (outLength > ((8 * messageDigest.length) / logW))
/** * 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()); } }
checksum <<= (8 - ((params.getLen2() * XMSSUtil.log2(params.getWinternitzParameter())) % 8)); int len2Bytes = (int)Math .ceil((double)(params.getLen2() * XMSSUtil.log2(params.getWinternitzParameter())) / 8); List<Integer> baseWChecksum = convertToBaseW(XMSSUtil.toBytesBigEndian(checksum, len2Bytes), params.getWinternitzParameter(), params.getLen2());
checksum <<= (8 - ((params.getLen2() * XMSSUtil.log2(params.getWinternitzParameter())) % 8)); int len2Bytes = (int)Math .ceil((double)(params.getLen2() * XMSSUtil.log2(params.getWinternitzParameter())) / 8); List<Integer> baseWChecksum = convertToBaseW(XMSSUtil.toBytesBigEndian(checksum, len2Bytes), params.getWinternitzParameter(), params.getLen2());