コード例 #1
0
        public void ShouldEncryptXmlWithGost_R3410_2012_512(TestCertificateInfo testCase)
        {
            // Given

            var certificate = testCase.Certificate;

            // Получатель экспортирует отправителю информацию о своем открытом ключе
            var keyContainer  = certificate.GetPrivateKeyInfo();
            var privateKey    = new Gost_R3410_2012_512_AsymmetricAlgorithm(keyContainer);
            var publicKeyInfo = privateKey.ExportParameters(false);

            // Отправитель импортирует от получателя информацию о его открытом ключе
            var publicKey = new Gost_R3410_2012_512_AsymmetricAlgorithm();

            publicKey.ImportParameters(publicKeyInfo);

            var xmlDocument = CreateXmlDocument();
            var expectedXml = xmlDocument.OuterXml;

            // When
            var encryptedXmlDocument = EncryptXmlDocument(xmlDocument, publicKey);
            var decryptedXmlDocument = DecryptXmlDocument(encryptedXmlDocument, privateKey);
            var actualXml            = decryptedXmlDocument.OuterXml;

            // Then
            Assert.AreEqual(expectedXml, actualXml);
        }
コード例 #2
0
        public void ShouldSignXml(TestCertificateInfo testCase)
        {
            // Given
            var certificate = testCase.Certificate;
            var xmlDocument = CreateXmlDocument();

            // When
            var signedXmlDocument = SignXmlDocument(xmlDocument, certificate);

            // Then
            Assert.IsTrue(VerifyXmlDocumentSignature(signedXmlDocument));
        }
コード例 #3
0
        public void ShouldSign(TestCertificateInfo testCase)
        {
            // Given
            var certificate = testCase.Certificate;
            var message     = CreateMessage();

            // When
            var detachedSignature        = SignMessage(certificate, message);
            var isValidDetachedSignature = VerifyMessage(message, detachedSignature);

            // Then
            Assert.IsTrue(isValidDetachedSignature);
        }
コード例 #4
0
        public void ShouldEncryptAndDecrypt(TestCertificateInfo testCase)
        {
            // Given
            var certificate = testCase.Certificate;
            var message     = CreateMessage();

            // When
            var encryptedMessage = EncryptMessage(certificate, message);
            var decryptedMessage = DecryptMessage(encryptedMessage);

            // Then
            Assert.IsTrue(message.SequenceEqual(decryptedMessage));
        }
コード例 #5
0
        public void ShouldSignXmlWithGost_R3410_2012_512(TestCertificateInfo testCase)
        {
            // Given
            var certificate  = testCase.Certificate;
            var keyContainer = certificate.GetPrivateKeyInfo();
            var signingKey   = new Gost_R3410_2012_512_AsymmetricAlgorithm(keyContainer);
            var xmlDocument  = CreateXmlDocument();

            // When
            var signedXmlDocument = SignXmlDocument(xmlDocument, new Gost_R3410_2012_512_KeyValue(signingKey));

            // Then
            Assert.IsTrue(VerifyXmlDocumentSignature(signedXmlDocument));
        }
コード例 #6
0
        public void ShouldEncryptXml(TestCertificateInfo testCase)
        {
            // Given
            var certificate = testCase.Certificate;
            var xmlDocument = CreateXmlDocument();
            var expectedXml = xmlDocument.OuterXml;

            // When
            var encryptedXmlDocument = EncryptXmlDocument(xmlDocument, certificate);
            var decryptedXmlDocument = DecryptXmlDocument(encryptedXmlDocument);
            var actualXml            = decryptedXmlDocument.OuterXml;

            // Then
            Assert.AreEqual(expectedXml, actualXml);
        }
コード例 #7
0
        public void ShouldEncryptAndDecrypt(TestCertificateInfo testCase)
        {
            // Given
            var certificate = testCase.Certificate;
            var privateKey  = (GostAsymmetricAlgorithm)certificate.GetPrivateKeyAlgorithm();
            var publicKey   = (GostAsymmetricAlgorithm)certificate.GetPublicKeyAlgorithm();
            var dataStream  = CreateDataStream();

            // When
            var encryptedDataStream = SendEncryptedDataStream(publicKey, dataStream, out var iv, out var sessionKey);
            var decryptedDataStream = ReceiveEncryptedDataStream(privateKey, encryptedDataStream, iv, sessionKey);

            // Then
            Assert.That(dataStream, Is.EqualTo(decryptedDataStream));
        }
コード例 #8
0
        public void ShouldSignDataStream(TestCertificateInfo testCase)
        {
            // Given
            var certificate = testCase.Certificate;
            var privateKey  = (GostAsymmetricAlgorithm)certificate.GetPrivateKeyAlgorithm();
            var publicKey   = (GostAsymmetricAlgorithm)certificate.GetPublicKeyAlgorithm();
            var dataStream  = CreateDataStream();

            // When

            dataStream.Seek(0, SeekOrigin.Begin);
            var signature = CreateSignature(privateKey, dataStream);

            dataStream.Seek(0, SeekOrigin.Begin);
            var isValidSignature = VerifySignature(publicKey, dataStream, signature);

            // Then
            Assert.IsTrue(isValidSignature);
        }
コード例 #9
0
        public void ShouldSetContainerPassword_R3410_2012_512(TestCertificateInfo testCase)
        {
            // Given
            var data           = GetSomeData();
            var certificate    = testCase.Certificate;
            var securePassword = CreateSecureString(TestConfig.ContainerPassword);

            // When

            var privateKeyInfo = certificate.GetPrivateKeyInfo();
            var privateKey     = new Gost_R3410_2012_512_AsymmetricAlgorithm(privateKeyInfo);

            privateKey.SetContainerPassword(securePassword);

            var signature        = CreateSignature(privateKey, data);
            var isValidSignature = VerifySignature(privateKey, data, signature);

            // Then
            Assert.IsTrue(isValidSignature);
        }