public string Sign(string payload)
        {
            var payloadBytes = Encoding.UTF8.GetBytes(payload);

            signer.Reset();
            signer.BlockUpdate(payloadBytes, 0, payloadBytes.Length);
            return(Base64UrlEncoder.Encode(signer.GenerateSignature()));
        }
        public void Verify(string payload, string signature)
        {
            var payloadBytes = Encoding.UTF8.GetBytes(payload);

            signer.Reset();
            signer.BlockUpdate(payloadBytes, 0, payloadBytes.Length);
            if (!signer.VerifySignature(Base64UrlEncoder.DecodeBytes(signature)))
            {
                throw new CryptographicException("Failed to verify signature.");
            }
        }