Luis Fernando Pardo wrote:

> Are you sure that the b64 decoding is OK? The CMS is b64 encoded in one line and when I verify CMS b64 encoded message with openssl I need to cut up CMS message in 64 char chunks.
>
> If you are signing unicode text, you could get some problems. SecCLab signs binary strings, so if the character binary code in Mozilla (the way javascript represents unicode characters) differs for the character binary code in Bouncy Castle, the verification fails. For example, if the body text has a character not supported by the form charset, mozilla sends it this way:
> &xxxx;
> where xxxx is the unicode value of the char. But in the client-side, when you access the body text from javascript code, you get the character binary code in the client computer.
>
> You could try to sign a simple message with ASCII characters to check the server side verification.
>
>
>
> Best regards
>
> Luis
>
> Petio Zaffirov escribi�:
>
>> Hi Luis,
>> First thank you for the nice component.
>>
>> We're able to verify the signature produced from the XUL form with BouncyCastle's JCE using their CMSSignedData method.
>>
>> When we try to verify the signed text produced with CLABString it's unable to read the signature after base 64 decoding.
>> It says CMSException 'invalid signature format in message'.
>>
>> I'm attaching the testform we're using for signing with CLABString.
>>
>> Any hints ?
>> Best regards,
>> Mihail Daskalov
>> and Petio Zafirov
>>
>> ------------------------------------------------------------------------
>
>
>
Thanks Louis, it was clearly our mistake.

We didn't do all the proper debugging and missed the fact that it creates the CMSSignedData without any problem. It was the validation that failed. We were confused because for some reason the Bouncy Castle guis were rethrowing a different Exception.

I've attached the test class we used, I hope it will be of some use.

Thanks again,

Hristo Doynov,
Mihail Daskalov,
Petio Zaffirov

import org.bouncycastle.jce.PKCS7SignedData;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import org.bouncycastle.util.encoders.Base64;

import org.bouncycastle.cms.CMSSignedData;
import org.bouncycastle.cms.SignerInformationStore;
import org.bouncycastle.cms.SignerInformation;
import org.bouncycastle.cms.SignerId;
import org.bouncycastle.cms.CMSProcessableByteArray;
import org.bouncycastle.cms.CMSException;

import java.security.Security;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.security.SignatureException;
import java.security.NoSuchProviderException;

import java.security.cert.X509Certificate;
import java.security.cert.CertStore;
import java.security.cert.CertificateException;
import java.security.cert.CRLException;
import java.security.cert.CertStoreException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.CertificateExpiredException;

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.ByteArrayOutputStream;

import java.util.Collection;
import java.util.Iterator;

/**
 * Created by hdoinov
 * Date: 2004-1-26
 * Time: 10:45:35
 * PKCS#7 signed data verification class
 */
public class VerifyPKCS7SignedData {
    public static boolean verifyPKCS7(String aDataString,
                                      byte[] aSignatureBytes)
            throws CertificateException,
                   InvalidKeyException,
                   NoSuchProviderException,
                   NoSuchAlgorithmException,
                   CRLException,
                   SignatureException {
        return verifyPKCS7(aDataString.getBytes(), aSignatureBytes);
    }

    public static boolean verifyPKCS7(byte[] aDataBytes,
                                      byte[] aSignatureBytes)
            throws CertificateException,
                   InvalidKeyException,
                   NoSuchProviderException,
                   NoSuchAlgorithmException,
                   CRLException,
                   SignatureException {
        providerInit();

        PKCS7SignedData pkcs7sd = new PKCS7SignedData(aSignatureBytes);

        pkcs7sd.update(aDataBytes, 0, aDataBytes.length);
        boolean isValid = pkcs7sd.verify();

        return isValid;
    }

    protected static boolean verifyCMS(CMSSignedData aSignedData)
            throws CMSException,
                   NoSuchProviderException,
                   NoSuchAlgorithmException,
                   CertStoreException,
                   CertificateNotYetValidException,
                   CertificateExpiredException {
        providerInit();

        CertStore certs =
                aSignedData.getCertificatesAndCRLs("Collection", "BC");

        SignerInformationStore signers = aSignedData.getSignerInfos();
        Collection c = signers.getSigners();
        Iterator it = c.iterator();

        boolean verificationResult = false;
        while (it.hasNext())
        {
            SignerInformation signer = (SignerInformation)it.next();

            SignerId signerId = signer.getSID();

            Collection certCollection = certs.getCertificates(signerId);

            Iterator certIt = certCollection.iterator();
            X509Certificate cert = (X509Certificate)certIt.next();

            verificationResult =
                    verificationResult || signer.verify(cert, "BC");
        }

        return verificationResult;
    }

