static void Main() { var document = Encoding.UTF8.GetBytes("Document to Sign"); byte[] hashedDocument; using (var sha256 = SHA256.Create()) { hashedDocument = sha256.ComputeHash(document); } var digitalSignature = new DigitalSignature(); digitalSignature.AssignNewKey(); var signature = digitalSignature.SignData(hashedDocument); var verified = digitalSignature.VerifySignature(hashedDocument, signature); Console.WriteLine(); Console.WriteLine(" Original Text = " + Encoding.Default.GetString(document)); Console.WriteLine(); Console.WriteLine(" Digital Signature = " + Convert.ToBase64String(signature)); Console.WriteLine(); Console.WriteLine(verified ? "The digital signature has been correctly verified." : "The digital signature has NOT been correctly verified."); Console.ReadLine(); }
public byte[] DecryptData(EncryptedPacket encryptedPacket, RSAWithRSAParameterKey rsaParams, DigitalSignature digitalSignature) { var decryptedSessionKey = rsaParams.DecryptData(encryptedPacket.EncryptedSessionKey); using (var hmac = new HMACSHA256(decryptedSessionKey)) { var hmacToCheck = hmac.ComputeHash(encryptedPacket.EncryptedData); if (!Compare(encryptedPacket.Hmac, hmacToCheck)){ throw new CryptographicException( "HMAC for decryption does not match encrypted packet."); } if (!digitalSignature.VerifySignature(encryptedPacket.Hmac, encryptedPacket.Signature)){ throw new CryptographicException( "Digital Signature can not be verified."); } } var decryptedData = _aes.Decrypt(encryptedPacket.EncryptedData, decryptedSessionKey, encryptedPacket.Iv); return decryptedData; }