Beispiel #1
0
        public void Create_WhenCommitmentTypeIdNull_Throws()
        {
            var exception = Assert.Throws <ArgumentNullException>(
                () => CommitmentTypeIndication.Create(commitmentTypeId: null));

            Assert.Equal("commitmentTypeId", exception.ParamName);
        }
Beispiel #2
0
        public void Create_WithCommitmentTypeId_ReturnsInstance()
        {
            var commitmentTypeIndication = CommitmentTypeIndication.Create(new Oid(Oids.CommitmentTypeIdentifierProofOfOrigin));

            Assert.Equal(Oids.CommitmentTypeIdentifierProofOfOrigin, commitmentTypeIndication.CommitmentTypeId.Value);
            Assert.Null(commitmentTypeIndication.Qualifiers);
        }
Beispiel #3
0
        public override void PerformTest()
        {
            CommitmentTypeIndication cti = new CommitmentTypeIndication(CommitmentTypeIdentifier.ProofOfOrigin);

            CheckConstruction(cti, CommitmentTypeIdentifier.ProofOfOrigin, null);

            Asn1Sequence qualifier = new DerSequence(new DerObjectIdentifier("1.2"));

            cti = new CommitmentTypeIndication(CommitmentTypeIdentifier.ProofOfOrigin, qualifier);

            CheckConstruction(cti, CommitmentTypeIdentifier.ProofOfOrigin, qualifier);

            cti = CommitmentTypeIndication.GetInstance(null);

            if (cti != null)
            {
                Fail("null GetInstance() failed.");
            }

            try
            {
                CommitmentTypeIndication.GetInstance(new object());

                Fail("GetInstance() failed to detect bad object.");
            }
            catch (ArgumentException)
            {
                // expected
            }
        }
Beispiel #4
0
        public void Read_WithEmptyQualifiers_Throws()
        {
            var bcCommitmentTypeIndication = new BcCommitmentTypeIndication(
                PkcsObjectIdentifiers.IdCtiEtsProofOfSender,
                DerSequence.Empty);
            var bytes = bcCommitmentTypeIndication.GetDerEncoded();

            var exception = Assert.Throws <SignatureException>(
                () => CommitmentTypeIndication.Read(bytes));

            Assert.Equal("The commitment-type-indication attribute is invalid.", exception.Message);
        }
Beispiel #5
0
        public void Read_WithOnlyCommitmentTypeId_ReturnsInstance()
        {
            var bcCommitmentTypeIndication = new BcCommitmentTypeIndication(PkcsObjectIdentifiers.IdCtiEtsProofOfSender);
            var bytes = bcCommitmentTypeIndication.GetDerEncoded();

            var commitmentTypeIndication = CommitmentTypeIndication.Read(bytes);

            Assert.Equal(
                bcCommitmentTypeIndication.CommitmentTypeID.ToString(),
                commitmentTypeIndication.CommitmentTypeId.Value);
            Assert.Null(commitmentTypeIndication.Qualifiers);
        }
Beispiel #6
0
        public void Read_WithQualifiers_ReturnsInstance()
        {
            var commitmentTypeIdentifier   = new DerObjectIdentifier("1.2.3");
            var bcCommitmentTypeQualifier  = new BcCommitmentTypeQualifier(commitmentTypeIdentifier);
            var bcCommitmentTypeIndication = new BcCommitmentTypeIndication(
                PkcsObjectIdentifiers.IdCtiEtsProofOfSender,
                new DerSequence(bcCommitmentTypeQualifier));
            var bytes = bcCommitmentTypeIndication.GetDerEncoded();

            var commitmentTypeIndication = CommitmentTypeIndication.Read(bytes);

            Assert.Equal(1, commitmentTypeIndication.Qualifiers.Count);
            Assert.Equal(commitmentTypeIdentifier.ToString(), commitmentTypeIndication.Qualifiers[0].CommitmentTypeIdentifier.Value);
        }
