LmsSigner
using Org.BouncyCastle.Crypto;
using System;
using System.IO;
namespace Org.BouncyCastle.Pqc.Crypto.Lms
{
    public sealed class LmsSigner : IMessageSigner
    {
        private LmsPrivateKeyParameters m_privateKey;
        private LmsPublicKeyParameters m_publicKey;
        public void Init(bool forSigning, ICipherParameters param)
        {
            if (forSigning)
                m_privateKey = (LmsPrivateKeyParameters)param;
            else
                m_publicKey = (LmsPublicKeyParameters)param;
        }
        public byte[] GenerateSignature(byte[] message)
        {
            try {
                return Lms.GenerateSign(m_privateKey, message).GetEncoded();
            } catch (IOException ex) {
                throw new Exception("unable to encode signature: " + ex.Message);
            }
        }
        public bool VerifySignature(byte[] message, byte[] signature)
        {
            try {
                return Lms.VerifySignature(m_publicKey, LmsSignature.GetInstance(signature), message);
            } catch (InvalidDataException ex) {
                throw new Exception("unable to decode signature: " + ex.Message);
            } catch (IOException ex2) {
                throw new Exception("unable to decode signature: " + ex2.Message);
            }
        }
    }
}