Пример #1
0
        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();
        }
Пример #2
0
        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;
        }