comparison src/event/quic/ngx_event_quic_ssl.c @ 9032:41796b6804d9 quic

QUIC: support for setting QUIC methods with LibreSSL. Setting QUIC methods is converted to use C99 designated initializers for simplicity, as LibreSSL 3.6.0 has different SSL_QUIC_METHOD layout. Additionally, only set_read_secret/set_write_secret callbacks are set. Although they are preferred in LibreSSL over set_encryption_secrets, better be on a safe side as LibreSSL has unexpectedly incompatible set_encryption_secrets calling convention expressed in passing read and write secrets split in separate calls, unlike this is documented in old BoringSSL sources. To avoid introducing further changes for the old API, it is simply disabled.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 20 Oct 2022 16:21:06 +0400
parents cd0d6e176908
children 9076a74f1221
comparison
equal deleted inserted replaced
9031:cd0d6e176908 9032:41796b6804d9
16 * Implementations MUST support buffering at least 4096 bytes of data 16 * Implementations MUST support buffering at least 4096 bytes of data
17 */ 17 */
18 #define NGX_QUIC_MAX_BUFFERED 65535 18 #define NGX_QUIC_MAX_BUFFERED 65535
19 19
20 20
21 #if BORINGSSL_API_VERSION >= 10 21 #if BORINGSSL_API_VERSION >= 10 || defined LIBRESSL_VERSION_NUMBER
22 static int ngx_quic_set_read_secret(ngx_ssl_conn_t *ssl_conn, 22 static int ngx_quic_set_read_secret(ngx_ssl_conn_t *ssl_conn,
23 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher, 23 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
24 const uint8_t *secret, size_t secret_len); 24 const uint8_t *secret, size_t secret_len);
25 static int ngx_quic_set_write_secret(ngx_ssl_conn_t *ssl_conn, 25 static int ngx_quic_set_write_secret(ngx_ssl_conn_t *ssl_conn,
26 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher, 26 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
38 enum ssl_encryption_level_t level, uint8_t alert); 38 enum ssl_encryption_level_t level, uint8_t alert);
39 static ngx_int_t ngx_quic_crypto_input(ngx_connection_t *c, ngx_chain_t *data); 39 static ngx_int_t ngx_quic_crypto_input(ngx_connection_t *c, ngx_chain_t *data);
40 40
41 41
42 static SSL_QUIC_METHOD quic_method = { 42 static SSL_QUIC_METHOD quic_method = {
43 #if BORINGSSL_API_VERSION >= 10 43 #if BORINGSSL_API_VERSION >= 10 || defined LIBRESSL_VERSION_NUMBER
44 ngx_quic_set_read_secret, 44 .set_read_secret = ngx_quic_set_read_secret,
45 ngx_quic_set_write_secret, 45 .set_write_secret = ngx_quic_set_write_secret,
46 #else 46 #else
47 ngx_quic_set_encryption_secrets, 47 .set_encryption_secrets = ngx_quic_set_encryption_secrets,
48 #endif 48 #endif
49 ngx_quic_add_handshake_data, 49 .add_handshake_data = ngx_quic_add_handshake_data,
50 ngx_quic_flush_flight, 50 .flush_flight = ngx_quic_flush_flight,
51 ngx_quic_send_alert, 51 .send_alert = ngx_quic_send_alert,
52 }; 52 };
53 53
54 54
55 #if BORINGSSL_API_VERSION >= 10 55 #if BORINGSSL_API_VERSION >= 10 || defined LIBRESSL_VERSION_NUMBER
56 56
57 static int 57 static int
58 ngx_quic_set_read_secret(ngx_ssl_conn_t *ssl_conn, 58 ngx_quic_set_read_secret(ngx_ssl_conn_t *ssl_conn,
59 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher, 59 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
60 const uint8_t *rsecret, size_t secret_len) 60 const uint8_t *rsecret, size_t secret_len)