No, con .NET o con C# no...
Lo he hecho en JAVA.
No os puedo poner el código exacto por temas de confidencialidad del curro.... pero os puedo orientar como lo he hecho...
0º - Imports de la AEAT
Código:
import es.mityc.facturae.utils.SignatureUtil;
import es.mityc.facturae.utils.ValidatorUtil;
import es.mityc.firmaJava.libreria.xades.ResultadoValidacion;
import es.mityc.firmaJava.libreria.xades.ValidarFirmaXML;
import es.mityc.firmaJava.libreria.xades.errores.FirmaXMLError;
luego
1º - Abrir el xml
Apertura del xml
En la página de Oracle que os he puesto... Sample 3.
Código:
// Instanciando el documento a firmar
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = dbf.newDocumentBuilder().parse(new FileInputStream("..\miFacturae.xml"));
2º - Validar el xml con la Efactura
pendiente...
3º - Abrir certificado
Yo lo he hecho diferente a lo que ponía en la página de Oracle - Sample 2
Abro directamente un certificado exportado que debe estar instalado en el equipo desde el que se firma.
Código:
FileInputStream cer = new FileInputStream("..\micertificado.cer");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate certificat = (X509Certificate) cf.generateCertificate(cer);
cer.close();
4º - Firmar
Código:
doc = SignatureUtil.sign(doc, certificat);
WTF ... PERO QUE ... CAJONES! ¿Como? ¿¿Así de facil??.... Pues sí, es una función que está en la librería es.mityc.facturae.utils.SignatureUtil
5º - Validar firma (opcional)
pendiente...
6º - Generar salida... Sample 4 de la página de oracle que os he puesto más arriba... que no leeis!!!!
Código:
// Crear el Stream de salida.
OutputStream os = new FileOutputStream("..\miFacturae.xsig");
// Instanciamos el transformador
TransformerFactory tf = TransformerFactory.newInstance();
// Creamos el transformador
Transformer trans = tf.newTransformer();
// Transformamos el documento firmado a la salida.
trans.transform(new DOMSource(doc), new StreamResult(os));
Naturalmente, en un .java, compilado a .jar y con los .jar que se necesitan (imports)
Vaaaamos que podéis... más claro y os pongo el main y todos los imports que te pone solo el eclipse...