OpenSSL Compat layer

Implement/stub:
- wolfSSL_NCONF_get_number
- wolfSSL_EVP_PKEY_CTX_ctrl_str
- wolfSSL_PKCS12_verify_mac
- wc_PKCS12_verify_ex
- wolfSSL_BIO_new_fd
- wolfSSL_X509_sign_ctx
- wolfSSL_ASN1_STRING_cmp
- wolfSSL_ASN1_TIME_set_string
- X509V3_EXT_add_nconf
- X509V3_set_nconf
Implement TXT_DB functionality:
- wolfSSL_TXT_DB_read
- wolfSSL_TXT_DB_free
- wolfSSL_TXT_DB_create_index
- wolfSSL_TXT_DB_get_by_index
This commit is contained in:
Juliusz Sosinowicz
2020-07-28 23:05:37 +02:00
parent e7f1d39456
commit 753a3babc8
14 changed files with 465 additions and 6 deletions

View File

@ -1322,6 +1322,25 @@ int wolfSSL_BIO_reset(WOLFSSL_BIO *bio)
} }
#ifndef NO_FILESYSTEM #ifndef NO_FILESYSTEM
WOLFSSL_BIO *wolfSSL_BIO_new_fd(int fd, int close_flag)
{
WOLFSSL_BIO* bio;
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
if (!bio) {
WOLFSSL_MSG("wolfSSL_BIO_new error");
return NULL;
}
if (wolfSSL_BIO_set_fd(bio, fd, close_flag) != WOLFSSL_SUCCESS) {
wolfSSL_BIO_free(bio);
WOLFSSL_MSG("wolfSSL_BIO_set_fp error");
return NULL;
}
return bio;
}
long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c) long wolfSSL_BIO_set_fp(WOLFSSL_BIO *bio, XFILE fp, int c)
{ {
WOLFSSL_ENTER("wolfSSL_BIO_set_fp"); WOLFSSL_ENTER("wolfSSL_BIO_set_fp");

355
src/ssl.c
View File

@ -111,6 +111,7 @@
#if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL) #if defined(OPENSSL_ALL) || defined(HAVE_STUNNEL)
#include <wolfssl/openssl/ocsp.h> #include <wolfssl/openssl/ocsp.h>
#include <wolfssl/openssl/lhash.h> #include <wolfssl/openssl/lhash.h>
#include <wolfssl/openssl/txt_db.h>
#endif /* WITH_STUNNEL */ #endif /* WITH_STUNNEL */
#if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384) #if defined(WOLFSSL_SHA512) || defined(WOLFSSL_SHA384)
#include <wolfssl/wolfcrypt/sha512.h> #include <wolfssl/wolfcrypt/sha512.h>
@ -9832,6 +9833,14 @@ int wolfSSL_X509_add_ext(WOLFSSL_X509 *x509, WOLFSSL_X509_EXTENSION *ext, int lo
return WOLFSSL_FAILURE; return WOLFSSL_FAILURE;
} }
WOLFSSL_X509_EXTENSION *wolfSSL_X509_delete_ext(WOLFSSL_X509 *x509, int loc)
{
WOLFSSL_STUB("wolfSSL_X509_delete_ext");
(void)x509;
(void)loc;
return NULL;
}
/* currently LHASH is not implemented (and not needed for Apache port) */ /* currently LHASH is not implemented (and not needed for Apache port) */
WOLFSSL_X509_EXTENSION* wolfSSL_X509V3_EXT_conf_nid( WOLFSSL_X509_EXTENSION* wolfSSL_X509V3_EXT_conf_nid(
WOLF_LHASH_OF(CONF_VALUE)* conf, WOLFSSL_X509V3_CTX* ctx, int nid, WOLF_LHASH_OF(CONF_VALUE)* conf, WOLFSSL_X509V3_CTX* ctx, int nid,
@ -15493,6 +15502,13 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
WOLFSSL_ENTER("wolfSSL_BIO_set_fd"); WOLFSSL_ENTER("wolfSSL_BIO_set_fd");
if (b != NULL) { if (b != NULL) {
if (b->type == WOLFSSL_BIO_FILE) {
b->ptr = XFDOPEN(fd, "rw");
if (!b->ptr) {
WOLFSSL_MSG("Error opening file descriptor");
return WOLFSSL_FAILURE;
}
}
b->num = fd; b->num = fd;
b->shutdown = (byte)closeF; b->shutdown = (byte)closeF;
} }
@ -19414,6 +19430,26 @@ char *wolfSSL_NCONF_get_string(const WOLFSSL_CONF *conf,
return NULL; return NULL;
} }
int wolfSSL_NCONF_get_number(const CONF *conf, const char *group,
const char *name, long *result)
{
char *str;
WOLFSSL_ENTER("wolfSSL_NCONF_get_number");
if (!conf || !group || !name || !result) {
WOLFSSL_MSG("Bad parameter");
return WOLFSSL_FAILURE;
}
if (!(str = wolfSSL_NCONF_get_string(conf, group, name))) {
WOLFSSL_MSG("wolfSSL_NCONF_get_string error");
return WOLFSSL_FAILURE;
}
*result = atol(str);
return WOLFSSL_SUCCESS;
}
/** /**
* The WOLFSSL_CONF->value member is treated as a * The WOLFSSL_CONF->value member is treated as a
* WOLFSSL_STACK_OF(WOLFSSL_CONF_VALUE) which becomes * WOLFSSL_STACK_OF(WOLFSSL_CONF_VALUE) which becomes
@ -20495,6 +20531,44 @@ int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_STRING *in)
return inLen; return inLen;
} }
int wolfSSL_ASN1_UNIVERSALSTRING_to_string(WOLFSSL_ASN1_STRING *s)
{
char *idx;
char *copy;
WOLFSSL_ENTER("wolfSSL_ASN1_UNIVERSALSTRING_to_string");
if (!s) {
WOLFSSL_MSG("Bad parameter");
return WOLFSSL_FAILURE;
}
if (s->type != V_ASN1_UNIVERSALSTRING) {
WOLFSSL_MSG("Input is not a universal string");
return WOLFSSL_FAILURE;
}
if ((s->length % 4) != 0) {
WOLFSSL_MSG("Input string must be divisible by 4");
return WOLFSSL_FAILURE;
}
for (idx = s->data; idx < s->data + s->length; idx += 4)
if ((idx[0] != '\0') || (idx[1] != '\0') || (idx[2] != '\0'))
break;
if (idx != s->data + s->length) {
WOLFSSL_MSG("Wrong string format");
return WOLFSSL_FAILURE;
}
for (copy = idx = s->data; idx < s->data + s->length; idx += 4)
*copy++ = idx[3];
*copy = '\0';
s->length /= 4;
s->type = V_ASN1_PRINTABLESTRING;
return WOLFSSL_SUCCESS;
}
/* Returns string representation of ASN1_STRING */ /* Returns string representation of ASN1_STRING */
char* wolfSSL_i2s_ASN1_STRING(WOLFSSL_v3_ext_method *method, char* wolfSSL_i2s_ASN1_STRING(WOLFSSL_v3_ext_method *method,
const WOLFSSL_ASN1_STRING *s) const WOLFSSL_ASN1_STRING *s)
@ -21012,6 +21086,175 @@ void wolfSSL_sk_CIPHER_free(WOLF_STACK_OF(WOLFSSL_CIPHER)* sk)
/* free head of stack */ /* free head of stack */
XFREE(sk, NULL, DYNAMIC_TYPE_ASN1); XFREE(sk, NULL, DYNAMIC_TYPE_ASN1);
} }
/**
* This function reads a tab delimetered CSV input and returns
* a populated WOLFSSL_TXT_DB structure.
* @param in Tab delimetered CSV input
* @param num Number of fields in each row.
* @return
*/
WOLFSSL_TXT_DB *wolfSSL_TXT_DB_read(WOLFSSL_BIO *in, int num)
{
WOLFSSL_TXT_DB *ret = NULL;
char *buf = NULL;
char *bufEnd = NULL;
char *idx = NULL;
char* lineEnd = NULL;
int bufSz;
int failed = 1;
/* Space in front of str reserved for field pointers + \0 */
int fieldsSz = (num + 1) * sizeof(char *);
WOLFSSL_ENTER("wolfSSL_TXT_DB_read");
if (!in || num <= 0 || num > WOLFSSL_TXT_DB_MAX_FIELDS) {
WOLFSSL_MSG("Bad parameter or too many fields");
return NULL;
}
if (!(ret = (WOLFSSL_TXT_DB*)XMALLOC(sizeof(WOLFSSL_TXT_DB), NULL,
DYNAMIC_TYPE_OPENSSL))) {
WOLFSSL_MSG("malloc error");
goto error;
}
XMEMSET (ret, 0, sizeof(WOLFSSL_TXT_DB));
ret->num_fields = num;
if (!(ret->data = wolfSSL_sk_WOLFSSL_STRING_new())) {
WOLFSSL_MSG("wolfSSL_sk_WOLFSSL_STRING_new error");
goto error;
}
bufSz = wolfSSL_BIO_get_len(in);
if (bufSz <= 0 ||
!(buf = (char*)XMALLOC(sizeof(bufSz+1), NULL,
DYNAMIC_TYPE_TMP_BUFFER))) {
WOLFSSL_MSG("malloc error or no data in BIO");
goto error;
}
if (wolfSSL_BIO_read(in, buf, bufSz) != bufSz) {
WOLFSSL_MSG("malloc error or no data in BIO");
goto error;
}
buf[bufSz] = '\0';
for (bufEnd = buf + bufSz; idx < bufEnd; idx = lineEnd + 1) {
char* strBuf = NULL;
char** fieldPtr = NULL;
int fieldPtrIdx = 0;
char* fieldCheckIdx = NULL;
lineEnd = XSTRNSTR(idx, "\n", bufEnd - idx);
if (!lineEnd)
lineEnd = bufEnd;
if (idx == lineEnd) /* empty line */
continue;
if (*idx == '#')
continue;
*lineEnd = '\0';
strBuf = (char*)XMALLOC(fieldsSz + lineEnd - idx + 1, NULL,
DYNAMIC_TYPE_OPENSSL);
if (!strBuf) {
WOLFSSL_MSG("malloc error");
goto error;
}
XMEMCPY(strBuf + fieldsSz, idx, lineEnd - idx + 1); /* + 1 for NULL */
/* Check for appropriate number of fields */
fieldPtr = (char**)strBuf;
fieldCheckIdx = strBuf + fieldsSz;
fieldPtr[fieldPtrIdx++] = fieldCheckIdx;
while (*fieldCheckIdx != '\0') {
if (*fieldCheckIdx == '\t') {
fieldPtr[fieldPtrIdx++] = fieldCheckIdx + 1;
*fieldCheckIdx = '\0';
if (fieldPtrIdx > num) {
WOLFSSL_MSG("too many fields");
XFREE(strBuf, NULL, DYNAMIC_TYPE_OPENSSL);
goto error;
}
}
fieldCheckIdx++;
}
if (fieldPtrIdx != num) {
WOLFSSL_MSG("wrong number of fields");
XFREE(strBuf, NULL, DYNAMIC_TYPE_OPENSSL);
goto error;
}
if (wolfSSL_sk_push(ret->data, strBuf) != WOLFSSL_SUCCESS) {
WOLFSSL_MSG("wolfSSL_sk_push error");
XFREE(strBuf, NULL, DYNAMIC_TYPE_OPENSSL);
goto error;
}
}
failed = 0;
error:
if (failed && ret) {
XFREE(ret, NULL, DYNAMIC_TYPE_OPENSSL);
ret = NULL;
}
if (buf) {
XFREE(buf, NULL, DYNAMIC_TYPE_TMP_BUFFER);
}
return ret;
}
void wolfSSL_TXT_DB_free(WOLFSSL_TXT_DB *db)
{
if (db) {
if (db->data) {
wolfSSL_sk_free(db->data);
}
XFREE(db, NULL, DYNAMIC_TYPE_OPENSSL);
}
}
int wolfSSL_TXT_DB_create_index(WOLFSSL_TXT_DB *db, int field,
void* qual, wolf_sk_hash_cb hash, wolf_sk_compare_cb cmp)
{
WOLFSSL_ENTER("wolfSSL_TXT_DB_create_index");
(void)qual;
if (!db || !hash || !cmp || field >= db->num_fields || field < 0) {
WOLFSSL_MSG("Bad parameter");
return WOLFSSL_FAILURE;
}
db->hash_fn[field] = hash;
db->comp[field] = cmp;
return WOLFSSL_SUCCESS;
}
WOLFSSL_STRING *wolfSSL_TXT_DB_get_by_index(WOLFSSL_TXT_DB *db, int idx,
WOLFSSL_STRING *value)
{
WOLF_STACK_OF(WOLFSSL_STRING)* data;
WOLFSSL_ENTER("wolfSSL_TXT_DB_get_by_index");
if (!db || idx < 0 || idx >= db->num_fields) {
WOLFSSL_MSG("Bad parameter");
return NULL;
}
if (!db->hash_fn[idx] || !db->comp[idx]) {
WOLFSSL_MSG("Missing hash or cmp functions");
return NULL;
}
/* Set the hash and comp functions */
data = db->data;
while (data) {
if (data->comp != db->comp[idx] || data->hash_fn != db->hash_fn[idx]) {
data->comp = db->comp[idx];
data->hash_fn = db->hash_fn[idx];
data->hash = 0;
}
data= data->next;
}
return (WOLFSSL_STRING*) wolfSSL_lh_retrieve(db->data, value);
}
#endif #endif
#if defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_CURVE448) || \ #if defined(HAVE_ECC) || defined(HAVE_CURVE25519) || defined(HAVE_CURVE448) || \
@ -21713,6 +21956,26 @@ int wolfSSL_X509_cmp(const WOLFSSL_X509 *a, const WOLFSSL_X509 *b)
XFREE(asn1, NULL, DYNAMIC_TYPE_OPENSSL); XFREE(asn1, NULL, DYNAMIC_TYPE_OPENSSL);
} }
} }
int wolfSSL_ASN1_STRING_cmp(const WOLFSSL_ASN1_STRING *a, const WOLFSSL_ASN1_STRING *b)
{
int i;
WOLFSSL_ENTER("wolfSSL_ASN1_STRING_cmp");
if (!a || !b) {
return WOLFSSL_FATAL_ERROR;
}
if (a->length != b->length) {
return a->length - b->length;
}
if ((i = XMEMCMP(a->data, b->data, a->length)) != 0) {
return i;
}
return a->type - b->type;
}
#endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */ #endif /* OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL */
#if !defined(NO_CERTS) && (defined(OPENSSL_EXTRA) || \ #if !defined(NO_CERTS) && (defined(OPENSSL_EXTRA) || \
@ -24024,6 +24287,19 @@ int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
return WOLFSSL_SUCCESS; return WOLFSSL_SUCCESS;
} }
int wolfSSL_PKCS12_verify_mac(WC_PKCS12 *pkcs12, const char *psw,
int pswLen)
{
WOLFSSL_ENTER("wolfSSL_PKCS12_verify_mac");
if (!pkcs12) {
return WOLFSSL_FAILURE;
}
return wc_PKCS12_verify_ex(pkcs12, (const byte*)psw, pswLen) == 0 ?
WOLFSSL_SUCCESS : WOLFSSL_FAILURE;
}
#endif /* !NO_ASN && !NO_PWDBASED */ #endif /* !NO_ASN && !NO_PWDBASED */
@ -28264,13 +28540,21 @@ int wolfSSL_ASN1_TIME_diff(int *pday, int *psec,
return 0; return 0;
} }
WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_t t) WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_t t)
{ {
WOLFSSL_STUB("wolfSSL_ASN1_TIME_set"); WOLFSSL_STUB("wolfSSL_ASN1_TIME_set");
(void)s; (void)s;
(void)t; (void)t;
return s; return s;
} }
int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *s, const char *str)
{
WOLFSSL_STUB("wolfSSL_ASN1_TIME_set_string");
(void)s;
(void)str;
return WOLFSSL_FAILURE;
}
#endif /* !NO_WOLFSSL_STUB */ #endif /* !NO_WOLFSSL_STUB */
#ifndef NO_BIO #ifndef NO_BIO
@ -39220,6 +39504,64 @@ cleanup:
} }
#endif /* WOLFSSL_CERT_GEN */ #endif /* WOLFSSL_CERT_GEN */
int wolfSSL_X509_sign_ctx(WOLFSSL_X509 *x509, WOLFSSL_EVP_MD_CTX *ctx)
{
WOLFSSL_ENTER("wolfSSL_X509_sign_ctx");
if (!x509 || !ctx || !ctx->pctx || !ctx->pctx->pkey) {
WOLFSSL_MSG("Bad parameter");
return WOLFSSL_FAILURE;
}
return wolfSSL_X509_sign(x509, ctx->pctx->pkey, wolfSSL_EVP_MD_CTX_md(ctx));
}
/* Converts the x509 name structure into DER format.
*
* out pointer to either a pre setup buffer or a pointer to null for
* creating a dynamic buffer. In the case that a pre-existing buffer is
* used out will be incremented the size of the DER buffer on success.
*
* returns the size of the buffer on success, or negative value with failure
*/
int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out)
{
CertName cName;
unsigned char buf[256]; /* ASN_MAX_NAME */
int sz;
WOLFSSL_ENTER("wolfSSL_i2d_X509_NAME");
if (out == NULL || name == NULL) {
return BAD_FUNC_ARG;
}
XMEMSET(&cName, 0, sizeof(CertName));
if (CopyX509NameToCertName(name, &cName) != SSL_SUCCESS) {
WOLFSSL_MSG("Error converting x509 name to internal CertName");
return SSL_FATAL_ERROR;
}
sz = SetName(buf, sizeof(buf), &cName);
if (sz < 0) {
return sz;
}
/* using buffer passed in */
if (*out != NULL) {
XMEMCPY(*out, buf, sz);
*out += sz;
}
else {
*out = (unsigned char*)XMALLOC(sz, NULL, DYNAMIC_TYPE_OPENSSL);
if (*out == NULL) {
return MEMORY_E;
}
XMEMCPY(*out, buf, sz);
}
return sz;
}
#endif /* WOLFSSL_CERT_GEN */
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL) #if defined(OPENSSL_EXTRA) || defined(OPENSSL_ALL)
WOLFSSL_X509_NAME *wolfSSL_d2i_X509_NAME(WOLFSSL_X509_NAME **name, WOLFSSL_X509_NAME *wolfSSL_d2i_X509_NAME(WOLFSSL_X509_NAME **name,
@ -46022,6 +46364,17 @@ 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);
} }
WOLF_STACK_OF(WOLFSSL_STRING)* wolfSSL_sk_WOLFSSL_STRING_new(void)
{
WOLF_STACK_OF(WOLFSSL_STRING)* ret = wolfSSL_sk_new_node(NULL);
if (ret) {
ret->type = STACK_TYPE_STRING;
}
return ret;
}
char* wolfSSL_sk_WOLFSSL_STRING_value(WOLF_STACK_OF(WOLFSSL_STRING)* strings, char* wolfSSL_sk_WOLFSSL_STRING_value(WOLF_STACK_OF(WOLFSSL_STRING)* strings,
int idx) int idx)
{ {

View File

@ -1432,7 +1432,19 @@ int wolfSSL_EVP_PKEY_derive_set_peer(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_EVP_PKEY
return WOLFSSL_SUCCESS; return WOLFSSL_SUCCESS;
} }
#if !defined(NO_DH) || defined(HAVE_ECC) #ifndef NO_WOLFSSL_STUB
int wolfSSL_EVP_PKEY_CTX_ctrl_str(WOLFSSL_EVP_PKEY_CTX *ctx,
const char *name, const char *value)
{
WOLFSSL_STUB("wolfSSL_EVP_PKEY_CTX_ctrl_str");
(void)ctx;
(void)name;
(void)value;
return WOLFSSL_FAILURE;
}
#endif /* NO_WOLFSSL_STUB */
#if !defined(NO_DH) && defined(HAVE_ECC)
#if !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION!=2)) #if !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION!=2))
int wolfSSL_EVP_PKEY_derive(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen) int wolfSSL_EVP_PKEY_derive(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)
{ {

View File

@ -569,7 +569,6 @@ static int wc_PKCS12_create_mac(WC_PKCS12* pkcs12, byte* data, word32 dataSz,
return kLen; /* same as digest size */ return kLen; /* same as digest size */
} }
/* check mac on pkcs12, pkcs12->mac has been sanity checked before entering * /* check mac on pkcs12, pkcs12->mac has been sanity checked before entering *
* returns the result of comparison, success is 0 */ * returns the result of comparison, success is 0 */
static int wc_PKCS12_verify(WC_PKCS12* pkcs12, byte* data, word32 dataSz, static int wc_PKCS12_verify(WC_PKCS12* pkcs12, byte* data, word32 dataSz,
@ -613,6 +612,15 @@ static int wc_PKCS12_verify(WC_PKCS12* pkcs12, byte* data, word32 dataSz,
return XMEMCMP(digest, mac->digest, mac->digestSz); return XMEMCMP(digest, mac->digest, mac->digestSz);
} }
int wc_PKCS12_verify_ex(WC_PKCS12* pkcs12, const byte* psw, word32 pswSz)
{
if (pkcs12 == NULL || pkcs12->safe == NULL) {
return BAD_FUNC_ARG;
}
return wc_PKCS12_verify(pkcs12, pkcs12->safe->data, pkcs12->safe->dataSz,
psw, pswSz);
}
/* Convert DER format stored in der buffer to WC_PKCS12 struct /* Convert DER format stored in der buffer to WC_PKCS12 struct
* Puts the raw contents of Content Info into structure without completely * Puts the raw contents of Content Info into structure without completely

View File

@ -57,6 +57,7 @@
#define BIO_set_write_buf_size wolfSSL_BIO_set_write_buf_size #define BIO_set_write_buf_size wolfSSL_BIO_set_write_buf_size
#define BIO_make_bio_pair wolfSSL_BIO_make_bio_pair #define BIO_make_bio_pair wolfSSL_BIO_make_bio_pair
#define BIO_new_fd wolfSSL_BIO_new_fd
#define BIO_set_fp wolfSSL_BIO_set_fp #define BIO_set_fp wolfSSL_BIO_set_fp
#define BIO_get_fp wolfSSL_BIO_get_fp #define BIO_get_fp wolfSSL_BIO_get_fp
#define BIO_seek wolfSSL_BIO_seek #define BIO_seek wolfSSL_BIO_seek
@ -123,6 +124,7 @@
#define BIO_meth_set_create wolfSSL_BIO_meth_set_create #define BIO_meth_set_create wolfSSL_BIO_meth_set_create
#define BIO_meth_set_destroy wolfSSL_BIO_meth_set_destroy #define BIO_meth_set_destroy wolfSSL_BIO_meth_set_destroy
#define BIO_snprintf XSNPRINTF
/* BIO CTRL */ /* BIO CTRL */
#define BIO_CTRL_RESET 1 #define BIO_CTRL_RESET 1

View File

@ -67,6 +67,8 @@ WOLFSSL_API int wolfSSL_sk_CONF_VALUE_push(WOLF_STACK_OF(WOLFSSL_CONF_VALUE)* sk
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 int wolfSSL_NCONF_get_number(const CONF *conf, const char *group,
const char *name, long *result);
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 int wolfSSL_NCONF_load(WOLFSSL_CONF *conf, const char *file, long *eline);
@ -92,8 +94,11 @@ WOLFSSL_API WOLFSSL_CONF_VALUE *wolfSSL_CONF_get_section(WOLFSSL_CONF *conf,
#define lh_CONF_VALUE_insert wolfSSL_sk_CONF_VALUE_push #define lh_CONF_VALUE_insert wolfSSL_sk_CONF_VALUE_push
#define NCONF_new wolfSSL_NCONF_new #define NCONF_new wolfSSL_NCONF_new
#define NCONF_free wolfSSL_NCONF_free
#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 NCONF_get_number wolfSSL_NCONF_get_number
#define NCONF_load wolfSSL_NCONF_load
#define CONF_modules_load wolfSSL_CONF_modules_load #define CONF_modules_load wolfSSL_CONF_modules_load

View File

@ -557,6 +557,9 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_derive_init(WOLFSSL_EVP_PKEY_CTX *ctx);
WOLFSSL_API int wolfSSL_EVP_PKEY_derive_set_peer(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_EVP_PKEY *peer); WOLFSSL_API int wolfSSL_EVP_PKEY_derive_set_peer(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_EVP_PKEY *peer);
WOLFSSL_API int wolfSSL_EVP_PKEY_derive(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); WOLFSSL_API int wolfSSL_EVP_PKEY_derive(WOLFSSL_EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_ctrl_str(WOLFSSL_EVP_PKEY_CTX *ctx,
const char *name, const char *value);
WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx, WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx,
unsigned char *out, size_t *outlen, unsigned char *out, size_t *outlen,
const unsigned char *in, size_t inlen); const unsigned char *in, size_t inlen);
@ -830,6 +833,7 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX;
#define EVP_PKEY_type wolfSSL_EVP_PKEY_type #define EVP_PKEY_type wolfSSL_EVP_PKEY_type
#define EVP_PKEY_base_id wolfSSL_EVP_PKEY_base_id #define EVP_PKEY_base_id wolfSSL_EVP_PKEY_base_id
#define EVP_PKEY_id wolfSSL_EVP_PKEY_id #define EVP_PKEY_id wolfSSL_EVP_PKEY_id
#define EVP_PKEY_CTX_ctrl_str wolfSSL_EVP_PKEY_CTX_ctrl_str
#define EVP_SignFinal wolfSSL_EVP_SignFinal #define EVP_SignFinal wolfSSL_EVP_SignFinal
#define EVP_SignInit wolfSSL_EVP_SignInit #define EVP_SignInit wolfSSL_EVP_SignInit
#define EVP_SignInit_ex wolfSSL_EVP_SignInit_ex #define EVP_SignInit_ex wolfSSL_EVP_SignInit_ex

View File

@ -42,6 +42,7 @@
/* wolfSSL level using structs from ssl.h and calls down to wolfCrypt */ /* wolfSSL level using structs from ssl.h and calls down to wolfCrypt */
#define d2i_PKCS12_bio wolfSSL_d2i_PKCS12_bio #define d2i_PKCS12_bio wolfSSL_d2i_PKCS12_bio
#define PKCS12_parse wolfSSL_PKCS12_parse #define PKCS12_parse wolfSSL_PKCS12_parse
#define PKCS12_verify_mac wolfSSL_PKCS12_verify_mac
#define PKCS12_create wolfSSL_PKCS12_create #define PKCS12_create wolfSSL_PKCS12_create
#define PKCS12_PBE_add wolfSSL_PKCS12_PBE_add #define PKCS12_PBE_add wolfSSL_PKCS12_PBE_add

View File

@ -436,7 +436,9 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
#define X509_set_version wolfSSL_X509_set_version #define X509_set_version wolfSSL_X509_set_version
#define X509_REQ_set_version wolfSSL_X509_set_version #define X509_REQ_set_version wolfSSL_X509_set_version
#define X509_sign wolfSSL_X509_sign #define X509_sign wolfSSL_X509_sign
#define X509_sign_ctx wolfSSL_X509_sign_ctx
#define X509_print wolfSSL_X509_print #define X509_print wolfSSL_X509_print
#define X509_REQ_print wolfSSL_X509_print
#define X509_print_ex wolfSSL_X509_print_ex #define X509_print_ex wolfSSL_X509_print_ex
#define X509_print_fp wolfSSL_X509_print_fp #define X509_print_fp wolfSSL_X509_print_fp
#define X509_REQ_print_fp wolfSSL_X509_print_fp #define X509_REQ_print_fp wolfSSL_X509_print_fp
@ -445,6 +447,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
#define X509_verify wolfSSL_X509_verify #define X509_verify wolfSSL_X509_verify
#define X509_REQ_verify wolfSSL_X509_REQ_verify #define X509_REQ_verify wolfSSL_X509_REQ_verify
#define X509_check_private_key wolfSSL_X509_check_private_key #define X509_check_private_key wolfSSL_X509_check_private_key
#define X509_REQ_check_private_key wolfSSL_X509_check_private_key
#define X509_check_ca wolfSSL_X509_check_ca #define X509_check_ca wolfSSL_X509_check_ca
#define X509_check_host wolfSSL_X509_check_host #define X509_check_host wolfSSL_X509_check_host
#define X509_check_ip_asc wolfSSL_X509_check_ip_asc #define X509_check_ip_asc wolfSSL_X509_check_ip_asc
@ -452,6 +455,7 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
#define X509_check_issued wolfSSL_X509_check_issued #define X509_check_issued wolfSSL_X509_check_issued
#define X509_dup wolfSSL_X509_dup #define X509_dup wolfSSL_X509_dup
#define X509_add_ext wolfSSL_X509_add_ext #define X509_add_ext wolfSSL_X509_add_ext
#define X509_delete_ext wolfSSL_X509_delete_ext
#define X509_EXTENSION_get_object wolfSSL_X509_EXTENSION_get_object #define X509_EXTENSION_get_object wolfSSL_X509_EXTENSION_get_object
#define X509_EXTENSION_get_data wolfSSL_X509_EXTENSION_get_data #define X509_EXTENSION_get_data wolfSSL_X509_EXTENSION_get_data
@ -686,10 +690,16 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_
#define sk_ASN1_OBJECT_free wolfSSL_sk_ASN1_OBJECT_free #define sk_ASN1_OBJECT_free wolfSSL_sk_ASN1_OBJECT_free
#define ASN1_TIME_new wolfSSL_ASN1_TIME_new
#define ASN1_UTCTIME_new wolfSSL_ASN1_TIME_new
#define ASN1_TIME_free wolfSSL_ASN1_TIME_free #define ASN1_TIME_free wolfSSL_ASN1_TIME_free
#define ASN1_UTCTIME_free wolfSSL_ASN1_TIME_free
#define ASN1_TIME_adj wolfSSL_ASN1_TIME_adj #define ASN1_TIME_adj wolfSSL_ASN1_TIME_adj
#define ASN1_TIME_print wolfSSL_ASN1_TIME_print #define ASN1_TIME_print wolfSSL_ASN1_TIME_print
#define ASN1_TIME_to_generalizedtime wolfSSL_ASN1_TIME_to_generalizedtime #define ASN1_TIME_to_generalizedtime wolfSSL_ASN1_TIME_to_generalizedtime
#define ASN1_TIME_set wolfSSL_ASN1_TIME_set
#define ASN1_TIME_set_string wolfSSL_ASN1_TIME_set_string
#define ASN1_TIME_to_string wolfSSL_ASN1_TIME_to_string
#define ASN1_GENERALIZEDTIME_print wolfSSL_ASN1_GENERALIZEDTIME_print #define ASN1_GENERALIZEDTIME_print wolfSSL_ASN1_GENERALIZEDTIME_print
#define ASN1_GENERALIZEDTIME_free wolfSSL_ASN1_GENERALIZEDTIME_free #define ASN1_GENERALIZEDTIME_free wolfSSL_ASN1_GENERALIZEDTIME_free
@ -707,14 +717,20 @@ wolfSSL_X509_STORE_set_verify_cb((WOLFSSL_X509_STORE *)(s), (WOLFSSL_X509_STORE_
#define i2a_ASN1_OBJECT wolfSSL_i2a_ASN1_OBJECT #define i2a_ASN1_OBJECT wolfSSL_i2a_ASN1_OBJECT
#define i2d_ASN1_OBJECT wolfSSL_i2d_ASN1_OBJECT #define i2d_ASN1_OBJECT wolfSSL_i2d_ASN1_OBJECT
#define ASN1_STRING_new wolfSSL_ASN1_STRING_new
#define ASN1_STRING_free wolfSSL_ASN1_STRING_free
#define ASN1_STRING_cmp wolfSSL_ASN1_STRING_cmp
#define ASN1_STRING_data wolfSSL_ASN1_STRING_data #define ASN1_STRING_data wolfSSL_ASN1_STRING_data
#define ASN1_STRING_get0_data wolfSSL_ASN1_STRING_data #define ASN1_STRING_get0_data wolfSSL_ASN1_STRING_data
#define ASN1_STRING_length wolfSSL_ASN1_STRING_length #define ASN1_STRING_length wolfSSL_ASN1_STRING_length
#define ASN1_STRING_to_UTF8 wolfSSL_ASN1_STRING_to_UTF8 #define ASN1_STRING_to_UTF8 wolfSSL_ASN1_STRING_to_UTF8
#define ASN1_UNIVERSALSTRING_to_string wolfSSL_ASN1_UNIVERSALSTRING_to_string
#define ASN1_STRING_print_ex wolfSSL_ASN1_STRING_print_ex #define ASN1_STRING_print_ex wolfSSL_ASN1_STRING_print_ex
#define ASN1_STRING_print(x, y) wolfSSL_ASN1_STRING_print ((WOLFSSL_BIO*)(x), (WOLFSSL_ASN1_STRING*)(y)) #define ASN1_STRING_print(x, y) wolfSSL_ASN1_STRING_print ((WOLFSSL_BIO*)(x), (WOLFSSL_ASN1_STRING*)(y))
#define d2i_DISPLAYTEXT wolfSSL_d2i_DISPLAYTEXT #define d2i_DISPLAYTEXT wolfSSL_d2i_DISPLAYTEXT
#define ASN1_PRINTABLE_type(...) V_ASN1_PRINTABLESTRING
#define ASN1_UTCTIME_pr wolfSSL_ASN1_UTCTIME_pr #define ASN1_UTCTIME_pr wolfSSL_ASN1_UTCTIME_pr
#define ASN1_IA5STRING WOLFSSL_ASN1_STRING #define ASN1_IA5STRING WOLFSSL_ASN1_STRING

View File

@ -24,14 +24,32 @@
#include <wolfssl/openssl/ssl.h> #include <wolfssl/openssl/ssl.h>
#define WOLFSSL_TXT_DB_MAX_FIELDS 10
struct WOLFSSL_TXT_DB { struct WOLFSSL_TXT_DB {
int num_fields;
WOLF_STACK_OF(WOLFSSL_STRING) *data; WOLF_STACK_OF(WOLFSSL_STRING) *data;
WOLF_LHASH_OF(WOLFSSL_STRING) **index;
long error; long error;
long arg1; long arg1;
long arg2; long arg2;
wolf_sk_compare_cb comp[WOLFSSL_TXT_DB_MAX_FIELDS];
wolf_sk_hash_cb hash_fn[WOLFSSL_TXT_DB_MAX_FIELDS];
}; };
typedef struct WOLFSSL_TXT_DB TXT_DB; typedef struct WOLFSSL_TXT_DB WOLFSSL_TXT_DB;
WOLFSSL_API WOLFSSL_TXT_DB *wolfSSL_TXT_DB_read(WOLFSSL_BIO *in, int num);
WOLFSSL_API void wolfSSL_TXT_DB_free(WOLFSSL_TXT_DB *db);
WOLFSSL_API int wolfSSL_TXT_DB_create_index(WOLFSSL_TXT_DB *db, int field,
void* qual, wolf_sk_hash_cb hash, wolf_sk_compare_cb cmp);
WOLFSSL_API WOLFSSL_STRING *wolfSSL_TXT_DB_get_by_index(WOLFSSL_TXT_DB *db,
int idx, WOLFSSL_STRING *value);
#define TXT_DB WOLFSSL_TXT_DB
#define TXT_DB_read wolfSSL_TXT_DB_read
#define TXT_DB_free wolfSSL_TXT_DB_free
#define TXT_DB_create_index wolfSSL_TXT_DB_create_index
#define TXT_DB_get_by_index wolfSSL_TXT_DB_get_by_index
#endif /* WOLFSSL_TXT_DB_H_ */ #endif /* WOLFSSL_TXT_DB_H_ */

View File

@ -83,6 +83,8 @@ struct WOLFSSL_X509_EXTENSION {
#define X509V3_CTX WOLFSSL_X509V3_CTX #define X509V3_CTX WOLFSSL_X509V3_CTX
#define CTX_TEST 0x1
typedef struct WOLFSSL_AUTHORITY_KEYID AUTHORITY_KEYID; typedef struct WOLFSSL_AUTHORITY_KEYID AUTHORITY_KEYID;
typedef struct WOLFSSL_BASIC_CONSTRAINTS BASIC_CONSTRAINTS; typedef struct WOLFSSL_BASIC_CONSTRAINTS BASIC_CONSTRAINTS;
typedef struct WOLFSSL_ACCESS_DESCRIPTION ACCESS_DESCRIPTION; typedef struct WOLFSSL_ACCESS_DESCRIPTION ACCESS_DESCRIPTION;
@ -107,10 +109,17 @@ WOLFSSL_API int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out,
#define ASN1_OCTET_STRING WOLFSSL_ASN1_STRING #define ASN1_OCTET_STRING WOLFSSL_ASN1_STRING
#define X509V3_EXT_get wolfSSL_X509V3_EXT_get #define X509V3_EXT_get wolfSSL_X509V3_EXT_get
#define X509V3_EXT_d2i wolfSSL_X509V3_EXT_d2i #define X509V3_EXT_d2i wolfSSL_X509V3_EXT_d2i
#ifndef NO_WOLFSSL_STUB
#define X509V3_EXT_add_nconf(...) 0
#endif
#define i2s_ASN1_OCTET_STRING wolfSSL_i2s_ASN1_STRING #define i2s_ASN1_OCTET_STRING wolfSSL_i2s_ASN1_STRING
#define X509V3_EXT_print wolfSSL_X509V3_EXT_print #define X509V3_EXT_print wolfSSL_X509V3_EXT_print
#define X509V3_EXT_conf_nid wolfSSL_X509V3_EXT_conf_nid #define X509V3_EXT_conf_nid wolfSSL_X509V3_EXT_conf_nid
#define X509V3_set_ctx wolfSSL_X509V3_set_ctx #define X509V3_set_ctx wolfSSL_X509V3_set_ctx
#ifndef NO_WOLFSSL_STUB
#define X509V3_set_nconf(...)
#endif
#define X509V3_set_ctx_test(ctx) wolfSSL_X509V3_set_ctx(ctx, NULL, NULL, NULL, NULL, CTX_TEST)
#define X509V3_set_ctx_nodb wolfSSL_X509V3_set_ctx_nodb #define X509V3_set_ctx_nodb wolfSSL_X509V3_set_ctx_nodb
#define X509v3_get_ext_count wolfSSL_sk_num #define X509v3_get_ext_count wolfSSL_sk_num

View File

@ -1171,6 +1171,7 @@ WOLFSSL_API void wolfSSL_sk_ASN1_OBJECT_pop_free(
WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk, WOLF_STACK_OF(WOLFSSL_ASN1_OBJECT)* sk,
void (*f)(WOLFSSL_ASN1_OBJECT*)); void (*f)(WOLFSSL_ASN1_OBJECT*));
WOLFSSL_API int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_STRING *in); WOLFSSL_API int wolfSSL_ASN1_STRING_to_UTF8(unsigned char **out, WOLFSSL_ASN1_STRING *in);
WOLFSSL_API int wolfSSL_ASN1_UNIVERSALSTRING_to_string(WOLFSSL_ASN1_STRING *s);
WOLFSSL_API int wolfSSL_sk_X509_EXTENSION_num(WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk); WOLFSSL_API int wolfSSL_sk_X509_EXTENSION_num(WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk);
WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_sk_X509_EXTENSION_value( WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_sk_X509_EXTENSION_value(
WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int idx); WOLF_STACK_OF(WOLFSSL_X509_EXTENSION)* sk, int idx);
@ -1286,6 +1287,7 @@ WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr);
#ifndef NO_FILESYSTEM #ifndef NO_FILESYSTEM
WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_file(void); WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_file(void);
WOLFSSL_API WOLFSSL_BIO *wolfSSL_BIO_new_fd(int fd, int close_flag);
#endif #endif
WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_bio(void); WOLFSSL_API WOLFSSL_BIO_METHOD *wolfSSL_BIO_s_bio(void);
@ -1396,6 +1398,7 @@ WOLFSSL_API int wolfSSL_X509_set_serialNumber(WOLFSSL_X509* x509,
WOLFSSL_API int wolfSSL_X509_set_version(WOLFSSL_X509* x509, long v); WOLFSSL_API int wolfSSL_X509_set_version(WOLFSSL_X509* x509, long v);
WOLFSSL_API int wolfSSL_X509_sign(WOLFSSL_X509* x509, WOLFSSL_EVP_PKEY* pkey, WOLFSSL_API int wolfSSL_X509_sign(WOLFSSL_X509* x509, WOLFSSL_EVP_PKEY* pkey,
const WOLFSSL_EVP_MD* md); const WOLFSSL_EVP_MD* md);
WOLFSSL_API int wolfSSL_X509_sign_ctx(WOLFSSL_X509 *x509, WOLFSSL_EVP_MD_CTX *ctx);
WOLFSSL_API int wolfSSL_X509_NAME_entry_count(WOLFSSL_X509_NAME*); WOLFSSL_API int wolfSSL_X509_NAME_entry_count(WOLFSSL_X509_NAME*);
@ -1410,6 +1413,7 @@ WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_dup(WOLFSSL_ASN1_STRING* as
WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_type_new(int type); WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_ASN1_STRING_type_new(int type);
WOLFSSL_API int wolfSSL_ASN1_STRING_type(const WOLFSSL_ASN1_STRING* asn1); WOLFSSL_API int wolfSSL_ASN1_STRING_type(const WOLFSSL_ASN1_STRING* asn1);
WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_DISPLAYTEXT(WOLFSSL_ASN1_STRING **asn, const unsigned char **in, long len); WOLFSSL_API WOLFSSL_ASN1_STRING* wolfSSL_d2i_DISPLAYTEXT(WOLFSSL_ASN1_STRING **asn, const unsigned char **in, long len);
WOLFSSL_API int wolfSSL_ASN1_STRING_cmp(const WOLFSSL_ASN1_STRING *a, const WOLFSSL_ASN1_STRING *b);
WOLFSSL_API void wolfSSL_ASN1_STRING_free(WOLFSSL_ASN1_STRING* asn1); WOLFSSL_API void wolfSSL_ASN1_STRING_free(WOLFSSL_ASN1_STRING* asn1);
WOLFSSL_API int wolfSSL_ASN1_STRING_set(WOLFSSL_ASN1_STRING* asn1, WOLFSSL_API int wolfSSL_ASN1_STRING_set(WOLFSSL_ASN1_STRING* asn1,
const void* data, int dataSz); const void* data, int dataSz);
@ -1454,7 +1458,7 @@ WOLFSSL_API void wolfSSL_X509_STORE_CTX_cleanup(WOLFSSL_X509_STORE_CTX*);
WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_lastUpdate(WOLFSSL_X509_CRL*); WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_lastUpdate(WOLFSSL_X509_CRL*);
WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_nextUpdate(WOLFSSL_X509_CRL*); WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_CRL_get_nextUpdate(WOLFSSL_X509_CRL*);
WOLFSSL_ASN1_TIME* wolfSSL_X509_gmtime_adj(WOLFSSL_ASN1_TIME *s, long adj); WOLFSSL_API WOLFSSL_ASN1_TIME* wolfSSL_X509_gmtime_adj(WOLFSSL_ASN1_TIME *s, long adj);
WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509*); WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_X509_get_pubkey(WOLFSSL_X509*);
WOLFSSL_API int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL*, WOLFSSL_EVP_PKEY*); WOLFSSL_API int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL*, WOLFSSL_EVP_PKEY*);
@ -2086,6 +2090,7 @@ WOLFSSL_API int wolfSSL_ASN1_TIME_diff(int *pday, int *psec,
const WOLFSSL_ASN1_TIME *from, const WOLFSSL_ASN1_TIME *to); const WOLFSSL_ASN1_TIME *from, const WOLFSSL_ASN1_TIME *to);
#ifdef OPENSSL_EXTRA #ifdef OPENSSL_EXTRA
WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_t t); WOLFSSL_API WOLFSSL_ASN1_TIME *wolfSSL_ASN1_TIME_set(WOLFSSL_ASN1_TIME *s, time_t t);
WOLFSSL_API int wolfSSL_ASN1_TIME_set_string(WOLFSSL_ASN1_TIME *s, const char *str);
#endif #endif
WOLFSSL_API int wolfSSL_sk_num(const WOLFSSL_STACK* sk); WOLFSSL_API int wolfSSL_sk_num(const WOLFSSL_STACK* sk);
@ -2238,6 +2243,8 @@ WOLFSSL_API WOLFSSL_X509_PKCS12* wolfSSL_d2i_PKCS12_fp(XFILE fp,
WOLFSSL_API int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, WOLFSSL_API int wolfSSL_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert, WOLFSSL_EVP_PKEY** pkey, WOLFSSL_X509** cert,
WOLF_STACK_OF(WOLFSSL_X509)** ca); WOLF_STACK_OF(WOLFSSL_X509)** ca);
WOLFSSL_API int wolfSSL_PKCS12_verify_mac(WC_PKCS12 *pkcs12, const char *psw,
int pswLen);
WOLFSSL_API WC_PKCS12* wolfSSL_PKCS12_create(char* pass, char* name, WOLFSSL_API WC_PKCS12* wolfSSL_PKCS12_create(char* pass, char* name,
WOLFSSL_EVP_PKEY* pkey, WOLFSSL_X509* cert, WOLFSSL_EVP_PKEY* pkey, WOLFSSL_X509* cert,
WOLF_STACK_OF(WOLFSSL_X509)* ca, WOLF_STACK_OF(WOLFSSL_X509)* ca,
@ -3385,6 +3392,7 @@ WOLFSSL_API int wolfSSL_X509_get_ext_by_NID(const WOLFSSL_X509 *x, int nid, int
WOLFSSL_API int wolfSSL_X509_add_ext(WOLFSSL_X509 *x, WOLFSSL_X509_EXTENSION *ex, int loc); WOLFSSL_API int wolfSSL_X509_add_ext(WOLFSSL_X509 *x, WOLFSSL_X509_EXTENSION *ex, int loc);
WOLFSSL_API WOLFSSL_X509_EXTENSION *wolfSSL_X509V3_EXT_i2d(int nid, int crit, WOLFSSL_API WOLFSSL_X509_EXTENSION *wolfSSL_X509V3_EXT_i2d(int nid, int crit,
void *data); void *data);
WOLFSSL_API WOLFSSL_X509_EXTENSION *wolfSSL_X509_delete_ext(WOLFSSL_X509 *x509, int loc);
WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509V3_EXT_conf_nid( WOLFSSL_API WOLFSSL_X509_EXTENSION* wolfSSL_X509V3_EXT_conf_nid(
WOLF_LHASH_OF(CONF_VALUE)* conf, WOLFSSL_X509V3_CTX* ctx, int nid, WOLF_LHASH_OF(CONF_VALUE)* conf, WOLFSSL_X509V3_CTX* ctx, int nid,
char* value); char* value);
@ -3900,6 +3908,7 @@ WOLFSSL_API WOLF_STACK_OF(WOLFSSL_STRING) *wolfSSL_X509_get1_ocsp(WOLFSSL_X509 *
WOLFSSL_API int wolfSSL_X509_check_issued(WOLFSSL_X509 *issuer, WOLFSSL_API int wolfSSL_X509_check_issued(WOLFSSL_X509 *issuer,
WOLFSSL_X509 *subject); WOLFSSL_X509 *subject);
WOLFSSL_API WOLF_STACK_OF(WOLFSSL_STRING)* wolfSSL_sk_WOLFSSL_STRING_new(void);
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( WOLFSSL_API int wolfSSL_sk_WOLFSSL_STRING_num(

View File

@ -53,6 +53,8 @@ WOLFSSL_API int wc_i2d_PKCS12(WC_PKCS12* pkcs12, byte** der, int* derSz);
WOLFSSL_API int wc_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw, WOLFSSL_API int wc_PKCS12_parse(WC_PKCS12* pkcs12, const char* psw,
byte** pkey, word32* pkeySz, byte** cert, word32* certSz, byte** pkey, word32* pkeySz, byte** cert, word32* certSz,
WC_DerCertList** ca); WC_DerCertList** ca);
WOLFSSL_LOCAL int wc_PKCS12_verify_ex(WC_PKCS12* pkcs12,
const byte* psw, word32 pswSz);
WOLFSSL_API WC_PKCS12* wc_PKCS12_create(char* pass, word32 passSz, WOLFSSL_API WC_PKCS12* wc_PKCS12_create(char* pass, word32 passSz,
char* name, byte* key, word32 keySz, byte* cert, word32 certSz, char* name, byte* key, word32 keySz, byte* cert, word32 certSz,
WC_DerCertList* ca, int nidKey, int nidCert, int iter, int macIter, WC_DerCertList* ca, int nidKey, int nidCert, int iter, int macIter,

View File

@ -599,6 +599,7 @@ WOLFSSL_API int wolfCrypt_Cleanup(void);
#else #else
#define XFOPEN fopen #define XFOPEN fopen
#endif #endif
#define XFDOPEN fdopen
#define XFSEEK fseek #define XFSEEK fseek
#define XFTELL ftell #define XFTELL ftell
#define XREWIND rewind #define XREWIND rewind