I have a wounded receipt.p7b file is poor from the file created via openssl but it hurts where can i even do it?
openssl command
$ openssl cms -sign -nodetach -binary -in receipt.json -text -outform der -out receipt.p7b -nocerts -signer my_certificate51.crt -inkey my_key.key
my java code
OutputStream os = new FileOutputStream("C:\\Tax-Integration\\src\\main\\resources\\receipt.p7b");
os.write(sign(data));
public byte[] sign(byte[] data)
throws IOException, CertificateException, OperatorCreationException, CMSException {
Security.addProvider(new BouncyCastleProvider());
JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter();
X509Certificate serverCertificate = certificateConverter.getCertificate(loadSigner());
PrivateKeyInfo privateKeyInfo = loadInKey();
PrivateKey inKey = new JcaPEMKeyConverter().getPrivateKey(privateKeyInfo);
ContentSigner sha1Signer = new JcaContentSignerBuilder("SHA1WithRSA").setProvider("BC").build(inKey);
CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
JcaDigestCalculatorProviderBuilder digestProviderBuilder = new JcaDigestCalculatorProviderBuilder().setProvider("BC");
JcaSignerInfoGeneratorBuilder generatorBuilder = new JcaSignerInfoGeneratorBuilder(digestProviderBuilder.build());
generator.addSignerInfoGenerator(generatorBuilder.build(sha1Signer, serverCertificate));
CMSProcessableByteArray bytes = new CMSProcessableByteArray(data);
CMSSignedData signedData = generator.generate(bytes, true);
return signedData.getEncoded();
}
public X509CertificateHolder loadSigner() throws IOException {
InputStream rootCAFile = new FileInputStream("C:\\my_certificate51.crt");
PEMParser parser = new PEMParser(new InputStreamReader(rootCAFile));
return (X509CertificateHolder) parser.readObject();
}
public PrivateKeyInfo loadInKey() throws IOException {
InputStream key = new FileInputStream("C:\\my_key.key");
PEMParser parser = new PEMParser(new InputStreamReader(key));
return (PrivateKeyInfo) parser.readObject();
}