# SDIFTP - firma pkcs7 Java Bouncy Castle

**URL:** <https://forum.italia.it/t/sdiftp-firma-pkcs7-java-bouncy-castle/34033>\
**Category:** Fatturazione Elettronica\
**Created:** [4 Aprile 2023, 9:24am UTC](https://forum.italia.it/t/sdiftp-firma-pkcs7-java-bouncy-castle/34033 "2023-04-04T09:24:36Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![NicolaOz](https://forum.italia.it/letter_avatar_proxy/v4/letter/n/ecd19e/32.png) [@NicolaOz](https://forum.italia.it/u/NicolaOz)\
**Post date:** [4 Aprile 2023, 9:24am UTC](https://forum.italia.it/t/sdiftp-firma-pkcs7-java-bouncy-castle/34033/1 "2023-04-04T09:24:36Z")

</div>

Buongiorno,

sto avendo tante difficoltà nella firma del file da depositare (previa cifratura) su sftp.  
Il mio tool utilizza Bouncy Castle per la firma e la cifratura ma SOGEI mi dice che cifratura è OK ma verifica firma fallisce.

La cosa strana è che verificando il file firmato così come da loro procedura, la firma risulta verificata

`openssl smime -verify -in signature.p7m -inform der -binary -out verificato -CAfile CAEntrate.pem`

qualcuno ha avuto esperienza in merito? Siete riusciti ad utilizzare BouncyCastle?

di seguito lo snippet usato

```auto
    public static byte[] signData(byte[] data, X509Certificate signingCertificate, PrivateKey signingKey)
            throws EncryptionException {
        Validate.notNull(data);
        Validate.notNull(signingCertificate);
        Validate.notNull(signingKey);

        List<X509Certificate> certList = new ArrayList<>();
        CMSTypedData cmsData = new CMSProcessableByteArray(data);
        certList.add(signingCertificate);
        JcaCertStore certs;
        try {
            certs = new JcaCertStore(certList);
        } catch (CertificateEncodingException e) {
            throw new EncryptionException(e);
        }

        CMSSignedDataGenerator cmsGenerator = new CMSSignedDataGenerator();
        ContentSigner contentSigner;
        try {
            contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(signingKey);
            cmsGenerator.addSignerInfoGenerator(
                    new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder()
                                    .setProvider(new BouncyCastleProvider())
                                    .build())
                            .build(contentSigner, signingCertificate));
            cmsGenerator.addCertificates(certs);
            CMSSignedData cms = cmsGenerator.generate(cmsData, true);
            return cms.getEncoded();
        } catch (OperatorCreationException | CMSException | IOException | CertificateEncodingException e) {
            throw new EncryptionException(e);
        }
    }

```
