Add support for setting keybits and public exponent value for pkey RSA keygen.
[openssl.git] / apps / pkeyutl.c
index 119d08b28858150924d633c443351e3a6b85f649..1ecde3cd858e1e3f64de390d365f1e69052d418d 100644 (file)
@@ -154,8 +154,10 @@ int MAIN(int argc, char **argv)
 #ifndef OPENSSL_NO_ENGINE
                else if(!strcmp(*argv, "-engine"))
                        {
-                       if (--argc < 1) badarg = 1;
-                       engine = *(++argv);
+                       if (--argc < 1)
+                               badarg = 1;
+                       else
+                               engine = *(++argv);
                        }
 #endif
                else if(!strcmp(*argv, "-pubin"))
@@ -168,7 +170,7 @@ int MAIN(int argc, char **argv)
                        hexdump = 1;
                else if(!strcmp(*argv, "-sign"))
                        pkey_op = EVP_PKEY_OP_SIGN;
-               else if(!strcmp(*argv, "-verifyr"))
+               else if(!strcmp(*argv, "-verify"))
                        pkey_op = EVP_PKEY_OP_VERIFY;
                else if(!strcmp(*argv, "-verifyrecover"))
                        pkey_op = EVP_PKEY_OP_VERIFYRECOVER;
@@ -178,6 +180,23 @@ int MAIN(int argc, char **argv)
                        pkey_op = EVP_PKEY_OP_ENCRYPT;
                else if(!strcmp(*argv, "-decrypt"))
                        pkey_op = EVP_PKEY_OP_DECRYPT;
+               else if (strcmp(*argv,"-param") == 0)
+                       {
+                       if (--argc < 1)
+                               badarg = 1;
+                       if (!ctx)
+                               {
+                               BIO_puts(bio_err,
+                                       "-param command before -inkey\n");
+                               badarg = 1;
+                               }
+                       else if (pkey_ctrl_string(ctx, *(++argv)) <= 0)
+                               {
+                               BIO_puts(bio_err, "parameter setting error\n");
+                               ERR_print_errors(bio_err);
+                               goto end;
+                               }
+                       }
                else badarg = 1;
                if(badarg)
                        {
@@ -416,7 +435,7 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
        if (!pkey)
                goto end;
 
-       ctx = EVP_PKEY_CTX_new(pkey);
+       ctx = EVP_PKEY_CTX_new(pkey, NULL);
 
        EVP_PKEY_free(pkey);