Closed rodykings closed 2 years ago
Boa tarde,
pelo que pude investigar na framework DSS o DSS Id de um certificado é uma string no formato:
"C-" + SHA-256(certificado em formato DER)
Se assumirmos que já temos o objecto PTEID_Certificate
para o certificado do cartão inserido é possível gerar o DSS Id da seguinte forma:
//Método auxiliar para gerar uma representação em String hexadecimal de um array de bytes
static String hexEncodeUsingBigInteger(byte[] bytes) {
BigInteger bigInteger = new BigInteger(1, bytes);
return String.format(
"%0" + (bytes.length << 1) + "X", bigInteger);
}
PTEID_ByteArray der_data = new PTEID_ByteArray();
//signature_certificate: objeto da classe PTEID_Certificate
signature_certificate.getFormattedData(der_data);
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(der_data.GetBytes());
byte[] certDigest = md.digest();
String dss_id = "C-"+ hexEncodeUsingBigInteger(certDigest);
Bom dia @agrr. Obrigado pela ajuda e prontidão na resposta. A funcionar na perfeição 💯
Estou a desenvolver um software que lista os vários certificados da KeyStore do Windows recorrendo ao esig/dss (MSCAPI). Se o utilizador escolher assinar um documento PDF com o Cartão de Cidadão recorro ao vosso SDK através do exemplo da vossa documentação. Contudo a única informação, por questões de segurança, que disponho do certificado escolhido pelo utilizador (listado pelo esig/dss) é o DSS Id.
Infelizmente as informações do Certificado de Assinatura listadas recorrendo ao esig/dss não correspondem às informações que é possível listar através do vosso SDK.
É possível dar cast do Certificado de Assinatura (
PTEID_Certificate
) paraX509Certificate
? Como consigo gerar um DSS Id através do vosso SDK para poder garantir que o Cartão de Cidadão escolhido é o que assinará o documento PDF?