Подпишите CAdES, используя BouncyCastle, используя JAVA
По нескольким постам ямы узнали этоТеперь можно выполнять CAdES с помощью BouncyCastle, но по этой теме практически нет документации.
Для начала я хочу выполнить CAdES-BES без каких-либо необязательных подписанных атрибутов для файла с файловым сертификатом.
В ответ на перхоть:
У меня есть кое-что, что может быть полезным, у вас есть ваша SignerInformation, вам нужно ее расширить, сначала вам нужно создать атрибут из метки времени, яя предполагаю, что у вас уже есть TimeStampResponse как tspResp
TimeStampToken token = tsresp.getTimeStampToken();
Attribute timeStamp = new Attribute(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, new DERSet(ASN1Object.fromByteArray(token.getEncoded())));
Тогда вам нужно расширить свою SignerInformation
AttributeTable unsigned = signerInformation.getUnsignedAttributes();
Hashtable unsignedAttrHash = null;
if (unsigned == null) {
unsignedAttrHash = new Hashtable();
} else {
unsignedAttrHash = signerInformation.getUnsignedAttributes().toHashtable();
}
unsignedAttrHash.put(PKCSObjectIdentifiers.id_aa_signatureTimeStampToken, signatureTimeStamp);
SignerInformation newsi = SignerInformation.replaceUnsignedAttributes(si, new AttributeTable(
unsignedAttrHash));
Я думаю что'об этом.
Вот как я получил атрибут входа в сертификат
Attribute signingCertificateAttribute;
MessageDigest dig = MessageDigest.getInstance(DigestAlgorithm().getName(),
new BouncyCastleProvider());
byte[] certHash = dig.digest(SigningCertificate().getEncoded());
if (DigestAlgorithm() == DigestAlgorithm.SHA1) {
SigningCertificate sc = new SigningCertificate(new ESSCertID(certHash));
signingCertificateAttribute = new Attribute(PKCSObjectIdentifiers.id_aa_signingCertificate, new DERSet(sc));
} else {
ESSCertIDv2 essCert = new ESSCertIDv2(new AlgorithmIdentifier(DigestAlgorithm().getOid()), certHash);
SigningCertificateV2 scv2 = new SigningCertificateV2(new ESSCertIDv2[] { essCert });
signingCertificateAttribute = new Attribute(PKCSObjectIdentifiers.id_aa_signingCertificateV2, new DERSet(scv2));
}
Надеюсь, поможет