package org.bouncycastle.pqc.jcajce.provider.gmss;

import java.security.PublicKey;

import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.pqc.asn1.GMSSPublicKey;
import org.bouncycastle.pqc.asn1.PQCObjectIdentifiers;
import org.bouncycastle.pqc.asn1.ParSet;
import org.bouncycastle.pqc.crypto.gmss.GMSSParameters;
import org.bouncycastle.pqc.crypto.gmss.GMSSPublicKeyParameters;
import org.bouncycastle.pqc.jcajce.provider.util.KeyUtil;
import org.bouncycastle.util.encoders.Hex;

This class implements the GMSS public key and is usually initiated by the GMSSKeyPairGenerator.
See Also:
  • GMSSKeyPairGenerator
/** * This class implements the GMSS public key and is usually initiated by the <a * href="GMSSKeyPairGenerator">GMSSKeyPairGenerator</a>. * * @see org.bouncycastle.pqc.crypto.gmss.GMSSKeyPairGenerator */
public class BCGMSSPublicKey implements CipherParameters, PublicKey { /** * */ private static final long serialVersionUID = 1L;
The GMSS public key
/** * The GMSS public key */
private byte[] publicKeyBytes;
The GMSSParameterSet
/** * The GMSSParameterSet */
private GMSSParameters gmssParameterSet; private GMSSParameters gmssParams;
The constructor
Params:
  • pub – a raw GMSS public key
  • gmssParameterSet – an instance of GMSS Parameterset
See Also:
/** * The constructor * * @param pub a raw GMSS public key * @param gmssParameterSet an instance of GMSS Parameterset * @see org.bouncycastle.pqc.crypto.gmss.GMSSKeyPairGenerator */
public BCGMSSPublicKey(byte[] pub, GMSSParameters gmssParameterSet) { this.gmssParameterSet = gmssParameterSet; this.publicKeyBytes = pub; } public BCGMSSPublicKey( GMSSPublicKeyParameters params) { this(params.getPublicKey(), params.getParameters()); }
Returns the name of the algorithm
Returns:"GMSS"
/** * Returns the name of the algorithm * * @return "GMSS" */
public String getAlgorithm() { return "GMSS"; }
Returns:The GMSS public key byte array
/** * @return The GMSS public key byte array */
public byte[] getPublicKeyBytes() { return publicKeyBytes; }
Returns:The GMSS Parameterset
/** * @return The GMSS Parameterset */
public GMSSParameters getParameterSet() { return gmssParameterSet; }
Returns a human readable form of the GMSS public key
Returns:A human readable form of the GMSS public key
/** * 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; } public byte[] getEncoded() { return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PQCObjectIdentifiers.gmss, new ParSet(gmssParameterSet.getNumOfLayers(), gmssParameterSet.getHeightOfTrees(), gmssParameterSet.getWinternitzParameter(), gmssParameterSet.getK()).toASN1Primitive()), new GMSSPublicKey(publicKeyBytes)); } public String getFormat() { return "X.509"; } }