Hola a todos. Antes de nada, decir que nunca he trabajado con firmas, así que soy muy novato.
Necesito firmar un XML para la AESPD. Tengo el XML, lo he "firmado" con .NET, con xxxx, pero no lo hace "bien". El código lo saque de la MSDN.
Resulta que no incluye los prefijos "ds:". No me preocupa, porque luego sustituyo la cadena. (¿se debe hacer esto con un XML firmado?¿Afecta a la firma?)
El caso es que la segunda parte, que es opcional, la del KEY, no la genera, y no sé porqué.
Os dejo el código. A mi me parece que le falta algo:
Sub SignXml(ByVal Doc As XmlDocument, ByVal Key As RSA)
' Check arguments.
If Doc Is Nothing Then
Throw New ArgumentException("Doc")
End If
If Key Is Nothing Then
Throw New ArgumentException("Key")
End If
Dim signedXml As New SignedXml(Doc)
signedXml.SigningKey = Key
Dim reference As New Reference()
reference.Uri = ""
Dim env As New XmlDsigEnvelopedSignatureTransform()
reference.AddTransform(env)
signedXml.AddReference(reference)
signedXml.ComputeSignature()
Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()
Doc.DocumentElement.AppendChild(Doc.ImportNode(xml DigitalSignature, True))
End Sub