Allow any order for signature algorithm string.
Reviewed-by: Matt Caswell <matt@openssl.org>
This commit is contained in:
parent
3b848c642c
commit
431f458dfc
32
ssl/t1_lib.c
32
ssl/t1_lib.c
@ -3739,12 +3739,27 @@ typedef struct {
|
|||||||
int sigalgs[MAX_SIGALGLEN];
|
int sigalgs[MAX_SIGALGLEN];
|
||||||
} sig_cb_st;
|
} sig_cb_st;
|
||||||
|
|
||||||
|
static void get_sigorhash(int *psig, int *phash, const char *str)
|
||||||
|
{
|
||||||
|
if (strcmp(str, "RSA") == 0) {
|
||||||
|
*psig = EVP_PKEY_RSA;
|
||||||
|
} else if (strcmp(str, "DSA") == 0) {
|
||||||
|
*psig = EVP_PKEY_DSA;
|
||||||
|
} else if (strcmp(str, "ECDSA") == 0) {
|
||||||
|
*psig = EVP_PKEY_EC;
|
||||||
|
} else {
|
||||||
|
*phash = OBJ_sn2nid(str);
|
||||||
|
if (*phash == NID_undef)
|
||||||
|
*phash = OBJ_ln2nid(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int sig_cb(const char *elem, int len, void *arg)
|
static int sig_cb(const char *elem, int len, void *arg)
|
||||||
{
|
{
|
||||||
sig_cb_st *sarg = arg;
|
sig_cb_st *sarg = arg;
|
||||||
size_t i;
|
size_t i;
|
||||||
char etmp[20], *p;
|
char etmp[20], *p;
|
||||||
int sig_alg, hash_alg;
|
int sig_alg = NID_undef, hash_alg = NID_undef;
|
||||||
if (elem == NULL)
|
if (elem == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
if (sarg->sigalgcnt == MAX_SIGALGLEN)
|
if (sarg->sigalgcnt == MAX_SIGALGLEN)
|
||||||
@ -3761,19 +3776,10 @@ static int sig_cb(const char *elem, int len, void *arg)
|
|||||||
if (!*p)
|
if (!*p)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (strcmp(etmp, "RSA") == 0)
|
get_sigorhash(&sig_alg, &hash_alg, etmp);
|
||||||
sig_alg = EVP_PKEY_RSA;
|
get_sigorhash(&sig_alg, &hash_alg, p);
|
||||||
else if (strcmp(etmp, "DSA") == 0)
|
|
||||||
sig_alg = EVP_PKEY_DSA;
|
|
||||||
else if (strcmp(etmp, "ECDSA") == 0)
|
|
||||||
sig_alg = EVP_PKEY_EC;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
hash_alg = OBJ_sn2nid(p);
|
if (sig_alg == NID_undef || hash_alg == NID_undef)
|
||||||
if (hash_alg == NID_undef)
|
|
||||||
hash_alg = OBJ_ln2nid(p);
|
|
||||||
if (hash_alg == NID_undef)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for (i = 0; i < sarg->sigalgcnt; i += 2) {
|
for (i = 0; i < sarg->sigalgcnt; i += 2) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user