/** * Returns a human readable form of the GMSS public key * * @return A human readable form of the GMSS public key */ public String toString() { String out = "GMSS public key : " + new String(Hex.encode(publicKeyBytes)) + "\n" + "Height of Trees: \n"; for (int i = 0; i < gmssParameterSet.getHeightOfTrees().length; i++) { out = out + "Layer " + i + " : " + gmssParameterSet.getHeightOfTrees()[i] + " WinternitzParameter: " + gmssParameterSet.getWinternitzParameter()[i] + " K: " + gmssParameterSet.getK()[i] + "\n"; } return out; }
/** * Initalizes the key pair generator using a parameter set as input */ public void initialize(KeyGenerationParameters param) { this.gmssParams = (GMSSKeyGenerationParameters)param; // generate GMSSParameterset this.gmssPS = new GMSSParameters(gmssParams.getParameters().getNumOfLayers(), gmssParams.getParameters().getHeightOfTrees(), gmssParams.getParameters().getWinternitzParameter(), gmssParams.getParameters().getK()); this.numLayer = gmssPS.getNumOfLayers(); this.heightOfTrees = gmssPS.getHeightOfTrees(); this.otsIndex = gmssPS.getWinternitzParameter(); this.K = gmssPS.getK(); // seeds this.currentSeeds = new byte[numLayer][mdLength]; this.nextNextSeeds = new byte[numLayer - 1][mdLength]; // construct SecureRandom for initial seed generation SecureRandom secRan = new SecureRandom(); // generation of initial seeds for (int i = 0; i < numLayer; i++) { secRan.nextBytes(currentSeeds[i]); gmssRandom.nextSeed(currentSeeds[i]); } this.initialized = true; }
authPath = new byte[gmssPS.getHeightOfTrees()[j]][mdLength]; for (int i = 0; i < authPath.length; i++)
public byte[] getEncoded() { return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PQCObjectIdentifiers.gmss, new ParSet(gmssParameterSet.getNumOfLayers(), gmssParameterSet.getHeightOfTrees(), gmssParameterSet.getWinternitzParameter(), gmssParameterSet.getK()).toASN1Primitive()), new GMSSPublicKey(publicKeyBytes)); }
this.otsIndex = gmssParameterset.getWinternitzParameter(); this.K = gmssParameterset.getK(); this.heightOfTrees = gmssParameterset.getHeightOfTrees();
ASN1EncodableVector parSetPart3 = new ASN1EncodableVector(); for (int i = 0; i < gmssParameterset.getHeightOfTrees().length; i++) gmssParameterset.getHeightOfTrees()[i])); parSetPart2.add(new ASN1Integer(gmssParameterset .getWinternitzParameter()[i]));