https://windevdesenvolvimento.blogspot.com/2021/08/dicas-3377-windev-webdev-mobile_1.html
Procedure assinar_xml(recebe_xml,recebe_refUri,recebe_id,receber_certificado_local_arquivo,receber_senha)
clX509certi is X509Certificate2(receber_certificado_local_arquivo,receber_senha)
clDoc is System.Xml.XmlDocument;
clDoc.LoadXml(recebe_xml)
nQtdeRefUri is int= clDoc.GetElementsByTagName(recebe_refUri).Count
IF (nQtdeRefUri) =0 THEN
RESULT "erro assinar"
ELSE
VrSignedXml is SignedXml(clDoc)
VrSignedXml.SigningKey = clX509certi.PrivateKey
Reference is Reference
Reference.URI = "#" + recebe_id
Env is XmlDsigEnvelopedSignatureTransform
Reference.AddTransform(Env)
c14 is XmlDsigC14NTransform
Reference.AddTransform(c14)
VrSignedXml.AddReference(Reference)
VrkeyInfo is KeyInfo
VrkeyInfo.AddClause(new KeyInfoX509Data(clX509certi))
VrSignedXml.KeyInfo = VrkeyInfo
VrSignedXml.ComputeSignature()
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml()
clDoc.DocumentElement.AppendChild(clDoc.ImportNode(xmlDigitalSignature, True))
RESULT clDoc.get_InnerXml()
END
Procedure assinar_xml_serial(recebe_xml,recebe_refUri,recebe_id,receber_serial_numero)
clCertificado is X509Store(StoreName.My, StoreLocation.CurrentUser)
clCertificado.open(OpenFlags.ReadOnly)
clCertificado_carrega is X509Certificate2Collection(clCertificado.Certificates)
clCertificado_colecao is X509Certificate2Collection(clCertificado_carrega.Find(X509FindType.FindBySerialNumber,receber_serial_numero,False))
clX509certi is X509Certificate2
FOR EACH clX509certi OF clCertificado_colecao
clDoc is System.Xml.XmlDocument;
clDoc.LoadXml(recebe_xml)
nQtdeRefUri is int= clDoc.GetElementsByTagName(recebe_refUri).Count
IF (nQtdeRefUri) =0 THEN
RESULT "erro assinar"
ELSE
VrSignedXml is SignedXml(clDoc)
VrSignedXml.SigningKey = clX509certi.PrivateKey
Reference is Reference
Reference.URI = "#" + recebe_id
Env is XmlDsigEnvelopedSignatureTransform
Reference.AddTransform(Env)
c14 is XmlDsigC14NTransform
Reference.AddTransform(c14)
VrSignedXml.AddReference(Reference)
VrkeyInfo is KeyInfo
VrkeyInfo.AddClause(new KeyInfoX509Data(clX509certi))
VrSignedXml.KeyInfo = VrkeyInfo
VrSignedXml.ComputeSignature()
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml()
clDoc.DocumentElement.AppendChild(clDoc.ImportNode(xmlDigitalSignature, True))
RESULT clDoc.get_InnerXml()
END
END