Я пытаюсь сделать подпись файла в формате CAdES-BES, используя библиотеку надувных замков. Вначале подпись генерируется правильно, проблема в том, что лицо, ответственное за проверку этой подписи, отклоняет ее, и я оставляю здесь свой код на случай, если кто-то увидит, что я что-то упустил или сориентирует меня.
public byte[] sign(String plainText, PrivateKey privateKey, String pathX509Certificate) throws SignatureException, CertificateException, FileNotFoundException {
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
CMSSignedDataGenerator cmsSignedDataGenerator = new CMSSignedDataGenerator();
InputStream in = new FileInputStream(pathX509Certificate);
CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) factory.generateCertificate(in);
try {
ContentSigner contentSigner = new JcaContentSignerBuilder("SHA512withRSA").build(privateKey);
cmsSignedDataGenerator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().setProvider(BouncyCastleProvider.PROVIDER_NAME).build())
.build(contentSigner, privateKey.getEncoded()));
cmsSignedDataGenerator.addCertificate(new X509CertificateHolder(cert.getEncoded()));
FileInputStream fileInputStream = new FileInputStream(new File(plainText.toUpperCase().replace(".XML","")));
CMSTypedData cmsTypedData = new CMSProcessableByteArray(IOUtils.toByteArray(fileInputStream));
CMSSignedData cmsSignedData = cmsSignedDataGenerator.generate(cmsTypedData, true);
in.close();
fileInputStream.close();
return cmsSignedData.getEncoded();
} catch (Exception e) {
throw new SignatureException(e);
}
}
Привет.