Skip to content

Commit ce0fdeb

Browse files
committed
deps: add support for BoringSSL QUIC APIs
Sourced from: https://github.com/akamai/openssl/commits/OpenSSL_1_1_1d-quic This is a cherry-pick of 2a4b03a306439307e0b822b17eda3bdabddfbb68 on the master-quic-support2 branch (2019-10-07) Which was a rebase/squash of master-quic-support: * 5aa62ce Add support for more secrets - Todd Short/Todd Short (master-quic-support) * 58e0643 Tweeks to quic_change_cipher_state() - Todd Short/Todd Short * 8169702 Move QUIC code out of tls13_change_cipher_state() - Todd Short/Todd Short * a08cfe6 Correctly disable middlebox compat - Todd Short/Todd Short * 3a9eabf Add OPENSSL_NO_QUIC wrapper - Todd Short/Todd Short * f550eca Add client early traffic secret storage - Todd Short/Todd Short * 1b787ae Quick fix: s2c to c2s for early secret - Todd Short/Todd Short * f97e6a9 Don't process an incomplete message - Todd Short/Todd Short * 81f0ce2 Reset init state in SSL_process_quic_post_handshake() - Todd Short/Todd Short * 5d59cf9 Fix quic_transport constructors/parsers - Todd Short/Todd Short * 5e5f91c Fix INSTALL nit. - Todd Short/Todd Short * bd290ab Fix duplicate word in docs - Todd Short/Todd Short * 699590b fixup! Handle partial handshake messages - Todd Short/Todd Short * a472a8d Handle partial handshake messages - Todd Short/Todd Short * 363cf3d fixup! Use proper secrets for handshake - Todd Short/Todd Short * b03fee6 Use proper secrets for handshake - Todd Short/Todd Short * 2ab1aa0 Move QUIC transport params to encrypted extensions - Todd Short/Todd Short * 0d16af9 Make temp secret names less confusing - Todd Short/Todd Short * abb6f39 New method to get QUIC secret length - Todd Short/Todd Short * 05fdae9 Add support for BoringSSL QUIC APIs - Todd Short/Todd Short This adds a compatible API for BoringSSL's QUIC support, based on the current |draft-ietf-quic-tls|. Based on BoringSSL commit 3c034b2cf386b3131f75520705491871a2e0cafe Based on BoringSSL commit c8e0f90f83b9ec38ea833deb86b5a41360b62b6a Based on BoringSSL commit 3cbb0299a28a8bd0136257251a78b91a96c5eec8 Based on BoringSSL commit cc9d935256539af2d3b7f831abf57c0d685ffd81 Based on BoringSSL commit e6eef1ca16a022e476bbaedffef044597cfc8f4b Based on BoringSSL commit 6f733791148cf8a076bf0e95498235aadbe5926d Based on BoringSSL commit 384d0eaf1930af1ebc47eda751f0c78dfcba1c03 Based on BoringSSL commit a0373182eb5cc7b81d49f434596b473c7801c942 Based on BoringSSL commit b1b76aee3cb43ce11889403c5334283d951ebd37 New method to get QUIC secret length Make temp secret names less confusing Move QUIC transport params to encrypted extensions Use proper secrets for handshake fixup! Use proper secrets for handshake Handle partial handshake messages fixup! Handle partial handshake messages Fix duplicate word in docs Fix INSTALL nit. Fix quic_transport constructors/parsers Reset init state in SSL_process_quic_post_handshake() Don't process an incomplete message Quick fix: s2c to c2s for early secret Add client early traffic secret storage Add OPENSSL_NO_QUIC wrapper Correctly disable middlebox compat Move QUIC code out of tls13_change_cipher_state() Create quic_change_cipher_state() that does the minimal required to generate the QUIC secrets. (e.g. encryption contexts are not initialized). Tweeks to quic_change_cipher_state() Add support for more secrets PR-URL: nodejs/quic#350 Reviewed-By: Anna Henningsen <[email protected]>
1 parent 5eb85dd commit ce0fdeb

