私自身のトラストアンカーで認識されたエンティティ証明書の有効な署名で特定のメッセージが署名されているかどうかを検証しようとしています。BouncyCastleライブラリのX509CertSelectorへのSignerIDキャスト
public static boolean isValid(CMSSignedData signedData, X509Certificate rootCert) throws Exception
{
CertStore certsAndCRLs = signedData.getCertificatesAndCRLs("Collection", "BC");
SignerInformationStore signers = signedData.getSignerInfos();
Iterator it = signers.getSigners().iterator();
if (it.hasNext()){
SignerInformation signer = (SignerInformation)it.next();
X509CertSelector signerConstraints = signer.getSID();
PKIXCertPathBuilderResult result = buildPath(rootCert, signerID, certsAndCRLs);
return signer.verify(result.getPublicKey(), "BC");
}
return false;
}
をしかし、この行は私にコンパイルエラーを与えている:私はこれをやっている、X509CertSelectorのにSignerIdからキャストすることができません
X509CertSelector signerConstraints = signer.getSID();
ので。結果がないと
X509CertSelector signerConstraints = (X509CertSelector) signer.getSID();
:
X509CertSelector signerConstraints = (CertSelector) signer.getSID();
そして:私は明示的なキャストを使用してみました。これどうやってするの?ありがとう
PS:このコードはDavid Hookの "Beginning Cryptography with Java"から抜粋されていますが、コンパイルされません。
あなたは私たちに弾む城のAPIバージョンを与えてもらえますか? BCのメーリングリストで彼のラウンドをしているとき、あなたは確かにDaveから得られる答えでしょうか? –