Beispiel #7
0
        private void CheckConstruction(
            CommitmentTypeIndication mv,
            DerObjectIdentifier commitmenttTypeId,
            Asn1Encodable qualifier)
        {
            CheckStatement(mv, commitmenttTypeId, qualifier);

            mv = CommitmentTypeIndication.GetInstance(mv);

            CheckStatement(mv, commitmenttTypeId, qualifier);

            Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromByteArray(
                mv.ToAsn1Object().GetEncoded());

            mv = CommitmentTypeIndication.GetInstance(seq);

            CheckStatement(mv, commitmenttTypeId, qualifier);
        }
Beispiel #8
0
        private void CheckStatement(
            CommitmentTypeIndication cti,
            DerObjectIdentifier commitmentTypeId,
            Asn1Encodable qualifier)
        {
            if (!cti.CommitmentTypeID.Equals(commitmentTypeId))
            {
                Fail("commitmentTypeIds don't match.");
            }

            if (qualifier != null)
            {
                if (!cti.CommitmentTypeQualifier.Equals(qualifier))
                {
                    Fail("qualifiers don't match.");
                }
            }
            else if (cti.CommitmentTypeQualifier != null)
            {
                Fail("qualifier found when none expected.");
            }
        }
        public void GetAttributes_WithMultipleMatches_ReturnsMatches()
        {
            using (var certificate = _fixture.GetDefaultCertificate())
            {
                var attributes = CreateAttributeCollection(certificate, _fixture.DefaultKeyPair.Private,
                                                           vector =>
                {
                    vector.Add(
                        new BcAttribute(
                            CmsAttributes.SigningTime,
                            new DerSet(new DerUtcTime(DateTime.UtcNow))));

                    vector.Add(
                        new BcAttribute(
                            PkcsObjectIdentifiers.IdAAEtsCommitmentType,
                            new DerSet(
                                new BcCommitmentTypeIndication(PkcsObjectIdentifiers.IdCtiEtsProofOfOrigin))));

                    vector.Add(
                        new BcAttribute(
                            PkcsObjectIdentifiers.IdAAEtsCommitmentType,
                            new DerSet(
                                new BcCommitmentTypeIndication(PkcsObjectIdentifiers.IdCtiEtsProofOfReceipt))));
                });

                var matches = AttributeUtility.GetAttributes(attributes, Oids.CommitmentTypeIndication).ToArray();

                Assert.Equal(2, matches.Length);
                Assert.Equal(
                    PkcsObjectIdentifiers.IdCtiEtsProofOfOrigin.ToString(),
                    CommitmentTypeIndication.Read(matches[0].Values[0].RawData).CommitmentTypeId.Value);
                Assert.Equal(
                    PkcsObjectIdentifiers.IdCtiEtsProofOfReceipt.ToString(),
                    CommitmentTypeIndication.Read(matches[1].Values[0].RawData).CommitmentTypeId.Value);
            }
        }
