Check out following:

EVP_PKEY* create_key(int key_type, int key_size, char* file)
{
        EVP_PKEY*       key = NULL;
        RSA*            rsa = NULL;
        DSA*            dsa = NULL;

        BIO*            bio_key = NULL;
        char            key_file[256] = "";


        if(! (key = EVP_PKEY_new()))
                return NULL;
        if(key_type == TYPE_RSA)
        {
                if(! (rsa = RSA_generate_key(key_size, 0x10001,
key_generation_cb, 0)))
                        goto err;
                if(! EVP_PKEY_assign_RSA(key, rsa))
                        goto err;
                /* RSA_print(bio_stdout, rsa, 0); */
        }
        else if(key_type == TYPE_DSA)
        {
                if(! (dsa = DSA_generate_parameters(key_size, NULL, 0, NULL,
NULL, key_generation_cb, 0)))
                        goto err;
                if(! DSA_generate_key(dsa))
                        goto err;
                if(! EVP_PKEY_assign_DSA(key, dsa))
                        goto err;
                /* DSA_print(bio_stdout, dsa, 0); */
        }

        if(file && strlen(file))
        {
                strcpy(key_file, file);
                strcat(key_file, ".key");
                if(! (bio_key = BIO_new_file(key_file, "wb")))
                        goto err;
                if(! i2d_PrivateKey_bio(bio_key, key))
                        goto err;
                if(bio_key)
                        BIO_free(bio_key);
        }

        return key;

err:
        if(bio_key)
                BIO_free(bio_key);
        if(key)
                EVP_PKEY_free(key);
        return NULL;
}

Thanks
Aslam


-----Original Message-----
From: Lidia Castillejo [mailto:[EMAIL PROTECTED]]
Sent: Thursday, April 25, 2002 11:14 AM
To: [EMAIL PROTECTED]
Subject: How to generate a dsa key?


Hi,
I would generate a dsa pair keys and store in pem files (private.pem
/public.pem) from the openssl api.
I see in pem.h file and i find:

    int DSA_generate_key(DSA *a);
    DSA * DSA_generate_parameters(int bits, unsigned char *seed,int
seed_len,
                                                          int *counter_ret,
unsigned long *h_ret,void
                                                          (*callback)(int,
int, void *),void *cb_arg);
    int i2d_DSAPublicKey(DSA *a, unsigned char **pp);
    int  i2d_DSAPrivateKey(DSA *a, unsigned char **pp);

what is the correctly way to use this parameters?
Thanks,
lidia

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to