forked from wolfSSL/wolfssl
Implement wolfSSL_d2i_X509_NAME
This commit is contained in:
@@ -1406,7 +1406,7 @@ AC_ARG_ENABLE([certgen],
|
||||
[ ENABLED_CERTGEN=$enableval ],
|
||||
[ ENABLED_CERTGEN=no ]
|
||||
)
|
||||
if test "$ENABLED_OPENVPN" = "yes"
|
||||
if test "$ENABLED_OPENVPN" = "yes" || test "$ENABLED_OPENSSH" = "yes"
|
||||
then
|
||||
ENABLED_CERTGEN=yes
|
||||
fi
|
||||
|
36
src/ssl.c
36
src/ssl.c
@@ -37317,6 +37317,42 @@ static int CopyX509NameToCertName(WOLFSSL_X509_NAME* n, CertName* cName)
|
||||
#endif /* WOLFSSL_CERT_GEN */
|
||||
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
|
||||
|
||||
WOLFSSL_X509_NAME *wolfSSL_d2i_X509_NAME(WOLFSSL_X509_NAME **name,
|
||||
unsigned char **in, long length)
|
||||
{
|
||||
WOLFSSL_X509_NAME* tmp = NULL;
|
||||
DecodedCert cert;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_d2i_X509_NAME");
|
||||
|
||||
if (!in || !*in || length <= 0) {
|
||||
WOLFSSL_MSG("Bad argument");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
InitDecodedCert(&cert, *in, length, NULL);
|
||||
|
||||
if (GetName(&cert, SUBJECT, length) != 0) {
|
||||
WOLFSSL_MSG("WOLFSSL_X509_NAME parse error");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(tmp = wolfSSL_X509_NAME_new())) {
|
||||
WOLFSSL_MSG("wolfSSL_X509_NAME_new error");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
XSTRNCPY(tmp->staticName, cert.subject, ASN_NAME_MAX);
|
||||
tmp->staticName[ASN_NAME_MAX - 1] = '\0';
|
||||
tmp->sz = (int)XSTRLEN(tmp->staticName) + 1;
|
||||
|
||||
if (name)
|
||||
*name = tmp;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
/* Compares the two X509 names. If the size of x is larger then y then a
|
||||
* positive value is returned if x is smaller a negative value is returned.
|
||||
* In the case that the sizes are equal a the value of strcmp between the
|
||||
|
@@ -23033,6 +23033,7 @@ static void test_wolfSSL_X509_NAME(void)
|
||||
XFILE f;
|
||||
const X509_NAME* a;
|
||||
const X509_NAME* b;
|
||||
X509_NAME* d2i_name;
|
||||
int sz;
|
||||
unsigned char* tmp;
|
||||
char file[] = "./certs/ca-cert.der";
|
||||
@@ -23068,6 +23069,9 @@ static void test_wolfSSL_X509_NAME(void)
|
||||
abort();
|
||||
}
|
||||
|
||||
tmp = buf;
|
||||
AssertNotNull(d2i_name = d2i_X509_NAME(NULL, &tmp, sz));
|
||||
|
||||
/* retry but with the function creating a buffer */
|
||||
tmp = NULL;
|
||||
AssertIntGT((sz = i2d_X509_NAME((X509_NAME*)b, &tmp)), 0);
|
||||
@@ -23077,6 +23081,7 @@ static void test_wolfSSL_X509_NAME(void)
|
||||
AssertNotNull(b = X509_NAME_dup((X509_NAME*)a));
|
||||
AssertIntEQ(X509_NAME_cmp(a, b), 0);
|
||||
X509_NAME_free((X509_NAME*)b);
|
||||
X509_NAME_free(d2i_name);
|
||||
|
||||
X509_free(x509);
|
||||
|
||||
|
@@ -5550,7 +5550,7 @@ int CalcHashId(const byte* data, word32 len, byte* hash)
|
||||
|
||||
/* process NAME, either issuer or subject
|
||||
* returns 0 on success and negative values on fail */
|
||||
static int GetName(DecodedCert* cert, int nameType, int maxIdx)
|
||||
int GetName(DecodedCert* cert, int nameType, int maxIdx)
|
||||
{
|
||||
int length; /* length of all distinguished names */
|
||||
int dummy;
|
||||
|
@@ -449,6 +449,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
|
||||
#define sk_X509_INFO_free wolfSSL_sk_X509_INFO_free
|
||||
|
||||
#define i2d_X509_NAME wolfSSL_i2d_X509_NAME
|
||||
#define d2i_X509_NAME wolfSSL_d2i_X509_NAME
|
||||
#define X509_NAME_new wolfSSL_X509_NAME_new
|
||||
#define X509_NAME_free wolfSSL_X509_NAME_free
|
||||
#define X509_NAME_dup wolfSSL_X509_NAME_dup
|
||||
|
@@ -1318,6 +1318,9 @@ WOLFSSL_API void wolfSSL_X509_STORE_set_verify_cb(WOLFSSL_X509_STORE *st,
|
||||
WOLFSSL_X509_STORE_CTX_verify_cb verify_cb);
|
||||
WOLFSSL_API int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* n,
|
||||
unsigned char** out);
|
||||
WOLFSSL_API WOLFSSL_X509_NAME *wolfSSL_d2i_X509_NAME(WOLFSSL_X509_NAME **name,
|
||||
unsigned char **in, long length);
|
||||
WOLFSSL_API
|
||||
#ifndef NO_RSA
|
||||
WOLFSSL_API int wolfSSL_RSA_print(WOLFSSL_BIO* bio, WOLFSSL_RSA* rsa, int offset);
|
||||
#endif
|
||||
|
@@ -1006,6 +1006,7 @@ struct TrustedPeerCert {
|
||||
#endif
|
||||
|
||||
WOLFSSL_LOCAL int CalcHashId(const byte* data, word32 len, byte* hash);
|
||||
WOLFSSL_LOCAL int GetName(DecodedCert* cert, int nameType, int maxIdx);
|
||||
|
||||
WOLFSSL_ASN_API int wc_BerToDer(const byte* ber, word32 berSz, byte* der,
|
||||
word32* derSz);
|
||||
|
Reference in New Issue
Block a user