forked from wolfSSL/wolfssl
Merge pull request #4290 from TakayukiMatsuo/general
Add wolfSSL_GENERAL_NAME_print
This commit is contained in:
144
src/ssl.c
144
src/ssl.c
@ -20294,6 +20294,145 @@ void wolfSSL_GENERAL_NAMES_free(WOLFSSL_GENERAL_NAMES *gens)
|
|||||||
wolfSSL_sk_free(gens);
|
wolfSSL_sk_free(gens);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OPENSSL_ALL
|
||||||
|
/* Outputs name string of the given WOLFSSL_GENERAL_NAME_OBJECT to WOLFSSL_BIO.
|
||||||
|
* Can handle following GENERAL_NAME_OBJECT types:
|
||||||
|
* - GEN_OTHERNAME #
|
||||||
|
* - GEN_EMAIL
|
||||||
|
* - GEN_DNS
|
||||||
|
* - GEN_X400 #
|
||||||
|
* - GEN_DIRNAME
|
||||||
|
* - GEN_EDIPARTY #
|
||||||
|
* - GEN_URI
|
||||||
|
* - GEN_RID
|
||||||
|
* The each name string to be output has "typename:namestring" format.
|
||||||
|
* For instance, email name string will be output as "email:info@wolfssl.com".
|
||||||
|
* However,some types above marked with "#" will be output with
|
||||||
|
* "typename:<unsupported>".
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* - out: WOLFSSL_BIO object which is the output destination
|
||||||
|
* - gen: WOLFSSL_GENERAL_NAME object to be output its name
|
||||||
|
*
|
||||||
|
* Returns WOLFSSL_SUCCESS on success, WOLFSSL_FAILURE on failure.
|
||||||
|
*/
|
||||||
|
int wolfSSL_GENERAL_NAME_print(WOLFSSL_BIO* out, WOLFSSL_GENERAL_NAME* gen)
|
||||||
|
{
|
||||||
|
int ret, i;
|
||||||
|
unsigned int wd;
|
||||||
|
unsigned char* p;
|
||||||
|
(void)wd;
|
||||||
|
(void)p;
|
||||||
|
(void)i;
|
||||||
|
WOLFSSL_ENTER("wolfSSL_GENERAL_NAME_print");
|
||||||
|
|
||||||
|
if (out == NULL || gen == NULL)
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
|
||||||
|
ret = WOLFSSL_FAILURE;
|
||||||
|
switch (gen->type)
|
||||||
|
{
|
||||||
|
case GEN_OTHERNAME:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "othername:<unsupported>");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_EMAIL:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "email:");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
if (ret == WOLFSSL_SUCCESS)
|
||||||
|
{
|
||||||
|
ret = wolfSSL_ASN1_STRING_print(out, gen->d.rfc822Name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_DNS:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "DNS:");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
|
ret = wolfSSL_BIO_printf(out, gen->d.dNSName->strData);
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_X400:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "X400Name:<unsupported>");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_DIRNAME:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "DirName:");
|
||||||
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
|
ret = wolfSSL_X509_NAME_print_ex(out, gen->d.directoryName, 0,
|
||||||
|
XN_FLAG_ONELINE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_EDIPARTY:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "EdiPartyName:<unsupported>");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_URI:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "URI:");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
|
ret = wolfSSL_ASN1_STRING_print(out,
|
||||||
|
gen->d.uniformResourceIdentifier);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_IPADD:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "IP Address");
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
|
|
||||||
|
if (!gen->d.iPAddress->length) {
|
||||||
|
ret = WOLFSSL_FAILURE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p = (unsigned char*)gen->d.iPAddress->strData;
|
||||||
|
|
||||||
|
if (gen->d.iPAddress->length == 4) {
|
||||||
|
ret = wolfSSL_BIO_printf(out, ":%d.%d.%d.%d",
|
||||||
|
p[0],p[1],p[2],p[3]);
|
||||||
|
}
|
||||||
|
else if (gen->d.iPAddress->length == 16) {
|
||||||
|
|
||||||
|
for (i = 0; i < 16 && ret == WOLFSSL_SUCCESS;) {
|
||||||
|
wd = p[i] << 8 | p[i+1];
|
||||||
|
|
||||||
|
i += 2;
|
||||||
|
ret = wolfSSL_BIO_printf(out, ":%X", wd);
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = wolfSSL_BIO_printf(out, "<unsupported>");
|
||||||
|
}
|
||||||
|
ret = (ret > 0) ? WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GEN_RID:
|
||||||
|
ret = wolfSSL_BIO_printf(out, "Registered ID:");
|
||||||
|
if (ret == WOLFSSL_SUCCESS) {
|
||||||
|
ret = wolfSSL_i2a_ASN1_OBJECT(out, gen->d.registeredID);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* unsupported type */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == WOLFSSL_FAILURE)
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
else
|
||||||
|
return WOLFSSL_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif /* OPENSSL_ALL */
|
||||||
|
|
||||||
#if defined(OPENSSL_ALL)
|
#if defined(OPENSSL_ALL)
|
||||||
|
|
||||||
void *wolfSSL_lh_retrieve(WOLFSSL_STACK *sk, void *data)
|
void *wolfSSL_lh_retrieve(WOLFSSL_STACK *sk, void *data)
|
||||||
@ -50684,7 +50823,8 @@ WOLFSSL_BIGNUM *wolfSSL_BN_mod_inverse(WOLFSSL_BIGNUM *r,
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
#if (defined(WOLFSSL_QT) || defined(OPENSSL_ALL)) && !defined(NO_ASN)
|
#if (defined(WOLFSSL_QT) || defined(OPENSSL_ALL) || defined(OPENSSL_EXTRA)) && \
|
||||||
|
!defined(NO_ASN)
|
||||||
#ifndef NO_BIO
|
#ifndef NO_BIO
|
||||||
static int unprintable_char(char c)
|
static int unprintable_char(char c)
|
||||||
{
|
{
|
||||||
@ -50719,7 +50859,7 @@ int wolfSSL_ASN1_STRING_print(WOLFSSL_BIO *out, WOLFSSL_ASN1_STRING *str)
|
|||||||
return str->length;
|
return str->length;
|
||||||
}
|
}
|
||||||
#endif /* !NO_BIO */
|
#endif /* !NO_BIO */
|
||||||
#endif /* (WOLFSSL_QT || OPENSSL_ALL) && !NO_ASN */
|
#endif /* (WOLFSSL_QT || OPENSSL_ALL || OPENSSL_EXTRA) && !NO_ASN */
|
||||||
|
|
||||||
#if defined(OPENSSL_EXTRA)
|
#if defined(OPENSSL_EXTRA)
|
||||||
int wolfSSL_X509_check_ca(WOLFSSL_X509 *x509)
|
int wolfSSL_X509_check_ca(WOLFSSL_X509 *x509)
|
||||||
|
182
tests/api.c
182
tests/api.c
@ -35886,6 +35886,187 @@ static void test_wolfSSL_sk_GENERAL_NAME(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_wolfSSL_GENERAL_NAME_print(void)
|
||||||
|
{
|
||||||
|
#if defined(OPENSSL_ALL)
|
||||||
|
|
||||||
|
X509* x509;
|
||||||
|
GENERAL_NAME* gn;
|
||||||
|
unsigned char buf[4096];
|
||||||
|
const unsigned char* bufPt;
|
||||||
|
int bytes;
|
||||||
|
XFILE f;
|
||||||
|
STACK_OF(GENERAL_NAME)* sk;
|
||||||
|
BIO* out;
|
||||||
|
unsigned char outbuf[128];
|
||||||
|
|
||||||
|
X509_EXTENSION* ext;
|
||||||
|
AUTHORITY_INFO_ACCESS* aia;
|
||||||
|
ACCESS_DESCRIPTION* ad;
|
||||||
|
|
||||||
|
const unsigned char v4Addr[] = {192,168,53,1};
|
||||||
|
const unsigned char v6Addr[] =
|
||||||
|
{0x20, 0x21, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xff, 0x00, 0x00, 0x42, 0x77, 0x77};
|
||||||
|
const unsigned char email[] =
|
||||||
|
{'i', 'n', 'f', 'o', '@', 'w', 'o', 'l',
|
||||||
|
'f', 's', 's', 'l', '.', 'c', 'o', 'm'};
|
||||||
|
|
||||||
|
const char* dnsStr = "DNS:example.com";
|
||||||
|
const char* uriStr = "URI:http://127.0.0.1:22220";
|
||||||
|
const char* v4addStr = "IP Address:192.168.53.1";
|
||||||
|
const char* v6addStr = "IP Address:2021:DB8:0:0:0:FF00:42:7777";
|
||||||
|
const char* emailStr = "email:info@wolfssl.com";
|
||||||
|
const char* othrStr = "othername:<unsupported>";
|
||||||
|
const char* x400Str = "X400Name:<unsupported>";
|
||||||
|
const char* ediStr = "EdiPartyName:<unsupported>";
|
||||||
|
|
||||||
|
|
||||||
|
printf(testingFmt, "test_wolfSSL_GENERAL_NAME_print()");
|
||||||
|
|
||||||
|
/* BIO to output */
|
||||||
|
AssertNotNull(out = BIO_new(BIO_s_mem()));
|
||||||
|
|
||||||
|
/* test for NULL param */
|
||||||
|
gn = NULL;
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(NULL, NULL), 0);
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(NULL, gn), 0);
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, NULL), 0);
|
||||||
|
|
||||||
|
|
||||||
|
/* test for GEN_DNS */
|
||||||
|
f = XFOPEN(cliCertDerFileExt, "rb");
|
||||||
|
AssertTrue((f != XBADFILE));
|
||||||
|
AssertIntGT((bytes = (int)XFREAD(buf, 1, sizeof(buf), f)), 0);
|
||||||
|
XFCLOSE(f);
|
||||||
|
|
||||||
|
bufPt = buf;
|
||||||
|
AssertNotNull(x509 = d2i_X509(NULL, &bufPt, bytes));
|
||||||
|
AssertNotNull(sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509,
|
||||||
|
NID_subject_alt_name, NULL, NULL));
|
||||||
|
|
||||||
|
AssertNotNull(gn = sk_GENERAL_NAME_value(sk, 0));
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
BIO_read(out, outbuf, sizeof(outbuf));
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, dnsStr, XSTRLEN(dnsStr)), 0);
|
||||||
|
|
||||||
|
sk_GENERAL_NAME_pop_free(sk, GENERAL_NAME_free);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
/* test for GEN_URI */
|
||||||
|
|
||||||
|
f = XFOPEN("./certs/ocsp/root-ca-cert.pem", "rb");
|
||||||
|
AssertTrue((f != XBADFILE));
|
||||||
|
AssertNotNull(x509 = wolfSSL_PEM_read_X509(f, NULL, NULL, NULL));
|
||||||
|
XFCLOSE(f);
|
||||||
|
|
||||||
|
AssertNotNull(ext = wolfSSL_X509_get_ext(x509, 4));
|
||||||
|
aia = (WOLFSSL_AUTHORITY_INFO_ACCESS*)wolfSSL_X509V3_EXT_d2i(ext);
|
||||||
|
AssertNotNull(aia);
|
||||||
|
ad = (WOLFSSL_ACCESS_DESCRIPTION *)wolfSSL_sk_value(aia, 0);
|
||||||
|
|
||||||
|
gn = ad->location;
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, uriStr, XSTRLEN(uriStr)), 0);
|
||||||
|
|
||||||
|
wolfSSL_sk_ACCESS_DESCRIPTION_pop_free(aia, NULL);
|
||||||
|
XFREE(ad, NULL, DYNAMIC_TYPE_X509_EXT);
|
||||||
|
X509_free(x509);
|
||||||
|
|
||||||
|
/* test for GEN_IPADD */
|
||||||
|
|
||||||
|
/* ip v4 address */
|
||||||
|
AssertNotNull(gn = wolfSSL_GENERAL_NAME_new());
|
||||||
|
gn->type = GEN_IPADD;
|
||||||
|
gn->d.iPAddress->length = sizeof(v4Addr);
|
||||||
|
AssertIntEQ(wolfSSL_ASN1_STRING_set(gn->d.iPAddress, v4Addr,
|
||||||
|
sizeof(v4Addr)), 1);
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, v4addStr, XSTRLEN(v4addStr)), 0);
|
||||||
|
|
||||||
|
GENERAL_NAME_free(gn);
|
||||||
|
|
||||||
|
/* ip v6 address */
|
||||||
|
|
||||||
|
AssertNotNull(gn = wolfSSL_GENERAL_NAME_new());
|
||||||
|
gn->type = GEN_IPADD;
|
||||||
|
gn->d.iPAddress->length = sizeof(v6Addr);
|
||||||
|
AssertIntEQ(wolfSSL_ASN1_STRING_set(gn->d.iPAddress, v6Addr,
|
||||||
|
sizeof(v6Addr)), 1);
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, v6addStr, XSTRLEN(v6addStr)), 0);
|
||||||
|
|
||||||
|
GENERAL_NAME_free(gn);
|
||||||
|
|
||||||
|
/* test for GEN_EMAIL */
|
||||||
|
|
||||||
|
AssertNotNull(gn = wolfSSL_GENERAL_NAME_new());
|
||||||
|
gn->type = GEN_EMAIL;
|
||||||
|
gn->d.rfc822Name->length = sizeof(email);
|
||||||
|
AssertIntEQ(wolfSSL_ASN1_STRING_set(gn->d.rfc822Name, email,
|
||||||
|
sizeof(email)), 1);
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, emailStr, XSTRLEN(emailStr)), 0);
|
||||||
|
|
||||||
|
GENERAL_NAME_free(gn);
|
||||||
|
|
||||||
|
/* test for GEN_OTHERNAME */
|
||||||
|
|
||||||
|
AssertNotNull(gn = wolfSSL_GENERAL_NAME_new());
|
||||||
|
gn->type = GEN_OTHERNAME;
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, othrStr, XSTRLEN(othrStr)), 0);
|
||||||
|
|
||||||
|
GENERAL_NAME_free(gn);
|
||||||
|
|
||||||
|
/* test for GEN_X400 */
|
||||||
|
|
||||||
|
AssertNotNull(gn = wolfSSL_GENERAL_NAME_new());
|
||||||
|
gn->type = GEN_X400;
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, x400Str, XSTRLEN(x400Str)), 0);
|
||||||
|
|
||||||
|
GENERAL_NAME_free(gn);
|
||||||
|
|
||||||
|
/* test for GEN_EDIPARTY */
|
||||||
|
|
||||||
|
AssertNotNull(gn = wolfSSL_GENERAL_NAME_new());
|
||||||
|
gn->type = GEN_EDIPARTY;
|
||||||
|
|
||||||
|
AssertIntEQ(GENERAL_NAME_print(out, gn), 1);
|
||||||
|
XMEMSET(outbuf,0,sizeof(outbuf));
|
||||||
|
AssertIntGT(BIO_read(out, outbuf, sizeof(outbuf)), 0);
|
||||||
|
AssertIntEQ(XSTRNCMP((const char*)outbuf, ediStr, XSTRLEN(ediStr)), 0);
|
||||||
|
|
||||||
|
GENERAL_NAME_free(gn);
|
||||||
|
|
||||||
|
BIO_free(out);
|
||||||
|
|
||||||
|
printf(resultFmt, passed);
|
||||||
|
#endif /* OPENSSL_ALL */
|
||||||
|
}
|
||||||
|
|
||||||
static void test_wolfSSL_MD4(void)
|
static void test_wolfSSL_MD4(void)
|
||||||
{
|
{
|
||||||
#if defined(OPENSSL_EXTRA) && !defined(NO_MD4)
|
#if defined(OPENSSL_EXTRA) && !defined(NO_MD4)
|
||||||
@ -47015,6 +47196,7 @@ void ApiTest(void)
|
|||||||
test_wolfSSL_ticket_keys();
|
test_wolfSSL_ticket_keys();
|
||||||
test_wolfSSL_DES_ecb_encrypt();
|
test_wolfSSL_DES_ecb_encrypt();
|
||||||
test_wolfSSL_sk_GENERAL_NAME();
|
test_wolfSSL_sk_GENERAL_NAME();
|
||||||
|
test_wolfSSL_GENERAL_NAME_print();
|
||||||
test_wolfSSL_MD4();
|
test_wolfSSL_MD4();
|
||||||
test_wolfSSL_RSA();
|
test_wolfSSL_RSA();
|
||||||
test_wolfSSL_RSA_DER();
|
test_wolfSSL_RSA_DER();
|
||||||
|
@ -1233,6 +1233,7 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_
|
|||||||
|
|
||||||
#define GENERAL_NAME_new wolfSSL_GENERAL_NAME_new
|
#define GENERAL_NAME_new wolfSSL_GENERAL_NAME_new
|
||||||
#define GENERAL_NAME_free wolfSSL_GENERAL_NAME_free
|
#define GENERAL_NAME_free wolfSSL_GENERAL_NAME_free
|
||||||
|
#define GENERAL_NAME_print wolfSSL_GENERAL_NAME_print
|
||||||
#define sk_GENERAL_NAME_push wolfSSL_sk_GENERAL_NAME_push
|
#define sk_GENERAL_NAME_push wolfSSL_sk_GENERAL_NAME_push
|
||||||
#define sk_GENERAL_NAME_value wolfSSL_sk_GENERAL_NAME_value
|
#define sk_GENERAL_NAME_value wolfSSL_sk_GENERAL_NAME_value
|
||||||
#define SSL_SESSION_get_ex_data wolfSSL_SESSION_get_ex_data
|
#define SSL_SESSION_get_ex_data wolfSSL_SESSION_get_ex_data
|
||||||
|
@ -1325,6 +1325,8 @@ WOLFSSL_API void wolfSSL_sk_GENERAL_NAME_pop_free(WOLFSSL_STACK* sk,
|
|||||||
void (*f) (WOLFSSL_GENERAL_NAME*));
|
void (*f) (WOLFSSL_GENERAL_NAME*));
|
||||||
WOLFSSL_API void wolfSSL_sk_GENERAL_NAME_free(WOLFSSL_STACK* sk);
|
WOLFSSL_API void wolfSSL_sk_GENERAL_NAME_free(WOLFSSL_STACK* sk);
|
||||||
WOLFSSL_API void wolfSSL_GENERAL_NAMES_free(WOLFSSL_GENERAL_NAMES* name);
|
WOLFSSL_API void wolfSSL_GENERAL_NAMES_free(WOLFSSL_GENERAL_NAMES* name);
|
||||||
|
WOLFSSL_API int wolfSSL_GENERAL_NAME_print(WOLFSSL_BIO* out,
|
||||||
|
WOLFSSL_GENERAL_NAME* name);
|
||||||
WOLFSSL_API int wolfSSL_sk_ACCESS_DESCRIPTION_num(WOLFSSL_STACK* sk);
|
WOLFSSL_API int wolfSSL_sk_ACCESS_DESCRIPTION_num(WOLFSSL_STACK* sk);
|
||||||
WOLFSSL_API void wolfSSL_AUTHORITY_INFO_ACCESS_free(
|
WOLFSSL_API void wolfSSL_AUTHORITY_INFO_ACCESS_free(
|
||||||
WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION)* sk);
|
WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION)* sk);
|
||||||
|
Reference in New Issue
Block a user