using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities.Encoders;
public static void Main()
byte[] message = Encoding.UTF8.GetBytes("The quick brown fox jumps over the lazy dog");
byte[] signature = Hex.Decode("3045022064a0148daab8351f120d6d1f84bf00eac30f05d7635e99e87613d40ae24c72f70221008258284663e3def63e64e56a1623bb8f7331e69691a030de56eed15397d5b4da");
string spkiPem = @"-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMpHT+HNKM7zjhx0jZDHyzQlkbLV0
xk0H/TFo6gfT23ish58blPNhYrFI51Q/czvkAwCtLZz/6s1n/M8aA9L1Vg==
-----END PUBLIC KEY-----";
spkiPem = spkiPem.Replace("-----BEGIN PUBLIC KEY-----", "").Replace("-----END PUBLIC KEY-----", "").Replace("\n", "");
byte[] spkiDer = Convert.FromBase64String(spkiPem);
AsymmetricKeyParameter pubParam = PublicKeyFactory.CreateKey(spkiDer);
bool verified = VerifyData(pubParam, message, signature);
Console.WriteLine("Verification - NET Framework 4.7.2: " + verified);
private static bool VerifyData(AsymmetricKeyParameter pubParams, byte[] data, byte[] signature)
var signer = SignerUtilities.GetSigner("SHA-384withECDSA");
signer.Init(false, pubParams);
signer.BlockUpdate(data, 0, data.Length);
return signer.VerifySignature(signature);