33 files changed

+1373
-34
lines changed

deps/openssl/openssl/CHANGES

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99

1010
Changes between 1.1.1c and 1.1.1d [10 Sep 2019]
1111

12+
*) Implement BoringSSL's QUIC API
13+
[Todd Short]
14+
1215
*) Fixed a fork protection issue. OpenSSL 1.1.1 introduced a rewritten random
1316
number generator (RNG). This was intended to include protection in the
1417
event of a fork() system call in order to ensure that the parent and child

deps/openssl/openssl/Configure

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ my @disablables = (
378378
"poly1305",
379379
"posix-io",
380380
"psk",
381+
"quic",
381382
"rc2",
382383
"rc4",
383384
"rc5",
@@ -494,6 +495,8 @@ my @disable_cascades = (
494495
sub { !$disabled{"unit-test"} } => [ "heartbeats" ],
495496

496497
sub { !$disabled{"msan"} } => [ "asm" ],
498+
499+
"tls1_3" => [ "quic" ],
497500
);
498501

499502
# Avoid protocol support holes. Also disable all versions below N, if version

deps/openssl/openssl/INSTALL

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,9 @@
453453
no-psk
454454
Don't build support for Pre-Shared Key based ciphersuites.
455455

456+
no-quic
457+
Don't build with support for QUIC.
458+
456459
no-rdrand
457460
Don't use hardware RDRAND capabilities.
458461

deps/openssl/openssl/crypto/err/openssl.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,6 +1186,9 @@ SSL_F_PARSE_CA_NAMES:541:parse_ca_names
11861186
SSL_F_PITEM_NEW:624:pitem_new
11871187
SSL_F_PQUEUE_NEW:625:pqueue_new
11881188
SSL_F_PROCESS_KEY_SHARE_EXT:439:*
1189+
SSL_F_QUIC_CHANGE_CIPHER_STATE:639:quic_change_cipher_state
1190+
SSL_F_QUIC_GET_MESSAGE:640:quic_get_message
1191+
SSL_F_QUIC_SET_ENCRYPTION_SECRETS:641:quic_set_encryption_secrets
11891192
SSL_F_READ_STATE_MACHINE:352:read_state_machine
11901193
SSL_F_SET_CLIENT_CIPHERSUITE:540:set_client_ciphersuite
11911194
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET:595:srp_generate_client_master_secret
@@ -1196,7 +1199,9 @@ SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM:130:ssl3_check_cert_and_algorithm
11961199
SSL_F_SSL3_CTRL:213:ssl3_ctrl
11971200
SSL_F_SSL3_CTX_CTRL:133:ssl3_ctx_ctrl
11981201
SSL_F_SSL3_DIGEST_CACHED_RECORDS:293:ssl3_digest_cached_records
1202+
SSL_F_SSL3_DISPATCH_ALERT:642:ssl3_dispatch_alert
11991203
SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC:292:ssl3_do_change_cipher_spec
1204+
SSL_F_SSL3_DO_WRITE:643:ssl3_do_write
12001205
SSL_F_SSL3_ENC:608:ssl3_enc
12011206
SSL_F_SSL3_FINAL_FINISH_MAC:285:ssl3_final_finish_mac
12021207
SSL_F_SSL3_FINISH_MAC:587:ssl3_finish_mac
@@ -1304,6 +1309,8 @@ SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT:311:*
13041309
SSL_F_SSL_PEEK:270:SSL_peek
13051310
SSL_F_SSL_PEEK_EX:432:SSL_peek_ex
13061311
SSL_F_SSL_PEEK_INTERNAL:522:ssl_peek_internal
1312+
SSL_F_SSL_PROCESS_QUIC_POST_HANDSHAKE:644:SSL_process_quic_post_handshake
1313+
SSL_F_SSL_PROVIDE_QUIC_DATA:645:SSL_provide_quic_data
13071314
SSL_F_SSL_READ:223:SSL_read
13081315
SSL_F_SSL_READ_EARLY_DATA:529:SSL_read_early_data
13091316
SSL_F_SSL_READ_EX:434:SSL_read_ex
@@ -1353,6 +1360,7 @@ SSL_F_SSL_WRITE_EARLY_DATA:526:SSL_write_early_data
13531360
SSL_F_SSL_WRITE_EARLY_FINISH:527:*
13541361
SSL_F_SSL_WRITE_EX:433:SSL_write_ex
13551362
SSL_F_SSL_WRITE_INTERNAL:524:ssl_write_internal
1363+
SSL_F_STATEM_FLUSH:646:statem_flush
13561364
SSL_F_STATE_MACHINE:353:state_machine
13571365
SSL_F_TLS12_CHECK_PEER_SIGALG:333:tls12_check_peer_sigalg
13581366
SSL_F_TLS12_COPY_SIGALGS:533:tls12_copy_sigalgs
@@ -1416,6 +1424,8 @@ SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH:619:\
14161424
tls_construct_ctos_post_handshake_auth
14171425
SSL_F_TLS_CONSTRUCT_CTOS_PSK:501:tls_construct_ctos_psk
14181426
SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES:509:tls_construct_ctos_psk_kex_modes
1427+
SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS:647:\
1428+
tls_construct_ctos_quic_transport_params
14191429
SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE:473:tls_construct_ctos_renegotiate
14201430
SSL_F_TLS_CONSTRUCT_CTOS_SCT:474:tls_construct_ctos_sct
14211431
SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME:475:tls_construct_ctos_server_name
@@ -1457,6 +1467,8 @@ SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE:456:tls_construct_stoc_key_share
14571467
SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN:548:tls_construct_stoc_maxfragmentlen
14581468
SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG:457:tls_construct_stoc_next_proto_neg
14591469
SSL_F_TLS_CONSTRUCT_STOC_PSK:504:tls_construct_stoc_psk
1470+
SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS:648:\
1471+
tls_construct_stoc_quic_transport_params
14601472
SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE:458:tls_construct_stoc_renegotiate
14611473
SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME:459:tls_construct_stoc_server_name
14621474
SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET:460:tls_construct_stoc_session_ticket
@@ -1485,6 +1497,8 @@ SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN:571:tls_parse_ctos_maxfragmentlen
14851497
SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH:620:tls_parse_ctos_post_handshake_auth
14861498
SSL_F_TLS_PARSE_CTOS_PSK:505:tls_parse_ctos_psk
14871499
SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES:572:tls_parse_ctos_psk_kex_modes
1500+
SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS:649:\
1501+
tls_parse_ctos_quic_transport_params
14881502
SSL_F_TLS_PARSE_CTOS_RENEGOTIATE:464:tls_parse_ctos_renegotiate
14891503
SSL_F_TLS_PARSE_CTOS_SERVER_NAME:573:tls_parse_ctos_server_name
14901504
SSL_F_TLS_PARSE_CTOS_SESSION_TICKET:574:tls_parse_ctos_session_ticket
@@ -1503,6 +1517,8 @@ SSL_F_TLS_PARSE_STOC_KEY_SHARE:445:tls_parse_stoc_key_share
15031517
SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN:581:tls_parse_stoc_maxfragmentlen
15041518
SSL_F_TLS_PARSE_STOC_NPN:582:tls_parse_stoc_npn
15051519
SSL_F_TLS_PARSE_STOC_PSK:502:tls_parse_stoc_psk
1520+
SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS:650:\
1521+
tls_parse_stoc_quic_transport_params
15061522
SSL_F_TLS_PARSE_STOC_RENEGOTIATE:448:tls_parse_stoc_renegotiate
15071523
SSL_F_TLS_PARSE_STOC_SCT:564:tls_parse_stoc_sct
15081524
SSL_F_TLS_PARSE_STOC_SERVER_NAME:583:tls_parse_stoc_server_name
@@ -2702,6 +2718,7 @@ SSL_R_INCONSISTENT_EARLY_DATA_ALPN:222:inconsistent early data alpn
27022718
SSL_R_INCONSISTENT_EARLY_DATA_SNI:231:inconsistent early data sni
27032719
SSL_R_INCONSISTENT_EXTMS:104:inconsistent extms
27042720
SSL_R_INSUFFICIENT_SECURITY:241:insufficient security
2721+
SSL_R_INTERNAL_ERROR:294:internal error
27052722
SSL_R_INVALID_ALERT:205:invalid alert
27062723
SSL_R_INVALID_CCS_MESSAGE:260:invalid ccs message
27072724
SSL_R_INVALID_CERTIFICATE_OR_ALG:238:invalid certificate or alg
@@ -2877,6 +2894,7 @@ SSL_R_VERSION_TOO_LOW:396:version too low
28772894
SSL_R_WRONG_CERTIFICATE_TYPE:383:wrong certificate type
28782895
SSL_R_WRONG_CIPHER_RETURNED:261:wrong cipher returned
28792896
SSL_R_WRONG_CURVE:378:wrong curve
2897+
SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED:295:wrong encryption level received
28802898
SSL_R_WRONG_SIGNATURE_LENGTH:264:wrong signature length
28812899
SSL_R_WRONG_SIGNATURE_SIZE:265:wrong signature size
28822900
SSL_R_WRONG_SIGNATURE_TYPE:370:wrong signature type

deps/openssl/openssl/crypto/kdf/hkdf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#include "internal/cryptlib.h"
1616
#include "internal/evp_int.h"
1717

18-
#define HKDF_MAXBUF 1024
18+
#define HKDF_MAXBUF 2048
1919

2020
static unsigned char *HKDF(const EVP_MD *evp_md,
2121
const unsigned char *salt, size_t salt_len,

deps/openssl/openssl/doc/man3/SSL_CIPHER_get_name.pod

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ SSL_CIPHER_get_digest_nid,
1313
SSL_CIPHER_get_handshake_digest,
1414
SSL_CIPHER_get_kx_nid,
1515
SSL_CIPHER_get_auth_nid,
16+
SSL_CIPHER_get_prf_nid,
1617
SSL_CIPHER_is_aead,
1718
SSL_CIPHER_find,
1819
SSL_CIPHER_get_id,
@@ -34,6 +35,7 @@ SSL_CIPHER_get_protocol_id
3435
const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c);
3536
int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
3637
int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
38+
int SSL_CIPHER_get_prf_nid(const SSL_CIPHER *c);
3739
int SSL_CIPHER_is_aead(const SSL_CIPHER *c);
3840
const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
3941
uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
@@ -91,6 +93,15 @@ TLS 1.3 cipher suites) B<NID_auth_any> is returned. Examples (not comprehensive)
9193
NID_auth_ecdsa
9294
NID_auth_psk
9395

96+
SSL_CIPHER_get_prf_nid() retuns the pseudo-random function NID for B<c>. If B<c> is
97+
a pre-TLS-1.2 cipher, it returns B<NID_md5_sha1> but note these ciphers use
98+
SHA-256 in TLS 1.2. Other return values may be treated uniformly in all
99+
applicable versions. Examples (not comprehensive):
100+
101+
NID_md5_sha1
102+
NID_sha256
103+
NID_sha384
104+
94105
SSL_CIPHER_is_aead() returns 1 if the cipher B<c> is AEAD (e.g. GCM or
95106
ChaCha20/Poly1305), and 0 if it is not AEAD.
96107

@@ -201,6 +212,8 @@ required to enable this function.
201212

202213
The OPENSSL_cipher_name() function was added in OpenSSL 1.1.1.
203214

215+
The SSL_CIPHER_get_prf_nid() function was added in OpenSSL 3.0.0.
216+
204217
=head1 COPYRIGHT
205218

206219
Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.

0 commit comments

Comments
 (0)