/** * Prueba de firma convencional. * * @throws Exception en cualquier error */ @SuppressWarnings("static-method") @Test public void testSignature() throws Exception { Assert.assertEquals( "file.signed.pdf", AOPDFSigner.getSignedName("file.pdf")); // $NON-NLS-1$ //$NON-NLS-2$ Logger.getLogger("es.gob.afirma").setLevel(Level.WARNING); // $NON-NLS-1$ final PrivateKeyEntry pke; final X509Certificate cert; final KeyStore ks = KeyStore.getInstance("PKCS12"); // $NON-NLS-1$ ks.load(ClassLoader.getSystemResourceAsStream(CERT_PATH), CERT_PASS.toCharArray()); pke = (PrivateKeyEntry) ks.getEntry(CERT_ALIAS, new KeyStore.PasswordProtection(CERT_PASS.toCharArray())); cert = (X509Certificate) ks.getCertificate(CERT_ALIAS); final AOSigner signer = new AOPDFSigner(); String prueba; for (final Properties extraParams : PADES_MODES) { for (final String algo : ALGOS) { for (final String file : TEST_FILES) { final byte[] testPdf = AOUtil.getDataFromInputStream(ClassLoader.getSystemResourceAsStream(file)); Assert.assertTrue( "No se ha reconocido como un PDF", signer.isValidDataFile(testPdf)); // $NON-NLS-1$ prueba = "Firma PAdES en modo '" + //$NON-NLS-1$ extraParams.getProperty("mode") + //$NON-NLS-1$ "' con el algoritmo ': " + //$NON-NLS-1$ algo + "' y el fichero '" + //$NON-NLS-1$ file + "'"; //$NON-NLS-1$ System.out.println(prueba); final byte[] result = signer.sign( testPdf, algo, pke.getPrivateKey(), pke.getCertificateChain(), extraParams); Assert.assertNotNull(prueba, result); Assert.assertTrue(signer.isSign(result)); AOTreeModel tree = signer.getSignersStructure(result, false); Assert.assertEquals( "Datos", ((AOTreeNode) tree.getRoot()).getUserObject()); // $NON-NLS-1$ Assert.assertEquals( "ANF Usuario Activo", ((AOTreeNode) tree.getRoot()).getChildAt(0).getUserObject()); // $NON-NLS-1$ tree = signer.getSignersStructure(result, true); Assert.assertEquals( "Datos", ((AOTreeNode) tree.getRoot()).getUserObject()); // $NON-NLS-1$ final AOSimpleSignInfo simpleSignInfo = (AOSimpleSignInfo) ((AOTreeNode) tree.getRoot()).getChildAt(0).getUserObject(); // Assert.assertNotNull(simpleSignInfo.getSigningTime()); Assert.assertEquals(cert, simpleSignInfo.getCerts()[0]); Assert.assertEquals(result, signer.getData(result)); Assert.assertEquals( AOSignConstants.SIGN_FORMAT_PDF, signer.getSignInfo(result).getFormat()); final File saveFile = File.createTempFile(algo, ".pdf"); // $NON-NLS-1$ final OutputStream os = new FileOutputStream(saveFile); os.write(result); os.flush(); os.close(); System.out.println( "Temporal para comprobacion manual: " + saveFile.getAbsolutePath()); // $NON-NLS-1$ } } } }