From 2d53436f7535905b9d3d0deda6cf7f93bbded61c Mon Sep 17 00:00:00 2001 From: Ricardo Biehl Pasquali <7713470+pasqualirb@users.noreply.github.com> Date: Fri, 5 Nov 2021 13:52:56 +0000 Subject: [PATCH] Add C# signing example using Bouncy Castle library (#880) --- assets/signing/sign-message.bouncycastle.cs | 60 +++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 assets/signing/sign-message.bouncycastle.cs diff --git a/assets/signing/sign-message.bouncycastle.cs b/assets/signing/sign-message.bouncycastle.cs new file mode 100644 index 000000000..2efec4f19 --- /dev/null +++ b/assets/signing/sign-message.bouncycastle.cs @@ -0,0 +1,60 @@ +// ######################################################### +// # WARNING WARNING WARNING # +// ######################################################### +// # # +// # This file is intended for demonstration purposes # +// # only. # +// # # +// # It is the SOLE responsibility of YOU, the programmer # +// # to prevent against unauthorized access to any signing # +// # functions. # +// # # +// # Organizations that do not protect against un- # +// # authorized signing will be black-listed to prevent # +// # software piracy. # +// # # +// # -QZ Industries, LLC # +// # # +// ######################################################### + +using System; +using System.Text; +using Org.BouncyCastle.Crypto; +using Org.BouncyCastle.OpenSsl; +using Org.BouncyCastle.Security; + + +// Public method for signing the input string with the private key +// =============================================================== + +string privateKey = "private-key.pem"; // PKCS#8 PEM file + +string SignMessage(string msg) +{ + // Convert the input string to a byte array + byte[] input = Encoding.ASCII.GetBytes(msg); + + // Initialize the signer with the algorithm and the private key + ISigner sig = SignerUtilities.GetSigner("SHA512withRSA"); + sig.Init(true, getPrivateKey()); + + // Generate signature and return it as a base64 string + sig.BlockUpdate(input, 0, input.Length); + return Convert.ToBase64String(sig.GenerateSignature()); +} + +AsymmetricKeyParameter getPrivateKey() { + using (var reader = System.IO.File.OpenText(privateKey)) + return (new PemReader(reader, null).ReadObject() as AsymmetricCipherKeyPair).Private; +} + + +// Public method for returning the certificate +// =========================================== + +string certificate = "digital-certificate.txt"; + +string GetCertificate() { + using (var reader = System.IO.File.OpenText(certificate)) + return reader.ReadToEnd(); +}