Exemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CalculateSignatureConfig"/> class.
        /// </summary>
        /// <param name="signingCertificate"></param>
        /// <param name="referenceTokenType"></param>
        /// <param name="signingAlgorithm"></param>
        /// <param name="hashFunction"></param>
        public CalculateSignatureConfig(
            X509Certificate2 signingCertificate,
            X509ReferenceType referenceTokenType,
            string signingAlgorithm,
            string hashFunction)
        {
            if (signingCertificate == null)
            {
                throw new ArgumentNullException(nameof(signingCertificate));
            }

            if (String.IsNullOrWhiteSpace(signingAlgorithm))
            {
                throw new ArgumentException(@"Signing algorithm cannot be blank", nameof(signingAlgorithm));
            }

            if (String.IsNullOrEmpty(hashFunction))
            {
                throw new ArgumentException(@"Hash function cannot be blank", nameof(hashFunction));
            }

            SigningCertificate = signingCertificate;
            ReferenceTokenType = referenceTokenType;
            SigningAlgorithm   = signingAlgorithm;
            HashFunction       = hashFunction;
        }
Exemplo n.º 2
0
        private void SetSecurityTokenReference(X509Certificate2 signingCertificate, X509ReferenceType securityTokenType)
        {
            var securityTokenReference = SecurityTokenReferenceProvider.Create(signingCertificate, securityTokenType);

            SigningKey = GetSigningKeyFromCertificate(signingCertificate);
            KeyInfo    = new KeyInfo();

            KeyInfo.AddClause(securityTokenReference);
        }
Exemplo n.º 3
0
        public async Task Correctly_Verifies_Encrypted_And_Signed_Message_With_SecurityTokenReference(
            X509ReferenceType securityTokenReferenceType)
        {
            // Arrange
            var pdf        = new Attachment("pdf", new MemoryStream(pdf_document), "application/pdf");
            var xml        = new Attachment("xml", new MemoryStream(Encoding.UTF8.GetBytes("<Root>Don't modify me</Root>")), "application/xml");
            var as4Message = AS4Message.Create(
                new UserMessage(
                    $"user-{Guid.NewGuid()}",
                    new CollaborationInfo(
                        new AgreementReference("http://agreements.europa.org/agreement"),
                        new Service("getting:started", "org:europa:services"),
                        "eu:sample:03",
                        "eu:edelivery:as4:sampleconversation"),
                    new Party("Sender", new PartyId("org:eu:europa:as4:example:accesspoint:A")),
                    new Party("Receiver", new PartyId("org:eu:europa:as4:example:accesspoint:B")),
                    new[]
            {
                PartInfo.CreateFor(pdf),
                PartInfo.CreateFor(xml)
            },
                    Enumerable.Empty <MessageProperty>()));

            as4Message.AddAttachments(new[] { pdf, xml });
            as4Message.Sign(
                new CalculateSignatureConfig(
                    Registry.Instance.CertificateRepository.GetCertificate(
                        X509FindType.FindBySubjectName,
                        "AccessPointA"),
                    securityTokenReferenceType,
                    Constants.SignAlgorithms.Sha256,
                    Constants.HashFunctions.Sha256));

            as4Message.Encrypt(
                new KeyEncryptionConfiguration(
                    Registry.Instance.CertificateRepository.GetCertificate(
                        X509FindType.FindBySubjectName,
                        "AccessPointB")),
                DataEncryptionConfiguration.Default);

            // Act
            HttpResponseMessage response = await StubSender.SendAS4Message(_receiveAgentUrl, as4Message);

            // Assert
            AS4Message message = await response.DeserializeToAS4Message();

            Assert.False(
                message.PrimaryMessageUnit is Error,
                (message.PrimaryMessageUnit as Error)?.FormatErrorLines());

            Assert.IsType <Receipt>(message.PrimaryMessageUnit);
        }
Exemplo n.º 4
0
        public static SecurityTokenReference Create(X509Certificate2 certificate, X509ReferenceType referenceType)
        {
            switch (referenceType)
            {
            case X509ReferenceType.BSTReference:
                return(new BinarySecurityTokenReference(certificate));

            case X509ReferenceType.IssuerSerial:
                return(new IssuerSecurityTokenReference(certificate));

            case X509ReferenceType.KeyIdentifier:
                return(new KeyIdentifierSecurityTokenReference(certificate));

            default:
                return(new BinarySecurityTokenReference(certificate));
            }
        }