    public static boolean verifyCMS(byte[] aDataBytes,
                                    InputStream aSignatureStream)
            throws CMSException,
                   NoSuchProviderException,
                   NoSuchAlgorithmException,
                   CertStoreException,
                   CertificateNotYetValidException,
                   CertificateExpiredException {
        providerInit();

        CMSProcessableByteArray cmsByteArray =
                new CMSProcessableByteArray(aDataBytes);

        CMSSignedData cmsSd =
                new CMSSignedData(cmsByteArray, aSignatureStream);

        return verifyCMS(cmsSd);
    }

    public static boolean verifyCMS(byte[] aDataBytes, byte[] aSignatureBytes)
            throws CMSException,
                   NoSuchProviderException,
                   NoSuchAlgorithmException,
                   CertStoreException,
                   CertificateNotYetValidException,
                   CertificateExpiredException {
        providerInit();

        CMSProcessableByteArray cmsByteArray =
                new CMSProcessableByteArray(aDataBytes);

        CMSSignedData cmsSd =
                new CMSSignedData(cmsByteArray, aSignatureBytes);

        return verifyCMS(cmsSd);
    }

    protected static void providerInit() {
        if (Security.getProvider("BC") == null) {
            BouncyCastleProvider bcp = new BouncyCastleProvider();
            Security.insertProviderAt(bcp, 2);
        }
    }

