private static XmlElement GenerateXadesBesObject(XmlSignatureAppearance sap,
String signatureId, String contentReferenceId, String signedPropertiesId, out XmlElement signedProperty) {
HashAlgorithm md = new SHA1Managed();
X509Certificate cert = sap.GetCertificate();
XmlDocument doc = sap.GetXmlLocator().GetDocument();
XmlElement dsObject = doc.CreateElement("Object", SecurityConstants.XMLDSIG_URI);
XmlElement QualifyingProperties = doc.CreateElement(SecurityConstants.XADES_QualifyingProperties, SecurityConstants.XADES_132_URI);
QualifyingProperties.SetAttribute("Target", "#"+signatureId);
XmlElement SignedProperties = doc.CreateElement(SecurityConstants.XADES_SignedProperties, SecurityConstants.XADES_132_URI);
SignedProperties.SetAttribute("Id", signedPropertiesId);
XmlElement SignedSignatureProperties = doc.CreateElement(SecurityConstants.XADES_SignedSignatureProperties, SecurityConstants.XADES_132_URI);
XmlElement SigningTime = doc.CreateElement(SecurityConstants.XADES_SigningTime, SecurityConstants.XADES_132_URI);
String result = sap.GetSignDate().ToString(SecurityConstants.SigningTimeFormat);
SigningTime.AppendChild(doc.CreateTextNode(result));
SignedSignatureProperties.AppendChild(SigningTime);
XmlElement SigningCertificate = doc.CreateElement(SecurityConstants.XADES_SigningCertificate, SecurityConstants.XADES_132_URI);
XmlElement Cert = doc.CreateElement(SecurityConstants.XADES_Cert, SecurityConstants.XADES_132_URI);
XmlElement CertDigest = doc.CreateElement(SecurityConstants.XADES_CertDigest, SecurityConstants.XADES_132_URI);
XmlElement DigestMethod = doc.CreateElement(SecurityConstants.DigestMethod, SecurityConstants.XMLDSIG_URI);
DigestMethod.SetAttribute(SecurityConstants.Algorithm, SecurityConstants.XMLDSIG_URI_SHA1);
CertDigest.AppendChild(DigestMethod);
XmlElement DigestValue = doc.CreateElement(SecurityConstants.DigestValue, SecurityConstants.XMLDSIG_URI);
DigestValue.AppendChild(doc.CreateTextNode(Convert.ToBase64String(md.ComputeHash(cert.GetEncoded()))));
CertDigest.AppendChild(DigestValue);
Cert.AppendChild(CertDigest);
XmlElement IssueSerial = doc.CreateElement(SecurityConstants.XADES_IssuerSerial, SecurityConstants.XADES_132_URI);
XmlElement X509IssuerName = doc.CreateElement(SecurityConstants.X509IssuerName, SecurityConstants.XMLDSIG_URI);
X509IssuerName.AppendChild(doc.CreateTextNode(GetX509IssuerName(cert)));
IssueSerial.AppendChild(X509IssuerName);
XmlElement X509SerialNumber = doc.CreateElement(SecurityConstants.X509SerialNumber, SecurityConstants.XMLDSIG_URI);
X509SerialNumber.AppendChild(doc.CreateTextNode(GetX509SerialNumber(cert)));
IssueSerial.AppendChild(X509SerialNumber);
Cert.AppendChild(IssueSerial);
SigningCertificate.AppendChild(Cert);
SignedSignatureProperties.AppendChild(SigningCertificate);
SignedProperties.AppendChild(SignedSignatureProperties);
XmlElement SignedDataObjectProperties = doc.CreateElement(SecurityConstants.XADES_SignedDataObjectProperties, SecurityConstants.XADES_132_URI);
XmlElement DataObjectFormat = doc.CreateElement(SecurityConstants.XADES_DataObjectFormat, SecurityConstants.XADES_132_URI);
DataObjectFormat.SetAttribute(SecurityConstants.ObjectReference, "#" + contentReferenceId);
String descr = sap.GetDescription();
if (descr != null) {
XmlElement Description = doc.CreateElement(SecurityConstants.XADES_Description, SecurityConstants.XADES_132_URI);
Description.AppendChild(doc.CreateTextNode(descr));
DataObjectFormat.AppendChild(Description);
}
XmlElement MimeType = doc.CreateElement(SecurityConstants.XADES_MimeType, SecurityConstants.XADES_132_URI);
MimeType.AppendChild(doc.CreateTextNode(sap.GetMimeType()));
DataObjectFormat.AppendChild(MimeType);
String enc = sap.GetXmlLocator().GetEncoding();
if (enc != null) {
XmlElement Encoding = doc.CreateElement(SecurityConstants.XADES_Encoding, SecurityConstants.XADES_132_URI);
Encoding.AppendChild(doc.CreateTextNode(enc));
DataObjectFormat.AppendChild(Encoding);
}
SignedDataObjectProperties.AppendChild(DataObjectFormat);
SignedProperties.AppendChild(SignedDataObjectProperties);
QualifyingProperties.AppendChild(SignedProperties);
dsObject.AppendChild(QualifyingProperties);
signedProperty = SignedProperties;
return dsObject;
}