Hi All,

I have to generate a SHA1 from some data(const char*).
The data looks like this :

-----BEGIN CERTIFICATE REQUEST-----
MIIBcTCB3gIBADA1MQ8wDQYDVQQKEwZNY0FmZWUxDDAKBgNVBAsTA2VQTzEUMBIG
A1UEAxMLTElOVVgtTkFDLTAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPT9
xXMj+nEKh0XZtqNllDxg8aYxbm4okdx1/6keHGu1GcnUGMtywg1cpjBWSS6Lm5r1
5A8n4t1fJUEBFXd05OpRRla/4azIaxaNP2gm8/tkeUDi1PXm+8jUf7aLJekbTSzw
Uwzb+ZhMpCfKB+dRD3i7BWvr5kxnsS40LuUKHicZAgMBAAGgADAKBgYrJAMDAQIF
AAOBgQBlwS1uP9+zmtfGc9frZCUYrCq+qlsk0TWJrNjzbZNMI3+8TCjbfxdlte4P
HTRbmQ90BrQhuxh+/d5L9nwzKldcOivZsq0U/HJUmwKoYOBbRk9SATkJD5rgIhdh
UFM31/KHYnklk576mpeRJsdfiyuitytutyI69UrwzYIENvSMrj5C9QtovBtGreA==
-----END CERTIFICATE REQUEST-----

Each line in the data is ending with endline('\n') and the end data is
ending with '\0'

I am using the following few lines to generate the digest:

    unsigned char *digest = NULL;
    DSA_SIG *dsa_sig;
    EVP_MD *evp_md = (EVP_MD *)EVP_dss1();
    EVP_MD_CTX md;
    unsigned int md_len  = -1;
    OpenSSL_add_all_digests();
    digest = (unsigned char *)calloc(evp_md->md_size,sizeof(unsigned char));
    EVP_DigestInit(&md, evp_md);
    EVP_DigestUpdate(&md, dataBuffer, bufferLen);
    EVP_DigestFinal(&md, digest, &md_len);

where dataBuffer contains the above data and bufferLen contains the length.

After creating the digest i am getting digest length as 21,but it sould give
me 20.So when i use it in DSA_sign(digest,md_len,dsa) it fails throwing
error as

(here "dsa" is my DSA key generated.)
error:0A070064:dsa routines:DSA_do_sign:data too large for key size


Can anyone thorw any light on this and help me out.

Any help is appreciated.

Sibasis Panigrahi

Reply via email to