    public static void main(String[] args) {
        try {
            // Signature generated using MS CAPI COM html sample form.
            // The Base64 encoded PKCS#7 structure.
            String base64EncodedSignatureStringIE =
            "MIIMZAYJKoZIhvcNAQcCoIIMVTCCDFECAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3" +
            "DQEHAaCCCnIwggR5MIIDYaADAgECAgEHMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV" +
            "BAYTAkJHMQ4wDAYDVQQHEwVTb2ZpYTEYMBYGA1UEChMPQmFua3NlcnZpY2UgUExD" +
            "MRAwDgYDVQQLEwdCLVRydXN0MTAwLgYDVQQDEydCLVRydXN0IERvbWVzdGljIFJv" +
            "b3QgQ0EgLSAyMDQ4IExldmVsIDAwHhcNMDMwNDA0MTIwNTE5WhcNMTMxMjMxMTIw" +
            "MDAwWjCCAQoxCzAJBgNVBAYTAkJHMQ4wDAYDVQQIEwVTb2ZpYTEOMAwGA1UEBxMF" +
            "U29maWExLjAsBgNVBAoTJUJhbmtzZXJ2aWNlIFBMQyAtIEJVTFNUQVQgVSAwMDA2" +
            "NDA5NTQxEDAOBgNVBAsTB0ItVHJ1c3QxLDAqBgNVBAMTI0ItVHJ1c3QgRG9tZXN0" +
            "aWMgQ0ExIC0gMTAyNCBMZXZlbCAxMSEwHwYDVQQJExg0MSwgVHphciBCb3JpcyBJ" +
            "SUkgYmx2ZC4xDTALBgNVBBETBDE2MTIxHjAcBgkqhkiG9w0BCQEWD2NhMUBiLXRy" +
            "dXN0Lm9yZzEZMBcGA1UEFBMQKzM1OSAyIDkgMjE1IDEwMDCBnzANBgkqhkiG9w0B" +
            "AQEFAAOBjQAwgYkCgYEAuwevqryGzKEa6kwPrsblS0MdLOifvLp4gz6yldoCy5ad" +
            "ODku7ZvaeJINyBsPtEDdzJgmvY65hweCv5iMVtJ+iS0XNK0Oe2Et3JLJc5ISkA/e" +
            "lH+NuKJkwIvRA3rSb/di6778VGUlulil/mf8XgpEtNnFLA1qAz6VXjOadrrBcBMC" +
            "AwEAAaOB+jCB9zAfBgNVHSMEGDAWgBTVTLNeADU+o2OFokjD1EZEEaHUWDAdBgNV" +
            "HQ4EFgQU23qBsPh6X2eqrjlxFSTZlWtrnFAwDgYDVR0PAQH/BAQDAgFGMEcGA1Ud" +
            "IARAMD4wPAYKKwYBBAH7dgEBATAuMCwGCCsGAQUFBwIBFiBodHRwOi8vd3d3LmIt" +
            "dHJ1c3Qub3JnL2RvY3VtZW50czASBgNVHRMBAf8ECDAGAQH/AgEDMEgGA1UdHwRB" +
            "MD8wPaA3oDWGM2h0dHA6Ly93d3cuYi10cnVzdC5vcmcvcmVwb3NpdG9yeS9yb290" +
            "L2NybC9yb290LmNybIECAX4wDQYJKoZIhvcNAQEFBQADggEBAM6f5u2ibHfZSlgd" +
            "jvqUts1dchYCY07Q2UbSl4/UAPTiaSRfBZMoGRcbIKKpR7rB3+Q8YiVfwjrXYboO" +
            "fBSs5pDZJRgGnVzu0QmgQJ4Z5lS5T1w8KZ5ZktQxJOwdpjHiyK9GJiH3nQjDdaGw" +
            "g/iMJn7yEwkpSKNFaFDEIMnBNB7NjC01NtYK/l0jV7eRsExPdbdG1bNI7UGqmiVC" +
            "DeR8vYWBMPsjTA1u3aKyYRtnnEZZFe33dHXsvUvfEuJ9ljxG0LQluCOiLP7DLoTo" +
            "KOwP0kzijdUlOzgpLyzg/rHy22LKeMRNBTfHcnV2PJ7z7xV9KQhZ3vFqHtMELSXR" +
            "w/r/VYowggXxMIIFWqADAgECAgIEAzANBgkqhkiG9w0BAQUFADCCAQoxCzAJBgNV" +
            "BAYTAkJHMQ4wDAYDVQQIEwVTb2ZpYTEOMAwGA1UEBxMFU29maWExLjAsBgNVBAoT" +
            "JUJhbmtzZXJ2aWNlIFBMQyAtIEJVTFNUQVQgVSAwMDA2NDA5NTQxEDAOBgNVBAsT" +
            "B0ItVHJ1c3QxLDAqBgNVBAMTI0ItVHJ1c3QgRG9tZXN0aWMgQ0ExIC0gMTAyNCBM" +
            "ZXZlbCAxMSEwHwYDVQQJExg0MSwgVHphciBCb3JpcyBJSUkgYmx2ZC4xDTALBgNV" +
            "BBETBDE2MTIxHjAcBgkqhkiG9w0BCQEWD2NhMUBiLXRydXN0Lm9yZzEZMBcGA1UE" +
            "FBMQKzM1OSAyIDkgMjE1IDEwMDAeFw0wMzEyMTYxMTMyNDlaFw0wNDEyMTYxMTMy" +
            "NDlaMIICBDELMAkGA1UEBhMCQkcxMTAvBgNVBAgTKGprLktyLlBvbGlhbmEgYmwu" +
            "MzksU29maWEsRUdOOjU1MDQyODY0MTQxDjAMBgNVBAcTBVNvZmlhMSkwJwYDVQQK" +
            "EyBGaW5hbmNpYWwgU3VwZXJ2aXNpb24gQ29tbWlzc2lvbjEfMB0GA1UECxMWUHJv" +
            "ZmVzc2lvbmFsIEUgQ2xhc3MgMjEvMC0GA1UECxMmUVM6VW5pdmVyc2FsIFNpZ25h" +
            "dHVyZSBDZXJ0aWZpY2F0ZS1ZZXMxHDAaBgNVBAsTE090ZGVsOlNjaGV0b3ZvZHN0" +
            "dm8xFTATBgNVBAsTDFNSOkRWMjUvMjAwMzEaMBgGA1UECxMRQlVMU1RBVDoxMzEw" +
            "NjA2NzYxFjAUBgNVBAsTDUROOjEyMjIxMzEwMzcxGjAYBgNVBAsTEURUOjIwMDMx" +
            "MjEwMTQyNDI2MSEwHwYDVQQDExhUYXR5YW5hIEl2YW5vdmEgWmhpdmtvdmExKjAo" +
            "BgNVBAwTIUdsLmVrc3BlcnQ6dC5kIFAtMDctMzMvMjYuMDMuMjAwMzEdMBsGA1UE" +
            "CRMUcGwuU3YuTmVkZWxpYTYsU29maWExDTALBgNVBBETBDEwMDAxHzAdBgkqhkiG" +
            "9w0BCQEWEGppdmtvdmFfdEBmc2MuYmcxEjAQBgNVBBQTCTIgOTQwNDY5MDCBnzAN" +
            "BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo/9+4DZBlIstZ4bqZpbNERwis8oQQXBX" +
            "Y8pEV0yUOtdsS48KKEChg3DdseibNtCEKawaxMr2h7A5jnhubnc6w3gjr4Id0vmq" +
            "7f1HR0XjYlFp+uhkhMtVNgrkW2FMbd8GDAJ4ZUxNEtFBByIKP8zM11NlCwZFFvMR" +
            "0X0mPRTzaHECAwEAAaOCAWYwggFiMB8GA1UdIwQYMBaAFNt6gbD4el9nqq45cRUk" +
            "2ZVra5xQMB0GA1UdDgQWBBQ+fb2KGkUrRiIgASyi8KIXBMmrXTAOBgNVHQ8BAf8E" +
            "BAMCA/gwRQYDVR0lBD4wPAYIKwYBBQUHAwIGCCsGAQUFBwMEBggrBgEFBQcDBQYI" +
            "KwYBBQUHAwYGCCsGAQUFBwMHBggrBgEFBQgCAjBMBgNVHSAERTBDMEEGCysGAQQB" +
            "+3YBAQEEMDIwMAYIKwYBBQUHAgEWJGh0dHA6Ly93d3cuYi10cnVzdC5vcmcvZG9j" +
            "dW1lbnRzL2NwczAwBgNVHRIEKTAnhiVodHRwOi8vd3d3LmNyYy5iZy92Mi9maWxl" +
            "cy9iZy84MDguaHRtMEkGA1UdHwRCMEAwPqA4oDaGNGh0dHA6Ly93d3cuYi10cnVz" +
            "dC5vcmcvcmVwb3NpdG9yeS9jYS9jcmwvYi10cnVzdC5jcmyBAgF+MA0GCSqGSIb3" +
            "DQEBBQUAA4GBAKQiyQK4bzJWkIhecVey/y3GQifn5jHkWFhcfrhTbGWdL16loJwx" +
            "sNtm6b3tbRaJLvTvicIp0h7O+JR4WZ+4aB6iqCLq1scKM5T5dqSHUOVli/24GTPY" +
            "lnXs2O5lCjVJvnurAt5Q35A6RkAXESNRwL/Ef5IOb6JZNAIp8zNflex4MYIBujCC" +
            "AbYCAQEwggESMIIBCjELMAkGA1UEBhMCQkcxDjAMBgNVBAgTBVNvZmlhMQ4wDAYD" +
            "VQQHEwVTb2ZpYTEuMCwGA1UEChMlQmFua3NlcnZpY2UgUExDIC0gQlVMU1RBVCBV" +
            "IDAwMDY0MDk1NDEQMA4GA1UECxMHQi1UcnVzdDEsMCoGA1UEAxMjQi1UcnVzdCBE" +
            "b21lc3RpYyBDQTEgLSAxMDI0IExldmVsIDExITAfBgNVBAkTGDQxLCBUemFyIEJv" +
            "cmlzIElJSSBibHZkLjENMAsGA1UEERMEMTYxMjEeMBwGCSqGSIb3DQEJARYPY2Ex" +
            "QGItdHJ1c3Qub3JnMRkwFwYDVQQUExArMzU5IDIgOSAyMTUgMTAwAgIEAzAJBgUr" +
            "DgMCGgUAMA0GCSqGSIb3DQEBAQUABIGAIKyF7oVH1Lirt8QkFKf8zdBh4kbQA0db" +
            "MzqsUEfbXNPSuEHO9FkBAfjNQBWkYoO3pNKzXLomO5lRmR2WFMLah8T3DIecV68h" +
            "Q8+48u6sJ3DX0CfzRk5R4/YK4PXnAezTSDbBZPVcgJQS61qmKyjXv7Ifaa/slqfU" +
            "Hbenr/QB3EY=";

            byte[] signatureBytesIE =
                    Base64.decode(base64EncodedSignatureStringIE);
            // MS CAPI COM encodes strings only as UnicodeLittleUnmarked.
            byte[] dataBytesIE = "alabala".getBytes("UnicodeLittleUnmarked");

            System.out.println("Verifying MS CAPI COM as CMS: " +
                               verifyCMS(dataBytesIE, signatureBytesIE));
            System.out.println("Verifying MS CAPI COM as PKCS#7: " +
                               verifyPKCS7(dataBytesIE, signatureBytesIE));

            // The SECCLAB XUL Test Form generated CMS structure.
            // The data file.
            InputStream fisDataXUL =
                    VerifyPKCS7SignedData.class.getResourceAsStream("x.txt");
            ByteArrayOutputStream baosDataXUL = new ByteArrayOutputStream();
            byte[] bufferDataXUL = new byte[256];
            int bytesReadDataXUL = -1;
            while ((bytesReadDataXUL = fisDataXUL.read(bufferDataXUL)) >=0)
                baosDataXUL.write(bufferDataXUL, 0, bytesReadDataXUL);

            baosDataXUL.flush();
            baosDataXUL.close();
            fisDataXUL.close();

            byte[] dataBytesXUL = baosDataXUL.toByteArray();

            // The signature file.
            InputStream fisSigXUL =
                    VerifyPKCS7SignedData.class.getResourceAsStream("x.sig");

            System.out.println("Verifying SECCLAB XUL Test Form as CMS: " +
                               verifyCMS(dataBytesXUL, fisSigXUL));

            // The SECCLAB HTML Test Form generated CMS structure.
            String signatureMZ = "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";
            byte[] signatureBytesMZ = Base64.decode(signatureMZ.getBytes());

            byte[] dataBytesMZ = "alabala".getBytes();

            System.out.println("Verifying SECCLAB HTML Test Form as CMS: " +
                               verifyCMS(dataBytesMZ,
                                         signatureBytesMZ));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Attachment: x.sig
Description: Binary data

alabala

Reply via email to