Beispiel #10
0
 public void Read_WithInvalidAsn1_Throws()
 {
     Assert.Throws <CryptographicException>(
         () => CommitmentTypeIndication.Read(new byte[] { 0x30, 0x07 }));
 }
        private void AddSignatureProperties(SignatureDocument sigDocument, SignedSignatureProperties signedSignatureProperties, SignedDataObjectProperties signedDataObjectProperties,
                                            UnsignedSignatureProperties unsignedSignatureProperties, SignatureParameters parameters)
        {
            Cert cert;

            cert = new Cert();
            cert.IssuerSerial.X509IssuerName   = parameters.Signer.Certificate.IssuerName.Name;
            cert.IssuerSerial.X509SerialNumber = parameters.Signer.Certificate.GetSerialNumberAsDecimalString();
            DigestUtil.SetCertDigest(parameters.Signer.Certificate.GetRawCertData(), parameters.DigestMethod, cert.CertDigest);
            signedSignatureProperties.SigningCertificate.CertCollection.Add(cert);

            if (parameters.SignaturePolicyInfo != null)
            {
                if (!string.IsNullOrEmpty(parameters.SignaturePolicyInfo.PolicyIdentifier))
                {
                    signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyImplied = false;
                    signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyId.SigPolicyId.Identifier.IdentifierUri = parameters.SignaturePolicyInfo.PolicyIdentifier;
                }

                if (!string.IsNullOrEmpty(parameters.SignaturePolicyInfo.PolicyUri))
                {
                    SigPolicyQualifier spq = new SigPolicyQualifier();
                    spq.AnyXmlElement           = sigDocument.Document.CreateElement(XadesSignedXml.XmlXadesPrefix, "SPURI", XadesSignedXml.XadesNamespaceUri);
                    spq.AnyXmlElement.InnerText = parameters.SignaturePolicyInfo.PolicyUri;

                    signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyId.SigPolicyQualifiers.SigPolicyQualifierCollection.Add(spq);
                }

                if (!string.IsNullOrEmpty(parameters.SignaturePolicyInfo.PolicyHash))
                {
                    signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyId.SigPolicyHash.DigestMethod.Algorithm = parameters.SignaturePolicyInfo.PolicyDigestAlgorithm.URI;
                    signedSignatureProperties.SignaturePolicyIdentifier.SignaturePolicyId.SigPolicyHash.DigestValue            = Convert.FromBase64String(parameters.SignaturePolicyInfo.PolicyHash);
                }
            }

            signedSignatureProperties.SigningTime = parameters.SigningDate.HasValue ? parameters.SigningDate.Value : DateTime.Now;

            if (_dataFormat != null)
            {
                DataObjectFormat newDataObjectFormat = new DataObjectFormat();

                newDataObjectFormat.MimeType    = _dataFormat.MimeType;
                newDataObjectFormat.Encoding    = _dataFormat.Encoding;
                newDataObjectFormat.Description = _dataFormat.Description;
                newDataObjectFormat.ObjectReferenceAttribute = "#" + _refContent.Id;

                if (_dataFormat.ObjectIdentifier != null)
                {
                    newDataObjectFormat.ObjectIdentifier.Identifier.IdentifierUri = _dataFormat.ObjectIdentifier.Identifier.IdentifierUri;
                }

                signedDataObjectProperties.DataObjectFormatCollection.Add(newDataObjectFormat);
            }

            if (parameters.SignerRole != null &&
                (parameters.SignerRole.CertifiedRoles.Count > 0 || parameters.SignerRole.ClaimedRoles.Count > 0))
            {
                signedSignatureProperties.SignerRole = new Microsoft.Xades.SignerRole();

                foreach (X509Certificate certifiedRole in parameters.SignerRole.CertifiedRoles)
                {
                    signedSignatureProperties.SignerRole.CertifiedRoles.CertifiedRoleCollection.Add(new CertifiedRole()
                    {
                        PkiData = certifiedRole.GetRawCertData()
                    });
                }

                foreach (string claimedRole in parameters.SignerRole.ClaimedRoles)
                {
                    signedSignatureProperties.SignerRole.ClaimedRoles.ClaimedRoleCollection.Add(new ClaimedRole()
                    {
                        InnerText = claimedRole
                    });
                }
            }

            foreach (SignatureCommitment signatureCommitment in parameters.SignatureCommitments)
            {
                CommitmentTypeIndication cti = new CommitmentTypeIndication();
                cti.CommitmentTypeId.Identifier.IdentifierUri = signatureCommitment.CommitmentType.URI;
                cti.AllSignedDataObjects = true;

                foreach (XmlElement signatureCommitmentQualifier in signatureCommitment.CommitmentTypeQualifiers)
                {
                    CommitmentTypeQualifier ctq = new CommitmentTypeQualifier();
                    ctq.AnyXmlElement = signatureCommitmentQualifier;

                    cti.CommitmentTypeQualifiers.CommitmentTypeQualifierCollection.Add(ctq);
                }

                signedDataObjectProperties.CommitmentTypeIndicationCollection.Add(cti);
            }

            if (parameters.SignatureProductionPlace != null)
            {
                signedSignatureProperties.SignatureProductionPlace.City            = parameters.SignatureProductionPlace.City;
                signedSignatureProperties.SignatureProductionPlace.StateOrProvince = parameters.SignatureProductionPlace.StateOrProvince;
                signedSignatureProperties.SignatureProductionPlace.PostalCode      = parameters.SignatureProductionPlace.PostalCode;
                signedSignatureProperties.SignatureProductionPlace.CountryName     = parameters.SignatureProductionPlace.CountryName;
            }
        }