/** * Constructor * * @param heightOfTree maximal height of the tree * @param digestProvider an array of strings, containing the name of the used hash * function and PRNG and the name of the corresponding * provider */ public GMSSRootCalc(int heightOfTree, int K, GMSSDigestProvider digestProvider) { this.heightOfTree = heightOfTree; this.digestProvider = digestProvider; this.messDigestTree = digestProvider.get(); this.mdLength = messDigestTree.getDigestSize(); this.K = K; this.index = new int[heightOfTree]; this.AuthPath = new byte[heightOfTree][mdLength]; this.root = new byte[mdLength]; // this.treehash = new Treehash[this.heightOfTree - this.K]; this.retain = new Vector[this.K - 1]; for (int i = 0; i < K - 1; i++) { this.retain[i] = new Vector(); } }
/** * Constructor * * @param heightOfTree maximal height of the tree * @param digestProvider an array of strings, containing the name of the used hash * function and PRNG and the name of the corresponding * provider */ public GMSSRootCalc(int heightOfTree, int K, GMSSDigestProvider digestProvider) { this.heightOfTree = heightOfTree; this.digestProvider = digestProvider; this.messDigestTree = digestProvider.get(); this.mdLength = messDigestTree.getDigestSize(); this.K = K; this.index = new int[heightOfTree]; this.AuthPath = new byte[heightOfTree][mdLength]; this.root = new byte[mdLength]; // this.treehash = new Treehash[this.heightOfTree - this.K]; this.retain = new Vector[this.K - 1]; for (int i = 0; i < K - 1; i++) { this.retain[i] = new Vector(); } }
for (int i = 0; i < this.heightOfTree - this.K; i++) this.treehash[i] = new Treehash(sharedStack, i, this.digestProvider.get());
for (int i = 0; i < this.heightOfTree - this.K; i++) this.treehash[i] = new Treehash(sharedStack, i, this.digestProvider.get());
/** * The standard constructor tries to generate the MerkleTree Algorithm * identifier with the corresponding OID. * * @param digest the digest to use */ // TODO public GMSSSigner(GMSSDigestProvider digest) { digestProvider = digest; messDigestTrees = digest.get(); messDigestOTS = messDigestTrees; mdLength = messDigestTrees.getDigestSize(); gmssRandom = new GMSSRandom(messDigestTrees); }
/** * The standard constructor tries to generate the MerkleTree Algorithm * identifier with the corresponding OID. * * @param digest the digest to use */ // TODO public GMSSSigner(GMSSDigestProvider digest) { digestProvider = digest; messDigestTrees = digest.get(); messDigestOTS = messDigestTrees; mdLength = messDigestTrees.getDigestSize(); gmssRandom = new GMSSRandom(messDigestTrees); }
/** * The standard constructor tries to generate the GMSS algorithm identifier * with the corresponding OID. * * @param digestProvider provider for digest implementations. */ public GMSSKeyPairGenerator(GMSSDigestProvider digestProvider) { this.digestProvider = digestProvider; messDigestTree = digestProvider.get(); // set mdLength this.mdLength = messDigestTree.getDigestSize(); // construct randomizer this.gmssRandom = new GMSSRandom(messDigestTree); }
/** * The standard constructor tries to generate the GMSS algorithm identifier * with the corresponding OID. * * @param digestProvider provider for digest implementations. */ public GMSSKeyPairGenerator(GMSSDigestProvider digestProvider) { this.digestProvider = digestProvider; messDigestTree = digestProvider.get(); // set mdLength this.mdLength = messDigestTree.getDigestSize(); // construct randomizer this.gmssRandom = new GMSSRandom(messDigestTree); }
/** * @return a human readable version of the structure */ public String toString() { String out = ""; int tailLength; if (tailStack == null) { tailLength = 0; } else { tailLength = tailStack.size(); } for (int i = 0; i < 8 + heightOfTree + tailLength; i++) { out = out + getStatInt()[i] + " "; } for (int i = 0; i < 1 + heightOfTree + tailLength; i++) { out = out + new String(Hex.encode(getStatByte()[i])) + " "; } out = out + " " + digestProvider.get().getDigestSize(); return out; } }
/** * @return a human readable version of the structure */ public String toString() { String out = ""; int tailLength; if (tailStack == null) { tailLength = 0; } else { tailLength = tailStack.size(); } for (int i = 0; i < 8 + heightOfTree + tailLength; i++) { out = out + getStatInt()[i] + " "; } for (int i = 0; i < 1 + heightOfTree + tailLength; i++) { out = out + new String(Hex.encode(getStatByte()[i])) + " "; } out = out + " " + digestProvider.get().getDigestSize(); return out; } }
Treehash[] treeH, Vector[] ret) this.messDigestTree = digestProvider.get(); this.digestProvider = digestProvider;
otsVerify = new WinternitzOTSVerify(digestProvider.get(), gmssPS.getWinternitzParameter()[j]); otsSigLength = otsVerify.getSignatureLength();
otsVerify = new WinternitzOTSVerify(digestProvider.get(), gmssPS.getWinternitzParameter()[j]); otsSigLength = otsVerify.getSignatureLength();
ots = new WinternitzOTSignature(OTSseed, digestProvider.get(), otsIndex[h]); help = ots.getPublicKey(); ots = new WinternitzOTSignature(OTSseed, digestProvider.get(), otsIndex[h]); currentRootSigs[h] = ots.getSignature(lowerRoot); WinternitzOTSVerify otsver = new WinternitzOTSVerify(digestProvider.get(), otsIndex[h]); help = otsver.Verify(lowerRoot, currentRootSigs[h]); ots = new WinternitzOTSignature(OTSseed, digestProvider.get(), otsIndex[h]); treeToConstruct.update(ots.getPublicKey());
ots = new WinternitzOTSignature(OTSseed, digestProvider.get(), otsIndex[h]); help = ots.getPublicKey(); ots = new WinternitzOTSignature(OTSseed, digestProvider.get(), otsIndex[h]); currentRootSigs[h] = ots.getSignature(lowerRoot); WinternitzOTSVerify otsver = new WinternitzOTSVerify(digestProvider.get(), otsIndex[h]); help = otsver.Verify(lowerRoot, currentRootSigs[h]); ots = new WinternitzOTSignature(OTSseed, digestProvider.get(), otsIndex[h]); treeToConstruct.update(ots.getPublicKey());
System.arraycopy(seed, 0, dummy, 0, mdLength); this.ots = new WinternitzOTSignature(OTSSeed, digestProvider.get(), gmssPS.getWinternitzParameter()[numLayer - 1]);
System.arraycopy(seed, 0, dummy, 0, mdLength); this.ots = new WinternitzOTSignature(OTSSeed, digestProvider.get(), gmssPS.getWinternitzParameter()[numLayer - 1]);
this.messDigestTrees = digestProvider.get(); this.mdLength = messDigestTrees.getDigestSize(); for (int i = 0; i < numLayer - 2; i++) this.nextNextLeaf[i] = new GMSSLeaf(digestProvider.get(), otsIndex[i + 1], numLeafs[i + 2], this.nextNextSeeds[i]); for (int i = 0; i < numLayer - 1; i++) this.upperLeaf[i] = new GMSSLeaf(digestProvider.get(), otsIndex[i], numLeafs[i + 1], this.currentSeeds[i]); for (int i = 0; i < numLayer - 1; i++) this.upperTreehashLeaf[i] = new GMSSLeaf(digestProvider.get(), otsIndex[i], numLeafs[i + 1]); gmssRandom.nextSeed(dummy); OTSseed = gmssRandom.nextSeed(dummy); this.nextRootSig[i] = new GMSSRootSig(digestProvider.get(), otsIndex[i], heightOfTrees[i + 1]); this.nextRootSig[i].initSign(OTSseed, nextRoot[i]);