Closed AndreasPilgrim closed 1 month ago
Bom dia,
as chaves do novo Cartão de Cidadão usam algoritmo de assinatura diferente, ECDSA em vez de RSA.
Uma lógica deste género funciona para suportar as 2 gerações de cartões assumindo que o software/sistema que processa estas assinaturas está preparado para verificar também assinaturas ECDSA:
if (key.getAlgorithm().equals("RSA")) {
//Assinar com o algoritmo "SHA256withRSA"
}
else if (key.getAlgorithm().equals("EC")) {
//Assinar com o algoritmo "SHA256withECDSA"
}
A lista de algoritmos disponíveis nos novos CCs está nos comentários do seguinte excerto de código do manual:
Boa tarde,
Confirmo que da forma que mencionou já fica funcional.
Muito obrigado pelo auxílio.
Boa tarde,
Aquando de assinatura digital com SDK Java com um novo Cartão de Cidadão, recebo a exception:
java.security.InvalidKeyException: Not an RSA key: EC at sun.security.rsa.RSAKeyFactory.engineTranslateKey(Unknown Source) at sun.security.rsa.RSAKeyFactory.toRSAKey(Unknown Source) at sun.security.rsa.RSASignature.engineInitSign(Unknown Source) at sun.security.rsa.RSASignature.engineInitSign(Unknown Source) at java.security.Signature$Delegate.init(Unknown Source) at java.security.Signature$Delegate.chooseProvider(Unknown Source) at java.security.Signature$Delegate.engineInitSign(Unknown Source) at java.security.Signature.initSign(Unknown Source) at org.jcp.xml.dsig.internal.dom.DOMSignatureMethod.sign(Unknown Source)
O método de implementação da assinatura é com PKCS11 conforme o vosso manual. Podem auxiliar?