mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 05:21:51 +08:00
Add RSA ctrl for padding mode, add ctrl support in pkeyutl.
This commit is contained in:
parent
a2318e86bd
commit
4a3dc3c0e3
@ -2304,11 +2304,11 @@ int bio_to_mem(unsigned char **out, int maxlen, BIO *in)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pkey_ctrl_string(BIO *err, EVP_PKEY_CTX *ctx, char *value)
|
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value)
|
||||||
{
|
{
|
||||||
|
int rv;
|
||||||
char *stmp, *vtmp = NULL;
|
char *stmp, *vtmp = NULL;
|
||||||
stmp = BUF_strdup(value);
|
stmp = BUF_strdup(value);
|
||||||
int rv;
|
|
||||||
if (!stmp)
|
if (!stmp)
|
||||||
return -1;
|
return -1;
|
||||||
vtmp = strchr(stmp, ':');
|
vtmp = strchr(stmp, ':');
|
||||||
|
@ -286,6 +286,7 @@ int args_verify(char ***pargs, int *pargc,
|
|||||||
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
|
int *badarg, BIO *err, X509_VERIFY_PARAM **pm);
|
||||||
void policies_print(BIO *out, X509_STORE_CTX *ctx);
|
void policies_print(BIO *out, X509_STORE_CTX *ctx);
|
||||||
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
|
int bio_to_mem(unsigned char **out, int maxlen, BIO *in);
|
||||||
|
int pkey_ctrl_string(EVP_PKEY_CTX *ctx, char *value);
|
||||||
|
|
||||||
#define FORMAT_UNDEF 0
|
#define FORMAT_UNDEF 0
|
||||||
#define FORMAT_ASN1 1
|
#define FORMAT_ASN1 1
|
||||||
|
@ -154,8 +154,10 @@ int MAIN(int argc, char **argv)
|
|||||||
#ifndef OPENSSL_NO_ENGINE
|
#ifndef OPENSSL_NO_ENGINE
|
||||||
else if(!strcmp(*argv, "-engine"))
|
else if(!strcmp(*argv, "-engine"))
|
||||||
{
|
{
|
||||||
if (--argc < 1) badarg = 1;
|
if (--argc < 1)
|
||||||
engine = *(++argv);
|
badarg = 1;
|
||||||
|
else
|
||||||
|
engine = *(++argv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if(!strcmp(*argv, "-pubin"))
|
else if(!strcmp(*argv, "-pubin"))
|
||||||
@ -178,6 +180,23 @@ int MAIN(int argc, char **argv)
|
|||||||
pkey_op = EVP_PKEY_OP_ENCRYPT;
|
pkey_op = EVP_PKEY_OP_ENCRYPT;
|
||||||
else if(!strcmp(*argv, "-decrypt"))
|
else if(!strcmp(*argv, "-decrypt"))
|
||||||
pkey_op = EVP_PKEY_OP_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;
|
else badarg = 1;
|
||||||
if(badarg)
|
if(badarg)
|
||||||
{
|
{
|
||||||
|
@ -917,8 +917,11 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
|
|||||||
const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type, ENGINE *e);
|
const EVP_PKEY_METHOD *EVP_PKEY_meth_find(int type, ENGINE *e);
|
||||||
EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey);
|
EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey);
|
||||||
void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
|
void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
|
||||||
|
|
||||||
int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
||||||
int cmd, int p1, void *p2);
|
int cmd, int p1, void *p2);
|
||||||
|
int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type,
|
||||||
|
const char *value);
|
||||||
|
|
||||||
|
|
||||||
int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
|
int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);
|
||||||
|
@ -171,7 +171,8 @@ int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, char *name, char *value)
|
int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx,
|
||||||
|
const char *name, const char *value)
|
||||||
{
|
{
|
||||||
if (!ctx || !ctx->pmeth || !ctx->pmeth->ctrl)
|
if (!ctx || !ctx->pmeth || !ctx->pmeth->ctrl)
|
||||||
{
|
{
|
||||||
|
@ -192,6 +192,12 @@ struct rsa_st
|
|||||||
* be used for all exponents.
|
* be used for all exponents.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define EVP_PKEY_CTX_set_rsa_padding(ctx, pad) \
|
||||||
|
EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_CTRL_RSA_PADDING, \
|
||||||
|
pad, NULL)
|
||||||
|
|
||||||
|
#define EVP_PKEY_CTRL_RSA_PADDING 1
|
||||||
|
|
||||||
#define RSA_PKCS1_PADDING 1
|
#define RSA_PKCS1_PADDING 1
|
||||||
#define RSA_SSLV23_PADDING 2
|
#define RSA_SSLV23_PADDING 2
|
||||||
#define RSA_NO_PADDING 3
|
#define RSA_NO_PADDING 3
|
||||||
|
@ -151,6 +151,52 @@ static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx, unsigned char *out, int *outlen,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
|
||||||
|
{
|
||||||
|
RSA_PKEY_CTX *rctx = ctx->data;
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
|
||||||
|
case EVP_PKEY_CTRL_RSA_PADDING:
|
||||||
|
/* TODO: add PSS support */
|
||||||
|
if ((p1 >= RSA_PKCS1_PADDING) && (p1 <= RSA_X931_PADDING))
|
||||||
|
{
|
||||||
|
rctx->pad_mode = p1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx,
|
||||||
|
const char *type, const char *value)
|
||||||
|
{
|
||||||
|
if (!strcmp(type, "rsa_padding_mode"))
|
||||||
|
{
|
||||||
|
int pm;
|
||||||
|
if (!value)
|
||||||
|
return 0;
|
||||||
|
if (!strcmp(value, "pkcs1"))
|
||||||
|
pm = RSA_PKCS1_PADDING;
|
||||||
|
else if (!strcmp(value, "sslv23"))
|
||||||
|
pm = RSA_SSLV23_PADDING;
|
||||||
|
else if (!strcmp(value, "none"))
|
||||||
|
pm = RSA_NO_PADDING;
|
||||||
|
else if (!strcmp(value, "oeap"))
|
||||||
|
pm = RSA_PKCS1_OAEP_PADDING;
|
||||||
|
else if (!strcmp(value, "x931"))
|
||||||
|
pm = RSA_X931_PADDING;
|
||||||
|
else
|
||||||
|
return -2;
|
||||||
|
return pkey_rsa_ctrl(ctx, EVP_PKEY_CTRL_RSA_PADDING, pm, NULL);
|
||||||
|
}
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
const EVP_PKEY_METHOD rsa_pkey_meth =
|
const EVP_PKEY_METHOD rsa_pkey_meth =
|
||||||
{
|
{
|
||||||
EVP_PKEY_RSA,
|
EVP_PKEY_RSA,
|
||||||
@ -179,7 +225,8 @@ const EVP_PKEY_METHOD rsa_pkey_meth =
|
|||||||
0,
|
0,
|
||||||
pkey_rsa_decrypt,
|
pkey_rsa_decrypt,
|
||||||
|
|
||||||
0,0
|
pkey_rsa_ctrl,
|
||||||
|
pkey_rsa_ctrl_str
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user