diff options
author | Alexander Polcyn <apolcyn@google.com> | 2017-11-13 16:31:27 -0800 |
---|---|---|
committer | Alexander Polcyn <apolcyn@google.com> | 2017-11-13 16:31:27 -0800 |
commit | 248c4f5848c8761fc16352e1f2f1e6d047780b4e (patch) | |
tree | db3bc383eeccf2599a2c3ddae821ad363c74515a /test/core/handshake | |
parent | 3f6b10afba43e2855efd2fbeb3f1f4ea6c2a9657 (diff) | |
parent | e52772451a7bbf4f3f7b72cfc369781fd74a6930 (diff) |
Merge remote-tracking branch 'upstream/master' into pass_args_to_tsi
Diffstat (limited to 'test/core/handshake')
-rw-r--r-- | test/core/handshake/BUILD | 8 | ||||
-rw-r--r-- | test/core/handshake/client_ssl.cc (renamed from test/core/handshake/client_ssl.c) | 70 | ||||
-rw-r--r-- | test/core/handshake/readahead_handshaker_server_ssl.cc (renamed from test/core/handshake/readahead_handshaker_server_ssl.c) | 30 | ||||
-rw-r--r-- | test/core/handshake/server_ssl.cc (renamed from test/core/handshake/server_ssl.c) | 10 | ||||
-rw-r--r-- | test/core/handshake/server_ssl_common.cc (renamed from test/core/handshake/server_ssl_common.c) | 43 | ||||
-rw-r--r-- | test/core/handshake/server_ssl_common.h | 4 |
6 files changed, 83 insertions, 82 deletions
diff --git a/test/core/handshake/BUILD b/test/core/handshake/BUILD index 8e462cfc5b..aea4a27e99 100644 --- a/test/core/handshake/BUILD +++ b/test/core/handshake/BUILD @@ -20,8 +20,8 @@ licenses(["notice"]) # Apache v2 grpc_cc_test( name = "client_ssl", - srcs = ["client_ssl.c"], - language = "C", + srcs = ["client_ssl.cc"], + language = "C++", data = [ "//src/core/tsi/test_creds:ca.pem", "//src/core/tsi/test_creds:server1.key", @@ -37,8 +37,8 @@ grpc_cc_test( grpc_cc_test( name = "server_ssl", - srcs = ["server_ssl.c"], - language = "C", + srcs = ["server_ssl.cc"], + language = "C++", data = [ "//src/core/tsi/test_creds:ca.pem", "//src/core/tsi/test_creds:server1.key", diff --git a/test/core/handshake/client_ssl.c b/test/core/handshake/client_ssl.cc index de660fe1c4..b8cfd627a9 100644 --- a/test/core/handshake/client_ssl.c +++ b/test/core/handshake/client_ssl.cc @@ -46,13 +46,13 @@ // Arguments for TLS server thread. typedef struct { int socket; - char *alpn_preferred; + char* alpn_preferred; } server_args; // Based on https://wiki.openssl.org/index.php/Simple_TLS_Server. // Pick an arbitrary unused port and return it in *out_port. Return // an fd>=0 on success. -static int create_socket(int *out_port) { +static int create_socket(int* out_port) { int s; struct sockaddr_in addr; socklen_t addr_len; @@ -68,7 +68,7 @@ static int create_socket(int *out_port) { return -1; } - if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + if (bind(s, (struct sockaddr*)&addr, sizeof(addr)) < 0) { perror("Unable to bind"); gpr_log(GPR_ERROR, "%s", "Unable to bind to any port"); close(s); @@ -82,7 +82,7 @@ static int create_socket(int *out_port) { } addr_len = sizeof(addr); - if (getsockname(s, (struct sockaddr *)&addr, &addr_len) != 0 || + if (getsockname(s, (struct sockaddr*)&addr, &addr_len) != 0 || addr_len > sizeof(addr)) { perror("getsockname"); gpr_log(GPR_ERROR, "%s", "Unable to get socket local address"); @@ -96,19 +96,19 @@ static int create_socket(int *out_port) { // Server callback during ALPN negotiation. See man page for // SSL_CTX_set_alpn_select_cb. -static int alpn_select_cb(SSL *ssl, const uint8_t **out, uint8_t *out_len, - const uint8_t *in, unsigned in_len, void *arg) { - const uint8_t *alpn_preferred = (const uint8_t *)arg; +static int alpn_select_cb(SSL* ssl, const uint8_t** out, uint8_t* out_len, + const uint8_t* in, unsigned in_len, void* arg) { + const uint8_t* alpn_preferred = (const uint8_t*)arg; *out = alpn_preferred; - *out_len = (uint8_t)strlen((char *)alpn_preferred); + *out_len = (uint8_t)strlen((char*)alpn_preferred); // Validate that the ALPN list includes "h2" and "grpc-exp", that "grpc-exp" // precedes "h2". bool grpc_exp_seen = false; bool h2_seen = false; - const char *inp = (const char *)in; - const char *in_end = inp + in_len; + const char* inp = (const char*)in; + const char* in_end = inp + in_len; while (inp < in_end) { const size_t length = (size_t)*inp++; if (length == strlen("grpc-exp") && strncmp(inp, "grpc-exp", length) == 0) { @@ -132,14 +132,14 @@ static int alpn_select_cb(SSL *ssl, const uint8_t **out, uint8_t *out_len, // Minimal TLS server. This is largely based on the example at // https://wiki.openssl.org/index.php/Simple_TLS_Server and the gRPC core // internals in src/core/tsi/ssl_transport_security.c. -static void server_thread(void *arg) { - const server_args *args = (server_args *)arg; +static void server_thread(void* arg) { + const server_args* args = (server_args*)arg; SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); - const SSL_METHOD *method = TLSv1_2_server_method(); - SSL_CTX *ctx = SSL_CTX_new(method); + const SSL_METHOD* method = TLSv1_2_server_method(); + SSL_CTX* ctx = SSL_CTX_new(method); if (!ctx) { perror("Unable to create SSL context"); ERR_print_errors_fp(stderr); @@ -158,7 +158,7 @@ static void server_thread(void *arg) { // Set the cipher list to match the one expressed in // src/core/tsi/ssl_transport_security.c. - const char *cipher_list = + const char* cipher_list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-" "SHA384:ECDHE-RSA-AES256-GCM-SHA384"; if (!SSL_CTX_set_cipher_list(ctx, cipher_list)) { @@ -175,14 +175,14 @@ static void server_thread(void *arg) { gpr_log(GPR_INFO, "Server listening"); struct sockaddr_in addr; socklen_t len = sizeof(addr); - const int client = accept(sock, (struct sockaddr *)&addr, &len); + const int client = accept(sock, (struct sockaddr*)&addr, &len); if (client < 0) { perror("Unable to accept"); abort(); } // Establish a SSL* and accept at SSL layer. - SSL *ssl = SSL_new(ctx); + SSL* ssl = SSL_new(ctx); GPR_ASSERT(ssl); SSL_set_fd(ssl, client); if (SSL_accept(ssl) <= 0) { @@ -208,7 +208,7 @@ static void server_thread(void *arg) { // establishes a TLS handshake via the core library to the server. The TLS // server validates ALPN aspects of the handshake and supplies the protocol // specified in the server_alpn_preferred argument to the client. -static bool client_ssl_test(char *server_alpn_preferred) { +static bool client_ssl_test(char* server_alpn_preferred) { bool success = true; grpc_init(); @@ -230,8 +230,7 @@ static bool client_ssl_test(char *server_alpn_preferred) { gpr_thd_options thdopt = gpr_thd_options_default(); gpr_thd_id thdid; gpr_thd_options_set_joinable(&thdopt); - server_args args = {.socket = server_socket, - .alpn_preferred = server_alpn_preferred}; + server_args args = {server_socket, server_alpn_preferred}; GPR_ASSERT(gpr_thd_new(&thdid, server_thread, &args, &thdopt)); // Load key pair and establish client SSL credentials. @@ -243,23 +242,24 @@ static bool client_ssl_test(char *server_alpn_preferred) { grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); - const char *ca_cert = (const char *)GRPC_SLICE_START_PTR(ca_slice); - pem_key_cert_pair.private_key = (const char *)GRPC_SLICE_START_PTR(key_slice); - pem_key_cert_pair.cert_chain = (const char *)GRPC_SLICE_START_PTR(cert_slice); - grpc_channel_credentials *ssl_creds = + const char* ca_cert = (const char*)GRPC_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char*)GRPC_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char*)GRPC_SLICE_START_PTR(cert_slice); + grpc_channel_credentials* ssl_creds = grpc_ssl_credentials_create(ca_cert, &pem_key_cert_pair, NULL); // Establish a channel pointing at the TLS server. Since the gRPC runtime is // lazy, this won't necessarily establish a connection yet. - char *target; + char* target; gpr_asprintf(&target, "127.0.0.1:%d", port); - grpc_arg ssl_name_override = {GRPC_ARG_STRING, - GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, - {"foo.test.google.fr"}}; + grpc_arg ssl_name_override = { + GRPC_ARG_STRING, + const_cast<char*>(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG), + {const_cast<char*>("foo.test.google.fr")}}; grpc_channel_args grpc_args; grpc_args.num_args = 1; grpc_args.args = &ssl_name_override; - grpc_channel *channel = + grpc_channel* channel = grpc_secure_channel_create(ssl_creds, target, &grpc_args, NULL); GPR_ASSERT(channel); gpr_free(target); @@ -274,7 +274,7 @@ static bool client_ssl_test(char *server_alpn_preferred) { // completed and we know that the client's ALPN list satisfied the server. int retries = 10; grpc_connectivity_state state = GRPC_CHANNEL_IDLE; - grpc_completion_queue *cq = grpc_completion_queue_create_for_next(NULL); + grpc_completion_queue* cq = grpc_completion_queue_create_for_next(NULL); while (state != GRPC_CHANNEL_READY && retries-- > 0) { grpc_channel_watch_connectivity_state( @@ -303,21 +303,21 @@ static bool client_ssl_test(char *server_alpn_preferred) { return success; } -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { // Handshake succeeeds when the server has grpc-exp as the ALPN preference. - GPR_ASSERT(client_ssl_test("grpc-exp")); + GPR_ASSERT(client_ssl_test(const_cast<char*>("grpc-exp"))); // Handshake succeeeds when the server has h2 as the ALPN preference. This // covers legacy gRPC servers which don't support grpc-exp. - GPR_ASSERT(client_ssl_test("h2")); + GPR_ASSERT(client_ssl_test(const_cast<char*>("h2"))); // Handshake fails when the server uses a fake protocol as its ALPN // preference. This validates the client is correctly validating ALPN returns // and sanity checks the client_ssl_test. - GPR_ASSERT(!client_ssl_test("foo")); + GPR_ASSERT(!client_ssl_test(const_cast<char*>("foo"))); return 0; } #else /* GRPC_POSIX_SOCKET */ -int main(int argc, char **argv) { return 1; } +int main(int argc, char** argv) { return 1; } #endif /* GRPC_POSIX_SOCKET */ diff --git a/test/core/handshake/readahead_handshaker_server_ssl.c b/test/core/handshake/readahead_handshaker_server_ssl.cc index f25c35615c..2810082837 100644 --- a/test/core/handshake/readahead_handshaker_server_ssl.c +++ b/test/core/handshake/readahead_handshaker_server_ssl.cc @@ -49,19 +49,19 @@ * to the security_handshaker). This test is meant to protect code relying on * this functionality that lives outside of this repo. */ -static void readahead_handshaker_destroy(grpc_exec_ctx *ctx, - grpc_handshaker *handshaker) { +static void readahead_handshaker_destroy(grpc_exec_ctx* ctx, + grpc_handshaker* handshaker) { gpr_free(handshaker); } -static void readahead_handshaker_shutdown(grpc_exec_ctx *ctx, - grpc_handshaker *handshaker, - grpc_error *error) {} +static void readahead_handshaker_shutdown(grpc_exec_ctx* ctx, + grpc_handshaker* handshaker, + grpc_error* error) {} static void readahead_handshaker_do_handshake( - grpc_exec_ctx *ctx, grpc_handshaker *handshaker, - grpc_tcp_server_acceptor *acceptor, grpc_closure *on_handshake_done, - grpc_handshaker_args *args) { + grpc_exec_ctx* ctx, grpc_handshaker* handshaker, + grpc_tcp_server_acceptor* acceptor, grpc_closure* on_handshake_done, + grpc_handshaker_args* args) { grpc_endpoint_read(ctx, args->endpoint, args->read_buffer, on_handshake_done); } @@ -69,34 +69,34 @@ const grpc_handshaker_vtable readahead_handshaker_vtable = { readahead_handshaker_destroy, readahead_handshaker_shutdown, readahead_handshaker_do_handshake}; -static grpc_handshaker *readahead_handshaker_create(grpc_exec_ctx *ctx) { - grpc_handshaker *h = (grpc_handshaker *)gpr_zalloc(sizeof(grpc_handshaker)); +static grpc_handshaker* readahead_handshaker_create(grpc_exec_ctx* ctx) { + grpc_handshaker* h = (grpc_handshaker*)gpr_zalloc(sizeof(grpc_handshaker)); grpc_handshaker_init(&readahead_handshaker_vtable, h); return h; } static void readahead_handshaker_factory_add_handshakers( - grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *hf, - const grpc_channel_args *args, grpc_handshake_manager *handshake_mgr) { + grpc_exec_ctx* exec_ctx, grpc_handshaker_factory* hf, + const grpc_channel_args* args, grpc_handshake_manager* handshake_mgr) { grpc_handshake_manager_add(handshake_mgr, readahead_handshaker_create(exec_ctx)); } static void readahead_handshaker_factory_destroy( - grpc_exec_ctx *exec_ctx, grpc_handshaker_factory *handshaker_factory) {} + grpc_exec_ctx* exec_ctx, grpc_handshaker_factory* handshaker_factory) {} static const grpc_handshaker_factory_vtable readahead_handshaker_factory_vtable = { readahead_handshaker_factory_add_handshakers, readahead_handshaker_factory_destroy}; -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { grpc_handshaker_factory readahead_handshaker_factory = { &readahead_handshaker_factory_vtable}; grpc_init(); grpc_handshaker_factory_register(true /* at_start */, HANDSHAKER_SERVER, &readahead_handshaker_factory); - const char *full_alpn_list[] = {"grpc-exp", "h2"}; + const char* full_alpn_list[] = {"grpc-exp", "h2"}; GPR_ASSERT(server_ssl_test(full_alpn_list, 2, "grpc-exp")); grpc_shutdown(); return 0; diff --git a/test/core/handshake/server_ssl.c b/test/core/handshake/server_ssl.cc index 8b96076338..736d3e578e 100644 --- a/test/core/handshake/server_ssl.c +++ b/test/core/handshake/server_ssl.cc @@ -36,22 +36,22 @@ #include "test/core/handshake/server_ssl_common.h" -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { // Handshake succeeeds when the client supplies the standard ALPN list. - const char *full_alpn_list[] = {"grpc-exp", "h2"}; + const char* full_alpn_list[] = {"grpc-exp", "h2"}; GPR_ASSERT(server_ssl_test(full_alpn_list, 2, "grpc-exp")); // Handshake succeeeds when the client supplies only h2 as the ALPN list. This // covers legacy gRPC clients which don't support grpc-exp. - const char *h2_only_alpn_list[] = {"h2"}; + const char* h2_only_alpn_list[] = {"h2"}; GPR_ASSERT(server_ssl_test(h2_only_alpn_list, 1, "h2")); // Handshake succeeds when the client supplies superfluous ALPN entries and // also when h2 precedes gprc-exp. - const char *extra_alpn_list[] = {"foo", "h2", "bar", "grpc-exp"}; + const char* extra_alpn_list[] = {"foo", "h2", "bar", "grpc-exp"}; GPR_ASSERT(server_ssl_test(extra_alpn_list, 4, "h2")); // Handshake fails when the client uses a fake protocol as its only ALPN // preference. This validates the server is correctly validating ALPN // and sanity checks the server_ssl_test. - const char *fake_alpn_list[] = {"foo"}; + const char* fake_alpn_list[] = {"foo"}; GPR_ASSERT(!server_ssl_test(fake_alpn_list, 1, "foo")); return 0; } diff --git a/test/core/handshake/server_ssl_common.c b/test/core/handshake/server_ssl_common.cc index d1911ecfde..2ad7a13adb 100644 --- a/test/core/handshake/server_ssl_common.c +++ b/test/core/handshake/server_ssl_common.cc @@ -57,7 +57,7 @@ static int create_socket(int port) { return -1; } - if (connect(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) < 0) { perror("Unable to connect"); return -1; } @@ -66,8 +66,8 @@ static int create_socket(int port) { } // Simple gRPC server. This listens until client_handshake_complete occurs. -static void server_thread(void *arg) { - const int port = *(int *)arg; +static void server_thread(void* arg) { + const int port = *(int*)arg; // Load key pair and establish server SSL credentials. grpc_ssl_pem_key_cert_pair pem_key_cert_pair; @@ -78,20 +78,20 @@ static void server_thread(void *arg) { grpc_load_file(SSL_CERT_PATH, 1, &cert_slice))); GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file", grpc_load_file(SSL_KEY_PATH, 1, &key_slice))); - const char *ca_cert = (const char *)GRPC_SLICE_START_PTR(ca_slice); - pem_key_cert_pair.private_key = (const char *)GRPC_SLICE_START_PTR(key_slice); - pem_key_cert_pair.cert_chain = (const char *)GRPC_SLICE_START_PTR(cert_slice); - grpc_server_credentials *ssl_creds = grpc_ssl_server_credentials_create( + const char* ca_cert = (const char*)GRPC_SLICE_START_PTR(ca_slice); + pem_key_cert_pair.private_key = (const char*)GRPC_SLICE_START_PTR(key_slice); + pem_key_cert_pair.cert_chain = (const char*)GRPC_SLICE_START_PTR(cert_slice); + grpc_server_credentials* ssl_creds = grpc_ssl_server_credentials_create( ca_cert, &pem_key_cert_pair, 1, 0, NULL); // Start server listening on local port. - char *addr; + char* addr; gpr_asprintf(&addr, "127.0.0.1:%d", port); - grpc_server *server = grpc_server_create(NULL, NULL); + grpc_server* server = grpc_server_create(NULL, NULL); GPR_ASSERT(grpc_server_add_secure_http2_port(server, addr, ssl_creds)); free(addr); - grpc_completion_queue *cq = grpc_completion_queue_create_for_next(NULL); + grpc_completion_queue* cq = grpc_completion_queue_create_for_next(NULL); grpc_server_register_completion_queue(server, cq, NULL); grpc_server_start(server); @@ -125,8 +125,8 @@ static void server_thread(void *arg) { // TLS handshake via a minimal TLS client. The TLS client has configurable (via // alpn_list) ALPN settings and can probe at the supported ALPN preferences // using this (via alpn_expected). -bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, - const char *alpn_expected) { +bool server_ssl_test(const char* alpn_list[], unsigned int alpn_list_len, + const char* alpn_expected) { bool success = true; grpc_init(); @@ -142,8 +142,8 @@ bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, SSL_load_error_strings(); OpenSSL_add_ssl_algorithms(); - const SSL_METHOD *method = TLSv1_2_client_method(); - SSL_CTX *ctx = SSL_CTX_new(method); + const SSL_METHOD* method = TLSv1_2_client_method(); + SSL_CTX* ctx = SSL_CTX_new(method); if (!ctx) { perror("Unable to create SSL context"); ERR_print_errors_fp(stderr); @@ -162,7 +162,7 @@ bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, // Set the cipher list to match the one expressed in // src/core/tsi/ssl_transport_security.c. - const char *cipher_list = + const char* cipher_list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-" "SHA384:ECDHE-RSA-AES256-GCM-SHA384"; if (!SSL_CTX_set_cipher_list(ctx, cipher_list)) { @@ -177,8 +177,9 @@ bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, for (unsigned int i = 0; i < alpn_list_len; ++i) { alpn_protos_len += (unsigned int)strlen(alpn_list[i]); } - unsigned char *alpn_protos = gpr_malloc(alpn_protos_len); - unsigned char *p = alpn_protos; + unsigned char* alpn_protos = + static_cast<unsigned char*>(gpr_malloc(alpn_protos_len)); + unsigned char* p = alpn_protos; for (unsigned int i = 0; i < alpn_list_len; ++i) { const uint8_t len = (uint8_t)strlen(alpn_list[i]); *p++ = len; @@ -201,7 +202,7 @@ bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, gpr_log(GPR_INFO, "Connected to server on port %d", port); // Establish a SSL* and connect at SSL layer. - SSL *ssl = SSL_new(ctx); + SSL* ssl = SSL_new(ctx); GPR_ASSERT(ssl); SSL_set_fd(ssl, sock); if (SSL_connect(ssl) <= 0) { @@ -211,12 +212,12 @@ bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, } else { gpr_log(GPR_INFO, "Handshake successful."); // Validate ALPN preferred by server matches alpn_expected. - const unsigned char *alpn_selected; + const unsigned char* alpn_selected; unsigned int alpn_selected_len; SSL_get0_alpn_selected(ssl, &alpn_selected, &alpn_selected_len); if (strlen(alpn_expected) != alpn_selected_len || - strncmp((const char *)alpn_selected, alpn_expected, - alpn_selected_len) != 0) { + strncmp((const char*)alpn_selected, alpn_expected, alpn_selected_len) != + 0) { gpr_log(GPR_ERROR, "Unexpected ALPN protocol preference"); success = false; } diff --git a/test/core/handshake/server_ssl_common.h b/test/core/handshake/server_ssl_common.h index 67b323d82f..94ac588f0e 100644 --- a/test/core/handshake/server_ssl_common.h +++ b/test/core/handshake/server_ssl_common.h @@ -16,7 +16,7 @@ #include "test/core/util/port.h" #include "test/core/util/test_config.h" -bool server_ssl_test(const char *alpn_list[], unsigned int alpn_list_len, - const char *alpn_expected); +bool server_ssl_test(const char* alpn_list[], unsigned int alpn_list_len, + const char* alpn_expected); #endif // GRPC_SERVER_SSL_COMMON_H |