Skip to content

Commit 0aa8e2e

Browse files
authored
Merge pull request #7445 from julek-wolfssl/grpc
Add grpc support
2 parents 712ff0a + 76aba42 commit 0aa8e2e

20 files changed

Lines changed: 925 additions & 401 deletions

File tree

.github/workflows/grpc.yml

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
name: grpc Tests
2+
3+
# START OF COMMON SECTION
4+
on:
5+
push:
6+
branches: [ 'master', 'main', 'release/**' ]
7+
pull_request:
8+
branches: [ '*' ]
9+
10+
concurrency:
11+
group: ${{ github.workflow }}-${{ github.ref }}
12+
cancel-in-progress: true
13+
# END OF COMMON SECTION
14+
15+
jobs:
16+
build_wolfssl:
17+
name: Build wolfSSL
18+
# Just to keep it the same as the testing target
19+
runs-on: ubuntu-latest
20+
# This should be a safe limit for the tests to run.
21+
timeout-minutes: 10
22+
steps:
23+
- name: Build wolfSSL
24+
uses: wolfSSL/actions-build-autotools-project@v1
25+
with:
26+
path: wolfssl
27+
configure: --enable-all 'CPPFLAGS=-DWOLFSSL_RSA_KEY_CHECK -DHAVE_EX_DATA_CLEANUP_HOOKS'
28+
install: true
29+
30+
- name: Upload built lib
31+
uses: actions/upload-artifact@v4
32+
with:
33+
name: wolf-install-grpc
34+
path: build-dir
35+
retention-days: 5
36+
37+
grpc_check:
38+
strategy:
39+
fail-fast: false
40+
matrix:
41+
include:
42+
- ref: v1.60.0
43+
tests: >-
44+
bad_ssl_alpn_test bad_ssl_cert_test client_ssl_test
45+
crl_ssl_transport_security_test server_ssl_test
46+
ssl_transport_security_test ssl_transport_security_utils_test
47+
test_core_security_ssl_credentials_test test_cpp_end2end_ssl_credentials_test
48+
h2_ssl_cert_test h2_ssl_session_reuse_test
49+
name: ${{ matrix.ref }}
50+
runs-on: ubuntu-latest
51+
# This should be a safe limit for the tests to run.
52+
timeout-minutes: 60
53+
needs: build_wolfssl
54+
steps:
55+
- name: Confirm IPv4 and IPv6 support
56+
run: |
57+
ip addr list lo | grep 'inet '
58+
ip addr list lo | grep 'inet6 '
59+
60+
- name: Install prereqs
61+
run:
62+
sudo apt-get install build-essential autoconf libtool pkg-config cmake clang libc++-dev
63+
64+
- name: Download lib
65+
uses: actions/download-artifact@v4
66+
with:
67+
name: wolf-install-grpc
68+
path: build-dir
69+
70+
- name: Checkout OSP
71+
uses: actions/checkout@v4
72+
with:
73+
# TODO point to wolf repo once merged
74+
repository: julek-wolfssl/osp
75+
path: osp
76+
ref: grpc-update
77+
78+
- name: Checkout grpc
79+
uses: actions/checkout@v4
80+
with:
81+
repository: grpc/grpc
82+
path: grpc
83+
ref: ${{ matrix.ref }}
84+
85+
- name: Build grpc
86+
working-directory: ./grpc
87+
run: |
88+
patch -p1 < ../osp/grpc/grpc-${{ matrix.ref }}.patch
89+
git submodule update --init
90+
mkdir cmake/build
91+
cd cmake/build
92+
cmake -DgRPC_BUILD_TESTS=ON -DgRPC_SSL_PROVIDER=wolfssl \
93+
-DWOLFSSL_INSTALL_DIR=$GITHUB_WORKSPACE/build-dir ../..
94+
make -j $(nproc) ${{ matrix.tests }}
95+
96+
- name: Run grpc tests
97+
working-directory: ./grpc
98+
run: |
99+
export LD_LIBRARY_PATH=$GITHUB_WORKSPACE/build-dir/lib:$LD_LIBRARY_PATH
100+
./tools/run_tests/start_port_server.py
101+
for t in ${{ matrix.tests }} ; do
102+
./cmake/build/$t
103+
done

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)