|
31 | 31 | #include <unistd.h> |
32 | 32 |
|
33 | 33 | /* wolfSSL */ |
34 | | -#include <wolfssl/options.h> |
| 34 | +#ifndef WOLFSSL_USER_SETTINGS |
| 35 | + #include <wolfssl/options.h> |
| 36 | +#endif |
35 | 37 | #include <wolfssl/ssl.h> |
36 | 38 | #include <wolfssl/wolfcrypt/sha256.h> |
37 | 39 | #include <wolfssl/wolfcrypt/cryptocb.h> |
38 | 40 | #include <wolfssl/wolfcrypt/error-crypt.h> |
39 | 41 |
|
40 | 42 | #define DEFAULT_PORT 11111 |
41 | 43 |
|
42 | | -#define CA_FILE "../certs/ca-cert.pem" |
| 44 | +#define USE_ECDHE_ECDSA |
| 45 | +#define USE_TLSV13 |
| 46 | + |
| 47 | +#ifdef USE_ECDHE_ECDSA |
| 48 | +#define CERT_FILE "../certs/client-ecc-cert.pem" |
| 49 | +#define KEY_FILE "../certs/ecc-client-key.pem" |
| 50 | +#define CA_FILE "../certs/ca-ecc-cert.pem" |
| 51 | +#else |
| 52 | +#define CERT_FILE "../certs/client-cert.pem" |
| 53 | +#define KEY_FILE "../certs/client-key.pem" |
| 54 | +#define CA_FILE "../certs/ca-cert.pem" |
| 55 | +#endif |
43 | 56 |
|
44 | 57 | #ifdef WOLF_CRYPTO_CB |
45 | 58 | /* Example custom context for crypto callback */ |
@@ -555,12 +568,45 @@ int main(int argc, char** argv) |
555 | 568 | #endif |
556 | 569 |
|
557 | 570 | /* Create and initialize WOLFSSL_CTX */ |
558 | | - if ((ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method())) == NULL) { |
| 571 | +#ifdef USE_TLSV13 |
| 572 | + ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method()); |
| 573 | +#else |
| 574 | + ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method()); |
| 575 | +#endif |
| 576 | + if (ctx == NULL) { |
559 | 577 | fprintf(stderr, "ERROR: failed to create WOLFSSL_CTX\n"); |
560 | 578 | ret = -1; |
561 | 579 | goto exit; |
562 | 580 | } |
563 | 581 |
|
| 582 | + /* Mutual Authentication */ |
| 583 | + /* Load client certificate into WOLFSSL_CTX */ |
| 584 | + if ((ret = wolfSSL_CTX_use_certificate_file(ctx, CERT_FILE, |
| 585 | + WOLFSSL_FILETYPE_PEM)) != WOLFSSL_SUCCESS) { |
| 586 | + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", |
| 587 | + CERT_FILE); |
| 588 | + goto exit; |
| 589 | + } |
| 590 | + |
| 591 | + /* Load client key into WOLFSSL_CTX */ |
| 592 | + if ((ret = wolfSSL_CTX_use_PrivateKey_file(ctx, KEY_FILE, |
| 593 | + WOLFSSL_FILETYPE_PEM)) != WOLFSSL_SUCCESS) { |
| 594 | + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", |
| 595 | + KEY_FILE); |
| 596 | + goto exit; |
| 597 | + } |
| 598 | + |
| 599 | + /* Load CA certificate into WOLFSSL_CTX for validating peer */ |
| 600 | + if ((ret = wolfSSL_CTX_load_verify_locations(ctx, CA_FILE, NULL)) |
| 601 | + != WOLFSSL_SUCCESS) { |
| 602 | + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", |
| 603 | + CA_FILE); |
| 604 | + goto exit; |
| 605 | + } |
| 606 | + |
| 607 | + /* validate peer certificate */ |
| 608 | + wolfSSL_CTX_set_verify(ctx, WOLFSSL_VERIFY_PEER, NULL); |
| 609 | + |
564 | 610 | /* register a devID for crypto callbacks */ |
565 | 611 | wolfSSL_CTX_SetDevId(ctx, devId); |
566 | 612 |
|
|
0 commit comments