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