Public Sub SignXmlFile(FileName As String, SignedFileName As String, clave As RSA)
' Crea un nuevo documento XML.
Dim doc As New XmlDocument
' Cargue el archivo XML pasado usando su nombre.
doc.Load(New XmlTextReader(FileName))
' Crea un objeto SignedXml.
Dim signedXml As SignedXml = New SignedXml(doc)
' Agregue la clave al documento SignedXml.
signedXml.SigningKey = clave
signedXml.SignedInfo.SignatureMethod = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
' Crea una referencia para ser firmado.
Dim reference As New Reference
reference.Uri = ""
' Agrega una transformación envolvente a la referencia.
Reference.AddTransform(New XmlDsigEnvelopedSignatureTransform())
Reference.AddTransform(New XmlDsigExcC14NTransform())
Reference.DigestMethod = "http://www.w3.org/2001/04/xmlenc#sha256"
' Agrega la referencia al objeto SignedXml.
signedXml.AddReference(reference)
' Calcula la firma.
signedXml.ComputeSignature()
' Obtener la representación XML de la firma y guardar
' a un objeto XmlElement.
Dim xmlDigitalSignature As XmlElement = signedXml.GetXml()
' Añade el elemento al documento XML.
doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignature, True))
' Guarda el documento XML firmado en un archivo especificado
' usando la cadena pasada.
Dim xmltw As XmlTextWriter = New XmlTextWriter(SignedFileName, New UTF8Encoding(False))
doc.WriteTo(xmltw)
xmltw.Close()
End Sub
El error lo da aquí:
' Calcula la firma.
signedXml.ComputeSignature()
Excepción no controlada del tipo 'System.Security.Cryptography.CryptographicException' en mscorlib.dll
Información adicional: Algoritmo especificado no es válido.
No consigo saber que puede ser...