sync code with last fixes and improvements from OpenBSD

This commit is contained in:
purplerain 2023-08-11 09:11:00 +00:00
parent 371ae113c6
commit 454dab66ed
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
95 changed files with 1784 additions and 2042 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: rsa_ameth.c,v 1.30 2023/07/07 06:59:18 tb Exp $ */
/* $OpenBSD: rsa_ameth.c,v 1.32 2023/08/10 15:05:28 tb Exp $ */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project 2006.
*/
@ -136,21 +136,28 @@ rsa_param_decode(RSA *rsa, const X509_ALGOR *alg)
static int
rsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
{
unsigned char *penc = NULL;
int penclen;
ASN1_STRING *str;
ASN1_STRING *str = NULL;
int strtype;
unsigned char *penc = NULL;
int penclen = 0;
ASN1_OBJECT *aobj;
if (!rsa_param_encode(pkey, &str, &strtype))
return 0;
penclen = i2d_RSAPublicKey(pkey->pkey.rsa, &penc);
if (penclen <= 0)
return 0;
if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(pkey->ameth->pkey_id),
strtype, str, penc, penclen))
return 1;
goto err;
if ((penclen = i2d_RSAPublicKey(pkey->pkey.rsa, &penc)) <= 0) {
penclen = 0;
goto err;
}
if ((aobj = OBJ_nid2obj(pkey->ameth->pkey_id)) == NULL)
goto err;
if (!X509_PUBKEY_set0_param(pk, aobj, strtype, str, penc, penclen))
goto err;
free(penc);
return 1;
err:
ASN1_STRING_free(str);
freezero(penc, penclen);
return 0;
}
@ -212,29 +219,33 @@ old_rsa_priv_encode(const EVP_PKEY *pkey, unsigned char **pder)
static int
rsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)
{
unsigned char *rk = NULL;
int rklen;
ASN1_STRING *str;
ASN1_STRING *str = NULL;
ASN1_OBJECT *aobj;
int strtype;
unsigned char *rk = NULL;
int rklen = 0;
if (!rsa_param_encode(pkey, &str, &strtype))
return 0;
rklen = i2d_RSAPrivateKey(pkey->pkey.rsa, &rk);
if (rklen <= 0) {
goto err;
if ((rklen = i2d_RSAPrivateKey(pkey->pkey.rsa, &rk)) <= 0) {
RSAerror(ERR_R_MALLOC_FAILURE);
ASN1_STRING_free(str);
return 0;
rklen = 0;
goto err;
}
if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(pkey->ameth->pkey_id), 0,
strtype, str, rk, rklen)) {
if ((aobj = OBJ_nid2obj(pkey->ameth->pkey_id)) == NULL)
goto err;
if (!PKCS8_pkey_set0(p8, aobj, 0, strtype, str, rk, rklen)) {
RSAerror(ERR_R_MALLOC_FAILURE);
ASN1_STRING_free(str);
return 0;
goto err;
}
return 1;
err:
ASN1_STRING_free(str);
freezero(rk, rklen);
return 0;
}
static int