Example usage for org.bouncycastle.cms SignerInformationVerifier SignerInformationVerifier

List of usage examples for org.bouncycastle.cms SignerInformationVerifier SignerInformationVerifier

Introduction

In this page you can find the example usage for org.bouncycastle.cms SignerInformationVerifier SignerInformationVerifier.

Prototype

public SignerInformationVerifier(CMSSignatureAlgorithmNameGenerator sigNameGenerator,
            SignatureAlgorithmIdentifierFinder sigAlgorithmFinder, ContentVerifierProvider verifierProvider,
            DigestCalculatorProvider digestProvider) 

Source Link

Usage

From source file:es.gob.afirma.cert.signvalidation.ValidateBinarySignature.java

License:Open Source License

/** Verifica la valides de una firma. Si la firma es válida, no hace nada. Si no es
 * válida, lanza una excepción.
 * @param sign Firma que se desea validar.
 * @param data Datos para la comprobación.
 * @throws CMSException Cuando la firma no tenga una estructura válida.
 * @throws CertStoreException Cuando se encuentra un error en los certificados de
 * firma o estos no pueden recuperarse.//w w w  . j a v a  2  s. c o m
 * @throws CertificateExpiredException Cuando el certificado estáa caducado.
 * @throws CertificateNotYetValidException Cuando el certificado aun no es válido.
 * @throws NoSuchAlgorithmException Cuando no se reconoce o soporta alguno de los
 * algoritmos utilizados en la firma.
 * @throws NoMatchDataException Cuando los datos introducidos no coinciden con los firmados.
 * @throws CRLException Cuando ocurre un error con las CRL de la firma.
 * @throws NoSuchProviderException Cuando no se encuentran los proveedores de seguridad necesarios para validar la firma
 * @throws IOException Cuando no se puede crear un certificado desde la firma para validarlo
 * @throws OperatorCreationException Cuando no se puede crear el validado de contenido de firma*/
private static void verifySignatures(final byte[] sign, final byte[] data)
        throws CMSException, CertStoreException, NoSuchAlgorithmException, NoMatchDataException, CRLException,
        NoSuchProviderException, CertificateException, IOException, OperatorCreationException {

    final CMSSignedData s;
    if (data == null) {
        s = new CMSSignedData(sign);
    } else {
        s = new CMSSignedData(new CMSProcessableByteArray(data), sign);
    }
    final Store<X509CertificateHolder> store = s.getCertificates();

    final CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); //$NON-NLS-1$

    for (final Object si : s.getSignerInfos().getSigners()) {
        final SignerInformation signer = (SignerInformation) si;

        final Iterator<X509CertificateHolder> certIt = store
                .getMatches(new CertHolderBySignerIdSelector(signer.getSID())).iterator();
        final X509Certificate cert = (X509Certificate) certFactory
                .generateCertificate(new ByteArrayInputStream(certIt.next().getEncoded()));

        if (!signer
                .verify(new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(),
                        new DefaultSignatureAlgorithmIdentifierFinder(), new JcaContentVerifierProviderBuilder()
                                .setProvider(new BouncyCastleProvider()).build(cert),
                        new BcDigestCalculatorProvider()))) {
            throw new CMSException("Firma no valida"); //$NON-NLS-1$
        }

    }

}

From source file:es.gob.afirma.signature.ValidateBinarySignature.java

License:Open Source License

/** Verifica la valides de una firma. Si la firma es v&aacute;lida, no hace nada. Si no es
 * v&aacute;lida, lanza una excepci&oacute;n.
 * @param sign Firma que se desea validar.
 * @param data Datos para la comprobaci&oacute;n.
 * @throws CMSException Cuando la firma no tenga una estructura v&aacute;lida.
 * @throws CertStoreException Cuando se encuentra un error en los certificados de
 * firma o estos no pueden recuperarse./*ww  w.  j av  a 2  s.com*/
 * @throws CertificateExpiredException Cuando el certificado est&aacute;a caducado.
 * @throws CertificateNotYetValidException Cuando el certificado aun no es v&aacute;lido.
 * @throws NoSuchAlgorithmException Cuando no se reconoce o soporta alguno de los
 * algoritmos utilizados en la firma.
 * @throws NoMatchDataException Cuando los datos introducidos no coinciden con los firmados.
 * @throws CRLException Cuando ocurre un error con las CRL de la firma.
 * @throws NoSuchProviderException Cuando no se encuentran los proveedores de seguridad necesarios para validar la firma
 * @throws IOException Cuando no se puede crear un certificado desde la firma para validarlo
 * @throws OperatorCreationException Cuando no se puede crear el validado de contenido de firma*/
