예제 #1
0
        /// <summary>
        /// Parse the DataObjectFormat and CommitmentTypeIndication properties for this document id
        /// </summary>
        /// <param name="element"></param>
        /// <param name="nsm"></param>
        internal void ParseProperties(XmlElement element, XmlNamespaceManager nsm)
        {
            // data object format
            XmlElement objectFormat = element.SelectSingleNode($"xades:SignedDataObjectProperties/xades:DataObjectFormat[@ObjectReference='#{Id}']", nsm) as XmlElement;

            if (objectFormat != null)
            {
                Description      = objectFormat["Description", Xades.XadesNamespaceUrl]?.InnerText;
                ObjectIdentifier = ObjectIdentifier.TryParseFromParent(objectFormat);

                MimeType = objectFormat["MimeType", Xades.XadesNamespaceUrl]?.InnerText;
                Encoding = objectFormat["Encoding", Xades.XadesNamespaceUrl]?.InnerText;
            }

            // commitment type indication
            XmlElement commitmentTypeIndication = element.SelectSingleNode($"xades:SignedDataObjectProperties/xades:CommitmentTypeIndication[xades:ObjectReference='#{Id}']", nsm) as XmlElement;

            if (commitmentTypeIndication != null)
            {
                CommitmentTypeId = ObjectIdentifier.TryParseFromParent(commitmentTypeIndication, "CommitmentTypeId", Xades.XadesNamespaceUrl);
                XmlElement commitmentTypeQualifiers = commitmentTypeIndication["COmmitmentTypeQualifiers", Xades.XadesNamespaceUrl];
                if (commitmentTypeQualifiers != null)
                {
                    foreach (XmlElement commitmentTypeQualifier in commitmentTypeQualifiers.GetElementsByTagName("CommitmentTypeQualifier", Xades.XadesNamespaceUrl))
                    {
                        CommitmentTypeQualifiers.Add(commitmentTypeQualifier);
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Create <CommitmentTypeIndication> for this item
        /// </summary>
        /// <param name="document"></param>
        /// <returns></returns>
        internal XmlElement AddCommitmentTypeIndication(XmlElement signedDataObjectProperties)
        {
            XmlElement commitmentIdentifier = CommitmentTypeId?.GetObjectIdentifier(signedDataObjectProperties.OwnerDocument, "CommitmentTypeId", Xades.XadesNamespaceUrl);

            if (commitmentIdentifier == null)
            {
                return(null);
            }

            XmlElement commitmentTypeIndication = signedDataObjectProperties.CreateChild("CommitmentTypeIndication", Xades.XadesNamespaceUrl);

            commitmentTypeIndication.AppendChild(commitmentIdentifier);
            commitmentTypeIndication.CreateChild("ObjectReference", Xades.XadesNamespaceUrl, $"#{Id}");
            if (CommitmentTypeQualifiers != null && CommitmentTypeQualifiers.Count > 0)
            {
                XmlElement commitmentTypeQualifiers = commitmentTypeIndication.CreateChild("CommitmentTypeQualifiers", Xades.XadesNamespaceUrl);
                foreach (XmlElement commitmentTypeQualifier in CommitmentTypeQualifiers.Where(x => x.LocalName == "CommitmentTypeQualifier" && x.NamespaceURI == Xades.XadesNamespaceUrl))
                {
                    commitmentTypeQualifiers.AppendChild(signedDataObjectProperties.OwnerDocument.ImportNode(commitmentTypeQualifier, true));
                }
            }
            return(commitmentTypeIndication);
        }