forked from wolfSSL/wolfssl
OpenSSL Compat layer
Implement WOLFSSL_CONF_VALUE: - wolfSSL_CONF_VALUE_new - wolfSSL_CONF_VALUE_new_values - wolfSSL_CONF_add_string - wolfSSL_X509V3_conf_free - wolfSSL_sk_CONF_VALUE_push - wolfSSL_NCONF_load - wolfSSL_NCONF_free - wolfSSL_CONF_new_section - wolfSSL_CONF_get_section Implment some buffer functions - wolfSSL_strlcat - wolfSSL_strlcpy
This commit is contained in:
413
src/ssl.c
413
src/ssl.c
@@ -19191,9 +19191,174 @@ int wolfSSL_CONF_modules_load(const WOLFSSL_CONF *cnf, const char *appname,
|
|||||||
WOLFSSL_ENTER("wolfSSL_CONF_modules_load");
|
WOLFSSL_ENTER("wolfSSL_CONF_modules_load");
|
||||||
WOLFSSL_MSG("All wolfSSL modules are already compiled in. "
|
WOLFSSL_MSG("All wolfSSL modules are already compiled in. "
|
||||||
"wolfSSL_CONF_modules_load doesn't load anything new.");
|
"wolfSSL_CONF_modules_load doesn't load anything new.");
|
||||||
|
(void)cnf;
|
||||||
|
(void)appname;
|
||||||
|
(void)flags;
|
||||||
return WOLFSSL_SUCCESS;
|
return WOLFSSL_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WOLFSSL_CONF_VALUE *wolfSSL_CONF_VALUE_new(void)
|
||||||
|
{
|
||||||
|
WOLFSSL_CONF_VALUE* ret;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("wolfSSL_CONF_new");
|
||||||
|
|
||||||
|
ret = (WOLFSSL_CONF_VALUE*)XMALLOC(sizeof(WOLFSSL_CONF_VALUE),
|
||||||
|
NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (ret)
|
||||||
|
XMEMSET(ret, 0, sizeof(WOLFSSL_CONF_VALUE));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_CONF_VALUE *wolfSSL_CONF_VALUE_new_values(char* section,
|
||||||
|
char* name, char* value)
|
||||||
|
{
|
||||||
|
WOLFSSL_CONF_VALUE* ret;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("wolfSSL_CONF_VALUE_new_values");
|
||||||
|
|
||||||
|
if (!(ret = wolfSSL_CONF_VALUE_new())) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_CONF_VALUE_new error");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (section) {
|
||||||
|
len = XSTRLEN(section);
|
||||||
|
ret->section = (char*)XMALLOC(len, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (!ret->section) {
|
||||||
|
WOLFSSL_MSG("malloc error");
|
||||||
|
wolfSSL_X509V3_conf_free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name) {
|
||||||
|
len = XSTRLEN(name);
|
||||||
|
ret->name = (char*)XMALLOC(len, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (!ret->name) {
|
||||||
|
WOLFSSL_MSG("malloc error");
|
||||||
|
wolfSSL_X509V3_conf_free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value) {
|
||||||
|
len = XSTRLEN(value);
|
||||||
|
ret->value = (char*)XMALLOC(len, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (!ret->value) {
|
||||||
|
WOLFSSL_MSG("malloc error");
|
||||||
|
wolfSSL_X509V3_conf_free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wolfSSL_CONF_add_string(WOLFSSL_CONF *conf,
|
||||||
|
WOLFSSL_CONF_VALUE *section, WOLFSSL_CONF_VALUE *value)
|
||||||
|
{
|
||||||
|
WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *sk = NULL;
|
||||||
|
|
||||||
|
if (!conf || !section || !value) {
|
||||||
|
WOLFSSL_MSG("Bad parameter");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
sk = (WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *)section->value;
|
||||||
|
value->section = section->section;
|
||||||
|
|
||||||
|
if (wolfSSL_sk_CONF_VALUE_push(sk, value) != WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_push error");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
if (wolfSSL_sk_CONF_VALUE_push(conf->data, value) != WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_push error");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return WOLFSSL_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_CONF_VALUE *wolfSSL_CONF_new_section(WOLFSSL_CONF *conf,
|
||||||
|
const char *section)
|
||||||
|
{
|
||||||
|
WOLFSSL_CONF_VALUE* ret = NULL;
|
||||||
|
WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *sk = NULL;
|
||||||
|
int slen;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("wolfSSL_CONF_new_section");
|
||||||
|
|
||||||
|
if (!conf || !section) {
|
||||||
|
WOLFSSL_MSG("Bad parameter");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
slen = XSTRLEN(section);
|
||||||
|
|
||||||
|
if (!(ret = wolfSSL_CONF_VALUE_new())) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_CONF_new error");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(ret->section = (char*)XMALLOC(slen+1, NULL, DYNAMIC_TYPE_OPENSSL))) {
|
||||||
|
WOLFSSL_MSG("section malloc error");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(sk = wolfSSL_sk_CONF_VALUE_new(NULL))) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_new error");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret->value = (char*)sk;
|
||||||
|
|
||||||
|
if (wolfSSL_sk_CONF_VALUE_push(conf->data, ret) != WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_sk_CONF_VALUE_push error");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
error:
|
||||||
|
if (ret) {
|
||||||
|
/* NULL so that wolfSSL_X509V3_conf_free doesn't attempt to free it */
|
||||||
|
ret->value = NULL;
|
||||||
|
wolfSSL_X509V3_conf_free(ret);
|
||||||
|
}
|
||||||
|
if (sk) {
|
||||||
|
wolfSSL_sk_CONF_VALUE_free(sk);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_CONF_VALUE *wolfSSL_CONF_get_section(WOLFSSL_CONF *conf,
|
||||||
|
const char *section)
|
||||||
|
{
|
||||||
|
WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *sk = NULL;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("wolfSSL_CONF_get_section");
|
||||||
|
|
||||||
|
if (!conf || !section) {
|
||||||
|
WOLFSSL_MSG("Bad parameter");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sk = conf->data;
|
||||||
|
|
||||||
|
while (sk) {
|
||||||
|
WOLFSSL_CONF_VALUE* val = sk->data.conf;
|
||||||
|
if (val) {
|
||||||
|
if (XSTRCMP(section, val->section) == 0) {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sk = sk->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
WOLFSSL_CONF *wolfSSL_NCONF_new(void *meth)
|
WOLFSSL_CONF *wolfSSL_NCONF_new(void *meth)
|
||||||
{
|
{
|
||||||
WOLFSSL_CONF* ret;
|
WOLFSSL_CONF* ret;
|
||||||
@@ -19279,6 +19444,191 @@ WOLFSSL_STACK *wolfSSL_NCONF_get_section(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SKIP_WHITESPACE(idx, max_idx) \
|
||||||
|
while (idx < max_idx && (*idx == ' ' || *idx == '\t')) \
|
||||||
|
{idx++;}
|
||||||
|
int wolfSSL_NCONF_load(WOLFSSL_CONF *conf, const char *file, long *eline)
|
||||||
|
{
|
||||||
|
int ret = WOLFSSL_FAILURE;
|
||||||
|
WOLFSSL_BIO *in = NULL;
|
||||||
|
char* buf = NULL;
|
||||||
|
char* idx = NULL;
|
||||||
|
char* bufEnd = NULL;
|
||||||
|
CONF_VALUE* section = NULL;
|
||||||
|
long line = 0;
|
||||||
|
int bufLen = 0;
|
||||||
|
|
||||||
|
if (!conf || !file) {
|
||||||
|
WOLFSSL_MSG("Bad parameter");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open file */
|
||||||
|
if (!(in = wolfSSL_BIO_new_file(file, "rb"))) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_BIO_new_file error");
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read file */
|
||||||
|
bufLen = wolfSSL_BIO_get_len(in);
|
||||||
|
if (bufLen <= 0) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_BIO_get_len error");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (!(buf = (char*)XMALLOC(bufLen, NULL, DYNAMIC_TYPE_TMP_BUFFER))) {
|
||||||
|
WOLFSSL_MSG("malloc error");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (wolfSSL_BIO_read(in, buf, bufLen) != WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_BIO_read error");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(section = wolfSSL_CONF_new_section(conf, "default"))) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_CONF_new_section error");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LETS START READING SOME CONFIGS */
|
||||||
|
idx = buf;
|
||||||
|
bufEnd = buf + bufLen;
|
||||||
|
while (idx < bufEnd) {
|
||||||
|
char* lineEnd = XSTRNSTR(idx, "\n", bufEnd - idx);
|
||||||
|
char* maxIdx;
|
||||||
|
if (!lineEnd)
|
||||||
|
lineEnd = bufEnd; /* Last line in file */
|
||||||
|
maxIdx = XSTRNSTR(idx, "#", lineEnd - idx);
|
||||||
|
if (!maxIdx)
|
||||||
|
maxIdx = lineEnd;
|
||||||
|
line++;
|
||||||
|
SKIP_WHITESPACE(idx, maxIdx);
|
||||||
|
if (idx == maxIdx) {
|
||||||
|
/* Empty line */
|
||||||
|
idx = lineEnd + 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*idx == '[') {
|
||||||
|
/* New section. Spaces not allowed in section name. */
|
||||||
|
char* sectionName;
|
||||||
|
int sectionNameLen;
|
||||||
|
|
||||||
|
SKIP_WHITESPACE(idx, maxIdx);
|
||||||
|
sectionName = idx;
|
||||||
|
/* Find end of section name */
|
||||||
|
while (idx < maxIdx && *idx != ' ' && *idx != ']')
|
||||||
|
idx++;
|
||||||
|
sectionNameLen = idx - sectionName;
|
||||||
|
SKIP_WHITESPACE(idx, maxIdx);
|
||||||
|
|
||||||
|
if (*idx != ']') {
|
||||||
|
WOLFSSL_MSG("Section definition error. "
|
||||||
|
"Closing brace not found.");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
sectionName[sectionNameLen] = '\0';
|
||||||
|
if (!(section = wolfSSL_CONF_get_section(conf, sectionName)))
|
||||||
|
section = wolfSSL_CONF_new_section(conf, sectionName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
char* name;
|
||||||
|
int nameLen;
|
||||||
|
char* value;
|
||||||
|
int valueLen;
|
||||||
|
WOLFSSL_CONF_VALUE* newVal = NULL;
|
||||||
|
|
||||||
|
SKIP_WHITESPACE(idx, maxIdx);
|
||||||
|
name = idx;
|
||||||
|
/* Find end of name */
|
||||||
|
while (idx < maxIdx && *idx != ' ' && *idx != '=')
|
||||||
|
idx++;
|
||||||
|
nameLen = idx - name;
|
||||||
|
SKIP_WHITESPACE(idx, maxIdx);
|
||||||
|
if (*idx != '=') {
|
||||||
|
WOLFSSL_MSG("Missing equals sign");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
|
SKIP_WHITESPACE(idx, maxIdx);
|
||||||
|
value = idx;
|
||||||
|
/* Find end of value */
|
||||||
|
idx = maxIdx;
|
||||||
|
while (*idx == ' ' || *idx == '\t')
|
||||||
|
idx--;
|
||||||
|
valueLen = idx - value;
|
||||||
|
|
||||||
|
/* Sanity checks */
|
||||||
|
if (nameLen <= 0 || valueLen <= 0) {
|
||||||
|
WOLFSSL_MSG("Sanity checks failed");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
name[nameLen] = '\0';
|
||||||
|
value[valueLen] = '\0';
|
||||||
|
|
||||||
|
if (!(newVal = wolfSSL_CONF_VALUE_new_values(section->section,
|
||||||
|
name, value))) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_CONF_VALUE_new_values error");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wolfSSL_CONF_add_string(conf, section, newVal) !=
|
||||||
|
WOLFSSL_SUCCESS) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_CONF_add_string error");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
idx = lineEnd + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = WOLFSSL_SUCCESS;
|
||||||
|
cleanup:
|
||||||
|
if (in)
|
||||||
|
wolfSSL_BIO_free(in);
|
||||||
|
if (buf)
|
||||||
|
XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (eline)
|
||||||
|
*eline = line;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wolfSSL_NCONF_free(WOLFSSL_CONF *conf)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_NCONF_free");
|
||||||
|
if (conf) {
|
||||||
|
wolfSSL_sk_CONF_VALUE_free(conf->data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wolfSSL_X509V3_conf_free(WOLFSSL_CONF_VALUE *val)
|
||||||
|
{
|
||||||
|
WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *sk = NULL;
|
||||||
|
|
||||||
|
if (val) {
|
||||||
|
if (val->name) {
|
||||||
|
/* Not a section. Don't free section as it is a shared pointer. */
|
||||||
|
XFREE(val->name, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (val->value)
|
||||||
|
XFREE(val->value, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Section so val->value is a stack */
|
||||||
|
if (val->section)
|
||||||
|
XFREE(val->section, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
/* Only free the stack structures. The contained conf values
|
||||||
|
* will be freed in wolfSSL_NCONF_free */
|
||||||
|
sk = (WOLF_STACK_OF(WOLFSSL_CONF_VALUE)*)val->value;
|
||||||
|
while (sk) {
|
||||||
|
WOLF_STACK_OF(WOLFSSL_CONF_VALUE) *tmp = sk->next;
|
||||||
|
XFREE(sk, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
sk = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
XFREE(val, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WOLFSSL_STACK *wolfSSL_sk_CONF_VALUE_new(wolf_sk_compare_cb compFunc)
|
WOLFSSL_STACK *wolfSSL_sk_CONF_VALUE_new(wolf_sk_compare_cb compFunc)
|
||||||
{
|
{
|
||||||
WOLFSSL_STACK* ret;
|
WOLFSSL_STACK* ret;
|
||||||
@@ -19310,6 +19660,7 @@ void wolfSSL_sk_CONF_VALUE_free(WOLF_STACK_OF(WOLFSSL_CONF_VALUE)* sk)
|
|||||||
while (node) {
|
while (node) {
|
||||||
tmp = node;
|
tmp = node;
|
||||||
node = node->next;
|
node = node->next;
|
||||||
|
wolfSSL_X509V3_conf_free(tmp->data.conf);
|
||||||
XFREE(tmp, NULL, DYNAMIC_TYPE_OPENSSL);
|
XFREE(tmp, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19333,6 +19684,19 @@ WOLFSSL_CONF_VALUE *wolfSSL_sk_CONF_VALUE_value(const WOLFSSL_STACK *sk, int i)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return 1 on success 0 on fail */
|
||||||
|
int wolfSSL_sk_CONF_VALUE_push(WOLF_STACK_OF(WOLFSSL_CONF_VALUE)* sk,
|
||||||
|
WOLFSSL_CONF_VALUE* val)
|
||||||
|
{
|
||||||
|
WOLFSSL_ENTER("wolfSSL_sk_CONF_VALUE_push");
|
||||||
|
|
||||||
|
if (sk == NULL || val == NULL) {
|
||||||
|
return WOLFSSL_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wolfSSL_sk_push(sk, val);
|
||||||
|
}
|
||||||
|
|
||||||
WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* wolfSSL_sk_X509_EXTENSION_new_null(void)
|
WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* wolfSSL_sk_X509_EXTENSION_new_null(void)
|
||||||
{
|
{
|
||||||
WOLFSSL_STACK* sk = wolfSSL_sk_new_node(NULL);
|
WOLFSSL_STACK* sk = wolfSSL_sk_new_node(NULL);
|
||||||
@@ -41263,6 +41627,37 @@ void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf)
|
|||||||
}
|
}
|
||||||
/* End Functions for openssl/buffer.h */
|
/* End Functions for openssl/buffer.h */
|
||||||
|
|
||||||
|
size_t wolfSSL_strlcpy(char *dst, const char *src, size_t dstSize)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (!dstSize)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Always have to leave a space for NULL */
|
||||||
|
for (i = 0; i < (dstSize - 1) && *src != '\0'; i++) {
|
||||||
|
*dst++ = *src++;
|
||||||
|
}
|
||||||
|
*dst = '\0';
|
||||||
|
|
||||||
|
return i; /* return length without NULL */
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wolfSSL_strlcat(char *dst, const char *src, size_t dstSize)
|
||||||
|
{
|
||||||
|
size_t dstLen;
|
||||||
|
|
||||||
|
if (!dstSize)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
dstLen = XSTRLEN(dst);
|
||||||
|
|
||||||
|
if (dstSize < dstLen)
|
||||||
|
return dstLen + XSTRLEN(src);
|
||||||
|
|
||||||
|
return dstLen + wolfSSL_strlcpy(dst + dstLen, src, dstSize - dstLen);
|
||||||
|
|
||||||
|
}
|
||||||
#endif /* OPENSSL_EXTRA */
|
#endif /* OPENSSL_EXTRA */
|
||||||
|
|
||||||
|
|
||||||
@@ -45627,7 +46022,23 @@ WOLFSSL_X509* wolfSSL_X509_dup(WOLFSSL_X509 *x)
|
|||||||
return wolfSSL_X509_d2i(NULL, x->derCert->buffer, x->derCert->length);
|
return wolfSSL_X509_d2i(NULL, x->derCert->buffer, x->derCert->length);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
|
char* wolfSSL_sk_WOLFSSL_STRING_value(WOLF_STACK_OF(WOLFSSL_STRING)* strings,
|
||||||
|
int idx)
|
||||||
|
{
|
||||||
|
for (; idx > 0 && strings != NULL; idx--)
|
||||||
|
strings = strings->next;
|
||||||
|
if (strings == NULL)
|
||||||
|
return NULL;
|
||||||
|
return strings->data.string;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wolfSSL_sk_WOLFSSL_STRING_num(WOLF_STACK_OF(WOLFSSL_STRING)* strings)
|
||||||
|
{
|
||||||
|
if (strings)
|
||||||
|
return strings->num;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* WOLFSSL_NGINX || WOLFSSL_HAPROXY || OPENSSL_EXTRA || OPENSSL_ALL */
|
||||||
|
|
||||||
#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || \
|
#if defined(OPENSSL_ALL) || defined(WOLFSSL_NGINX) || \
|
||||||
defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY)
|
defined(WOLFSSL_HAPROXY) || defined(HAVE_LIGHTY)
|
||||||
|
@@ -75,10 +75,13 @@
|
|||||||
#define V_ASN1_UTF8STRING 12
|
#define V_ASN1_UTF8STRING 12
|
||||||
#define V_ASN1_SEQUENCE 16
|
#define V_ASN1_SEQUENCE 16
|
||||||
#define V_ASN1_SET 17
|
#define V_ASN1_SET 17
|
||||||
|
#define V_ASN1_PRINTABLESTRING 19
|
||||||
|
#define V_ASN1_T61STRING 20
|
||||||
#define V_ASN1_IA5STRING 22
|
#define V_ASN1_IA5STRING 22
|
||||||
#define V_ASN1_UTCTIME 23
|
#define V_ASN1_UTCTIME 23
|
||||||
#define V_ASN1_GENERALIZEDTIME 24
|
#define V_ASN1_GENERALIZEDTIME 24
|
||||||
#define V_ASN1_PRINTABLESTRING 19
|
#define V_ASN1_UNIVERSALSTRING 28
|
||||||
|
#define V_ASN1_BMPSTRING 30
|
||||||
|
|
||||||
|
|
||||||
#define V_ASN1_CONSTRUCTED 0x20
|
#define V_ASN1_CONSTRUCTED 0x20
|
||||||
|
@@ -34,6 +34,8 @@
|
|||||||
WOLFSSL_API WOLFSSL_BUF_MEM* wolfSSL_BUF_MEM_new(void);
|
WOLFSSL_API WOLFSSL_BUF_MEM* wolfSSL_BUF_MEM_new(void);
|
||||||
WOLFSSL_API int wolfSSL_BUF_MEM_grow(WOLFSSL_BUF_MEM* buf, size_t len);
|
WOLFSSL_API int wolfSSL_BUF_MEM_grow(WOLFSSL_BUF_MEM* buf, size_t len);
|
||||||
WOLFSSL_API void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf);
|
WOLFSSL_API void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf);
|
||||||
|
WOLFSSL_API size_t wolfSSL_strlcpy(char *dst, const char *src, size_t dstSize);
|
||||||
|
WOLFSSL_API size_t wolfSSL_strlcat(char *dst, const char *src, size_t dstSize);
|
||||||
|
|
||||||
|
|
||||||
#define BUF_MEM_new wolfSSL_BUF_MEM_new
|
#define BUF_MEM_new wolfSSL_BUF_MEM_new
|
||||||
@@ -41,6 +43,8 @@ WOLFSSL_API void wolfSSL_BUF_MEM_free(WOLFSSL_BUF_MEM* buf);
|
|||||||
#define BUF_MEM_free wolfSSL_BUF_MEM_free
|
#define BUF_MEM_free wolfSSL_BUF_MEM_free
|
||||||
|
|
||||||
#define BUF_strdup strdup
|
#define BUF_strdup strdup
|
||||||
|
#define BUF_strlcpy wolfSSL_strlcpy
|
||||||
|
#define BUF_strlcat wolfSSL_strlcat
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@@ -49,35 +49,55 @@ typedef WOLFSSL_CONF CONF;
|
|||||||
typedef WOLFSSL_CONF_VALUE CONF_VALUE;
|
typedef WOLFSSL_CONF_VALUE CONF_VALUE;
|
||||||
typedef WOLFSSL_INIT_SETTINGS OPENSSL_INIT_SETTINGS;
|
typedef WOLFSSL_INIT_SETTINGS OPENSSL_INIT_SETTINGS;
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_VALUE_new(void);
|
||||||
|
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_VALUE_new_values(char* section,
|
||||||
|
char* name, char* value);
|
||||||
|
WOLFSSL_API int wolfSSL_CONF_add_string(WOLFSSL_CONF *conf,
|
||||||
|
WOLFSSL_CONF_VALUE *section, WOLFSSL_CONF_VALUE *value);
|
||||||
|
WOLFSSL_API void wolfSSL_X509V3_conf_free(WOLFSSL_CONF_VALUE *val);
|
||||||
|
|
||||||
WOLFSSL_API WOLFSSL_STACK *wolfSSL_sk_CONF_VALUE_new(wolf_sk_compare_cb compFunc);
|
WOLFSSL_API WOLFSSL_STACK *wolfSSL_sk_CONF_VALUE_new(wolf_sk_compare_cb compFunc);
|
||||||
WOLFSSL_API void wolfSSL_sk_CONF_VALUE_free(struct WOLFSSL_STACK *sk);
|
WOLFSSL_API void wolfSSL_sk_CONF_VALUE_free(struct WOLFSSL_STACK *sk);
|
||||||
WOLFSSL_API int wolfSSL_sk_CONF_VALUE_num(const WOLFSSL_STACK *sk);
|
WOLFSSL_API int wolfSSL_sk_CONF_VALUE_num(const WOLFSSL_STACK *sk);
|
||||||
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_sk_CONF_VALUE_value(
|
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_sk_CONF_VALUE_value(
|
||||||
const struct WOLFSSL_STACK *sk, int i);
|
const struct WOLFSSL_STACK *sk, int i);
|
||||||
|
WOLFSSL_API int wolfSSL_sk_CONF_VALUE_push(WOLF_STACK_OF(WOLFSSL_CONF_VALUE)* sk,
|
||||||
|
WOLFSSL_CONF_VALUE* val);
|
||||||
|
|
||||||
WOLFSSL_API WOLFSSL_CONF *wolfSSL_NCONF_new(void *meth);
|
WOLFSSL_API WOLFSSL_CONF *wolfSSL_NCONF_new(void *meth);
|
||||||
WOLFSSL_API char *wolfSSL_NCONF_get_string(const WOLFSSL_CONF *conf,
|
WOLFSSL_API char *wolfSSL_NCONF_get_string(const WOLFSSL_CONF *conf,
|
||||||
const char *group, const char *name);
|
const char *group, const char *name);
|
||||||
WOLFSSL_API WOLFSSL_STACK *wolfSSL_NCONF_get_section(
|
WOLFSSL_API WOLFSSL_STACK *wolfSSL_NCONF_get_section(
|
||||||
const WOLFSSL_CONF *conf, const char *section);
|
const WOLFSSL_CONF *conf, const char *section);
|
||||||
|
WOLFSSL_API int wolfSSL_NCONF_load(WOLFSSL_CONF *conf, const char *file, long *eline);
|
||||||
|
WOLFSSL_API void wolfSSL_NCONF_free(WOLFSSL_CONF *conf);
|
||||||
|
|
||||||
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_lh_WOLFSSL_CONF_VALUE_retrieve(
|
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_lh_WOLFSSL_CONF_VALUE_retrieve(
|
||||||
WOLF_LHASH_OF(WOLFSSL_CONF_VALUE) *sk, WOLFSSL_CONF_VALUE *data);
|
WOLF_LHASH_OF(WOLFSSL_CONF_VALUE) *sk, WOLFSSL_CONF_VALUE *data);
|
||||||
|
|
||||||
WOLFSSL_API int wolfSSL_CONF_modules_load(const WOLFSSL_CONF *cnf, const char *appname,
|
WOLFSSL_API int wolfSSL_CONF_modules_load(const WOLFSSL_CONF *cnf, const char *appname,
|
||||||
unsigned long flags);
|
unsigned long flags);
|
||||||
|
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_new_section(WOLFSSL_CONF *conf,
|
||||||
|
const char *section);
|
||||||
|
WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_get_section(WOLFSSL_CONF *conf,
|
||||||
|
const char *section);
|
||||||
|
|
||||||
#define sk_CONF_VALUE_new wolfSSL_sk_CONF_VALUE_new
|
#define sk_CONF_VALUE_new wolfSSL_sk_CONF_VALUE_new
|
||||||
#define sk_CONF_VALUE_free wolfSSL_sk_CONF_VALUE_free
|
#define sk_CONF_VALUE_free wolfSSL_sk_CONF_VALUE_free
|
||||||
|
#define sk_CONF_VALUE_pop_free(a,b) wolfSSL_sk_CONF_VALUE_free(a)
|
||||||
#define sk_CONF_VALUE_num wolfSSL_sk_CONF_VALUE_num
|
#define sk_CONF_VALUE_num wolfSSL_sk_CONF_VALUE_num
|
||||||
#define sk_CONF_VALUE_value wolfSSL_sk_CONF_VALUE_value
|
#define sk_CONF_VALUE_value wolfSSL_sk_CONF_VALUE_value
|
||||||
|
|
||||||
#define lh_CONF_VALUE_retrieve wolfSSL_lh_WOLFSSL_CONF_VALUE_retrieve
|
#define lh_CONF_VALUE_retrieve wolfSSL_lh_WOLFSSL_CONF_VALUE_retrieve
|
||||||
|
#define lh_CONF_VALUE_insert wolfSSL_sk_CONF_VALUE_push
|
||||||
|
|
||||||
#define NCONF_new wolfSSL_NCONF_new
|
#define NCONF_new wolfSSL_NCONF_new
|
||||||
#define NCONF_get_string wolfSSL_NCONF_get_string
|
#define NCONF_get_string wolfSSL_NCONF_get_string
|
||||||
#define NCONF_get_section wolfSSL_NCONF_get_section
|
#define NCONF_get_section wolfSSL_NCONF_get_section
|
||||||
|
|
||||||
|
#define CONF_modules_load wolfSSL_CONF_modules_load
|
||||||
|
|
||||||
|
#define X509V3_conf_free wolfSSL_X509V3_conf_free
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
@@ -32,23 +32,28 @@
|
|||||||
|
|
||||||
#ifdef OPENSSL_ALL
|
#ifdef OPENSSL_ALL
|
||||||
#define IMPLEMENT_LHASH_HASH_FN(name, type) \
|
#define IMPLEMENT_LHASH_HASH_FN(name, type) \
|
||||||
unsigned long name##_LHASH_HASH(const void *arg) \
|
unsigned long wolfSSL_##name##_LHASH_HASH(const void *arg) \
|
||||||
{ \
|
{ \
|
||||||
const o_type *a = arg; \
|
const type *a = arg; \
|
||||||
return name##_hash(a); \
|
return name##_hash(a); \
|
||||||
}
|
}
|
||||||
#define IMPLEMENT_LHASH_COMP_FN(name, type) \
|
#define IMPLEMENT_LHASH_COMP_FN(name, type) \
|
||||||
int name##_LHASH_COMP(const void *p1, const void *p2) \
|
int wolfSSL_##name##_LHASH_COMP(const void *p1, const void *p2) \
|
||||||
{ \
|
{ \
|
||||||
const type *_p1 = p1; \
|
const type *_p1 = p1; \
|
||||||
const type *_p2 = p2; \
|
const type *_p2 = p2; \
|
||||||
return name##_cmp(_p1, _p2); \
|
return name##_cmp(_p1, _p2); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define LHASH_HASH_FN(name) wolfSSL_##name##_LHASH_HASH
|
||||||
|
#define LHASH_COMP_FN(name) wolfSSL_##name##_LHASH_COMP
|
||||||
|
|
||||||
WOLFSSL_API unsigned long wolfSSL_LH_strhash(const char *str);
|
WOLFSSL_API unsigned long wolfSSL_LH_strhash(const char *str);
|
||||||
|
|
||||||
WOLFSSL_API void *wolfSSL_lh_retrieve(WOLFSSL_STACK *sk, void *data);
|
WOLFSSL_API void *wolfSSL_lh_retrieve(WOLFSSL_STACK *sk, void *data);
|
||||||
|
|
||||||
|
#define lh_strhash wolfSSL_LH_strhash
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@@ -402,6 +402,8 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
|
|||||||
#define X509_get_ext_d2i wolfSSL_X509_get_ext_d2i
|
#define X509_get_ext_d2i wolfSSL_X509_get_ext_d2i
|
||||||
#define X509V3_EXT_i2d wolfSSL_X509V3_EXT_i2d
|
#define X509V3_EXT_i2d wolfSSL_X509V3_EXT_i2d
|
||||||
#define X509_get0_extensions wolfSSL_X509_get0_extensions
|
#define X509_get0_extensions wolfSSL_X509_get0_extensions
|
||||||
|
#define X509_get_extensions wolfSSL_X509_get0_extensions
|
||||||
|
#define X509_REQ_get_extensions wolfSSL_X509_get0_extensions
|
||||||
#define X509_get_ext wolfSSL_X509_get_ext
|
#define X509_get_ext wolfSSL_X509_get_ext
|
||||||
#define X509_get_ext_by_NID wolfSSL_X509_get_ext_by_NID
|
#define X509_get_ext_by_NID wolfSSL_X509_get_ext_by_NID
|
||||||
#define X509_get_issuer_name wolfSSL_X509_get_issuer_name
|
#define X509_get_issuer_name wolfSSL_X509_get_issuer_name
|
||||||
@@ -1222,7 +1224,11 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_
|
|||||||
#define SSL_CTX_set_tlsext_ticket_key_cb wolfSSL_CTX_set_tlsext_ticket_key_cb
|
#define SSL_CTX_set_tlsext_ticket_key_cb wolfSSL_CTX_set_tlsext_ticket_key_cb
|
||||||
#define SSL_CTX_set_tlsext_status_cb wolfSSL_CTX_set_tlsext_status_cb
|
#define SSL_CTX_set_tlsext_status_cb wolfSSL_CTX_set_tlsext_status_cb
|
||||||
#define SSL_CTX_get_extra_chain_certs wolfSSL_CTX_get_extra_chain_certs
|
#define SSL_CTX_get_extra_chain_certs wolfSSL_CTX_get_extra_chain_certs
|
||||||
|
#define sk_OPENSSL_STRING_num wolfSSL_sk_WOLFSSL_STRING_num
|
||||||
#define sk_OPENSSL_STRING_value wolfSSL_sk_WOLFSSL_STRING_value
|
#define sk_OPENSSL_STRING_value wolfSSL_sk_WOLFSSL_STRING_value
|
||||||
|
#define sk_OPENSSL_PSTRING_num wolfSSL_sk_WOLFSSL_STRING_num
|
||||||
|
#define sk_OPENSSL_PSTRING_value wolfSSL_sk_WOLFSSL_STRING_value
|
||||||
|
#define sk_OPENSSL_STRING_free wolfSSL_sk_free
|
||||||
#define SSL_get0_alpn_selected wolfSSL_get0_alpn_selected
|
#define SSL_get0_alpn_selected wolfSSL_get0_alpn_selected
|
||||||
#define SSL_select_next_proto wolfSSL_select_next_proto
|
#define SSL_select_next_proto wolfSSL_select_next_proto
|
||||||
#define SSL_CTX_set_alpn_select_cb wolfSSL_CTX_set_alpn_select_cb
|
#define SSL_CTX_set_alpn_select_cb wolfSSL_CTX_set_alpn_select_cb
|
||||||
|
@@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
struct WOLFSSL_TXT_DB {
|
struct WOLFSSL_TXT_DB {
|
||||||
WOLF_STACK_OF(WOLFSSL_STRING) *data;
|
WOLF_STACK_OF(WOLFSSL_STRING) *data;
|
||||||
|
WOLF_LHASH_OF(WOLFSSL_STRING) **index;
|
||||||
|
long error;
|
||||||
|
long arg1;
|
||||||
|
long arg2;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct WOLFSSL_TXT_DB TXT_DB;
|
typedef struct WOLFSSL_TXT_DB TXT_DB;
|
||||||
|
@@ -25,8 +25,20 @@
|
|||||||
|
|
||||||
#define XN_FLAG_FN_SN 0
|
#define XN_FLAG_FN_SN 0
|
||||||
#define XN_FLAG_ONELINE 0
|
#define XN_FLAG_ONELINE 0
|
||||||
|
#define XN_FLAG_COMPAT 0
|
||||||
#define XN_FLAG_RFC2253 1
|
#define XN_FLAG_RFC2253 1
|
||||||
|
#define XN_FLAG_SEP_COMMA_PLUS (1 << 16)
|
||||||
#define XN_FLAG_SEP_CPLUS_SPC (2 << 16)
|
#define XN_FLAG_SEP_CPLUS_SPC (2 << 16)
|
||||||
#define XN_FLAG_SEP_SPLUS_SPC (3 << 16)
|
#define XN_FLAG_SEP_SPLUS_SPC (3 << 16)
|
||||||
|
#define XN_FLAG_SEP_MULTILINE (4 << 16)
|
||||||
|
#define XN_FLAG_SEP_MASK (0xF << 16)
|
||||||
#define XN_FLAG_DN_REV (1 << 20)
|
#define XN_FLAG_DN_REV (1 << 20)
|
||||||
|
#define XN_FLAG_FN_LN (1 << 21)
|
||||||
|
#define XN_FLAG_FN_OID (2 << 21)
|
||||||
|
#define XN_FLAG_FN_NONE (3 << 21)
|
||||||
|
#define XN_FLAG_FN_MASK (3 << 21)
|
||||||
#define XN_FLAG_SPC_EQ (1 << 23)
|
#define XN_FLAG_SPC_EQ (1 << 23)
|
||||||
|
#define XN_FLAG_DUMP_UNKNOWN_FIELDS (1 << 24)
|
||||||
|
#define XN_FLAG_FN_ALIGN (1 << 25)
|
||||||
|
|
||||||
|
#define XN_FLAG_MULTILINE 0xFFFF
|
||||||
|
@@ -3902,6 +3902,8 @@ WOLFSSL_API int wolfSSL_X509_check_issued(WOLFSSL_X509 *issuer,
|
|||||||
|
|
||||||
WOLFSSL_API char* wolfSSL_sk_WOLFSSL_STRING_value(
|
WOLFSSL_API char* wolfSSL_sk_WOLFSSL_STRING_value(
|
||||||
WOLF_STACK_OF(WOLFSSL_STRING)* strings, int idx);
|
WOLF_STACK_OF(WOLFSSL_STRING)* strings, int idx);
|
||||||
|
WOLFSSL_API int wolfSSL_sk_WOLFSSL_STRING_num(
|
||||||
|
WOLF_STACK_OF(WOLFSSL_STRING)* strings);
|
||||||
#endif /* HAVE_OCSP || OPENSSL_EXTRA || OPENSSL_ALL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */
|
#endif /* HAVE_OCSP || OPENSSL_EXTRA || OPENSSL_ALL || WOLFSSL_NGINX || WOLFSSL_HAPROXY */
|
||||||
|
|
||||||
WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bio,
|
WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bio,
|
||||||
|
Reference in New Issue
Block a user