Mercurial > hg > nginx
comparison src/event/ngx_event_quic.c @ 8180:01dc595de244 quic
Cleanup.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 28 Feb 2020 13:09:52 +0300 |
parents | 7ee1ada04c8a |
children | b28ea685a56e |
comparison
equal
deleted
inserted
replaced
8179:7ee1ada04c8a | 8180:01dc595de244 |
---|---|
119 } | 119 } |
120 | 120 |
121 | 121 |
122 ngx_int_t | 122 ngx_int_t |
123 ngx_quic_hkdf_expand(ngx_connection_t *c, const EVP_MD *digest, ngx_str_t *out, | 123 ngx_quic_hkdf_expand(ngx_connection_t *c, const EVP_MD *digest, ngx_str_t *out, |
124 ngx_str_t *prk, ngx_str_t *name, ngx_uint_t sender) | 124 ngx_str_t *label, const uint8_t *prk, size_t prk_len) |
125 { | 125 { |
126 uint8_t *p; | 126 uint8_t *p; |
127 size_t hkdfl_len; | 127 size_t info_len; |
128 uint8_t hkdfl[20]; | 128 uint8_t info[20]; |
129 | 129 |
130 #if (NGX_DEBUG) | 130 #if (NGX_DEBUG) |
131 u_char buf[512]; | 131 u_char buf[512]; |
132 size_t m; | 132 size_t m; |
133 #endif | 133 #endif |
135 out->data = ngx_pnalloc(c->pool, out->len); | 135 out->data = ngx_pnalloc(c->pool, out->len); |
136 if (out->data == NULL) { | 136 if (out->data == NULL) { |
137 return NGX_ERROR; | 137 return NGX_ERROR; |
138 } | 138 } |
139 | 139 |
140 hkdfl_len = 2 + 1 + name->len + 1; | 140 info_len = 2 + 1 + label->len + 1; |
141 | 141 |
142 if (sender) { | 142 info[0] = 0; |
143 hkdfl[0] = out->len / 256; | 143 info[1] = out->len; |
144 hkdfl[1] = out->len % 256; | 144 info[2] = label->len; |
145 | 145 p = ngx_cpymem(&info[3], label->data, label->len); |
146 } else { | |
147 hkdfl[0] = 0; | |
148 hkdfl[1] = out->len; | |
149 } | |
150 | |
151 hkdfl[2] = name->len; | |
152 p = ngx_cpymem(&hkdfl[3], name->data, name->len); | |
153 *p = '\0'; | 146 *p = '\0'; |
154 | 147 |
155 if (ngx_hkdf_expand(out->data, out->len, digest, | 148 if (ngx_hkdf_expand(out->data, out->len, digest, |
156 prk->data, prk->len, hkdfl, hkdfl_len) | 149 prk, prk_len, info, info_len) |
157 != NGX_OK) | 150 != NGX_OK) |
158 { | 151 { |
159 ngx_ssl_error(NGX_LOG_INFO, c->log, 0, | 152 ngx_ssl_error(NGX_LOG_INFO, c->log, 0, |
160 "ngx_hkdf_expand(%V) failed", name); | 153 "ngx_hkdf_expand(%V) failed", label); |
161 return NGX_ERROR; | 154 return NGX_ERROR; |
162 } | 155 } |
163 | 156 |
164 if (c->log->log_level & NGX_LOG_DEBUG_EVENT) { | 157 if (c->log->log_level & NGX_LOG_DEBUG_EVENT) { |
158 m = ngx_hex_dump(buf, info, info_len) - buf; | |
159 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, | |
160 "%V info: %*s, len: %uz", label, m, buf, info_len); | |
161 | |
165 m = ngx_hex_dump(buf, out->data, out->len) - buf; | 162 m = ngx_hex_dump(buf, out->data, out->len) - buf; |
166 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, | 163 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, |
167 "%V: %*s, len: %uz", name, m, buf, out->len); | 164 "%V key: %*s, len: %uz", label, m, buf, out->len); |
168 | |
169 m = ngx_hex_dump(buf, hkdfl, hkdfl_len) - buf; | |
170 ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0, | |
171 "%V hkdf: %*s, len: %uz", name, m, buf, hkdfl_len); | |
172 } | 165 } |
173 | 166 |
174 return NGX_OK; | 167 return NGX_OK; |
175 } | 168 } |
176 | 169 |
177 | 170 |
178 ngx_int_t | 171 ngx_int_t |
179 ngx_hkdf_expand(u_char *out_key, size_t out_len, const EVP_MD *digest, | 172 ngx_hkdf_expand(u_char *out_key, size_t out_len, const EVP_MD *digest, |
180 const u_char *prk, size_t prk_len, const u_char *info, size_t info_len) | 173 const uint8_t *prk, size_t prk_len, const u_char *info, size_t info_len) |
181 { | 174 { |
182 #ifdef OPENSSL_IS_BORINGSSL | 175 #ifdef OPENSSL_IS_BORINGSSL |
183 if (HKDF_expand(out_key, out_len, digest, prk, prk_len, info, info_len) | 176 if (HKDF_expand(out_key, out_len, digest, prk, prk_len, info, info_len) |
184 == 0) | 177 == 0) |
185 { | 178 { |
220 return NGX_OK; | 213 return NGX_OK; |
221 } | 214 } |
222 | 215 |
223 | 216 |
224 ngx_int_t | 217 ngx_int_t |
225 ngx_quic_tls_open(ngx_connection_t *c, const ngx_aead_cipher_t *cipher, | 218 ngx_quic_tls_open(ngx_connection_t *c, const EVP_CIPHER *cipher, |
226 ngx_quic_secret_t *s, ngx_str_t *out, u_char *nonce, ngx_str_t *in, | 219 ngx_quic_secret_t *s, ngx_str_t *out, u_char *nonce, ngx_str_t *in, |
227 ngx_str_t *ad) | 220 ngx_str_t *ad) |
228 { | 221 { |
229 out->len = in->len - EVP_GCM_TLS_TAG_LEN; | 222 out->len = in->len - EVP_GCM_TLS_TAG_LEN; |
230 out->data = ngx_pnalloc(c->pool, out->len); | 223 out->data = ngx_pnalloc(c->pool, out->len); |
231 if (out->data == NULL) { | 224 if (out->data == NULL) { |
232 return NGX_ERROR; | 225 return NGX_ERROR; |
233 } | 226 } |
234 | 227 |
235 #ifdef OPENSSL_IS_BORINGSSL | 228 #ifdef OPENSSL_IS_BORINGSSLL |
236 EVP_AEAD_CTX *ctx; | 229 EVP_AEAD_CTX *ctx; |
237 | 230 |
238 ctx = EVP_AEAD_CTX_new(cipher, s->key.data, s->key.len, | 231 ctx = EVP_AEAD_CTX_new(cipher, s->key.data, s->key.len, |
239 EVP_AEAD_DEFAULT_TAG_LENGTH); | 232 EVP_AEAD_DEFAULT_TAG_LENGTH); |
240 if (ctx == NULL) { | 233 if (ctx == NULL) { |
325 return NGX_OK; | 318 return NGX_OK; |
326 } | 319 } |
327 | 320 |
328 | 321 |
329 ngx_int_t | 322 ngx_int_t |
330 ngx_quic_tls_seal(ngx_connection_t *c, const ngx_aead_cipher_t *cipher, | 323 ngx_quic_tls_seal(ngx_connection_t *c, const EVP_CIPHER *cipher, |
331 ngx_quic_secret_t *s, ngx_str_t *out, u_char *nonce, ngx_str_t *in, | 324 ngx_quic_secret_t *s, ngx_str_t *out, u_char *nonce, ngx_str_t *in, |
332 ngx_str_t *ad) | 325 ngx_str_t *ad) |
333 { | 326 { |
334 out->len = in->len + EVP_GCM_TLS_TAG_LEN; | 327 out->len = in->len + EVP_GCM_TLS_TAG_LEN; |
335 out->data = ngx_pnalloc(c->pool, out->len); | 328 out->data = ngx_pnalloc(c->pool, out->len); |
336 if (out->data == NULL) { | 329 if (out->data == NULL) { |
337 return NGX_ERROR; | 330 return NGX_ERROR; |
338 } | 331 } |
339 | 332 |
340 #ifdef OPENSSL_IS_BORINGSSL | 333 #ifdef OPENSSL_IS_BORINGSSLL |
341 EVP_AEAD_CTX *ctx; | 334 EVP_AEAD_CTX *ctx; |
342 | 335 |
343 ctx = EVP_AEAD_CTX_new(cipher, s->key.data, s->key.len, | 336 ctx = EVP_AEAD_CTX_new(cipher, s->key.data, s->key.len, |
344 EVP_AEAD_DEFAULT_TAG_LENGTH); | 337 EVP_AEAD_DEFAULT_TAG_LENGTH); |
345 if (ctx == NULL) { | 338 if (ctx == NULL) { |