public AsymmetricCipherKeyPair generateKeyPair()
{
XMSSMTPrivateKeyParameters privateKey;
XMSSMTPublicKeyParameters publicKey;
privateKey = generatePrivateKey(new XMSSMTPrivateKeyParameters.Builder(params).build().getBDSState());
xmssParams.getWOTSPlus().importKeys(new byte[params.getDigestSize()], privateKey.getPublicSeed());
int rootLayerIndex = params.getLayers() - 1;
OTSHashAddress otsHashAddress = (OTSHashAddress)new OTSHashAddress.Builder().withLayerAddress(rootLayerIndex)
.build();
BDS bdsRoot = new BDS(xmssParams, privateKey.getPublicSeed(), privateKey.getSecretKeySeed(), otsHashAddress);
XMSSNode root = bdsRoot.getRoot();
privateKey.getBDSState().put(rootLayerIndex, bdsRoot);
privateKey = new XMSSMTPrivateKeyParameters.Builder(params).withSecretKeySeed(privateKey.getSecretKeySeed())
.withSecretKeyPRF(privateKey.getSecretKeyPRF()).withPublicSeed(privateKey.getPublicSeed())
.withRoot(root.getValue()).withBDSState(privateKey.getBDSState()).build();
publicKey = new XMSSMTPublicKeyParameters.Builder(params).withRoot(root.getValue())
.withPublicSeed(privateKey.getPublicSeed()).build();
return new AsymmetricCipherKeyPair(publicKey, privateKey);
}