public EncryptedPacket EncryptData(byte[] original, RSAWithRSAParameterKey rsaParams, DigitalSignatureFuncs digitalSignature) { // Generate our session key var sessionKey = _aes.GenerateRandomNumber(32); // Create the encrypted packet and generate the IV var encryptedPacket = new EncryptedPacket { IV = _aes.GenerateRandomNumber(16) }; // Encrypt our data with AES encryptedPacket.EncryptedData = _aes.Encrypt(original, sessionKey, encryptedPacket.IV); // Encrypt the session key with RSA encryptedPacket.EncryptedSessionKey = rsaParams.EncryptData(sessionKey); // Calculate a HMAC encryptedPacket.HMAC = HMac.ComputeHMACSha256(encryptedPacket.EncryptedData, sessionKey); // Generate digital signature of packet to send encryptedPacket.Signature = digitalSignature.SignData(encryptedPacket.HMAC); return(encryptedPacket); }
private static void TestDigitalSignature() { var document = Encoding.UTF8.GetBytes("Document to Sign"); byte[] hashedDocument; using (var sha256 = SHA256.Create()) { hashedDocument = sha256.ComputeHash(document); } var digitalSignature = new DigitalSignatureFuncs(); digitalSignature.AssignNewKey(); var signature = digitalSignature.SignData(hashedDocument); var verified = digitalSignature.VerifySignature(hashedDocument, signature); Console.WriteLine($"Original Text: {Encoding.Default.GetString(document)}"); Console.WriteLine($"Digital Signature: {Convert.ToBase64String(signature)}"); Console.WriteLine(verified ? "The digital signature has been verified." : "The digital signature has NOT been verified."); }