package org.demoiselle.applet_customizada;
import java.applet.Applet;
import java.io.*;
import java.security.*;
import javax.swing.JOptionPane;
import org.demoiselle.signer.signature.applet.action.AbstractAppletExecute;
import org.demoiselle.signer.signature.applet.certificate.ICPBrasilCertificate;
import org.demoiselle.signer.signature.signer.factory.PKCS7Factory;
import org.demoiselle.signer.signature.signer.pkcs7.PKCS7Signer;
import org.demoiselle.signer.signature.policy.engine.factory.PolicyFactory;
import org.slf4j.*;
public class App extends AbstractAppletExecute {
private static final Logger logger = LoggerFactory.getLogger(App.class);
@Override
public void execute(KeyStore keystore, String alias, Applet applet) {
try {
/* Carregando o conteudo a ser assinado */
String documento = AbstractAppletExecute.getFormField(applet,
"mainForm", "documento");
if (documento.length() == 0) {
JOptionPane.showMessageDialog(applet,
"Por favor, escolha um documento para assinar",
"Error", JOptionPane.ERROR_MESSAGE);
return;
}
String user_home = System.getProperty("user.home");
File file = new File(documento);
String doc = documento;
logger.info("user.home......: {}", user_home);
logger.info("parm documento......: {}", doc);
String canonicalPath = file.getCanonicalPath();
logger.info("canonicalPath...........: {}", canonicalPath);
String pathAbs = file.getAbsolutePath();
logger.info("pathAbs...........: {}", pathAbs);
String path = file.getPath();
logger.info("Path...........: {}", path);
byte[] content = readContent(canonicalPath);
/* Parametrizando o objeto doSign */
PKCS7Signer signer = PKCS7Factory.getInstance().factoryDefault();
signer.setCertificates(keystore.getCertificateChain(alias));
signer.setPrivateKey((PrivateKey) keystore.getKey(alias, null));
signer.setSignaturePolicy(PolicyFactory.Policies.AD_RB_CADES_2_2);
signer.setAttached(false);
/* Realiza a assinatura do conteudo */
logger.info("Efetuando a assinatura do conteudo");
byte[] signed = signer.doSign(content);
/* Grava o conteudo assinado no disco */
writeContent(signed, documento.concat(".p7s"));
/* Valida o conteudo */
logger.info("Efetuando a validacao da assinatura.");
boolean checked = signer.check(content, signed);
if (checked) {
logger.info("A assinatura e valida.");
JOptionPane.showMessageDialog(applet,
"O arquivo foi assinado e validado com sucesso.",
"Mensagem", JOptionPane.INFORMATION_MESSAGE);
} else {
logger.info("A assinatura nao e valida!");
}
/* Exibe alguns dados do certificado */
ICPBrasilCertificate certificado = super.getICPBrasilCertificate(
keystore, alias, false);
AbstractAppletExecute.setFormField(applet, "mainForm", "cpf",
certificado.getCpf());
AbstractAppletExecute.setFormField(applet, "mainForm", "nome",
certificado.getNome());
AbstractAppletExecute.setFormField(applet, "mainForm",
"nascimento", certificado.getDataNascimento());
AbstractAppletExecute.setFormField(applet, "mainForm", "email",
certificado.getEmail());
} catch (KeyStoreException | NoSuchAlgorithmException
| UnrecoverableKeyException | IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(applet, e.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
}
@Override
public void cancel(KeyStore keystore, String alias, Applet applet) {
/* Seu codigo customizado aqui... */
}
private byte[] readContent(String arquivo) {
byte[] result = null;
try {
File file = new File(arquivo);
FileInputStream is = new FileInputStream(file);
result = new byte[(int) file.length()];
is.read(result);
is.close();
} catch (IOException ex) {
ex.printStackTrace();
System.out.println();
logger.info(ex.getMessage());
}
return result;
}
private void writeContent(byte[] conteudo, String arquivo) {
try {
File file = new File(arquivo);
FileOutputStream os = new FileOutputStream(file);
os.write(conteudo);
os.flush();
os.close();
} catch (IOException ex) {
logger.info(ex.getMessage());
}
}
}