Skip to content

Commit 5c009da

Browse files
committed
Testing Asymmetric signing.
1 parent fa66a7d commit 5c009da

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

src/UnitTests/POCs/SignatureSamples.cs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using Org.Security.Cryptography;
23
using System;
34
using System.Collections.Generic;
45
using System.Security.Cryptography;
6+
using System.Security.Cryptography.X509Certificates;
7+
58
using System.Text;
69

710
namespace UnitTests.POCs
@@ -11,6 +14,16 @@ namespace UnitTests.POCs
1114
[TestClass]
1215
public class SignatureSamples
1316
{
17+
// Sender
18+
// Message Or payload - The substance
19+
// Message Digest - A compact representation of the message
20+
// Encrypt the message digest with private key to create signature.
21+
//
22+
// Receiver:
23+
// Decrypt the signature using sender's public key
24+
// Hash the message or payload to recreate the message digest
25+
// Compare the hashses
26+
1427
// To verify that data was signed by a particular party, you must have the following information:
1528
// a) The public key of the party that signed the data.
1629
// b) The digital signature.
@@ -40,6 +53,67 @@ public void HelloSignature()
4053

4154
}
4255

56+
[TestMethod]
57+
public void TestSignature()
58+
{
59+
const string CertThumbPrint = "2E3257EE8FC8A72DB3778DFB3F9EDC7D0A9D66C7";
60+
const string TEST = "Hello world";
61+
62+
var payload = Encoding.UTF8.GetBytes(TEST);
63+
64+
var signature = X509RsaSha1Signature.Sign(payload, CertThumbPrint);
65+
var good = X509RsaSha1Signature.Verify(payload, signature, CertThumbPrint);
66+
Assert.IsTrue(good);
67+
68+
signature = X509RsaSha1Signature.Sign(payload, CertThumbPrint);
69+
good = X509RsaSha1Signature.Verify(payload, signature, CertThumbPrint);
70+
Assert.IsTrue(good);
71+
72+
}
73+
74+
}
75+
76+
77+
static class X509RsaSha1Signature
78+
{
79+
const string SHA1 = "SHA1";
80+
81+
public static byte[] Sign(byte[] payload, string thumbprint)
82+
{
83+
X509Certificate2 cert = X509CertificateCache.GetCertificate(thumbprint);
84+
85+
var rsa = cert.PrivateKey;
86+
87+
using (var sha = HashAlgorithm.Create(SHA1))
88+
{
89+
byte[] digest = sha.ComputeHash(payload);
90+
91+
var signatureFormatter = new RSAPKCS1SignatureFormatter(rsa);
92+
signatureFormatter.SetHashAlgorithm(SHA1);
93+
94+
byte[] signature = signatureFormatter.CreateSignature(digest);
95+
return signature;
96+
}
97+
}
98+
99+
public static bool Verify(byte[] payload, byte[] signature, string thumbprint)
100+
{
101+
X509Certificate2 cert = X509CertificateCache.GetCertificate(thumbprint);
102+
103+
var rsa = cert.PublicKey.Key;
104+
105+
using (var sha = HashAlgorithm.Create(SHA1))
106+
{
107+
byte[] digest = sha.ComputeHash(payload);
108+
109+
var signatureDeformatter = new RSAPKCS1SignatureDeformatter(rsa);
110+
signatureDeformatter.SetHashAlgorithm(SHA1);
111+
112+
return signatureDeformatter.VerifySignature(digest, signature);
113+
}
114+
}
115+
116+
43117

44118
}
45119
}

0 commit comments

Comments
 (0)