public void Der() { if (Environment.OSVersion.Platform == PlatformID.Unix) return; // No DLLs on Unix // TODO: Conditional compilation for mono compability byte[] publicKeyDER = Resources.GetResource("RSACryptoServiceProviderExtensionPublicKey.der"); byte[] privateKeyDER = Resources.GetResource("RSACryptoServiceProviderExtensionPrivateKey.der"); Console.WriteLine("Public key:\n{0}\n", BitConverter.ToString(publicKeyDER).Replace("-", "")); Console.WriteLine("Private key:\n{0}\n", BitConverter.ToString(privateKeyDER).Replace("-", "")); byte[] signature; using (var rsa = new RSACryptoServiceProvider()) { rsa.PersistKeyInCsp = false; rsa.ImportPrivateKeyDer(privateKeyDER); using (var sha1 = new SHA1CryptoServiceProvider()) signature = rsa.SignData(DataToSign, sha1); } using (var rsa = new RSACryptoServiceProvider()) { rsa.PersistKeyInCsp = false; rsa.ImportPublicKeyDer(publicKeyDER); bool isValidSignature; using (var sha1 = new SHA1CryptoServiceProvider()) isValidSignature = rsa.VerifyData(DataToSign, sha1, signature); Assert.IsTrue(isValidSignature); // invalidate signature so the next check must fail signature[signature.Length - 1] ^= 0xFF; using (var sha1 = new SHA1CryptoServiceProvider()) isValidSignature = rsa.VerifyData(DataToSign, sha1, signature); Assert.IsFalse(isValidSignature); } }