Open tobiaspetry opened 7 months ago
Poderia anexar um documento com essa característica para que possamos testar e corrigir o código? Ou se preferir, pode fazer a alteração, pode ser por comentário aqui mesmo ou um pull-request.
A alteração na classe CAdESChecker seria a seguinte:
a) Adicionar o import do novo tipo:
import org.bouncycastle.asn1.ASN1GeneralizedTime;
b) Colocar o código abaixo no lugar da linha 271 (originalmente):
if (timeAttribute.getAttrValues().getObjectAt(0) instanceof ASN1UTCTime) {
dataHora = (((ASN1UTCTime) timeAttribute.getAttrValues().getObjectAt(0)).getDate());
} else {
dataHora = (((ASN1GeneralizedTime) timeAttribute.getAttrValues().getObjectAt(0)).getDate());
}
Ao tentar validar um arquivo assinado cuja assinatura tem o atributo signing-time (OID 1.2.840.113549.1.9.5) no formato GeneralizedTime, que possui 4 dígitos para o ano, é lançada uma exceção com o seguinte erro:
class org.bouncycastle.asn1.ASN1GeneralizedTime cannot be cast to class org.bouncycastle.asn1.ASN1UTCTime
Ao que parece, a classe CAdESChecker (linha 271) supõe que este atributo estará no formato UTCTime, com dois dígitos no ano, e faz um cast explícito para a classe correspondente do bouncy castle:
dataHora = (((ASN1UTCTime) timeAttribute.getAttrValues().getObjectAt(0)).getDate());
Parece que o ideal seria conseguir identificar se deve fazer o cast para
org.bouncycastle.asn1.ASN1GeneralizedTime
ouorg.bouncycastle.asn1.ASN1UTCTime
, conforme o tipo do objeto em runtime, pois ambos têm um métodogetDate()
disponível.