summaryrefslogtreecommitdiffstats
path: root/crypto/asn1
diff options
context:
space:
mode:
authorDr. David von Oheimb <David.von.Oheimb@siemens.com>2021-08-06 12:11:13 +0200
committerDr. David von Oheimb <dev@ddvo.net>2022-01-07 10:42:44 +0100
commit9944df112ffbe4b6855b6a9bf88720803277cc23 (patch)
tree7b4a15397f1015c166ef46047d1cade93e3a0068 /crypto/asn1
parent6e2499474cb96b28a51df1da25cc72f1cf342fad (diff)
asn1/x_algor.c: add internal ossl_X509_ALGOR_from_nid() simplifying code
Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17363)
Diffstat (limited to 'crypto/asn1')
-rw-r--r--crypto/asn1/p5_pbev2.c4
-rw-r--r--crypto/asn1/x_algor.c28
2 files changed, 24 insertions, 8 deletions
diff --git a/crypto/asn1/p5_pbev2.c b/crypto/asn1/p5_pbev2.c
index 711743a77b..82292626de 100644
--- a/crypto/asn1/p5_pbev2.c
+++ b/crypto/asn1/p5_pbev2.c
@@ -9,6 +9,7 @@
#include <stdio.h>
#include "internal/cryptlib.h"
+#include "crypto/asn1.h"
#include <openssl/asn1t.h>
#include <openssl/core.h>
#include <openssl/core_names.h>
@@ -208,10 +209,9 @@ X509_ALGOR *PKCS5_pbkdf2_set_ex(int iter, unsigned char *salt, int saltlen,
/* prf can stay NULL if we are using hmacWithSHA1 */
if (prf_nid > 0 && prf_nid != NID_hmacWithSHA1) {
- kdf->prf = X509_ALGOR_new();
+ kdf->prf = ossl_X509_ALGOR_from_nid(prf_nid, V_ASN1_NULL, NULL);
if (kdf->prf == NULL)
goto merr;
- X509_ALGOR_set0(kdf->prf, OBJ_nid2obj(prf_nid), V_ASN1_NULL, NULL);
}
/* Finally setup the keyfunc structure */
diff --git a/crypto/asn1/x_algor.c b/crypto/asn1/x_algor.c
index c0a5f76803..f56ec92f65 100644
--- a/crypto/asn1/x_algor.c
+++ b/crypto/asn1/x_algor.c
@@ -43,7 +43,7 @@ int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval)
ASN1_OBJECT_free(alg->algorithm);
alg->algorithm = aobj;
- if (ptype == 0)
+ if (ptype == V_ASN1_EOC)
return 1;
if (ptype == V_ASN1_UNDEF) {
ASN1_TYPE_free(alg->parameter);
@@ -53,6 +53,25 @@ int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval)
return 1;
}
+X509_ALGOR *ossl_X509_ALGOR_from_nid(int nid, int ptype, void *pval)
+{
+ ASN1_OBJECT *algo = OBJ_nid2obj(nid);
+ X509_ALGOR *alg = NULL;
+
+ if (algo == NULL)
+ return NULL;
+ if ((alg = X509_ALGOR_new()) == NULL)
+ goto err;
+ if (X509_ALGOR_set0(alg, algo, ptype, pval))
+ return alg;
+ alg->algorithm = NULL; /* precaution to prevent double free */
+
+ err:
+ X509_ALGOR_free(alg);
+ ASN1_OBJECT_free(algo);
+ return NULL;
+}
+
void X509_ALGOR_get0(const ASN1_OBJECT **paobj, int *pptype,
const void **ppval, const X509_ALGOR *algor)
{
@@ -176,15 +195,12 @@ int ossl_x509_algor_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md)
goto err;
if (ASN1_item_pack(algtmp, ASN1_ITEM_rptr(X509_ALGOR), &stmp) == NULL)
goto err;
- *palg = X509_ALGOR_new();
+ *palg = ossl_X509_ALGOR_from_nid(NID_mgf1, V_ASN1_SEQUENCE, stmp);
if (*palg == NULL)
goto err;
- X509_ALGOR_set0(*palg, OBJ_nid2obj(NID_mgf1), V_ASN1_SEQUENCE, stmp);
stmp = NULL;
err:
ASN1_STRING_free(stmp);
X509_ALGOR_free(algtmp);
- if (*palg != NULL)
- return 1;
- return 0;
+ return *palg != NULL;
}