using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Signers;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Digests;
public static void Main()
byte[] derKey = Convert.FromBase64String("MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAELtwsQhMDy21Ox2tvAxbQIjVq3v5p8+4fkNzWn9AlBBLIUFok7heH9NRBrNpGURxcEY7TBeKtBl8TAV1+wCYw2D0EC6/ptOiuhLZVCPNA5UsH82l2Q8/2nAsfiJJeUSY0");
byte[] sig = Convert.FromBase64String("MGQCMFVMwPmgsAOi+gOtMEzEPHAwnpRnQZcxiVwt+td6qEi38yU1t7zMJdu4xON6i5yW7gIwWKq855GxVsfxI5Ge07l4wF25wGisbz8ZwB/iq6CpwOiro3PV7/ZwQ8HyuHj2hHxD");
byte[] signedBytes = Convert.FromBase64String("eyJyZWNlaXB0X2lkIjoiMTlmMTI0NjgtYWQ4Yi00MTZhLThiZmEtM2RkOWI4OGY5YjBmIiwic3RhdHVzX2NvZGUiOjAsImVycm9yX21lc3NhZ2UiOm51bGwsImNwX2N1c3RvbV9pZCI6ImlhcC01MC1nb2xkLTEyMzQ1Njc4OTAiLCJjcF9leHRyYV9pbmZvIjoiU29tZSBleHRyYSBpbmZvIGFib3V0IHRoaXMgcHVyY2hhc2UuIFdoYXRldmVyIGRhdGEgeW91IG5lZWQgd2hlbiBwYXltZW50IGlzIGNvbXBsZXRlZC4gTWF5YmUgc29tZSBJRCBmb3IgbG9nZ2luZyBmb3IgZXhhbXBsZS4gQ2FuIGJlIHByZXR0eSBsb25nLiIsImNwX3BsYXllcl9pZCI6bnVsbCwiaWFwX25hbWUiOiI1MCBHb2xkIiwiaWFwX2Rlc2MiOiI1MCBzaGluaW5nIGdvbGQgcGllY2VzIiwiaWFwX2lkIjpudWxsLCJhbW91bnRfZmVuIjoxMDAsInNvdXJjZV9jcmVhdGVkX2F0IjoxNjI4ODg0NDYyNzk3fQ==");
var sha3Digest = new Sha3Digest(256);
var signer = new DsaDigestSigner((IDsa) new ECDsaSigner(),sha3Digest);
Asn1Object asn1Object = Asn1Object.FromByteArray(derKey);
SubjectPublicKeyInfo keyInfo = SubjectPublicKeyInfo.GetInstance(asn1Object);
ECPublicKeyParameters keyParameter = (ECPublicKeyParameters)PublicKeyFactory.CreateKey(keyInfo);
signer.Init(false, keyParameter);
signer.BlockUpdate(signedBytes, 0, signedBytes.Length);
if (signer.VerifySignature(sig)){
Console.WriteLine("Verified");