private static void verifySignatures(final byte[] sign, final byte[] data)
        throws CMSException, CertStoreException, NoSuchAlgorithmException, NoMatchDataException, CRLException,
        NoSuchProviderException, CertificateException, IOException, OperatorCreationException {

    final CMSSignedData s;
    if (data == null) {
        s = new CMSSignedData(sign);
    } else {
        s = new CMSSignedData(new CMSProcessableByteArray(data), sign);
    }
    final Store store = s.getCertificates();

    final CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); //$NON-NLS-1$

    for (final Object si : s.getSignerInfos().getSigners()) {
        final SignerInformation signer = (SignerInformation) si;

        final Iterator<X509CertificateHolder> certIt = store
                .getMatches(new CertHolderBySignerIdSelector(signer.getSID())).iterator();
        final X509Certificate cert = (X509Certificate) certFactory
                .generateCertificate(new ByteArrayInputStream(certIt.next().getEncoded()));

        if (!signer
                .verify(new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(),
                        new DefaultSignatureAlgorithmIdentifierFinder(), new JcaContentVerifierProviderBuilder()
                                .setProvider(new BouncyCastleProvider()).build(cert),
                        new BcDigestCalculatorProvider()))) {
            throw new CMSException("Firma no valida"); //$NON-NLS-1$
        }

    }

}

From source file:eu.betaas.taas.securitymanager.common.ec.operator.BcECDSASignerInfoVerifierBuilder.java

License:Apache License

public SignerInformationVerifier build(X509CertificateHolder certHolder) throws OperatorCreationException {
    return new SignerInformationVerifier(sigAlgNameGen, sigAlgIdFinder,
            contentVerifierProviderBuilder.build(certHolder), digestCalculatorProvider);
}

From source file:eu.betaas.taas.securitymanager.common.ec.operator.BcECDSASignerInfoVerifierBuilder.java

License:Apache License

public SignerInformationVerifier build(AsymmetricKeyParameter pubKey) throws OperatorCreationException {
    return new SignerInformationVerifier(sigAlgNameGen, sigAlgIdFinder,
            contentVerifierProviderBuilder.build(pubKey), digestCalculatorProvider);
}

From source file:org.poreid.verify.sod.SOD.java

License:Open Source License

protected boolean verify() throws SODException {
    try {/*from  w w  w  . j  a  v  a  2  s. c o  m*/
        /* verificar caminho de certificao sem ocsp/crl, aqui no  local para essas consideraes */
        X509CertificateHolder holder = (X509CertificateHolder) cms.getCertificates().getMatches(null).iterator()
                .next(); // apenas o primeiro certificado (s tem 1)
        X509Certificate cert = (X509Certificate) get(holder.getEncoded());

        SignerInformationStore signerInformationStore = cms.getSignerInfos();
        SignerInformation signerInformation = (SignerInformation) signerInformationStore.getSigners().iterator()
                .next(); // apenas 1 assinatura (s tem 1)

        if (!Util.isLeafCertificateValid(keystore, cert)) {
            return false;
        }

        /* verificar assinatura do cms */
        ContentVerifierProvider contentVerifierProvider = new JcaContentVerifierProviderBuilder()
                .setProvider(new BouncyCastleProvider()).build(cert);
        DigestCalculatorProvider digestCalculatorProvider = new JcaDigestCalculatorProviderBuilder()
                .setProvider(new BouncyCastleProvider()).build();
        SignatureAlgorithmIdentifierFinder signatureAlgorithmIdentifierFinder = new DefaultSignatureAlgorithmIdentifierFinder();
        CMSSignatureAlgorithmNameGenerator signatureAlgorithmNameGenerator = new DefaultCMSSignatureAlgorithmNameGenerator();
        SignerInformationVerifier signerInformationVerifier = new SignerInformationVerifier(
                signatureAlgorithmNameGenerator, signatureAlgorithmIdentifierFinder, contentVerifierProvider,
                digestCalculatorProvider);

        return signerInformation.verify(signerInformationVerifier);

    } catch (LeafCertificateValidationException | IOException | CertificateException | OperatorCreationException
            | CMSException ex) {
        throw new SODException("No foi possivel verificar o SOD (" + ex.getMessage() + ")", ex);
    }
}

From source file:org.xwiki.crypto.signer.internal.cms.BcCMSUtils.java

License:Open Source License

/**
 * Verify a CMS signature./*from w w w  . ja  v  a 2s  .c  om*/
 *
 * @param signer the signer to verify.
 * @param certKey the certified public key of the signer.
 * @param contentVerifierProviderBuilder a builder of content provider.
 * @param digestProvider a digest provider.
 * @return true if the signature is verified and the certificate was valid at the time of signature.
 * @throws CMSException if the verifier is unable to create appropriate ContentVerifiers or DigestCalculators.
 */
public static boolean verify(SignerInformation signer, CertifiedPublicKey certKey,
        BcContentVerifierProviderBuilder contentVerifierProviderBuilder, DigestFactory digestProvider)
        throws CMSException {
    if (certKey == null) {
        throw new CMSException("No certified key for proceeding to signature validation.");
    }

    return signer.verify(new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(),
            new DefaultSignatureAlgorithmIdentifierFinder(), contentVerifierProviderBuilder.build(certKey),
            (DigestCalculatorProvider) digestProvider));
}