annotate src/event/quic/ngx_event_quic_ssl.c @ 8895:4b2d259bdadd quic

QUIC: connections with wrong ALPN protocols are now rejected. Previously, it was not enforced in the stream module. Now, since b9e02e9b2f1d it is possible to specify protocols. Since ALPN is always required, the 'require_alpn' setting is now obsolete.
author Vladimir Homutov <vl@nginx.com>
date Wed, 03 Nov 2021 13:36:21 +0300
parents 61b038fb59c6
children ff473a6f656c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
1
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
2 /*
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
3 * Copyright (C) Nginx, Inc.
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
4 */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
5
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
6
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
7 #include <ngx_config.h>
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
8 #include <ngx_core.h>
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
9 #include <ngx_event.h>
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
10 #include <ngx_event_quic_connection.h>
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
11
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
12
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
13 /*
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
14 * RFC 9000, 7.5. Cryptographic Message Buffering
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
15 *
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
16 * Implementations MUST support buffering at least 4096 bytes of data
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
17 */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
18 #define NGX_QUIC_MAX_BUFFERED 65535
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
19
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
20
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
21 #if BORINGSSL_API_VERSION >= 10
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
22 static int ngx_quic_set_read_secret(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
23 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
24 const uint8_t *secret, size_t secret_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
25 static int ngx_quic_set_write_secret(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
26 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
27 const uint8_t *secret, size_t secret_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
28 #else
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
29 static int ngx_quic_set_encryption_secrets(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
30 enum ssl_encryption_level_t level, const uint8_t *read_secret,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
31 const uint8_t *write_secret, size_t secret_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
32 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
33
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
34 static int ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
35 enum ssl_encryption_level_t level, const uint8_t *data, size_t len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
36 static int ngx_quic_flush_flight(ngx_ssl_conn_t *ssl_conn);
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
37 static ngx_int_t ngx_quic_crypto_input(ngx_connection_t *c, ngx_chain_t *data);
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
38
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
39
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
40 static SSL_QUIC_METHOD quic_method = {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
41 #if BORINGSSL_API_VERSION >= 10
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
42 ngx_quic_set_read_secret,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
43 ngx_quic_set_write_secret,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
44 #else
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
45 ngx_quic_set_encryption_secrets,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
46 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
47 ngx_quic_add_handshake_data,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
48 ngx_quic_flush_flight,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
49 ngx_quic_send_alert,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
50 };
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
51
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
52
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
53 #if BORINGSSL_API_VERSION >= 10
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
54
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
55 static int
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
56 ngx_quic_set_read_secret(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
57 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
58 const uint8_t *rsecret, size_t secret_len)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
59 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
60 ngx_connection_t *c;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
61 ngx_quic_connection_t *qc;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
62
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
63 c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
64 qc = ngx_quic_get_connection(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
65
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
66 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
67 "quic ngx_quic_set_read_secret() level:%d", level);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
68 #ifdef NGX_QUIC_DEBUG_CRYPTO
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
69 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
70 "quic read secret len:%uz %*xs", secret_len,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
71 secret_len, rsecret);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
72 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
73
8887
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
74 if (ngx_quic_keys_set_encryption_secret(c->pool, 0, qc->keys, level,
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
75 cipher, rsecret, secret_len)
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
76 != 1)
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
77 {
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
78 return 0;
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
79 }
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
80
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
81 if (level == ssl_encryption_early_data) {
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
82 if (ngx_quic_init_streams(c) != NGX_OK) {
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
83 return 0;
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
84 }
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
85 }
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
86
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
87 return 1;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
88 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
89
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
90
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
91 static int
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
92 ngx_quic_set_write_secret(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
93 enum ssl_encryption_level_t level, const SSL_CIPHER *cipher,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
94 const uint8_t *wsecret, size_t secret_len)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
95 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
96 ngx_connection_t *c;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
97 ngx_quic_connection_t *qc;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
98
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
99 c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
100 qc = ngx_quic_get_connection(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
101
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
102 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
103 "quic ngx_quic_set_write_secret() level:%d", level);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
104 #ifdef NGX_QUIC_DEBUG_CRYPTO
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
105 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
106 "quic write secret len:%uz %*xs", secret_len,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
107 secret_len, wsecret);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
108 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
109
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
110 return ngx_quic_keys_set_encryption_secret(c->pool, 1, qc->keys, level,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
111 cipher, wsecret, secret_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
112 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
113
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
114 #else
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
115
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
116 static int
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
117 ngx_quic_set_encryption_secrets(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
118 enum ssl_encryption_level_t level, const uint8_t *rsecret,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
119 const uint8_t *wsecret, size_t secret_len)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
120 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
121 ngx_connection_t *c;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
122 const SSL_CIPHER *cipher;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
123 ngx_quic_connection_t *qc;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
124
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
125 c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
126 qc = ngx_quic_get_connection(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
127
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
128 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
129 "quic ngx_quic_set_encryption_secrets() level:%d", level);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
130 #ifdef NGX_QUIC_DEBUG_CRYPTO
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
131 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
132 "quic read secret len:%uz %*xs", secret_len,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
133 secret_len, rsecret);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
134 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
135
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
136 cipher = SSL_get_current_cipher(ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
137
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
138 if (ngx_quic_keys_set_encryption_secret(c->pool, 0, qc->keys, level,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
139 cipher, rsecret, secret_len)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
140 != 1)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
141 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
142 return 0;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
143 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
144
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
145 if (level == ssl_encryption_early_data) {
8887
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
146 if (ngx_quic_init_streams(c) != NGX_OK) {
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
147 return 0;
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
148 }
61b038fb59c6 QUIC: speeding up processing 0-RTT.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8886
diff changeset
149
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
150 return 1;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
151 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
152
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
153 #ifdef NGX_QUIC_DEBUG_CRYPTO
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
154 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
155 "quic write secret len:%uz %*xs", secret_len,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
156 secret_len, wsecret);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
157 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
158
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
159 return ngx_quic_keys_set_encryption_secret(c->pool, 1, qc->keys, level,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
160 cipher, wsecret, secret_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
161 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
162
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
163 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
164
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
165
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
166 static int
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
167 ngx_quic_add_handshake_data(ngx_ssl_conn_t *ssl_conn,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
168 enum ssl_encryption_level_t level, const uint8_t *data, size_t len)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
169 {
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
170 u_char *p, *end;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
171 size_t client_params_len;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
172 const uint8_t *client_params;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
173 ngx_quic_tp_t ctp;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
174 ngx_quic_frame_t *frame;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
175 ngx_connection_t *c;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
176 ngx_quic_send_ctx_t *ctx;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
177 ngx_quic_connection_t *qc;
8895
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
178 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation)
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
179 unsigned int alpn_len;
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
180 const unsigned char *alpn_data;
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
181 #endif
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
182
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
183 c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
184 qc = ngx_quic_get_connection(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
185
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
186 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
187 "quic ngx_quic_add_handshake_data");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
188
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
189 if (!qc->client_tp_done) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
190 /*
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
191 * things to do once during handshake: check ALPN and transport
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
192 * parameters; we want to break handshake if something is wrong
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
193 * here;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
194 */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
195
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
196 #if defined(TLSEXT_TYPE_application_layer_protocol_negotiation)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
197
8895
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
198 SSL_get0_alpn_selected(ssl_conn, &alpn_data, &alpn_len);
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
199
8895
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
200 if (alpn_len == 0) {
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
201 qc->error = 0x100 + SSL_AD_NO_APPLICATION_PROTOCOL;
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
202 qc->error_reason = "unsupported protocol in ALPN extension";
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
203
8895
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
204 ngx_log_error(NGX_LOG_INFO, c->log, 0,
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
205 "quic unsupported protocol in ALPN extension");
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
206 return 0;
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
207 }
4b2d259bdadd QUIC: connections with wrong ALPN protocols are now rejected.
Vladimir Homutov <vl@nginx.com>
parents: 8887
diff changeset
208
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
209 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
210
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
211 SSL_get_peer_quic_transport_params(ssl_conn, &client_params,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
212 &client_params_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
213
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
214 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
215 "quic SSL_get_peer_quic_transport_params():"
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
216 " params_len:%ui", client_params_len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
217
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
218 if (client_params_len == 0) {
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
219 /* RFC 9001, 8.2. QUIC Transport Parameters Extension */
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
220 qc->error = NGX_QUIC_ERR_CRYPTO(SSL_AD_MISSING_EXTENSION);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
221 qc->error_reason = "missing transport parameters";
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
222
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
223 ngx_log_error(NGX_LOG_INFO, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
224 "missing transport parameters");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
225 return 0;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
226 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
227
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
228 p = (u_char *) client_params;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
229 end = p + client_params_len;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
230
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
231 /* defaults for parameters not sent by client */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
232 ngx_memcpy(&ctp, &qc->ctp, sizeof(ngx_quic_tp_t));
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
233
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
234 if (ngx_quic_parse_transport_params(p, end, &ctp, c->log)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
235 != NGX_OK)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
236 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
237 qc->error = NGX_QUIC_ERR_TRANSPORT_PARAMETER_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
238 qc->error_reason = "failed to process transport parameters";
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
239
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
240 return 0;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
241 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
242
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
243 if (ngx_quic_apply_transport_params(c, &ctp) != NGX_OK) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
244 return 0;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
245 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
246
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
247 qc->client_tp_done = 1;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
248 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
249
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
250 ctx = ngx_quic_get_send_ctx(qc, level);
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
251
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
252 frame = ngx_quic_alloc_frame(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
253 if (frame == NULL) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
254 return 0;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
255 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
256
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
257 frame->data = ngx_quic_copy_buf(c, (u_char *) data, len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
258 if (frame->data == NGX_CHAIN_ERROR) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
259 return 0;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
260 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
261
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
262 frame->level = level;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
263 frame->type = NGX_QUIC_FT_CRYPTO;
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
264 frame->u.crypto.offset = ctx->crypto_sent;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
265 frame->u.crypto.length = len;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
266
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
267 ctx->crypto_sent += len;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
268
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
269 ngx_quic_queue_frame(qc, frame);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
270
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
271 return 1;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
272 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
273
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
274
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
275 static int
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
276 ngx_quic_flush_flight(ngx_ssl_conn_t *ssl_conn)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
277 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
278 #if (NGX_DEBUG)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
279 ngx_connection_t *c;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
280
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
281 c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
282
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
283 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
284 "quic ngx_quic_flush_flight()");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
285 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
286 return 1;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
287 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
288
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
289
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
290 ngx_int_t
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
291 ngx_quic_handle_crypto_frame(ngx_connection_t *c, ngx_quic_header_t *pkt,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
292 ngx_quic_frame_t *frame)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
293 {
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
294 size_t len;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
295 uint64_t last;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
296 ngx_buf_t *b;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
297 ngx_chain_t *cl, **ll;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
298 ngx_quic_send_ctx_t *ctx;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
299 ngx_quic_connection_t *qc;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
300 ngx_quic_crypto_frame_t *f;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
301
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
302 qc = ngx_quic_get_connection(c);
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
303 ctx = ngx_quic_get_send_ctx(qc, pkt->level);
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
304 f = &frame->u.crypto;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
305
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
306 /* no overflow since both values are 62-bit */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
307 last = f->offset + f->length;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
308
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
309 if (last > ctx->crypto_received + NGX_QUIC_MAX_BUFFERED) {
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
310 qc->error = NGX_QUIC_ERR_CRYPTO_BUFFER_EXCEEDED;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
311 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
312 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
313
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
314 if (last <= ctx->crypto_received) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
315 if (pkt->level == ssl_encryption_initial) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
316 /* speeding up handshake completion */
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
317
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
318 if (!ngx_queue_empty(&ctx->sent)) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
319 ngx_quic_resend_frames(c, ctx);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
320
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
321 ctx = ngx_quic_get_send_ctx(qc, ssl_encryption_handshake);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
322 while (!ngx_queue_empty(&ctx->sent)) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
323 ngx_quic_resend_frames(c, ctx);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
324 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
325 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
326 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
327
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
328 return NGX_OK;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
329 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
330
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
331 if (f->offset > ctx->crypto_received) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
332 return ngx_quic_order_bufs(c, &ctx->crypto, frame->data,
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
333 f->offset - ctx->crypto_received);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
334 }
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
335
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
336 ngx_quic_trim_bufs(frame->data, ctx->crypto_received - f->offset);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
337
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
338 if (ngx_quic_crypto_input(c, frame->data) != NGX_OK) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
339 return NGX_ERROR;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
340 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
341
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
342 ngx_quic_trim_bufs(ctx->crypto, last - ctx->crypto_received);
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
343 ctx->crypto_received = last;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
344
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
345 cl = ctx->crypto;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
346 ll = &cl;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
347 len = 0;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
348
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
349 while (*ll) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
350 b = (*ll)->buf;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
351
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
352 if (b->sync && b->pos != b->last) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
353 /* hole */
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
354 break;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
355 }
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
356
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
357 len += b->last - b->pos;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
358 ll = &(*ll)->next;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
359 }
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
360
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
361 ctx->crypto_received += len;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
362 ctx->crypto = *ll;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
363 *ll = NULL;
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
364
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
365 if (cl) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
366 if (ngx_quic_crypto_input(c, cl) != NGX_OK) {
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
367 return NGX_ERROR;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
368 }
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
369
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
370 ngx_quic_free_bufs(c, cl);
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
371 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
372
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
373 return NGX_OK;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
374 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
375
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
376
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
377 static ngx_int_t
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
378 ngx_quic_crypto_input(ngx_connection_t *c, ngx_chain_t *data)
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
379 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
380 int n, sslerr;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
381 ngx_buf_t *b;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
382 ngx_chain_t *cl;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
383 ngx_ssl_conn_t *ssl_conn;
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
384 ngx_quic_frame_t *frame;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
385 ngx_quic_connection_t *qc;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
386
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
387 qc = ngx_quic_get_connection(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
388
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
389 ssl_conn = c->ssl->connection;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
390
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
391 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
392 "quic SSL_quic_read_level:%d SSL_quic_write_level:%d",
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
393 (int) SSL_quic_read_level(ssl_conn),
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
394 (int) SSL_quic_write_level(ssl_conn));
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
395
8782
b3f6ad181df4 QUIC: refactored CRYPTO and STREAM buffer ordering.
Roman Arutyunyan <arut@nginx.com>
parents: 8763
diff changeset
396 for (cl = data; cl; cl = cl->next) {
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
397 b = cl->buf;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
398
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
399 if (!SSL_provide_quic_data(ssl_conn, SSL_quic_read_level(ssl_conn),
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
400 b->pos, b->last - b->pos))
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
401 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
402 ngx_ssl_error(NGX_LOG_INFO, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
403 "SSL_provide_quic_data() failed");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
404 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
405 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
406 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
407
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
408 n = SSL_do_handshake(ssl_conn);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
409
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
410 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
411 "quic SSL_quic_read_level:%d SSL_quic_write_level:%d",
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
412 (int) SSL_quic_read_level(ssl_conn),
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
413 (int) SSL_quic_write_level(ssl_conn));
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
414
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
415 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_do_handshake: %d", n);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
416
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
417 if (n <= 0) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
418 sslerr = SSL_get_error(ssl_conn, n);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
419
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
420 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d",
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
421 sslerr);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
422
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
423 if (sslerr != SSL_ERROR_WANT_READ) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
424 ngx_ssl_error(NGX_LOG_ERR, c->log, 0, "SSL_do_handshake() failed");
8793
80d396fd8ee8 QUIC: improved errors readability.
Vladimir Homutov <vl@nginx.com>
parents: 8782
diff changeset
425 qc->error_reason = "handshake failed";
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
426 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
427 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
428
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
429 return NGX_OK;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
430 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
431
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
432 if (SSL_in_init(ssl_conn)) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
433 return NGX_OK;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
434 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
435
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
436 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
437 "quic ssl cipher:%s", SSL_get_cipher(ssl_conn));
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
438
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
439 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
440 "quic handshake completed successfully");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
441
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
442 c->ssl->handshaked = 1;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
443
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
444 frame = ngx_quic_alloc_frame(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
445 if (frame == NULL) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
446 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
447 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
448
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
449 frame->level = ssl_encryption_application;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
450 frame->type = NGX_QUIC_FT_HANDSHAKE_DONE;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
451 ngx_quic_queue_frame(qc, frame);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
452
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
453 if (qc->conf->retry) {
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
454 if (ngx_quic_send_new_token(c, qc->socket->path) != NGX_OK) {
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
455 return NGX_ERROR;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
456 }
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
457 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
458
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
459 /*
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
460 * RFC 9001, 9.5. Header Protection Timing Side Channels
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
461 *
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
462 * Generating next keys before a key update is received.
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
463 */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
464
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
465 if (ngx_quic_keys_update(c, qc->keys) != NGX_OK) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
466 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
467 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
468
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
469 /*
8797
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
470 * RFC 9001, 4.9.2. Discarding Handshake Keys
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
471 *
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
472 * An endpoint MUST discard its Handshake keys
4715f3e669f1 QUIC: updated specification references.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8793
diff changeset
473 * when the TLS handshake is confirmed.
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
474 */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
475 ngx_quic_discard_ctx(c, ssl_encryption_handshake);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
476
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
477 /* start accepting clients on negotiated number of server ids */
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
478 if (ngx_quic_create_sockets(c) != NGX_OK) {
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
479 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
480 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
481
8886
66b4ff373dd9 QUIC: refactored OCSP validation in preparation for 0-RTT support.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8865
diff changeset
482 if (ngx_quic_init_streams(c) != NGX_OK) {
8827
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8797
diff changeset
483 return NGX_ERROR;
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8797
diff changeset
484 }
fe919fd63b0b QUIC: client certificate validation with OCSP.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8797
diff changeset
485
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
486 return NGX_OK;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
487 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
488
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
489
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
490 ngx_int_t
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
491 ngx_quic_init_connection(ngx_connection_t *c)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
492 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
493 u_char *p;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
494 size_t clen;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
495 ssize_t len;
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
496 ngx_str_t dcid;
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
497 ngx_ssl_conn_t *ssl_conn;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
498 ngx_quic_connection_t *qc;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
499
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
500 qc = ngx_quic_get_connection(c);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
501
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
502 if (ngx_ssl_create_connection(qc->conf->ssl, c, NGX_SSL_BUFFER) != NGX_OK) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
503 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
504 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
505
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
506 c->ssl->no_wait_shutdown = 1;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
507
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
508 ssl_conn = c->ssl->connection;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
509
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
510 if (SSL_set_quic_method(ssl_conn, &quic_method) == 0) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
511 ngx_log_error(NGX_LOG_INFO, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
512 "quic SSL_set_quic_method() failed");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
513 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
514 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
515
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
516 #ifdef SSL_READ_EARLY_DATA_SUCCESS
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
517 if (SSL_CTX_get_max_early_data(qc->conf->ssl->ctx)) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
518 SSL_set_quic_early_data_enabled(ssl_conn, 1);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
519 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
520 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
521
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
522 #if BORINGSSL_API_VERSION >= 13
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
523 SSL_set_quic_use_legacy_codepoint(ssl_conn, qc->version != 1);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
524 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
525
8763
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
526 dcid.data = qc->socket->sid.id;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
527 dcid.len = qc->socket->sid.len;
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
528
4117aa7fa38e QUIC: connection migration.
Vladimir Homutov <vl@nginx.com>
parents: 8753
diff changeset
529 if (ngx_quic_new_sr_token(c, &dcid, qc->conf->sr_token_key, qc->tp.sr_token)
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
530 != NGX_OK)
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
531 {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
532 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
533 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
534
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
535 len = ngx_quic_create_transport_params(NULL, NULL, &qc->tp, &clen);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
536 /* always succeeds */
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
537
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
538 p = ngx_pnalloc(c->pool, len);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
539 if (p == NULL) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
540 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
541 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
542
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
543 len = ngx_quic_create_transport_params(p, p + len, &qc->tp, NULL);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
544 if (len < 0) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
545 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
546 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
547
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
548 #ifdef NGX_QUIC_DEBUG_PACKETS
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
549 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
550 "quic transport parameters len:%uz %*xs", len, len, p);
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
551 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
552
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
553 if (SSL_set_quic_transport_params(ssl_conn, p, len) == 0) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
554 ngx_log_error(NGX_LOG_INFO, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
555 "quic SSL_set_quic_transport_params() failed");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
556 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
557 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
558
8865
646bb5361437 Configure: check for QUIC 0-RTT support at compile time.
Ruslan Ermilov <ru@nginx.com>
parents: 8845
diff changeset
559 #if BORINGSSL_API_VERSION >= 11
8753
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
560 if (SSL_set_quic_early_data_context(ssl_conn, p, clen) == 0) {
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
561 ngx_log_error(NGX_LOG_INFO, c->log, 0,
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
562 "quic SSL_set_quic_early_data_context() failed");
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
563 return NGX_ERROR;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
564 }
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
565 #endif
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
566
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
567 return NGX_OK;
46161c610919 QUIC: separate files for SSL library interfaces.
Vladimir Homutov <vl@nginx.com>
parents:
diff changeset
568 }