Im writing a program that is supposed to sign and verify a file using DSA and is supposed to include pem objects that set the parameters and keys.Im testing it involving a sentence first,but when I try to run it I get a segmentation fault. Any help would be appreciated.
Code:
#include <stdio .h>
# include <string .h>
# include <openssl /evp.h>
# include <openssl /dsa.h>
int main (int argc , char ** argv )
{
EVP_MD_CTX ctx;
DSA *dsa ;
char str [] = " This is a message that will be signed ";
unsigned char *sig;
int len , siglen ;
unsigned char md[ EVP_MAX_MD_SIZE ];
FILE *fp;
fp = fopen (" dsa-param.pem", "w+");
FILE *fp2;
fp2 = fopen (" dsa-priv.pem", "w+");
FILE *fp3;
fp3 = fopen (" dsa-pub.pem", "w+");
/* Compute the SHA1 digest of str */
EVP_DigestInit (& ctx , EVP_sha1 ());
EVP_DigestUpdate (& ctx , str , strlen (str ));
EVP_DigestFinal (& ctx , md , &len );
/* Generate DSA parameters */
DSA * PEM_read_DSAparams ( FILE *fp , DSA ** dsa ,
pem_password_cb * callback , void * cb_arg );
/* Generate DSA keys */
DSA * PEM_read_DSA_PUBKEY ( FILE *fp3 , DSA ** dsa ,
pem_password_cb * callback , void * cb_arg );
DSA * PEM_read_DSAPrivateKey ( FILE *fp2 , DSA ** rsa ,
pem_password_cb * callback , void * cb_arg );
/* Allocate buffer space for signature */
sig = ( unsigned char *) malloc ( DSA_size (dsa ));
/* Sign message digest */
DSA_sign (fp3, md , len , sig , &siglen , dsa );
/* Verify signature */
if ( DSA_verify (fp2 , md , len , sig , siglen , dsa) == 1)
printf (" Signature is verified !\n");
else
printf (" Signature verification failed ...\ n");
/* Destroy the DSA object */
DSA_free (dsa );
return 0;
}