You can verify the selected signature with the following code:
public static boolean verif_Detached(String signed_file_name,String original_file_name) throws IOException, CMSException, NoSuchAlgorithmException, NoSuchProviderException, CertStoreException, CertificateExpiredException, CertificateNotYetValidException{ boolean result= false; Security.addProvider(new BouncyCastleProvider()); File f = new File(signed_file_name); byte[] Sig_Bytes = new byte[(int)f.length()]; DataInputStream in = new DataInputStream(new FileInputStream(f)); in.readFully(Sig_Bytes); in.close(); File fi = new File(original_file_name); byte[] Data_Bytes = new byte[(int)fi.length()]; DataInputStream input = new DataInputStream(new FileInputStream(fi)); input.readFully(Data_Bytes); input.close(); try{ CMSSignedData cms = new CMSSignedData(new CMSProcessableByteArray(Data_Bytes), Sig_Bytes); CertStore certStore = cms.getCertificatesAndCRLs("Collection", "BC"); SignerInformationStore signers = cms.getSignerInfos(); Collection c = signers.getSigners(); Iterator it = c.iterator(); while (it.hasNext()) { SignerInformation signer = (SignerInformation) it.next(); Collection certCollection = certStore.getCertificates(signer.getSID()); Iterator certIt = certCollection.iterator(); X509Certificate cert = (X509Certificate) certIt.next(); cert_signer=cert; result=signer.verify(cert, "BC"); } }catch(Exception e){ e.printStackTrace(); result=false; } return result; }
source share