Подпишите 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));
}

Надеюсь, поможет

Ответы на вопрос(2)

Ваш ответ на вопрос