Skip to content

Commit 05fdae9

Browse files
committed
Add support for BoringSSL QUIC APIs
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
1 parent 5ffc332 commit 05fdae9

31 files changed

+1243
-26
lines changed

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.1 and 3.0.0 [xx XXX xxxx]
1111

12+
*) Implement BoringSSL's QUIC API
13+
[Todd Short]
14+
1215
*) Early start up entropy quality from the DEVRANDOM seed source has been
1316
improved for older Linux systems. The RAND subsystem will wait for
1417
/dev/random to be producing output before seeding from /dev/urandom.

Configure

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#! /usr/bin/env perl
22
# -*- mode: perl; -*-
3-
# Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
3+
# Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
44
#
55
# Licensed under the Apache License 2.0 (the "License"). You may not use
66
# this file except in compliance with the License. You can obtain a copy
@@ -382,6 +382,7 @@ my @disablables = (
382382
"poly1305",
383383
"posix-io",
384384
"psk",
385+
"quic",
385386
"rc2",
386387
"rc4",
387388
"rc5",
@@ -536,6 +537,7 @@ my @disable_cascades = (
536537
"legacy" => [ "md2" ],
537538

538539
"cmp" => [ "crmf" ],
540+
"tls1_3" => [ "quic" ],
539541
);
540542

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

INSTALL

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

482+
no-quic
483+
Don't build support for QUIC support.
484+
482485
no-rdrand
483486
Don't use hardware RDRAND capabilities.
484487

crypto/err/openssl.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1356,6 +1356,8 @@ SSL_F_PARSE_CA_NAMES:541:parse_ca_names
13561356
SSL_F_PITEM_NEW:624:pitem_new
13571357
SSL_F_PQUEUE_NEW:625:pqueue_new
13581358
SSL_F_PROCESS_KEY_SHARE_EXT:439:*
1359+
SSL_F_QUIC_GET_MESSAGE:640:quic_get_message
1360+
SSL_F_QUIC_SET_ENCRYPTION_SECRETS:641:quic_set_encryption_secrets
13591361
SSL_F_READ_STATE_MACHINE:352:read_state_machine
13601362
SSL_F_SET_CLIENT_CIPHERSUITE:540:set_client_ciphersuite
13611363
SSL_F_SRP_GENERATE_CLIENT_MASTER_SECRET:595:srp_generate_client_master_secret
@@ -1366,7 +1368,9 @@ SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM:130:ssl3_check_cert_and_algorithm
13661368
SSL_F_SSL3_CTRL:213:ssl3_ctrl
13671369
SSL_F_SSL3_CTX_CTRL:133:ssl3_ctx_ctrl
13681370
SSL_F_SSL3_DIGEST_CACHED_RECORDS:293:ssl3_digest_cached_records
1371+
SSL_F_SSL3_DISPATCH_ALERT:642:ssl3_dispatch_alert
13691372
SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC:292:ssl3_do_change_cipher_spec
1373+
SSL_F_SSL3_DO_WRITE:643:ssl3_do_write
13701374
SSL_F_SSL3_ENC:608:ssl3_enc
13711375
SSL_F_SSL3_FINAL_FINISH_MAC:285:ssl3_final_finish_mac
13721376
SSL_F_SSL3_FINISH_MAC:587:ssl3_finish_mac
@@ -1474,6 +1478,8 @@ SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT:311:*
14741478
SSL_F_SSL_PEEK:270:SSL_peek
14751479
SSL_F_SSL_PEEK_EX:432:SSL_peek_ex
14761480
SSL_F_SSL_PEEK_INTERNAL:522:ssl_peek_internal
1481+
SSL_F_SSL_PROCESS_QUIC_POST_HANDSHAKE:644:SSL_process_quic_post_handshake
1482+
SSL_F_SSL_PROVIDE_QUIC_DATA:645:SSL_provide_quic_data
14771483
SSL_F_SSL_READ:223:SSL_read
14781484
SSL_F_SSL_READ_EARLY_DATA:529:SSL_read_early_data
14791485
SSL_F_SSL_READ_EX:434:SSL_read_ex
@@ -1524,6 +1530,7 @@ SSL_F_SSL_WRITE_EARLY_DATA:526:SSL_write_early_data
15241530
SSL_F_SSL_WRITE_EARLY_FINISH:527:*
15251531
SSL_F_SSL_WRITE_EX:433:SSL_write_ex
15261532
SSL_F_SSL_WRITE_INTERNAL:524:ssl_write_internal
1533+
SSL_F_STATEM_FLUSH:646:statem_flush
15271534
SSL_F_STATE_MACHINE:353:state_machine
15281535
SSL_F_TLS12_CHECK_PEER_SIGALG:333:tls12_check_peer_sigalg
15291536
SSL_F_TLS12_COPY_SIGALGS:533:tls12_copy_sigalgs
@@ -1587,6 +1594,8 @@ SSL_F_TLS_CONSTRUCT_CTOS_POST_HANDSHAKE_AUTH:619:\
15871594
tls_construct_ctos_post_handshake_auth
15881595
SSL_F_TLS_CONSTRUCT_CTOS_PSK:501:tls_construct_ctos_psk
15891596
SSL_F_TLS_CONSTRUCT_CTOS_PSK_KEX_MODES:509:tls_construct_ctos_psk_kex_modes
1597+
SSL_F_TLS_CONSTRUCT_CTOS_QUIC_TRANSPORT_PARAMS:647:\
1598+
tls_construct_ctos_quic_transport_params
15901599
SSL_F_TLS_CONSTRUCT_CTOS_RENEGOTIATE:473:tls_construct_ctos_renegotiate
15911600
SSL_F_TLS_CONSTRUCT_CTOS_SCT:474:tls_construct_ctos_sct
15921601
SSL_F_TLS_CONSTRUCT_CTOS_SERVER_NAME:475:tls_construct_ctos_server_name
@@ -1628,6 +1637,8 @@ SSL_F_TLS_CONSTRUCT_STOC_KEY_SHARE:456:tls_construct_stoc_key_share
16281637
SSL_F_TLS_CONSTRUCT_STOC_MAXFRAGMENTLEN:548:tls_construct_stoc_maxfragmentlen
16291638
SSL_F_TLS_CONSTRUCT_STOC_NEXT_PROTO_NEG:457:tls_construct_stoc_next_proto_neg
16301639
SSL_F_TLS_CONSTRUCT_STOC_PSK:504:tls_construct_stoc_psk
1640+
SSL_F_TLS_CONSTRUCT_STOC_QUIC_TRANSPORT_PARAMS:648:\
1641+
tls_construct_stoc_quic_transport_params
16311642
SSL_F_TLS_CONSTRUCT_STOC_RENEGOTIATE:458:tls_construct_stoc_renegotiate
16321643
SSL_F_TLS_CONSTRUCT_STOC_SERVER_NAME:459:tls_construct_stoc_server_name
16331644
SSL_F_TLS_CONSTRUCT_STOC_SESSION_TICKET:460:tls_construct_stoc_session_ticket
@@ -1656,6 +1667,8 @@ SSL_F_TLS_PARSE_CTOS_MAXFRAGMENTLEN:571:tls_parse_ctos_maxfragmentlen
16561667
SSL_F_TLS_PARSE_CTOS_POST_HANDSHAKE_AUTH:620:tls_parse_ctos_post_handshake_auth
16571668
SSL_F_TLS_PARSE_CTOS_PSK:505:tls_parse_ctos_psk
16581669
SSL_F_TLS_PARSE_CTOS_PSK_KEX_MODES:572:tls_parse_ctos_psk_kex_modes
1670+
SSL_F_TLS_PARSE_CTOS_QUIC_TRANSPORT_PARAMS:649:\
1671+
tls_parse_ctos_quic_transport_params
16591672
SSL_F_TLS_PARSE_CTOS_RENEGOTIATE:464:tls_parse_ctos_renegotiate
16601673
SSL_F_TLS_PARSE_CTOS_SERVER_NAME:573:tls_parse_ctos_server_name
16611674
SSL_F_TLS_PARSE_CTOS_SESSION_TICKET:574:tls_parse_ctos_session_ticket
@@ -1674,6 +1687,8 @@ SSL_F_TLS_PARSE_STOC_KEY_SHARE:445:tls_parse_stoc_key_share
16741687
SSL_F_TLS_PARSE_STOC_MAXFRAGMENTLEN:581:tls_parse_stoc_maxfragmentlen
16751688
SSL_F_TLS_PARSE_STOC_NPN:582:tls_parse_stoc_npn
16761689
SSL_F_TLS_PARSE_STOC_PSK:502:tls_parse_stoc_psk
1690+
SSL_F_TLS_PARSE_STOC_QUIC_TRANSPORT_PARAMS:650:\
1691+
tls_parse_stoc_quic_transport_params
16771692
SSL_F_TLS_PARSE_STOC_RENEGOTIATE:448:tls_parse_stoc_renegotiate
16781693
SSL_F_TLS_PARSE_STOC_SCT:564:tls_parse_stoc_sct
16791694
SSL_F_TLS_PARSE_STOC_SERVER_NAME:583:tls_parse_stoc_server_name
@@ -2875,6 +2890,7 @@ SSL_R_AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE:158:\
28752890
SSL_R_BAD_CHANGE_CIPHER_SPEC:103:bad change cipher spec
28762891
SSL_R_BAD_CIPHER:186:bad cipher
28772892
SSL_R_BAD_DATA:390:bad data
2893+
SSL_R_BAD_DATA_LENGTH:294:bad data length
28782894
SSL_R_BAD_DATA_RETURNED_BY_CALLBACK:106:bad data returned by callback
28792895
SSL_R_BAD_DECOMPRESSION:107:bad decompression
28802896
SSL_R_BAD_DH_VALUE:102:bad dh value
@@ -2981,6 +2997,7 @@ SSL_R_INCONSISTENT_EARLY_DATA_ALPN:222:inconsistent early data alpn
29812997
SSL_R_INCONSISTENT_EARLY_DATA_SNI:231:inconsistent early data sni
29822998
SSL_R_INCONSISTENT_EXTMS:104:inconsistent extms
29832999
SSL_R_INSUFFICIENT_SECURITY:241:insufficient security
3000+
SSL_R_INTERNAL_ERROR:295:internal error
29843001
SSL_R_INVALID_ALERT:205:invalid alert
29853002
SSL_R_INVALID_CCS_MESSAGE:260:invalid ccs message
29863003
SSL_R_INVALID_CERTIFICATE_OR_ALG:238:invalid certificate or alg
@@ -3154,6 +3171,7 @@ SSL_R_VERSION_TOO_LOW:396:version too low
31543171
SSL_R_WRONG_CERTIFICATE_TYPE:383:wrong certificate type
31553172
SSL_R_WRONG_CIPHER_RETURNED:261:wrong cipher returned
31563173
SSL_R_WRONG_CURVE:378:wrong curve
3174+
SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED:296:wrong encryption level received
31573175
SSL_R_WRONG_SIGNATURE_LENGTH:264:wrong signature length
31583176
SSL_R_WRONG_SIGNATURE_SIZE:265:wrong signature size
31593177
SSL_R_WRONG_SIGNATURE_TYPE:370:wrong signature type

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)