Bouncy Castle

Srs.

Trabalho com uma aplicação que utiliza assinatura digital com as bibliotecas do Bouncy Castle:
[b]- bcmail-jdk15-129.jar

  • bcpg-jdk15-129.jar
  • bcprov-jdk15-129.jar
  • bctest-jdk15-129.jar
  • bctsp-jdk15-129.jar[/b]

Para fazer a assinatura, preciso agora colocar a DataHora atual do BD junto com ela… O código que faz a assinatura é o seguinte:

/** * Assinar o arquivo dado passando a senha. este método é privado para que a * senha do certificado nunca deixe esta classe. * @param arq O arquivo a ser assinado. * @param ks O KeyStore que contém o certificado usado para assinar. * @param alias O alias do certificado dentro de <code>ks</code> a ser * usado para assinar. * @param senha A senha do certificado. * @return A assinatura do arquivo no formato PKCS#7, com a interface * pública do certificado já anexada. * @throws AssinaturaException Caso ocorra qualquer problema ao assinar. */ private static byte[] assinar(File arq, KeyStore ks, String alias, char[] senha) throws AssinaturaException { try { adicionarProviderBC(); if (ks != null) { X509Certificate cert = (X509Certificate)ks.getCertificate(alias); PrivateKey chavePrivada = (PrivateKey) ks.getKey(alias, senha); // Obter os dados a serem assinados BufferedInputStream entrada = new BufferedInputStream(new FileInputStream(arq)); byte[] dados = new byte[entrada.available()]; entrada.read(dados); entrada.close(); // Configurar o "assinante" CMSSignedDataGenerator geradorAss = new CMSSignedDataGenerator(); geradorAss.addSigner(chavePrivada, cert, CMSSignedDataGenerator.DIGEST_SHA1); // Adicionar o certificado junto à assinatura ListaCertificados lista = new ListaCertificados(); lista.add(cert); CertStore certs = CertStore.getInstance("Collection", new CollectionCertStoreParameters(lista), "BC"); geradorAss.addCertificatesAndCRLs(certs); // Efetivamente assinar os dados de entrada CMSProcessable conteudo = new CMSProcessableByteArray(dados); String providerName; if (ks.getType().equalsIgnoreCase("JKS")) providerName = BouncyCastleProvider.PROVIDER_NAME; else providerName = ks.getProvider().getName(); CMSSignedData dadosAssinados = geradorAss.generate(conteudo, providerName); byte[] assinatura = dadosAssinados.getEncoded(); return assinatura; } } catch (java.security.KeyStoreException kse) { throw new AssinaturaException("Erro de acesso ao banco de certificados."); } catch (java.security.NoSuchAlgorithmException nsae) { throw new AssinaturaException("Erro de configuração. Não é possível obter a chave privada."); } catch (java.security.UnrecoverableKeyException uke) { throw new AssinaturaException("Não foi possível obter a chave privada para assinar o documento. Favor verificar a senha."); } catch (java.io.FileNotFoundException fne) { throw new AssinaturaException("O arquivo a ser assinado não existe."); } catch (java.io.IOException ioe) { throw new AssinaturaException("Erro interno de leitura ao tentar assinar o arquivo."); } catch (java.security.InvalidAlgorithmParameterException iae) { throw new AssinaturaException("Erro interno ao tentar gerar assinatura."); } catch (java.security.NoSuchProviderException nspe) { throw new AssinaturaException("Erro de configuração do aplicativo."); } catch (java.security.cert.CertStoreException cse) { throw new AssinaturaException("Erro ao tentar adicionar certificado à assinatura."); } catch (org.bouncycastle.cms.CMSException cmse) { throw new AssinaturaException("Erro ao gerar a assinatura do arquivo."); } return null; }

Só preciso adicionar a Data e hora na assinatura, nada mais… alguém poderia me ajudar??

Obrigado!!
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Cassolato[/color][/size] :joia:

Amigo estou precisando de ajuda com Bouncy Castle, poderia entrar em contato ?:

Pra quê ressuscitar um tópico desses sem necessidade? Uma MP para o usuário (se é que ele ainda frequenta o GUJ) não resolveria?