Latest update
This commit is contained in:
+23
-13
@@ -57,6 +57,7 @@ ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = {
|
||||
|
||||
IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY)
|
||||
|
||||
/* TODO should better be called X509_PUBKEY_set1 */
|
||||
int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
|
||||
{
|
||||
X509_PUBKEY *pk = NULL;
|
||||
@@ -67,7 +68,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
|
||||
if ((pk = X509_PUBKEY_new()) == NULL)
|
||||
goto error;
|
||||
|
||||
if (pkey->ameth) {
|
||||
if (pkey != NULL && pkey->ameth) {
|
||||
if (pkey->ameth->pub_encode) {
|
||||
if (!pkey->ameth->pub_encode(pk, pkey)) {
|
||||
X509err(X509_F_X509_PUBKEY_SET,
|
||||
@@ -86,8 +87,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
|
||||
X509_PUBKEY_free(*x);
|
||||
*x = pk;
|
||||
pk->pkey = pkey;
|
||||
EVP_PKEY_up_ref(pkey);
|
||||
return 1;
|
||||
return EVP_PKEY_up_ref(pkey);
|
||||
|
||||
error:
|
||||
X509_PUBKEY_free(pk);
|
||||
@@ -200,15 +200,22 @@ EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length)
|
||||
return pktmp;
|
||||
}
|
||||
|
||||
int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp)
|
||||
int i2d_PUBKEY(const EVP_PKEY *a, unsigned char **pp)
|
||||
{
|
||||
X509_PUBKEY *xpk = NULL;
|
||||
int ret;
|
||||
if (!a)
|
||||
int ret = -1;
|
||||
|
||||
if (a == NULL)
|
||||
return 0;
|
||||
if (!X509_PUBKEY_set(&xpk, a))
|
||||
if ((xpk = X509_PUBKEY_new()) == NULL)
|
||||
return -1;
|
||||
if (a->ameth != NULL && a->ameth->pub_encode != NULL
|
||||
&& !a->ameth->pub_encode(xpk, a))
|
||||
goto error;
|
||||
xpk->pkey = (EVP_PKEY *)a;
|
||||
ret = i2d_X509_PUBKEY(xpk, pp);
|
||||
xpk->pkey = NULL;
|
||||
error:
|
||||
X509_PUBKEY_free(xpk);
|
||||
return ret;
|
||||
}
|
||||
@@ -238,7 +245,7 @@ RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length)
|
||||
return key;
|
||||
}
|
||||
|
||||
int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp)
|
||||
int i2d_RSA_PUBKEY(const RSA *a, unsigned char **pp)
|
||||
{
|
||||
EVP_PKEY *pktmp;
|
||||
int ret;
|
||||
@@ -249,8 +256,9 @@ int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp)
|
||||
ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
EVP_PKEY_set1_RSA(pktmp, a);
|
||||
(void)EVP_PKEY_assign_RSA(pktmp, (RSA *)a);
|
||||
ret = i2d_PUBKEY(pktmp, pp);
|
||||
pktmp->pkey.ptr = NULL;
|
||||
EVP_PKEY_free(pktmp);
|
||||
return ret;
|
||||
}
|
||||
@@ -278,7 +286,7 @@ DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length)
|
||||
return key;
|
||||
}
|
||||
|
||||
int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp)
|
||||
int i2d_DSA_PUBKEY(const DSA *a, unsigned char **pp)
|
||||
{
|
||||
EVP_PKEY *pktmp;
|
||||
int ret;
|
||||
@@ -289,8 +297,9 @@ int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp)
|
||||
ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
EVP_PKEY_set1_DSA(pktmp, a);
|
||||
(void)EVP_PKEY_assign_DSA(pktmp, (DSA *)a);
|
||||
ret = i2d_PUBKEY(pktmp, pp);
|
||||
pktmp->pkey.ptr = NULL;
|
||||
EVP_PKEY_free(pktmp);
|
||||
return ret;
|
||||
}
|
||||
@@ -318,7 +327,7 @@ EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length)
|
||||
return key;
|
||||
}
|
||||
|
||||
int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp)
|
||||
int i2d_EC_PUBKEY(const EC_KEY *a, unsigned char **pp)
|
||||
{
|
||||
EVP_PKEY *pktmp;
|
||||
int ret;
|
||||
@@ -328,8 +337,9 @@ int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp)
|
||||
ASN1err(ASN1_F_I2D_EC_PUBKEY, ERR_R_MALLOC_FAILURE);
|
||||
return -1;
|
||||
}
|
||||
EVP_PKEY_set1_EC_KEY(pktmp, a);
|
||||
(void)EVP_PKEY_assign_EC_KEY(pktmp, (EC_KEY *)a);
|
||||
ret = i2d_PUBKEY(pktmp, pp);
|
||||
pktmp->pkey.ptr = NULL;
|
||||
EVP_PKEY_free(pktmp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user