OpenSSL和Bouncy Castle CMS实施

时间:2014-03-21 19:46:52

标签: java openssl bouncycastle

我将一些代码从Java移植到C ++,并注意到CMS生成的一些差异。在OpenSSL中,如果我使用CMS_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, unsigned int flags)并向pkey提供与签名者证书signcert的公钥不同的公钥,则会收到验证错误,这是正确的。

如果我对CMSSignedDataGenerator类做同样的事情,我将获得没有任何错误的SignedData。这是代码示例:

CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
DigestCalculatorProvider dp = new JcaDigestCalculatorProviderBuilder().setProvider(CryptoUtils.BC).build();
JcaSignerInfoGeneratorBuilder builder = new JcaSignerInfoGeneratorBuilder(dp);
ContentSigner signer = new JcaContentSignerBuilder(cert.getSigAlgName()).setProvider(CryptoUtils.BC).build(privateKey); 
gen.addSignerInfoGenerator(builder.build(signer, cert));
CMSSignedData s = gen.generate(msg, true);

在此代码示例中,我使用公钥的证书与私钥对象的公钥不同,没有任何异常或验证错误。可以吗?

0 个答案:

没有答案