From 15833a15a1507d9cefa757a0ae47473aa95cd01e Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> Date: Sat, 23 May 2020 09:24:31 +0900 Subject: [PATCH] Remove tls argument from crypto lib interface --- crypto/gnutls/gnutls.c | 4 +-- crypto/includes/ngtcp2/ngtcp2_crypto.h | 10 +++---- crypto/openssl/openssl.c | 4 +-- crypto/shared.c | 36 ++++++++++++++------------ examples/client.cc | 6 ++--- examples/server.cc | 6 ++--- 6 files changed, 32 insertions(+), 34 deletions(-) diff --git a/crypto/gnutls/gnutls.c b/crypto/gnutls/gnutls.c index 16b0185c..e4a9b012 100644 --- a/crypto/gnutls/gnutls.c +++ b/crypto/gnutls/gnutls.c @@ -275,10 +275,10 @@ from_ngtcp2_level(ngtcp2_crypto_level crypto_level) { } } -int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, void *tls, +int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, const uint8_t *data, size_t datalen) { - gnutls_session_t session = tls; + gnutls_session_t session = ngtcp2_conn_get_tls(conn); int rv; if (datalen > 0) { diff --git a/crypto/includes/ngtcp2/ngtcp2_crypto.h b/crypto/includes/ngtcp2/ngtcp2_crypto.h index e1c7952c..af2211dc 100644 --- a/crypto/includes/ngtcp2/ngtcp2_crypto.h +++ b/crypto/includes/ngtcp2/ngtcp2_crypto.h @@ -325,7 +325,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_hp_mask_cb(uint8_t *dest, * This function returns 0 if it succeeds, or -1. */ NGTCP2_EXTERN int ngtcp2_crypto_derive_and_install_rx_key( - ngtcp2_conn *conn, void *tls, uint8_t *key, uint8_t *iv, uint8_t *hp, + ngtcp2_conn *conn, uint8_t *key, uint8_t *iv, uint8_t *hp, ngtcp2_crypto_level level, const uint8_t *secret, size_t secretlen); /** @@ -362,7 +362,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_derive_and_install_rx_key( * This function returns 0 if it succeeds, or -1. */ NGTCP2_EXTERN int ngtcp2_crypto_derive_and_install_tx_key( - ngtcp2_conn *conn, void *tls, uint8_t *key, uint8_t *iv, uint8_t *hp, + ngtcp2_conn *conn, uint8_t *key, uint8_t *iv, uint8_t *hp, ngtcp2_crypto_level level, const uint8_t *secret, size_t secretlen); /** @@ -533,10 +533,6 @@ NGTCP2_EXTERN int ngtcp2_crypto_recv_client_initial_cb(ngtcp2_conn *conn, * allowed to call this function with datalen == 0. In this case, no * additional read operation is done. * - * |tls| points to a implementation dependent TLS session object. If - * libngtcp2_crypto_openssl is linked, |tls| must be a pointer to SSL - * object. - * * This function returns 0 if it succeeds, or a negative error code. * The generic error code is -1 if a specific error code is not * suitable. The error codes less than -10000 are specific to @@ -544,7 +540,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_recv_client_initial_cb(ngtcp2_conn *conn, * defined in ngtcp2_crypto_openssl.h. */ NGTCP2_EXTERN int -ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, void *tls, +ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, const uint8_t *data, size_t datalen); diff --git a/crypto/openssl/openssl.c b/crypto/openssl/openssl.c index 44be050c..f7f6b6b9 100644 --- a/crypto/openssl/openssl.c +++ b/crypto/openssl/openssl.c @@ -315,10 +315,10 @@ from_ngtcp2_level(ngtcp2_crypto_level crypto_level) { } } -int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, void *tls, +int ngtcp2_crypto_read_write_crypto_data(ngtcp2_conn *conn, ngtcp2_crypto_level crypto_level, const uint8_t *data, size_t datalen) { - SSL *ssl = tls; + SSL *ssl = ngtcp2_conn_get_tls(conn); int rv; int err; diff --git a/crypto/shared.c b/crypto/shared.c index aed0278e..53959894 100644 --- a/crypto/shared.c +++ b/crypto/shared.c @@ -145,12 +145,15 @@ int ngtcp2_crypto_update_traffic_secret(uint8_t *dest, return 0; } -int ngtcp2_crypto_derive_and_install_rx_key( - ngtcp2_conn *conn, void *tls, uint8_t *key, uint8_t *iv, uint8_t *hp_key, - ngtcp2_crypto_level level, const uint8_t *secret, size_t secretlen) { +int ngtcp2_crypto_derive_and_install_rx_key(ngtcp2_conn *conn, uint8_t *key, + uint8_t *iv, uint8_t *hp_key, + ngtcp2_crypto_level level, + const uint8_t *secret, + size_t secretlen) { const ngtcp2_crypto_ctx *ctx; const ngtcp2_crypto_aead *aead; const ngtcp2_crypto_md *md; + void *tls = ngtcp2_conn_get_tls(conn); uint8_t keybuf[64], ivbuf[64], hp_keybuf[64]; size_t keylen; size_t ivlen; @@ -226,12 +229,15 @@ int ngtcp2_crypto_derive_and_install_rx_key( return 0; } -int ngtcp2_crypto_derive_and_install_tx_key( - ngtcp2_conn *conn, void *tls, uint8_t *key, uint8_t *iv, uint8_t *hp_key, - ngtcp2_crypto_level level, const uint8_t *secret, size_t secretlen) { +int ngtcp2_crypto_derive_and_install_tx_key(ngtcp2_conn *conn, uint8_t *key, + uint8_t *iv, uint8_t *hp_key, + ngtcp2_crypto_level level, + const uint8_t *secret, + size_t secretlen) { const ngtcp2_crypto_ctx *ctx; const ngtcp2_crypto_aead *aead; const ngtcp2_crypto_md *md; + void *tls = ngtcp2_conn_get_tls(conn); uint8_t keybuf[64], ivbuf[64], hp_keybuf[64]; size_t keylen; size_t ivlen; @@ -580,8 +586,10 @@ static int crypto_set_local_transport_params(ngtcp2_conn *conn, void *tls) { * crypto_setup_initial_crypto establishes the initial secrets and * encryption keys, and prepares local QUIC transport parameters. */ -static int crypto_setup_initial_crypto(ngtcp2_conn *conn, void *tls, +static int crypto_setup_initial_crypto(ngtcp2_conn *conn, const ngtcp2_cid *dcid) { + void *tls = ngtcp2_conn_get_tls(conn); + if (ngtcp2_crypto_derive_and_install_initial_key(conn, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, dcid) != 0) { @@ -593,17 +601,14 @@ static int crypto_setup_initial_crypto(ngtcp2_conn *conn, void *tls, int ngtcp2_crypto_client_initial_cb(ngtcp2_conn *conn, void *user_data) { const ngtcp2_cid *dcid = ngtcp2_conn_get_dcid(conn); - void *tls = ngtcp2_conn_get_tls(conn); (void)user_data; - assert(tls); - - if (crypto_setup_initial_crypto(conn, tls, dcid) != 0) { + if (crypto_setup_initial_crypto(conn, dcid) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } - if (ngtcp2_crypto_read_write_crypto_data( - conn, tls, NGTCP2_CRYPTO_LEVEL_INITIAL, NULL, 0) != 0) { + if (ngtcp2_crypto_read_write_crypto_data(conn, NGTCP2_CRYPTO_LEVEL_INITIAL, + NULL, 0) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -628,12 +633,9 @@ int ngtcp2_crypto_recv_retry_cb(ngtcp2_conn *conn, const ngtcp2_pkt_hd *hd, int ngtcp2_crypto_recv_client_initial_cb(ngtcp2_conn *conn, const ngtcp2_cid *dcid, void *user_data) { - void *tls = ngtcp2_conn_get_tls(conn); (void)user_data; - assert(tls); - - if (crypto_setup_initial_crypto(conn, tls, dcid) != 0) { + if (crypto_setup_initial_crypto(conn, dcid) != 0) { return NGTCP2_ERR_CALLBACK_FAILURE; } diff --git a/examples/client.cc b/examples/client.cc index 2667f6cc..753e41ea 100644 --- a/examples/client.cc +++ b/examples/client.cc @@ -174,12 +174,12 @@ int Client::on_key(ngtcp2_crypto_level level, const uint8_t *rx_secret, std::array<uint8_t, 64> rx_key, rx_iv, rx_hp_key, tx_key, tx_iv, tx_hp_key; if (ngtcp2_crypto_derive_and_install_rx_key( - conn_, ssl_, rx_key.data(), rx_iv.data(), rx_hp_key.data(), level, + conn_, rx_key.data(), rx_iv.data(), rx_hp_key.data(), level, rx_secret, secretlen) != 0) { return -1; } if (ngtcp2_crypto_derive_and_install_tx_key( - conn_, ssl_, tx_key.data(), tx_iv.data(), tx_hp_key.data(), level, + conn_, tx_key.data(), tx_iv.data(), tx_hp_key.data(), level, tx_secret, secretlen) != 0) { return -1; } @@ -1206,7 +1206,7 @@ void Client::write_client_handshake(ngtcp2_crypto_level level, int Client::recv_crypto_data(ngtcp2_crypto_level crypto_level, const uint8_t *data, size_t datalen) { - return ngtcp2_crypto_read_write_crypto_data(conn_, ssl_, crypto_level, data, + return ngtcp2_crypto_read_write_crypto_data(conn_, crypto_level, data, datalen); } diff --git a/examples/server.cc b/examples/server.cc index 3e98e9f1..6c65cbd3 100644 --- a/examples/server.cc +++ b/examples/server.cc @@ -95,12 +95,12 @@ int Handler::on_key(ngtcp2_crypto_level level, const uint8_t *rx_secret, std::array<uint8_t, 64> rx_key, rx_iv, rx_hp_key, tx_key, tx_iv, tx_hp_key; if (ngtcp2_crypto_derive_and_install_rx_key( - conn_, ssl_, rx_key.data(), rx_iv.data(), rx_hp_key.data(), level, + conn_, rx_key.data(), rx_iv.data(), rx_hp_key.data(), level, rx_secret, secretlen) != 0) { return -1; } if (ngtcp2_crypto_derive_and_install_tx_key( - conn_, ssl_, tx_key.data(), tx_iv.data(), tx_hp_key.data(), level, + conn_, tx_key.data(), tx_iv.data(), tx_hp_key.data(), level, tx_secret, secretlen) != 0) { return -1; } @@ -1585,7 +1585,7 @@ void Handler::write_server_handshake(ngtcp2_crypto_level level, int Handler::recv_crypto_data(ngtcp2_crypto_level crypto_level, const uint8_t *data, size_t datalen) { - return ngtcp2_crypto_read_write_crypto_data(conn_, ssl_, crypto_level, data, + return ngtcp2_crypto_read_write_crypto_data(conn_, crypto_level, data, datalen); } -- GitLab