Skip to content

Commit 9e103b0

Browse files
deps: update ngtcp2 to 1.11.0
PR-URL: #57179 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
1 parent 9a97b72 commit 9e103b0

40 files changed

+1724
-1215
lines changed

deps/ngtcp2/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ ngtcp2_crypto_hp_mask_cb(uint8_t *dest, const ngtcp2_crypto_cipher *hp,
331331
* :enum:`ngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_0RTT`) to
332332
* set negotiated AEAD and message digest algorithm. After the
333333
* successful call of this function, application can use
334-
* `ngtcp2_conn_get_crypto_ctx` (or `ngtcp2_conn_get_early_crypto_ctx`
334+
* `ngtcp2_conn_get_crypto_ctx` (or `ngtcp2_conn_get_0rtt_crypto_ctx`
335335
* if |level| ==
336336
* :enum:`ngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_0RTT`) to
337337
* get :type:`ngtcp2_crypto_ctx`.
@@ -378,7 +378,7 @@ NGTCP2_EXTERN int ngtcp2_crypto_derive_and_install_rx_key(
378378
* :enum:`ngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_0RTT`) to
379379
* set negotiated AEAD and message digest algorithm. After the
380380
* successful call of this function, application can use
381-
* `ngtcp2_conn_get_crypto_ctx` (or `ngtcp2_conn_get_early_crypto_ctx`
381+
* `ngtcp2_conn_get_crypto_ctx` (or `ngtcp2_conn_get_0rtt_crypto_ctx`
382382
* if |level| ==
383383
* :enum:`ngtcp2_encryption_level.NGTCP2_ENCRYPTION_LEVEL_0RTT`) to
384384
* get :type:`ngtcp2_crypto_ctx`.

deps/ngtcp2/ngtcp2/crypto/picotls/picotls.c

+25-22
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static int supported_cipher_suite(ptls_cipher_suite_t *cs) {
125125
#ifdef PTLS_OPENSSL_HAVE_CHACHA20_POLY1305
126126
|| cs->aead == &ptls_openssl_chacha20poly1305
127127
#endif /* defined(PTLS_OPENSSL_HAVE_CHACHA20_POLY1305) */
128-
;
128+
;
129129
}
130130

131131
ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls(ngtcp2_crypto_ctx *ctx,
@@ -146,7 +146,7 @@ ngtcp2_crypto_ctx *ngtcp2_crypto_ctx_tls(ngtcp2_crypto_ctx *ctx,
146146
ctx->hp.native_handle = (void *)crypto_cipher_suite_get_hp(cs);
147147
ctx->max_encryption = crypto_cipher_suite_get_aead_max_encryption(cs);
148148
ctx->max_decryption_failure =
149-
crypto_cipher_suite_get_aead_max_decryption_failure(cs);
149+
crypto_cipher_suite_get_aead_max_decryption_failure(cs);
150150
return ctx;
151151
}
152152

@@ -329,19 +329,22 @@ int ngtcp2_crypto_decrypt(uint8_t *dest, const ngtcp2_crypto_aead *aead,
329329
const uint8_t *nonce, size_t noncelen,
330330
const uint8_t *aad, size_t aadlen) {
331331
ptls_aead_context_t *actx = aead_ctx->native_handle;
332+
size_t nwrite;
332333

333334
(void)aead;
334335

335336
ptls_aead_xor_iv(actx, nonce, noncelen);
336337

337-
if (ptls_aead_decrypt(actx, dest, ciphertext, ciphertextlen, 0, aad,
338-
aadlen) == SIZE_MAX) {
339-
return -1;
340-
}
338+
nwrite =
339+
ptls_aead_decrypt(actx, dest, ciphertext, ciphertextlen, 0, aad, aadlen);
341340

342341
/* zero-out static iv once again */
343342
ptls_aead_xor_iv(actx, nonce, noncelen);
344343

344+
if (nwrite == SIZE_MAX) {
345+
return -1;
346+
}
347+
345348
return 0;
346349
}
347350

@@ -360,13 +363,13 @@ int ngtcp2_crypto_hp_mask(uint8_t *dest, const ngtcp2_crypto_cipher *hp,
360363
}
361364

362365
int ngtcp2_crypto_read_write_crypto_data(
363-
ngtcp2_conn *conn, ngtcp2_encryption_level encryption_level,
364-
const uint8_t *data, size_t datalen) {
366+
ngtcp2_conn *conn, ngtcp2_encryption_level encryption_level,
367+
const uint8_t *data, size_t datalen) {
365368
ngtcp2_crypto_picotls_ctx *cptls = ngtcp2_conn_get_tls_native_handle(conn);
366369
ptls_buffer_t sendbuf;
367370
size_t epoch_offsets[5] = {0};
368371
size_t epoch =
369-
ngtcp2_crypto_picotls_from_ngtcp2_encryption_level(encryption_level);
372+
ngtcp2_crypto_picotls_from_ngtcp2_encryption_level(encryption_level);
370373
size_t epoch_datalen;
371374
size_t i;
372375
int rv;
@@ -388,7 +391,7 @@ int ngtcp2_crypto_read_write_crypto_data(
388391

389392
if (!ngtcp2_conn_is_server(conn) &&
390393
cptls->handshake_properties.client.early_data_acceptance ==
391-
PTLS_EARLY_DATA_REJECTED) {
394+
PTLS_EARLY_DATA_REJECTED) {
392395
rv = ngtcp2_conn_tls_early_data_rejected(conn);
393396
if (rv != 0) {
394397
rv = -1;
@@ -405,8 +408,8 @@ int ngtcp2_crypto_read_write_crypto_data(
405408
assert(i != 1);
406409

407410
if (ngtcp2_conn_submit_crypto_data(
408-
conn, ngtcp2_crypto_picotls_from_epoch(i),
409-
sendbuf.base + epoch_offsets[i], epoch_datalen) != 0) {
411+
conn, ngtcp2_crypto_picotls_from_epoch(i),
412+
sendbuf.base + epoch_offsets[i], epoch_datalen) != 0) {
410413
rv = -1;
411414
goto fin;
412415
}
@@ -463,7 +466,7 @@ ngtcp2_encryption_level ngtcp2_crypto_picotls_from_epoch(size_t epoch) {
463466
}
464467

465468
size_t ngtcp2_crypto_picotls_from_ngtcp2_encryption_level(
466-
ngtcp2_encryption_level encryption_level) {
469+
ngtcp2_encryption_level encryption_level) {
467470
switch (encryption_level) {
468471
case NGTCP2_ENCRYPTION_LEVEL_INITIAL:
469472
return 0;
@@ -532,17 +535,17 @@ static int set_additional_extensions(ptls_handshake_properties_t *hsprops,
532535
}
533536

534537
int ngtcp2_crypto_picotls_collect_extension(
535-
ptls_t *ptls, struct st_ptls_handshake_properties_t *properties,
536-
uint16_t type) {
538+
ptls_t *ptls, struct st_ptls_handshake_properties_t *properties,
539+
uint16_t type) {
537540
(void)ptls;
538541
(void)properties;
539542

540543
return type == NGTCP2_TLSEXT_QUIC_TRANSPORT_PARAMETERS_V1;
541544
}
542545

543546
int ngtcp2_crypto_picotls_collected_extensions(
544-
ptls_t *ptls, struct st_ptls_handshake_properties_t *properties,
545-
ptls_raw_extension_t *extensions) {
547+
ptls_t *ptls, struct st_ptls_handshake_properties_t *properties,
548+
ptls_raw_extension_t *extensions) {
546549
ngtcp2_crypto_conn_ref *conn_ref;
547550
ngtcp2_conn *conn;
548551
int rv;
@@ -558,7 +561,7 @@ int ngtcp2_crypto_picotls_collected_extensions(
558561
conn = conn_ref->get_conn(conn_ref);
559562

560563
rv = ngtcp2_conn_decode_and_set_remote_transport_params(
561-
conn, extensions->data.base, extensions->data.len);
564+
conn, extensions->data.base, extensions->data.len);
562565
if (rv != 0) {
563566
ngtcp2_conn_set_tls_error(conn, rv);
564567
return -1;
@@ -613,7 +616,7 @@ static int update_traffic_key_server_cb(ptls_update_traffic_key_t *self,
613616
}
614617

615618
static ptls_update_traffic_key_t update_traffic_key_server = {
616-
update_traffic_key_server_cb,
619+
update_traffic_key_server_cb,
617620
};
618621

619622
static int update_traffic_key_cb(ptls_update_traffic_key_t *self, ptls_t *ptls,
@@ -661,7 +664,7 @@ int ngtcp2_crypto_picotls_configure_client_context(ptls_context_t *ctx) {
661664
}
662665

663666
int ngtcp2_crypto_picotls_configure_server_session(
664-
ngtcp2_crypto_picotls_ctx *cptls) {
667+
ngtcp2_crypto_picotls_ctx *cptls) {
665668
ptls_handshake_properties_t *hsprops = &cptls->handshake_properties;
666669

667670
hsprops->collect_extension = ngtcp2_crypto_picotls_collect_extension;
@@ -671,7 +674,7 @@ int ngtcp2_crypto_picotls_configure_server_session(
671674
}
672675

673676
int ngtcp2_crypto_picotls_configure_client_session(
674-
ngtcp2_crypto_picotls_ctx *cptls, ngtcp2_conn *conn) {
677+
ngtcp2_crypto_picotls_ctx *cptls, ngtcp2_conn *conn) {
675678
ptls_handshake_properties_t *hsprops = &cptls->handshake_properties;
676679

677680
hsprops->client.max_early_data_size = calloc(1, sizeof(size_t));
@@ -692,7 +695,7 @@ int ngtcp2_crypto_picotls_configure_client_session(
692695
}
693696

694697
void ngtcp2_crypto_picotls_deconfigure_session(
695-
ngtcp2_crypto_picotls_ctx *cptls) {
698+
ngtcp2_crypto_picotls_ctx *cptls) {
696699
ptls_handshake_properties_t *hsprops;
697700
ptls_raw_extension_t *exts;
698701

deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/ngtcp2.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,12 @@ typedef void *(*ngtcp2_realloc)(void *ptr, size_t size, void *user_data);
167167
* }
168168
*
169169
* void conn_new() {
170-
* ngtcp2_mem mem = {NULL, my_malloc_cb, my_free_cb, my_calloc_cb,
171-
* my_realloc_cb};
170+
* ngtcp2_mem mem = {
171+
* .malloc = my_malloc_cb,
172+
* .free = my_free_cb,
173+
* .calloc = my_calloc_cb,
174+
* .realloc = my_realloc_cb,
175+
* };
172176
*
173177
* ...
174178
* }

deps/ngtcp2/ngtcp2/lib/includes/ngtcp2/version.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
*
3737
* Version number of the ngtcp2 library release.
3838
*/
39-
#define NGTCP2_VERSION "1.10.0"
39+
#define NGTCP2_VERSION "1.11.0"
4040

4141
/**
4242
* @macro
@@ -46,6 +46,6 @@
4646
* number, 8 bits for minor and 8 bits for patch. Version 1.2.3
4747
* becomes 0x010203.
4848
*/
49-
#define NGTCP2_VERSION_NUM 0x010a00
49+
#define NGTCP2_VERSION_NUM 0x010b00
5050

5151
#endif /* !defined(NGTCP2_VERSION_H) */

deps/ngtcp2/ngtcp2/lib/ngtcp2_acktr.c

+114
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "ngtcp2_acktr.h"
2626

2727
#include <assert.h>
28+
#include <string.h>
2829

2930
#include "ngtcp2_macro.h"
3031
#include "ngtcp2_tstamp.h"
@@ -70,6 +71,9 @@ void ngtcp2_acktr_init(ngtcp2_acktr *acktr, ngtcp2_log *log,
7071
acktr->flags = NGTCP2_ACKTR_FLAG_NONE;
7172
acktr->first_unacked_ts = UINT64_MAX;
7273
acktr->rx_npkt = 0;
74+
acktr->max_pkt_num = -1;
75+
acktr->max_pkt_ts = UINT64_MAX;
76+
memset(&acktr->ecn, 0, sizeof(acktr->ecn));
7377
}
7478

7579
void ngtcp2_acktr_free(ngtcp2_acktr *acktr) {
@@ -180,6 +184,11 @@ int ngtcp2_acktr_add(ngtcp2_acktr *acktr, int64_t pkt_num, int active_ack,
180184
ngtcp2_acktr_entry_objalloc_del(delent, &acktr->objalloc);
181185
}
182186

187+
if (acktr->max_pkt_num < pkt_num) {
188+
acktr->max_pkt_num = pkt_num;
189+
acktr->max_pkt_ts = ts;
190+
}
191+
183192
return 0;
184193
}
185194

@@ -323,3 +332,108 @@ int ngtcp2_acktr_require_active_ack(const ngtcp2_acktr *acktr,
323332
void ngtcp2_acktr_immediate_ack(ngtcp2_acktr *acktr) {
324333
acktr->flags |= NGTCP2_ACKTR_FLAG_IMMEDIATE_ACK;
325334
}
335+
336+
ngtcp2_frame *ngtcp2_acktr_create_ack_frame(ngtcp2_acktr *acktr,
337+
ngtcp2_frame *fr, uint8_t type,
338+
ngtcp2_tstamp ts,
339+
ngtcp2_duration ack_delay,
340+
uint64_t ack_delay_exponent) {
341+
int64_t last_pkt_num;
342+
ngtcp2_ack_range *range;
343+
ngtcp2_ksl_it it;
344+
ngtcp2_acktr_entry *rpkt;
345+
ngtcp2_ack *ack = &fr->ack;
346+
ngtcp2_tstamp largest_ack_ts;
347+
size_t num_acks;
348+
349+
if (acktr->flags & NGTCP2_ACKTR_FLAG_IMMEDIATE_ACK) {
350+
ack_delay = 0;
351+
}
352+
353+
if (!ngtcp2_acktr_require_active_ack(acktr, ack_delay, ts)) {
354+
return NULL;
355+
}
356+
357+
it = ngtcp2_acktr_get(acktr);
358+
if (ngtcp2_ksl_it_end(&it)) {
359+
ngtcp2_acktr_commit_ack(acktr);
360+
return NULL;
361+
}
362+
363+
num_acks = ngtcp2_ksl_len(&acktr->ents);
364+
365+
if (acktr->ecn.ect0 || acktr->ecn.ect1 || acktr->ecn.ce) {
366+
ack->type = NGTCP2_FRAME_ACK_ECN;
367+
ack->ecn.ect0 = acktr->ecn.ect0;
368+
ack->ecn.ect1 = acktr->ecn.ect1;
369+
ack->ecn.ce = acktr->ecn.ce;
370+
} else {
371+
ack->type = NGTCP2_FRAME_ACK;
372+
}
373+
ack->rangecnt = 0;
374+
375+
rpkt = ngtcp2_ksl_it_get(&it);
376+
377+
if (rpkt->pkt_num == acktr->max_pkt_num) {
378+
last_pkt_num = rpkt->pkt_num - (int64_t)(rpkt->len - 1);
379+
largest_ack_ts = rpkt->tstamp;
380+
ack->largest_ack = rpkt->pkt_num;
381+
ack->first_ack_range = rpkt->len - 1;
382+
383+
ngtcp2_ksl_it_next(&it);
384+
--num_acks;
385+
} else if (rpkt->pkt_num + 1 == acktr->max_pkt_num) {
386+
last_pkt_num = rpkt->pkt_num - (int64_t)(rpkt->len - 1);
387+
largest_ack_ts = acktr->max_pkt_ts;
388+
ack->largest_ack = acktr->max_pkt_num;
389+
ack->first_ack_range = rpkt->len;
390+
391+
ngtcp2_ksl_it_next(&it);
392+
--num_acks;
393+
} else {
394+
assert(rpkt->pkt_num < acktr->max_pkt_num);
395+
396+
last_pkt_num = acktr->max_pkt_num;
397+
largest_ack_ts = acktr->max_pkt_ts;
398+
ack->largest_ack = acktr->max_pkt_num;
399+
ack->first_ack_range = 0;
400+
}
401+
402+
if (type == NGTCP2_PKT_1RTT) {
403+
ack->ack_delay_unscaled = ts - largest_ack_ts;
404+
ack->ack_delay = ack->ack_delay_unscaled / NGTCP2_MICROSECONDS /
405+
(1ULL << ack_delay_exponent);
406+
} else {
407+
ack->ack_delay_unscaled = 0;
408+
ack->ack_delay = 0;
409+
}
410+
411+
num_acks = ngtcp2_min_size(num_acks, NGTCP2_MAX_ACK_RANGES);
412+
413+
for (; ack->rangecnt < num_acks; ngtcp2_ksl_it_next(&it)) {
414+
rpkt = ngtcp2_ksl_it_get(&it);
415+
416+
range = &ack->ranges[ack->rangecnt++];
417+
range->gap = (uint64_t)(last_pkt_num - rpkt->pkt_num - 2);
418+
range->len = rpkt->len - 1;
419+
420+
last_pkt_num = rpkt->pkt_num - (int64_t)(rpkt->len - 1);
421+
}
422+
423+
return fr;
424+
}
425+
426+
void ngtcp2_acktr_increase_ecn_counts(ngtcp2_acktr *acktr,
427+
const ngtcp2_pkt_info *pi) {
428+
switch (pi->ecn & NGTCP2_ECN_MASK) {
429+
case NGTCP2_ECN_ECT_0:
430+
++acktr->ecn.ect0;
431+
break;
432+
case NGTCP2_ECN_ECT_1:
433+
++acktr->ecn.ect1;
434+
break;
435+
case NGTCP2_ECN_CE:
436+
++acktr->ecn.ce;
437+
break;
438+
}
439+
}

0 commit comments

Comments
 (0)