This is probably a stupid question. :-)
I generated a keypair for DSA ,signed some data and stored the
public/private keys for later use.
Later on I want to verify the data i previously signed.
So I just create a DSA struct and and add the public key to it.
But that doesn't work, since the DSA struct needs p,q,g.
How do I get those from my private/public keys??
/Magnus - attached some shitty code...
>>>>>>example ....>>>>>>>>
#include <stdio.h>
#include <openssl/dsa.h>
int main(int argc, char *argv[])
{
DSA *dsa;
int counter_ret;
char mess1[] = "OneSmallTestMessage";
unsigned long h_ret;
int i,j;
int status;
unsigned char sigret[1000];
unsigned int siglen;
char pub_key[1000];
char priv_key[1000];
for(i=0;i<1;i++){ //loop once break at errors
dsa =
DSA_generate_parameters(1024,NULL,0,&counter_ret,&h_ret,NULL,NULL);
if(dsa == NULL){
printf("Failed to generate params\n");
break;
}
//try generate a key pair
status = DSA_generate_key(dsa);
if (status != 1){
printf("Failed to generate keys\n");
break;
}
//try signing a message
status = DSA_sign(0,
mess1,
strlen(mess1),
sigret,
&siglen,
dsa);
if (status != 1){
printf("Failed to sign message\n");
break;
} else {
printf("Siglen = %d\n",siglen);
printf("Signature is: ");
for(j = 0; j < siglen; j++) printf("%02x", sigret[j]);
printf("\n");
}
//try verifying the signature
printf("Checking signature on %s\n",mess1);
status = DSA_verify(0,
mess1,
strlen(mess1),
sigret,
siglen,
dsa);
if (status != 1){
printf("Signature is not valid\n");
break;
} else {
printf("Signature valid\n");
}
//SAVE KEYS...
strcpy(pub_key,BN_bn2hex(dsa->pub_key));
strcpy(priv_key,BN_bn2hex(dsa->pub_key));
//free the whole shit.
DSA_free(dsa);
dsa = DSA_new();
dsa->p = BN_new();
dsa->q = BN_new();
dsa->g = BN_new();
dsa->pub_key = BN_new();
dsa->priv_key = BN_new();
status = BN_hex2bn(&(dsa->pub_key),pub_key);
printf("status = %d\n",status);
status = BN_hex2bn(&(dsa->priv_key),priv_key);
printf("status = %d\n",status);
printf("Checking signature on %s\n",mess1);
status = DSA_verify(0,
mess1,
strlen(mess1),
sigret,
siglen,
dsa);
if (status != 1){
printf("Signature is not valid\n");
} else {
printf("Signature valid\n");
}
DSA_free(dsa);
}
return 0;
}
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]