public DigitalSignatureVerificationResult VerifySignature(DigitalSignatureVerificationArguments arguments) { var res = new DigitalSignatureVerificationResult(); try { var rsaProviderSender = new RSACryptoServiceProvider(); rsaProviderSender.FromXmlString(arguments.PublicKeyForSignatureVerification.ToString()); var deformatter = new RSAPKCS1SignatureDeformatter(rsaProviderSender); deformatter.SetHashAlgorithm(_hashingService.HashAlgorithmCode()); var hashResult = _hashingService.Hash(arguments.CipherText); res.SignaturesMatch = deformatter.VerifySignature(hashResult.HashedBytes, arguments.Signature); if (res.SignaturesMatch) { var rsaProviderReceiver = new RSACryptoServiceProvider(); rsaProviderReceiver.FromXmlString(arguments.FullKeyForDecryption.ToString()); var decryptedBytes = rsaProviderReceiver.Decrypt(Convert.FromBase64String(arguments.CipherText), false); res.DecodedText = Encoding.UTF8.GetString(decryptedBytes); } res.Success = true; } catch (Exception ex) { res.ExceptionMessage = ex.Message; } return(res); }
public void DigitalSignatureServiceTest() { var asymmetricService = new RsaAsymmetricCryptographyService(); var keyPairGenerationResultReceiver = asymmetricService.GenerateAsymmetricKeys(1024); var keyPairGenerationResultSender = asymmetricService.GenerateAsymmetricKeys(1024); var digitalSignatureService = new RsaPkcs1DigitalSignatureService(new Sha1ManagedHashingService()); var signatureCreationArgumentsFromSender = new DigitalSignatureCreationArguments() { Message = "eper málna körte", FullKeyForSignature = keyPairGenerationResultSender.FullKeyPairXml, PublicKeyForEncryption = keyPairGenerationResultReceiver.PublicKeyOnlyXml }; var signatureCreationResult = digitalSignatureService.Sign(signatureCreationArgumentsFromSender); Assert.AreEqual(true, signatureCreationResult.Success); var verificationArgumentsFromReceiver = new DigitalSignatureVerificationArguments(); verificationArgumentsFromReceiver.CipherText = signatureCreationResult.CipherText; verificationArgumentsFromReceiver.Signature = signatureCreationResult.Signature; verificationArgumentsFromReceiver.PublicKeyForSignatureVerification = keyPairGenerationResultSender.PublicKeyOnlyXml; verificationArgumentsFromReceiver.FullKeyForDecryption = keyPairGenerationResultReceiver.FullKeyPairXml; var verificationResult = digitalSignatureService.VerifySignature(verificationArgumentsFromReceiver); Assert.AreEqual(true, verificationResult.Success); Assert.AreEqual(true, verificationResult.SignaturesMatch); }
public DigitalSignatureVerificationResult VerifySignature(DigitalSignatureVerificationArguments arguments) { var res = new DigitalSignatureVerificationResult(); try { var rsaProviderSender = new RSACryptoServiceProvider(); rsaProviderSender.FromXmlString(arguments.PublicKeyForSignatureVerification.ToString()); var deformatter = new RSAPKCS1SignatureDeformatter(rsaProviderSender); deformatter.SetHashAlgorithm(_hashingService.HashAlgorithmCode()); var hashResult = _hashingService.Hash(arguments.CipherText); res.SignaturesMatch = deformatter.VerifySignature(hashResult.HashedBytes, arguments.Signature); if (res.SignaturesMatch) { var rsaProviderReceiver = new RSACryptoServiceProvider(); rsaProviderReceiver.FromXmlString(arguments.FullKeyForDecryption.ToString()); var decryptedBytes = rsaProviderReceiver.Decrypt(Convert.FromBase64String(arguments.CipherText), false); res.DecodedText = Encoding.UTF8.GetString(decryptedBytes); } res.Success = true; } catch (Exception ex) { res.ExceptionMessage = ex.Message; } return res; }