Hi all,

I intend to use the EVP interface in order to prepare for future
changes, but currently need only SHA1 hashes.  I have taken the code
sample from the EVP_DigestInit man page. It works fine. However, when
I replace

EVP_DigestInit_ex(&mdctx, md, NULL);

with

EVP_DigestInit_ex(&mdctx, EVP_sha1, NULL);

A segfault occurs at that very location. From what I have found in the
doc and on the web, EVP_sha1 should be a valid constant for this kind
of use.

I'd appreciate if someone could tell me where my misunderstanding (and
thus the segfault ;)) is rooted (platform is recent Ubuntu Linux).
Complete segfaulting code after my sig, just to be sure...

--
Thanks,
Rainer


#include <stdio.h>
#include <openssl/evp.h>

main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
char mess1[] = "Test Message\n";
char mess2[] = "Hello World\n";
unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;

OpenSSL_add_all_digests();

if(!argv[1]) {
       printf("Usage: mdtest digestname\n");
       exit(1);
}

md = EVP_get_digestbyname(argv[1]);

if(!md) {
       printf("Unknown message digest %s\n", argv[1]);
       exit(1);
}

EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, EVP_sha1, NULL); // <-- segfault location
//EVP_DigestInit_ex(&mdctx, md, NULL);
EVP_DigestUpdate(&mdctx, mess1, strlen(mess1));
EVP_DigestUpdate(&mdctx, mess2, strlen(mess2));
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);

printf("Digest is: ");
for(i = 0; i < md_len; i++) printf("%02x", md_value[i]);
printf("\n");
}
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [email protected]
Automated List Manager                           [email protected]

Reply via email to