mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
d2i_X509_fp
This commit is contained in:
139
src/ssl.c
139
src/ssl.c
@ -17993,14 +17993,94 @@ int wolfSSL_X509_verify_cert(WOLFSSL_X509_STORE_CTX* ctx)
|
||||
}
|
||||
#endif /* NO_CERTS */
|
||||
|
||||
#ifndef NO_FILESYSTEM
|
||||
static void *wolfSSL_d2i_X509_fp_ex(XFILE file, void **x509, int type)
|
||||
{
|
||||
void *new = NULL;
|
||||
DerBuffer* der = NULL;
|
||||
byte *fileBuffer = NULL;
|
||||
|
||||
if (file != XBADFILE)
|
||||
{
|
||||
long sz = 0;
|
||||
|
||||
XFSEEK(file, 0, XSEEK_END);
|
||||
sz = XFTELL(file);
|
||||
XREWIND(file);
|
||||
|
||||
if (sz < 0)
|
||||
{
|
||||
WOLFSSL_MSG("Bad tell on FILE");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fileBuffer = (byte *)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE);
|
||||
if (fileBuffer != NULL)
|
||||
{
|
||||
if((long)XFREAD(fileBuffer, 1, sz, file) != sz)
|
||||
{
|
||||
WOLFSSL_MSG("File read failed");
|
||||
goto err_exit;
|
||||
}
|
||||
if(type == CERT_TYPE)
|
||||
new = (void *)wolfSSL_X509_d2i(NULL, fileBuffer, (int)sz);
|
||||
#ifdef HAVE_CRL
|
||||
else if(type == CRL_TYPE)
|
||||
new = (void *)wolfSSL_d2i_X509_CRL(NULL, fileBuffer, (int)sz);
|
||||
#endif
|
||||
else goto err_exit;
|
||||
if(new == NULL)
|
||||
{
|
||||
WOLFSSL_MSG("X509 failed");
|
||||
goto err_exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (x509 != NULL)
|
||||
*x509 = new;
|
||||
|
||||
goto _exit;
|
||||
|
||||
err_exit:
|
||||
if(new != NULL){
|
||||
if(type == CERT_TYPE)
|
||||
wolfSSL_X509_free(new);
|
||||
#ifdef HAVE_CRL
|
||||
else {
|
||||
if(type == CRL_TYPE)
|
||||
wolfSSL_X509_CRL_free(new);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
_exit:
|
||||
if(der != NULL)
|
||||
FreeDer(&der);
|
||||
if(fileBuffer != NULL)
|
||||
XFREE(fileBuffer, NULL, DYNAMIC_TYPE_FILE);
|
||||
return new;
|
||||
}
|
||||
|
||||
WOLFSSL_X509 *wolfSSL_d2i_X509_fp(XFILE fp, WOLFSSL_X509 **x509)
|
||||
{
|
||||
WOLFSSL_ENTER("wolfSSL_d2i_X509_fp");
|
||||
return (WOLFSSL_X509 *)wolfSSL_d2i_X509_fp_ex(fp, (void **)x509, CERT_TYPE);
|
||||
}
|
||||
#endif /* NO_FILESYSTEM */
|
||||
|
||||
|
||||
#ifdef HAVE_CRL
|
||||
WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(XFILE fp, WOLFSSL_X509_CRL **crl)
|
||||
{
|
||||
WOLFSSL_ENTER("wolfSSL_d2i_X509_CRL_fp");
|
||||
return (WOLFSSL_X509_CRL *)wolfSSL_d2i_X509_fp_ex(fp, (void **)crl, CRL_TYPE);
|
||||
}
|
||||
|
||||
WOLFSSL_X509_CRL* wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL** crl, const unsigned char* in, int len)
|
||||
{
|
||||
WOLFSSL_X509_CRL *newcrl = NULL;
|
||||
int ret ;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_X509_CRL_d2i");
|
||||
WOLFSSL_ENTER("wolfSSL_d2i_X509_CRL");
|
||||
|
||||
if(in == NULL){
|
||||
WOLFSSL_MSG("Bad argument value");
|
||||
@ -18034,63 +18114,6 @@ _exit:
|
||||
return newcrl;
|
||||
}
|
||||
|
||||
#ifndef NO_FILESYSTEM
|
||||
WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(WOLFSSL_X509_CRL **crl, XFILE file)
|
||||
{
|
||||
WOLFSSL_X509_CRL *newcrl = NULL;
|
||||
DerBuffer* der = NULL;
|
||||
byte *fileBuffer = NULL;
|
||||
|
||||
WOLFSSL_ENTER("wolfSSL_d2i_X509_CRL_fp");
|
||||
|
||||
if (file != XBADFILE)
|
||||
{
|
||||
long sz = 0;
|
||||
|
||||
XFSEEK(file, 0, XSEEK_END);
|
||||
sz = XFTELL(file);
|
||||
XREWIND(file);
|
||||
|
||||
if (sz < 0)
|
||||
{
|
||||
WOLFSSL_MSG("Bad tell on FILE");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fileBuffer = (byte *)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE);
|
||||
if (fileBuffer != NULL)
|
||||
{
|
||||
if((long)XFREAD(fileBuffer, 1, sz, file) != sz)
|
||||
{
|
||||
WOLFSSL_MSG("File read failed");
|
||||
goto err_exit;
|
||||
}
|
||||
|
||||
newcrl = wolfSSL_d2i_X509_CRL(NULL, fileBuffer, (int)sz);
|
||||
if(newcrl == NULL)
|
||||
{
|
||||
WOLFSSL_MSG("X509_CRL failed");
|
||||
goto err_exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (crl != NULL)
|
||||
*crl = newcrl;
|
||||
|
||||
goto _exit;
|
||||
|
||||
err_exit:
|
||||
if(newcrl != NULL)
|
||||
wolfSSL_X509_CRL_free(newcrl);
|
||||
_exit:
|
||||
if(der != NULL)
|
||||
FreeDer(&der);
|
||||
if(fileBuffer != NULL)
|
||||
XFREE(fileBuffer, NULL, DYNAMIC_TYPE_FILE);
|
||||
return newcrl;
|
||||
}
|
||||
#endif
|
||||
|
||||
void wolfSSL_X509_CRL_free(WOLFSSL_X509_CRL *crl)
|
||||
{
|
||||
WOLFSSL_ENTER("wolfSSL_X509_CRL_free");
|
||||
|
19
tests/api.c
19
tests/api.c
@ -16671,6 +16671,9 @@ static void test_wolfSSL_X509(void)
|
||||
X509_STORE_CTX* ctx;
|
||||
X509_STORE* store;
|
||||
|
||||
char der[] = "certs/ca-cert.der";
|
||||
XFILE fp;
|
||||
|
||||
printf(testingFmt, "wolfSSL_X509()");
|
||||
|
||||
AssertNotNull(x509 = X509_new());
|
||||
@ -16695,6 +16698,18 @@ static void test_wolfSSL_X509(void)
|
||||
X509_STORE_CTX_free(ctx);
|
||||
BIO_free(bio);
|
||||
|
||||
/** d2i_X509_fp test **/
|
||||
AssertNotNull(fp = XFOPEN(der, "rb"));
|
||||
AssertNotNull(x509 = (X509 *)d2i_X509_fp(fp, (X509 **)NULL));
|
||||
AssertNotNull(x509);
|
||||
X509_free(x509);
|
||||
XFCLOSE(fp);
|
||||
AssertNotNull(fp = XFOPEN(der, "rb"));
|
||||
AssertNotNull((X509 *)d2i_X509_fp(fp, (X509 **)&x509));
|
||||
AssertNotNull(x509);
|
||||
X509_free(x509);
|
||||
XFCLOSE(fp);
|
||||
|
||||
printf(resultFmt, passed);
|
||||
#endif
|
||||
}
|
||||
@ -18724,12 +18739,12 @@ static void test_wolfSSL_X509_CRL(void)
|
||||
#ifdef HAVE_TEST_d2i_X509_CRL_fp
|
||||
for(i = 0; der[i][0] != '\0'; i++){
|
||||
AssertNotNull(fp = XFOPEN(der[i], "rb"));
|
||||
AssertNotNull(crl = (X509_CRL *)d2i_X509_CRL_fp((X509_CRL **)NULL, fp));
|
||||
AssertNotNull(crl = (X509_CRL *)d2i_X509_CRL_fp((fp, X509_CRL **)NULL));
|
||||
AssertNotNull(crl);
|
||||
X509_CRL_free(crl);
|
||||
XFCLOSE(fp);
|
||||
AssertNotNull(fp = XFOPEN(der[i], "rb"));
|
||||
AssertNotNull((X509_CRL *)d2i_X509_CRL_fp((X509_CRL **)&crl, fp));
|
||||
AssertNotNull((X509_CRL *)d2i_X509_CRL_fp(fp, (X509_CRL **)&crl));
|
||||
AssertNotNull(crl);
|
||||
X509_CRL_free(crl);
|
||||
XFCLOSE(fp);
|
||||
|
@ -513,6 +513,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
|
||||
#define sk_X509_free wolfSSL_sk_X509_free
|
||||
#define i2d_X509_bio wolfSSL_i2d_X509_bio
|
||||
#define d2i_X509_bio wolfSSL_d2i_X509_bio
|
||||
#define d2i_X509_fp wolfSSL_d2i_X509_fp
|
||||
#define i2d_X509 wolfSSL_i2d_X509
|
||||
#define d2i_X509 wolfSSL_d2i_X509
|
||||
#define d2i_RSAPublicKey wolfSSL_d2i_RSAPublicKey
|
||||
|
@ -1521,7 +1521,7 @@ WOLFSSL_API int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out);
|
||||
WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL(WOLFSSL_X509_CRL **crl,
|
||||
const unsigned char *in, int len);
|
||||
#ifndef NO_FILESYSTEM
|
||||
WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(WOLFSSL_X509_CRL **crl, XFILE file);
|
||||
WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(XFILE file, WOLFSSL_X509_CRL **crl);
|
||||
#endif
|
||||
WOLFSSL_API void wolfSSL_X509_CRL_free(WOLFSSL_X509_CRL *crl);
|
||||
|
||||
@ -2537,6 +2537,10 @@ WOLFSSL_API int wolfSSL_SESSION_get_master_key_length(const WOLFSSL_SESSION* ses
|
||||
WOLFSSL_API void wolfSSL_CTX_set_cert_store(WOLFSSL_CTX* ctx,
|
||||
WOLFSSL_X509_STORE* str);
|
||||
WOLFSSL_API int wolfSSL_i2d_X509_bio(WOLFSSL_BIO* bio, WOLFSSL_X509* x509);
|
||||
#if !defined(NO_FILESYSTEM)
|
||||
WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_fp(XFILE fp,
|
||||
WOLFSSL_X509** x509);
|
||||
#endif
|
||||
WOLFSSL_API WOLFSSL_X509* wolfSSL_d2i_X509_bio(WOLFSSL_BIO* bio,
|
||||
WOLFSSL_X509** x509);
|
||||
WOLFSSL_API WOLFSSL_X509_STORE* wolfSSL_CTX_get_cert_store(WOLFSSL_CTX* ctx);
|
||||
|
Reference in New Issue
Block a user