forked from wolfSSL/wolfssl
pem x509 read from bio and bio set fd
This commit is contained in:
107
src/ssl.c
107
src/ssl.c
@ -10099,7 +10099,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
|
||||
long wolfSSL_BIO_set_ssl(WOLFSSL_BIO* b, WOLFSSL* ssl, int closeF)
|
||||
{
|
||||
WOLFSSL_ENTER("BIO_set_ssl");
|
||||
WOLFSSL_ENTER("wolfSSL_BIO_set_ssl");
|
||||
b->ssl = ssl;
|
||||
b->close = (byte)closeF;
|
||||
/* add to ssl for bio free if SSL_free called before/instead of free_all? */
|
||||
@ -10108,6 +10108,16 @@ int wolfSSL_set_compression(WOLFSSL* ssl)
|
||||
}
|
||||
|
||||
|
||||
long wolfSSL_BIO_set_fd(WOLFSSL_BIO* b, int fd, int closeF)
|
||||
{
|
||||
WOLFSSL_ENTER("wolfSSL_BIO_set_fd");
|
||||
b->fd = fd;
|
||||
b->close = (byte)closeF;
|
||||
|
||||
return SSL_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
WOLFSSL_BIO* wolfSSL_BIO_new(WOLFSSL_BIO_METHOD* method)
|
||||
{
|
||||
WOLFSSL_BIO* bio = (WOLFSSL_BIO*) XMALLOC(sizeof(WOLFSSL_BIO), 0,
|
||||
@ -20021,6 +20031,60 @@ void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl)
|
||||
|
||||
|
||||
#ifdef OPENSSL_EXTRA /*Lighttp compatibility*/
|
||||
|
||||
WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x,
|
||||
pem_password_cb *cb, void *u) {
|
||||
WOLFSSL_X509* x509 = NULL;
|
||||
const unsigned char* pem = NULL;
|
||||
int pemSz;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_read_bio_X509");
|
||||
|
||||
if (bp == NULL) {
|
||||
WOLFSSL_LEAVE("wolfSSL_PEM_read_bio_X509", BAD_FUNC_ARG);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
pemSz = wolfSSL_BIO_get_mem_data(bp, &pem);
|
||||
if (pemSz <= 0 || pem == NULL) {
|
||||
WOLFSSL_MSG("Issue getting WOLFSSL_BIO mem");
|
||||
WOLFSSL_LEAVE("wolfSSL_PEM_read_bio_X509", pemSz);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
x509 = wolfSSL_X509_load_certificate_buffer(pem, pemSz,
|
||||
SSL_FILETYPE_PEM);
|
||||
|
||||
if (x != NULL) {
|
||||
*x = x509;
|
||||
}
|
||||
|
||||
(void)cb;
|
||||
(void)u;
|
||||
|
||||
return x509;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* bp : bio to read X509 from
|
||||
* x : x509 to write to
|
||||
* cb : password call back for reading PEM
|
||||
* u : password
|
||||
* _AUX is for working with a trusted X509 certificate
|
||||
*/
|
||||
WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX(WOLFSSL_BIO *bp,
|
||||
WOLFSSL_X509 **x, pem_password_cb *cb, void *u) {
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_read_bio_X509");
|
||||
|
||||
/* AUX info is; trusted/rejected uses, friendly name, private key id,
|
||||
* and potentially a stack of "other" info. wolfSSL does not store
|
||||
* friendly name or private key id yet in WOLFSSL_X509 for human
|
||||
* readibility and does not support extra trusted/rejected uses for
|
||||
* root CA. */
|
||||
return wolfSSL_PEM_read_bio_X509(bp, x, cb, u);
|
||||
}
|
||||
|
||||
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(HAVE_STUNNEL)
|
||||
|
||||
unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md)
|
||||
@ -20094,29 +20158,6 @@ void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl)
|
||||
#endif /* HAVE_ECC */
|
||||
|
||||
|
||||
WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u) {
|
||||
(void)bp;
|
||||
(void)x;
|
||||
(void)cb;
|
||||
(void)u;
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_read_bio_X509");
|
||||
WOLFSSL_STUB("wolfSSL_PEM_read_bio_X509");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*** TBD ***/
|
||||
WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u) {
|
||||
(void)bp;
|
||||
(void)x;
|
||||
(void)cb;
|
||||
(void)u;
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_read_bio_X509");
|
||||
WOLFSSL_STUB("wolfSSL_PEM_read_bio_X509");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx, int depth) {
|
||||
(void)ctx;
|
||||
(void)depth;
|
||||
@ -20448,18 +20489,18 @@ WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp, WOLFSSL_DSA **x, pe
|
||||
|
||||
#if defined(HAVE_LIGHTY) || defined(HAVE_STUNNEL) \
|
||||
|| defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(OPENSSL_EXTRA)
|
||||
char * wolf_OBJ_nid2ln(int n) {
|
||||
char * wolfSSL_OBJ_nid2ln(int n) {
|
||||
(void)n;
|
||||
WOLFSSL_ENTER("wolf_OBJ_nid2ln");
|
||||
WOLFSSL_STUB("wolf_OBJ_nid2ln");
|
||||
WOLFSSL_ENTER("wolfSSL_OBJ_nid2ln");
|
||||
WOLFSSL_STUB("wolfSSL_OBJ_nid2ln");
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int wolf_OBJ_txt2nid(const char* s) {
|
||||
int wolfSSL_OBJ_txt2nid(const char* s) {
|
||||
(void)s;
|
||||
WOLFSSL_ENTER("wolf_OBJ_txt2nid");
|
||||
WOLFSSL_STUB("wolf_OBJ_txt2nid");
|
||||
WOLFSSL_ENTER("wolfSSL_OBJ_txt2nid");
|
||||
WOLFSSL_STUB("wolfSSL_OBJ_txt2nid");
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -20489,11 +20530,11 @@ WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bp, WOLFSSL_DH **x, pem_p
|
||||
}
|
||||
|
||||
|
||||
int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x) {
|
||||
int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x) {
|
||||
(void)bp;
|
||||
(void)x;
|
||||
WOLFSSL_ENTER("PEM_write_bio_WOLFSSL_X509");
|
||||
WOLFSSL_STUB("PEM_write_bio_WOLFSSL_X509");
|
||||
WOLFSSL_ENTER("wolfSSL_PEM_write_bio_X509");
|
||||
WOLFSSL_STUB("wolfSSL_PEM_write_bio_X509");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
41
tests/api.c
41
tests/api.c
@ -2617,11 +2617,11 @@ static void test_wolfSSL_CTX_add_extra_chain_cert(void)
|
||||
|
||||
x509 = wolfSSL_X509_load_certificate_file(caFile, SSL_FILETYPE_PEM);
|
||||
AssertNotNull(x509);
|
||||
AssertIntEQ((int)wolfSSL_CTX_add_extra_chain_cert(ctx, x509), SSL_SUCCESS);
|
||||
AssertIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), SSL_SUCCESS);
|
||||
|
||||
x509 = wolfSSL_X509_load_certificate_file(clientFile, SSL_FILETYPE_PEM);
|
||||
AssertNotNull(x509);
|
||||
AssertIntEQ((int)wolfSSL_CTX_add_extra_chain_cert(ctx, x509), SSL_SUCCESS);
|
||||
AssertIntEQ((int)SSL_CTX_add_extra_chain_cert(ctx, x509), SSL_SUCCESS);
|
||||
|
||||
SSL_CTX_free(ctx);
|
||||
printf(resultFmt, passed);
|
||||
@ -2671,10 +2671,10 @@ static void test_wolfSSL_ERR_peek_last_error_line(void)
|
||||
FreeTcpReady(&ready);
|
||||
|
||||
/* check that error code was stored */
|
||||
AssertIntNE((int)wolfSSL_ERR_peek_last_error_line(NULL, NULL), 0);
|
||||
wolfSSL_ERR_peek_last_error_line(NULL, &line);
|
||||
AssertIntNE((int)ERR_peek_last_error_line(NULL, NULL), 0);
|
||||
ERR_peek_last_error_line(NULL, &line);
|
||||
AssertIntNE(line, 0);
|
||||
wolfSSL_ERR_peek_last_error_line(&file, NULL);
|
||||
ERR_peek_last_error_line(&file, NULL);
|
||||
AssertNotNull(file);
|
||||
|
||||
#ifdef WOLFSSL_TIRTOS
|
||||
@ -2796,6 +2796,36 @@ static void test_wolfSSL_set_options(void)
|
||||
}
|
||||
|
||||
|
||||
static void test_wolfSSL_PEM_read_bio(void)
|
||||
{
|
||||
#if defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||
!defined(NO_FILESYSTEM) && !defined(NO_RSA)
|
||||
byte buffer[5300];
|
||||
FILE *f;
|
||||
int bytes;
|
||||
X509* x509;
|
||||
BIO* bio = NULL;
|
||||
|
||||
printf(testingFmt, "wolfSSL_PEM_read_bio()");
|
||||
|
||||
AssertNotNull(f = fopen(cliCert, "rb"));
|
||||
bytes = (int)fread(buffer, 1, sizeof(buffer), f);
|
||||
fclose(f);
|
||||
|
||||
AssertNull(x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL));
|
||||
AssertNotNull(bio = BIO_new_mem_buf((void*)buffer, bytes));
|
||||
AssertNotNull(x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL));
|
||||
AssertIntEQ((int)BIO_set_fd(bio, 0, BIO_NOCLOSE), 1);
|
||||
|
||||
BIO_free(bio);
|
||||
X509_free(x509);
|
||||
|
||||
printf(resultFmt, passed);
|
||||
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_CERTS) && \
|
||||
!defined(NO_FILESYSTEM) && !defined(NO_RSA) */
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*
|
||||
| Main
|
||||
*----------------------------------------------------------------------------*/
|
||||
@ -2852,6 +2882,7 @@ void ApiTest(void)
|
||||
test_wolfSSL_X509_STORE_set_flags();
|
||||
test_wolfSSL_BN();
|
||||
test_wolfSSL_set_options();
|
||||
test_wolfSSL_PEM_read_bio();
|
||||
|
||||
AssertIntEQ(test_wolfSSL_Cleanup(), SSL_SUCCESS);
|
||||
printf(" End API Tests\n");
|
||||
|
@ -447,6 +447,8 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
||||
#define SSL_SESSION_get_timeout wolfSSL_SESSION_get_timeout
|
||||
#define SSL_SESSION_get_time wolfSSL_SESSION_get_time
|
||||
#define SSL_CTX_get_ex_new_index wolfSSL_CTX_get_ex_new_index
|
||||
#define PEM_read_bio_X509 wolfSSL_PEM_read_bio_X509
|
||||
#define PEM_read_bio_X509_AUX wolfSSL_PEM_read_bio_X509_AUX
|
||||
|
||||
/*#if OPENSSL_API_COMPAT < 0x10100000L*/
|
||||
#define CONF_modules_free()
|
||||
@ -478,8 +480,6 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
|
||||
#define OBJ_nid2sn wolfSSL_OBJ_nid2sn
|
||||
#define OBJ_obj2nid wolfSSL_OBJ_obj2nid
|
||||
#define OBJ_sn2nid wolfSSL_OBJ_sn2nid
|
||||
#define PEM_read_bio_X509 wolfSSL_PEM_read_bio_X509
|
||||
#define PEM_read_bio_X509_AUX wolfSSL_PEM_read_bio_X509_AUX
|
||||
#define SSL_CTX_set_verify_depth wolfSSL_CTX_set_verify_depth
|
||||
#define SSL_get_app_data wolfSSL_get_app_data
|
||||
#define SSL_set_app_data wolfSSL_set_app_data
|
||||
@ -501,8 +501,8 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
|
||||
#if defined(HAVE_STUNNEL) || defined(HAVE_LIGHTY) \
|
||||
|| defined(WOLFSSL_MYSQL_COMPATIBLE)
|
||||
|
||||
#define OBJ_nid2ln wolf_OBJ_nid2ln
|
||||
#define OBJ_txt2nid wolf_OBJ_txt2nid
|
||||
#define OBJ_nid2ln wolfSSL_OBJ_nid2ln
|
||||
#define OBJ_txt2nid wolfSSL_OBJ_txt2nid
|
||||
#define PEM_read_bio_DHparams wolfSSL_PEM_read_bio_DHparams
|
||||
#define PEM_read_bio_DSAparams wolfSSL_PEM_read_bio_DSAparams
|
||||
#define PEM_write_bio_X509 PEM_write_bio_WOLFSSL_X509
|
||||
@ -517,7 +517,7 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
|
||||
#define BIO_int_ctrl wolfSSL_BIO_int_ctrl
|
||||
#define BIO_reset wolfSSL_BIO_reset
|
||||
#define BIO_s_socket wolfSSL_BIO_s_socket
|
||||
#define BIO_set_fd wolfSSL_BBIO_set_fd
|
||||
#define BIO_set_fd wolfSSL_BIO_set_fd
|
||||
|
||||
#define BIO_set_write_buf_size wolfSSL_BIO_set_write_buf_size
|
||||
#define BIO_make_bio_pair wolfSSL_BIO_make_bio_pair
|
||||
|
@ -515,6 +515,7 @@ WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_mem_buf(void* buf, int len);
|
||||
|
||||
|
||||
WOLFSSL_API long wolfSSL_BIO_set_ssl(WOLFSSL_BIO*, WOLFSSL*, int flag);
|
||||
WOLFSSL_API long wolfSSL_BIO_set_fd(WOLFSSL_BIO* b, int fd, int flag);
|
||||
WOLFSSL_API void wolfSSL_set_bio(WOLFSSL*, WOLFSSL_BIO* rd, WOLFSSL_BIO* wr);
|
||||
WOLFSSL_API int wolfSSL_add_all_algorithms(void);
|
||||
|
||||
@ -1945,6 +1946,9 @@ WOLFSSL_API size_t wolfSSL_get_client_random(const WOLFSSL* ssl,
|
||||
WOLFSSL_API pem_password_cb wolfSSL_CTX_get_default_passwd_cb(WOLFSSL_CTX *ctx);
|
||||
WOLFSSL_API void *wolfSSL_CTX_get_default_passwd_cb_userdata(WOLFSSL_CTX *ctx);
|
||||
WOLFSSL_API int wolfSSL_CTX_use_PrivateKey(WOLFSSL_CTX *ctx, WOLFSSL_EVP_PKEY *pkey);
|
||||
WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX
|
||||
(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
||||
|
||||
/*lighttp compatibility */
|
||||
|
||||
@ -1966,9 +1970,6 @@ WOLFSSL_API WOLFSSL_BIO_METHOD* wolfSSL_BIO_s_file(void);
|
||||
WOLFSSL_API const char * wolfSSL_OBJ_nid2sn(int n);
|
||||
WOLFSSL_API int wolfSSL_OBJ_obj2nid(const WOLFSSL_ASN1_OBJECT *o);
|
||||
WOLFSSL_API int wolfSSL_OBJ_sn2nid(const char *sn);
|
||||
WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API WOLFSSL_X509 *wolfSSL_PEM_read_bio_X509_AUX
|
||||
(WOLFSSL_BIO *bp, WOLFSSL_X509 **x, pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API void wolfSSL_CTX_set_verify_depth(WOLFSSL_CTX *ctx,int depth);
|
||||
WOLFSSL_API void* wolfSSL_get_app_data( const WOLFSSL *ssl);
|
||||
WOLFSSL_API void wolfSSL_set_app_data(WOLFSSL *ssl, void *arg);
|
||||
@ -1987,15 +1988,15 @@ WOLFSSL_API STACK_OF(WOLFSSL_X509_NAME) *wolfSSL_dup_CA_list( STACK_OF(WOLFSSL_X
|
||||
|| defined(WOLFSSL_MYSQL_COMPATIBLE) \
|
||||
|| defined(OPENSSL_EXTRA)
|
||||
|
||||
WOLFSSL_API char * wolf_OBJ_nid2ln(int n);
|
||||
WOLFSSL_API int wolf_OBJ_txt2nid(const char *sn);
|
||||
WOLFSSL_API char* wolfSSL_OBJ_nid2ln(int n);
|
||||
WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn);
|
||||
WOLFSSL_API WOLFSSL_BIO* wolfSSL_BIO_new_file(const char *filename, const char *mode);
|
||||
WOLFSSL_API long wolfSSL_CTX_set_tmp_dh(WOLFSSL_CTX*, WOLFSSL_DH*);
|
||||
WOLFSSL_API WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bp,
|
||||
WOLFSSL_DH **x, pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp,
|
||||
WOLFSSL_DSA **x, pem_password_cb *cb, void *u);
|
||||
WOLFSSL_API int PEM_write_bio_WOLFSSL_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x);
|
||||
WOLFSSL_API int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bp, WOLFSSL_X509 *x);
|
||||
WOLFSSL_API long wolfSSL_CTX_get_options(WOLFSSL_CTX* ctx);
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user