Skip to content

Commit d9f7629

Browse files
committed
Add grpc support
- Fix BIO_BIO type - Set retry flags correctly - Add CRL callback - Copy the alt names instead of trying to share a pointer - Allow calling wolfSSL_get_servername on client side (to get the requested name) - Return the chain in wolfSSL_X509_STORE_CTX_get_chain in the correct order - Peer first, top CA last - Fix leak in RebuildFullName - Add CopyString helper function - Implement - X509_CRL_dup - ASN1_UTCTIME_set - X509_STORE_CTX_get0_param - X509_STORE_get0_param - X509_STORE_set_verify_cb - X509_STORE_set_get_crl - X509_set1_notAfter - X509_set1_notBefore
1 parent 712ff0a commit d9f7629

17 files changed

Lines changed: 805 additions & 387 deletions

File tree

src/bio.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ static int wolfSSL_BIO_BIO_read(WOLFSSL_BIO* bio, void* buf, int len)
7777
if (buf == NULL || len == 0)
7878
return 0;
7979

80+
/* default no retry */
81+
bio->flags &= ~(WOLFSSL_BIO_FLAG_READ|WOLFSSL_BIO_FLAG_RETRY);
8082
sz1 = wolfSSL_BIO_nread(bio, &pt, len);
8183
if (sz1 > 0) {
8284
XMEMCPY(buf, pt, sz1);
@@ -91,8 +93,10 @@ static int wolfSSL_BIO_BIO_read(WOLFSSL_BIO* bio, void* buf, int len)
9193
}
9294
}
9395
}
94-
if (sz1 == 0)
96+
if (sz1 == 0) {
97+
bio->flags |= WOLFSSL_BIO_FLAG_READ|WOLFSSL_BIO_FLAG_RETRY;
9598
sz1 = -1;
99+
}
96100

97101
return sz1;
98102
}
@@ -502,8 +506,11 @@ static int wolfSSL_BIO_BIO_write(WOLFSSL_BIO* bio, const void* data,
502506
if (bio == NULL || data == NULL || len == 0)
503507
return 0;
504508

509+
/* default no retry */
510+
bio->flags &= ~(WOLFSSL_BIO_FLAG_WRITE|WOLFSSL_BIO_FLAG_RETRY);
505511
sz1 = wolfSSL_BIO_nwrite(bio, &buf, len);
506512
if (sz1 == 0) {
513+
bio->flags |= WOLFSSL_BIO_FLAG_WRITE|WOLFSSL_BIO_FLAG_RETRY;
507514
WOLFSSL_MSG("No room left to write");
508515
return WOLFSSL_BIO_ERROR;
509516
}
@@ -521,6 +528,8 @@ static int wolfSSL_BIO_BIO_write(WOLFSSL_BIO* bio, const void* data,
521528
if (sz2 > 0) {
522529
XMEMCPY(buf, data, sz2);
523530
sz1 += sz2;
531+
if (len > sz2)
532+
bio->flags |= WOLFSSL_BIO_FLAG_WRITE|WOLFSSL_BIO_FLAG_RETRY;
524533
}
525534
}
526535

src/crl.c

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ int CheckCertCRL_ex(WOLFSSL_CRL* crl, byte* issuerHash, byte* serial,
504504
/* and try again checking Cert in the CRL list. */
505505
/* When not set the folder or not use hash_dir, do nothing. */
506506
if ((foundEntry == 0) && (ret != OCSP_WANT_READ)) {
507-
if (crl->cm->x509_store_p != NULL) {
507+
if (crl->cm != NULL && crl->cm->x509_store_p != NULL) {
508508
ret = LoadCertByIssuer(crl->cm->x509_store_p,
509509
(WOLFSSL_X509_NAME*)issuerName, X509_LU_CRL);
510510
if (ret == WOLFSSL_SUCCESS) {
@@ -521,7 +521,7 @@ int CheckCertCRL_ex(WOLFSSL_CRL* crl, byte* issuerHash, byte* serial,
521521
ret = CRL_MISSING;
522522
}
523523

524-
if (crl->cm->cbMissingCRL) {
524+
if (crl->cm != NULL && crl->cm->cbMissingCRL) {
525525
char url[256];
526526

527527
WOLFSSL_MSG("Issuing missing CRL callback");
@@ -685,8 +685,8 @@ static WOLFSSL_X509_CRL* wolfSSL_X509_crl_new(WOLFSSL_CERT_MANAGER* cm)
685685
{
686686
WOLFSSL_X509_CRL* ret;
687687

688-
ret = (WOLFSSL_X509_CRL*)XMALLOC(sizeof(WOLFSSL_X509_CRL), cm->heap,
689-
DYNAMIC_TYPE_CRL);
688+
ret = (WOLFSSL_X509_CRL*)XMALLOC(sizeof(WOLFSSL_X509_CRL),
689+
cm != NULL ? cm->heap : NULL, DYNAMIC_TYPE_CRL);
690690
if (ret != NULL) {
691691
if (InitCRL(ret, cm) < 0) {
692692
WOLFSSL_MSG("Unable to initialize new CRL structure");
@@ -885,6 +885,20 @@ static int DupX509_CRL(WOLFSSL_X509_CRL *dupl, const WOLFSSL_X509_CRL* crl)
885885
return 0;
886886
}
887887

888+
WOLFSSL_X509_CRL* wolfSSL_X509_CRL_dup(const WOLFSSL_X509_CRL* crl)
889+
{
890+
WOLFSSL_X509_CRL* ret;
891+
892+
WOLFSSL_ENTER("wolfSSL_X509_CRL_dup");
893+
894+
ret = wolfSSL_X509_crl_new(crl->cm);
895+
if (ret != NULL && DupX509_CRL(ret, crl) != 0) {
896+
FreeCRL(ret, 1);
897+
ret = NULL;
898+
}
899+
return ret;
900+
}
901+
888902
/* returns WOLFSSL_SUCCESS on success. Does not take ownership of newcrl */
889903
int wolfSSL_X509_STORE_add_crl(WOLFSSL_X509_STORE *store, WOLFSSL_X509_CRL *newcrl)
890904
{

0 commit comments

Comments
 (0)