/// <summary>
        /// Signs the passed in data with a private key
        /// </summary>
        /// <param name="privateKey">the private key used to create the signature</param>
        /// <param name="data">The data to sign</param>
        /// <returns>the signature as a byte array</returns>
        public byte[] Sign(byte[] privateKey, byte[] data)
        {
            var signer  = new Gost3410Signer();
            var privKey = (Gost3410PrivateKeyParameters)CreateAsymmetricKeyParameterFromPrivateKeyInfo(privateKey);

            try
            {
                signer.Init(true, privKey);
            }
            catch (Exception exception)
            {
                string message = "Private Key Creation Failure!\n" +
                                 $"{exception.Message}.\n" +
                                 $"The private key file is corrupted, verify private key file or try another key.\n" +
                                 $"If all fails create a new key pair.";
                throw new CryptoException(message, exception);
            }

            var bigIntSig = signer.GenerateSignature(data);
            var signature = new List <byte>();

            signature.AddRange(bigIntSig[0].ToByteArrayUnsigned());
            signature.AddRange(bigIntSig[1].ToByteArrayUnsigned());
            return(signature.ToArray());
        }
        /// <summary>
        /// Verifies a signature to be authentic
        /// </summary>
        /// <param name="originalSignature">The signature which is be verified</param>
        /// <param name="publicKey">the public key used for the verification</param>
        /// <param name="data">the data which is signed</param>
        /// <returns>true if signature is authentic, false if not</returns>
        public bool Verify(byte[] originalSignature, byte[] publicKey, byte[] data)
        {
            var signer = new Gost3410Signer();
            var pubKey = (Gost3410PublicKeyParameters)CreateAsymmetricKeyParameterFromPublicKeyInfo(publicKey);

            signer.Init(false, pubKey);
            var r = new byte[originalSignature.Length / 2];
            var s = new byte[originalSignature.Length / 2];

            Array.Copy(originalSignature, r, r.Length);
            Array.Copy(originalSignature, r.Length, s, 0, s.Length);
            var R = new BigInteger(1, r);
            var S = new BigInteger(1, s);

            return(signer.VerifySignature(data, R, S));
        }