提交 b4634358 编写于 作者: D Dr. Stephen Henson

Update EVP_PKEY_cmp() and X509_check_private() to return sensible values and

handle unsupported key types.
上级 816c2b5a
...@@ -149,7 +149,7 @@ int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) ...@@ -149,7 +149,7 @@ int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b)
return -1; return -1;
if (a->ameth && a->ameth->param_cmp) if (a->ameth && a->ameth->param_cmp)
return a->ameth->param_cmp(a, b); return a->ameth->param_cmp(a, b);
return -1; return -2;
} }
int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b) int EVP_PKEY_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
......
...@@ -386,14 +386,19 @@ ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x) ...@@ -386,14 +386,19 @@ ASN1_BIT_STRING *X509_get0_pubkey_bitstr(const X509 *x)
int X509_check_private_key(X509 *x, EVP_PKEY *k) int X509_check_private_key(X509 *x, EVP_PKEY *k)
{ {
EVP_PKEY *xk=NULL; EVP_PKEY *xk;
int ok=0; int ret;
xk=X509_get_pubkey(x); xk=X509_get_pubkey(x);
switch (EVP_PKEY_cmp(xk, k))
if (xk)
ret = EVP_PKEY_cmp(xk, k);
else
ret = -2;
switch (ret)
{ {
case 1: case 1:
ok=1;
break; break;
case 0: case 0:
X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_KEY_VALUES_MISMATCH); X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_KEY_VALUES_MISMATCH);
...@@ -402,24 +407,11 @@ int X509_check_private_key(X509 *x, EVP_PKEY *k) ...@@ -402,24 +407,11 @@ int X509_check_private_key(X509 *x, EVP_PKEY *k)
X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_KEY_TYPE_MISMATCH); X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_KEY_TYPE_MISMATCH);
break; break;
case -2: case -2:
#ifndef OPENSSL_NO_EC
if (k->type == EVP_PKEY_EC)
{
X509err(X509_F_X509_CHECK_PRIVATE_KEY, ERR_R_EC_LIB);
break;
}
#endif
#ifndef OPENSSL_NO_DH
if (k->type == EVP_PKEY_DH)
{
/* No idea */
X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_CANT_CHECK_DH_KEY);
break;
}
#endif
X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_UNKNOWN_KEY_TYPE); X509err(X509_F_X509_CHECK_PRIVATE_KEY,X509_R_UNKNOWN_KEY_TYPE);
} }
if (xk)
EVP_PKEY_free(xk); EVP_PKEY_free(xk);
return(ok); if (ret > 0)
return 1;
return 0;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册