Hi,

Based on information and suggestions you have given me, I came at the problem from a different direction. Instead of trying to verify the signature, I tried using out private key to sign the original data. After a couple of hours, I suceeded in getting the same signature as was supplied in the signed message. I then used this information to verify the signature just created. Just a small amount of more work yielded a routine that worked in taking the signed file, parsing it and verifying the signature. Here's a copy of the final verification code. xmlDat is the original xml file string and sigDat is the signature received.

// Read public key

fp = fopen (filePubKey, "r");
if (fp == NULL)
{
 printf("Didn't work 1\n");
 return(1);
}
pkey = PEM_read_PUBKEY(fp, NULL, NULL, NULL);
fclose (fp);

if (pkey == NULL)
{
 printf("Didn't work 2\n");
 return(2);
}

sigDatEnc = g_base64_decode( sigDat, &sigDatLen);
EVP_VerifyInit(&md_ctx, EVP_sha512());
EVP_VerifyUpdate(&md_ctx, xmlDat, strlen(xmlDat));
err = EVP_VerifyFinal (&md_ctx, sigDatEnc, sigDatLen, pkey);
// g_free(sigDatEnc);
free(sigDatEnc); // looked up g_free and it seems to just do a free()
EVP_PKEY_free (pkey);

if (err != 1)
{
 printf("Didn't Verify %d\n", err);
 return(2);
}
printf ("Signature Verified Ok.\n");
return(0);


Thanks for everything.

Jim

----- Original Message ----- From: "Mounir IDRASSI" <mounir.idra...@idrix.net>
To: <openssl-users@openssl.org>
Sent: Saturday, November 07, 2009 4:09 AM
Subject: Re: Signature Verification


Hi,

In order to help you further, can you post :
  - The data to be hashed which is the content of your variable xmlDat
- The signature to be verified which is the content of your variable sigDat (maybe it's what you posted first)
  - The public key that will be used for the verification
- The endianess of the the signature. It should be big endian as expected by OpenSSL

And just one last confirmation : In your first email, you posted some BASE64 data that you say is the signature. This data is 512 bytes long. So this would mean that the key used is a 4096 bit RSA key. Is this correct?

Cheers,
--
Mounir IDRASSI
IDRIX
http://www.idrix.fr

Jim Welch wrote:
Hello Again,

The code is there to check for a non-null pkey. It wasn't copied to keep the original message shorter. I've now made sure that I've Base64'd the xml string and Base64'd the signature string. These are what I'm giving to the EVP_VerifyUpdate and EVP_VerifyFinal. Still not verifying.

Thanks Again,

Jim
----- Original Message ----- From: "Mounir IDRASSI" <mounir.idra...@idrix.net>
To: <openssl-users@openssl.org>
Sent: Friday, November 06, 2009 5:11 PM
Subject: Re: Signature Verification


Hi,

You must also handle BASE64 decoding in EVP_VerifyUpdate not only EVP_VerifyFinal. Those two functions must have as input the byte arrays that represent the binary data and the binary signature respectively. Concerning PEM_read_PUBKEY, if it returns a non NULL pointer then everything is OK with the public key and you don't have to worry.

Cheers,
--
Mounir IDRASSI
IDRIX
http://www.idrix.fr


Jim Welch wrote:
Hi,

Thank you for the response. It was sha512 not 256. I changed it to EVP_sha512 in the code but it still won't verify. On the verify final, I've tried it both with and without a Base64 converted string (and corresponding length). I'm not sure from what I've read if the PEM_read_PUBKEY does a Base64 conversion on the Public Key or not and I'm not sure where to look in the pkey to find out.

Jim

----- Original Message ----- From: "Mounir IDRASSI" <mounir.idra...@idrix.net>
To: <openssl-users@openssl.org>
Sent: Friday, November 06, 2009 3:55 PM
Subject: Re: Signature Verification


Hi,

In your description you say that the signature was created with SHA256 but in your code you are using SHA-1 through EVP_sha1. Replace this with EVP_sha256 to have a correct processing. Also, your data seems to be BASE64 encoded and you are computing the digest directly on the BASE64 string. You should convert this BASE64 string to the corresponding byte array and then compute the digest on this byte array.

I hope this will help.
Cheers,
--
Mounir IDRASSI
IDRIX
http://www.idrix.fr

Jim Welch wrote:
Hello,

I've been trying to verify the signature from the following xml data:

<license_data><version>1.0</version><serial>EC1000-0900018</serial><mac>00:54:66:18:3A:40</mac><module code="impedance"><start>2000-01-01</start><end>2099-12-31</end></module><module code="multimeter"><start>2000-01-01</start><end>2099-12-31</end></module><module code="sulfation"><start>2000-01-01</start><end>2099-12-31</end></module><cookie>AA80A2A7119FD4F1C122080E1AD17490</cookie></license_data>

using this signature:

C4S953HqB8S/SZ8nOO5IgGA0Vm3BxHT8vByWJFG2gn/OrBKc45QvjEdX855bb9p8KdSa1YQt3nnv
p6MCA+5YCDePEIuYpbTYzAIJ9p7zqpJsXzb8YlDpw4qpf0TSbCCEFZZReSRSAxlE2gH/SOvPAjRY
ykvxbjrgMQ07Jf/ae4lX+CaBxA/Az8efhsBDyT6wCPECkj1SiufTtVA2MAt9Bf76Y1T5RnHph/kf
Hj3/osgrMKKbIPhii2nPktMH223QfgmTOtHxw21ahi2vcSnADb9p1WIjDiq/gLk0uisT/p0g4MZb
SKNOct3MRqgv64wtyUD+W/+8/yGQK+/IXNIhgKoKsvuwR242c7RpF+HdVZRrfeIQMnUAAo/7q+rS
AzRJO7L7xoXYvFOmVxvjRZP8Rhw445N6bnLwLxANFNvyoo5ykGdocBUEBMD5sC3TipYUti39mso2
dsqSMwtRhPDw9dzf6evwG3+Qo0ewLVap3pNu8XzBrXxCM6pv7IydmekiHvSF6OFrt/rPUA2pXyuU
njhD/twe0+n5fLlSTZ6w/D898e/blvFUroQbmaI8Rr7AE9fZY0KJBuc73YgPTXOnm4Iqc/5vMwId
j27g+JGWEzjyAtNIBo9Su0/9LE1IVPyZgAjquBEmKEAcQQjnW4D8kj2mllJLRwI00e1TAwE9Klo=

These two strings above are being sent from a server as one file which I parse into the two separate strings making sure white space has been removed from the xml as that was how it was signed. The signature was created with RSA & SHA512.

I'm using a C program to verify and have tried numerous attemps with no sucess. The openssl release is 0.9.8k. The vars sigDat and xmlDat are the respective strings. The code is as follows (some parts left out for simplicity):

fp = fopen (filePubKey, "r");

pkey = PEM_read_PUBKEY(fp, NULL, NULL, NULL);

EVP_VerifyInit (&md_ctx, EVP_sha1());

EVP_VerifyUpdate (&md_ctx, xmlDat, strlen(xmlDat));

err = EVP_VerifyFinal (&md_ctx, sigDat, strlen(sigDat), pkey);

EVP_PKEY_free (pkey);

Any ideas as to what is wrong. Another part of the project here involves java and the programmer working on that says that he can verify the signature so I know that the data is correct.

Thank You,

Jim Welch





______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager majord...@openssl.org

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to