Remove TLSv1.3 draft.
parent
2ff4fd05f1
commit
d087771dc0
24
README.md
24
README.md
|
@ -12,12 +12,10 @@
|
||||||
|
|
||||||
## Information
|
## Information
|
||||||
|
|
||||||
- [Test Page - (TLS 1.3 draft 23, 26, 28, final)](https://ssl.hakase.io/)
|
- [Test Page - (TLS 1.3 final)](https://ssl.hakase.io/)
|
||||||
- [SSL Test Result - testssl.sh](https://ssl.hakase.io/ssltest/hakase.io.html)
|
- [SSL Test Result - testssl.sh](https://ssl.hakase.io/ssltest/hakase.io.html)
|
||||||
- [SSL Test Result - dev.ssllabs.com](https://dev.ssllabs.com/ssltest/analyze.html?d=hakase.io)
|
- [SSL Test Result - dev.ssllabs.com](https://dev.ssllabs.com/ssltest/analyze.html?d=hakase.io)
|
||||||
- **If you link site to a browser that supports draft 23 or 26 or 28 or final, you'll see a TLS 1.3 message.**
|
- **If you link site to a browser that supports final, you'll see a TLS 1.3 message.**
|
||||||
|
|
||||||
**Support TLS 1.3 draft 28 browsers - _Chrome Canary, Firefox Nightly_**
|
|
||||||
|
|
||||||
Displays TLSv1.3 support for large sites.
|
Displays TLSv1.3 support for large sites.
|
||||||
|
|
||||||
|
@ -25,13 +23,13 @@ Default support is in bold type.
|
||||||
- [Baidu(China)](https://baidu.cn/) : **TLSv1.2**
|
- [Baidu(China)](https://baidu.cn/) : **TLSv1.2**
|
||||||
- [Naver(Korea)](https://naver.com/) : **TLSv1.2**
|
- [Naver(Korea)](https://naver.com/) : **TLSv1.2**
|
||||||
- [Twitter](https://twitter.com/) : **TLSv1.2**
|
- [Twitter](https://twitter.com/) : **TLSv1.2**
|
||||||
- [**My Site**](https://hakase.io/) : _TLSv1.3_ draft 23, 26, 28, **final**
|
- [**My Site**](https://hakase.io/) : _TLSv1.3_ **final**
|
||||||
- [Facebook](https://facebook.com/) : _TLSv1.3_ draft 23, 26, 28, **final**
|
- [Facebook](https://facebook.com/) : _TLSv1.3_ draft 23, 26, 28, **final**
|
||||||
- [Cloudflare](https://cloudflare.com/) : _TLSv1.3_ draft 23, 28, **final**
|
- [Cloudflare](https://cloudflare.com/) : _TLSv1.3_ **final**
|
||||||
- [Google(Gmail)](https://gmail.com/) : _TLSv1.3_ draft 23, 28, **final**
|
- [Google(Gmail)](https://gmail.com/) : _TLSv1.3_ **final**
|
||||||
- [NSS TLS 1.3(Mozilla)](https://tls13.crypto.mozilla.org/) : _TLSv1.3_ **final**
|
- [NSS TLS 1.3(Mozilla)](https://tls13.crypto.mozilla.org/) : _TLSv1.3_ **final**
|
||||||
|
|
||||||
[Compatible OpenSSL-3.0.0-dev (OpenSSL, 23204 commits)](https://github.com/openssl/openssl/tree/829800b0735ab99a0962418180cb076ff8081028)
|
[Compatible OpenSSL-3.0.0-dev (OpenSSL, 23340 commits)](https://github.com/openssl/openssl/tree/1980ce45d6bdd2b57df7003d6b56b5df560b9064)
|
||||||
|
|
||||||
## Patch files
|
## Patch files
|
||||||
|
|
||||||
|
@ -40,19 +38,15 @@ Default support is in bold type.
|
||||||
You can find the _OpenSSL 1.1.0h_ patch is [here.](https://gitlab.com/buik/openssl/blob/openssl-patch/openssl-1.1/OpenSSL1.1h-equal-preference-cipher-groups.patch)
|
You can find the _OpenSSL 1.1.0h_ patch is [here.](https://gitlab.com/buik/openssl/blob/openssl-patch/openssl-1.1/OpenSSL1.1h-equal-preference-cipher-groups.patch)
|
||||||
|
|
||||||
Here is the basic patch content.
|
Here is the basic patch content.
|
||||||
- Support TLS 1.3 draft 23 + 26 + 28 + final
|
|
||||||
- Server: draft 23 + 26 + 28 + final
|
|
||||||
- Client: draft 23 + 26 + 27 + 28 + final
|
|
||||||
- BoringSSL's Equal Preference Patch
|
- BoringSSL's Equal Preference Patch
|
||||||
- Weak 3DES and not using ECDHE ciphers is not used in TLSv1.1 or later.
|
- Weak 3DES and not using ECDHE ciphers is not used in TLSv1.1 or later.
|
||||||
|
|
||||||
| Patch file name | Patch list |
|
| Patch file name | Patch list |
|
||||||
| :--- | :--- |
|
| :--- | :--- |
|
||||||
| openssl-1.1.1a-tls13_draft.patch | Only for TLS 1.3 draft 23, 26, 28, final support patch. |
|
|
||||||
| openssl-equal-1.1.1a.patch<br>openssl-equal-3.0.0-dev.patch | Support **final (TLS 1.3)**, TLS 1.3 cipher settings **_can not_** be changed on _nginx_. |
|
| openssl-equal-1.1.1a.patch<br>openssl-equal-3.0.0-dev.patch | Support **final (TLS 1.3)**, TLS 1.3 cipher settings **_can not_** be changed on _nginx_. |
|
||||||
| openssl-equal-1.1.1a_ciphers.patch<br>openssl-equal-3.0.0-dev_ciphers.patch | Support **final (TLS 1.3)**, TLS 1.3 cipher settings **_can_** be changed on _nginx_. |
|
| openssl-equal-1.1.1a_ciphers.patch<br>openssl-equal-3.0.0-dev_ciphers.patch | Support **final (TLS 1.3)**, TLS 1.3 cipher settings **_can_** be changed on _nginx_. |
|
||||||
| openssl-1.1.1a-chacha_draft.patch<br>openssl-3.0.0-dev-chacha_draft.patch | A draft version of chacha20-poly1305 is available. [View issue](https://github.com/hakasenyang/openssl-patch/issues/1#issuecomment-427554824) |
|
| openssl-1.1.1a-chacha_draft.patch<br>openssl-3.0.0-dev-chacha_draft.patch | A draft version of chacha20-poly1305 is available. [View issue](https://github.com/hakasenyang/openssl-patch/issues/1#issuecomment-427554824) |
|
||||||
| openssl-1.1.1a-tls13_draft.patch | Enable TLS 1.3 draft 23, 26, 28, final. |
|
| openssl-1.1.1a-tls13_draft.patch | Only for **TLS 1.3 draft 23, 26, 28, final support patch**. |
|
||||||
| openssl-1.1.1a-tls13_nginx_config.patch | You can set TLS 1.3 ciphere in nginx. ex) TLS13+AESGCM+AES128 |
|
| openssl-1.1.1a-tls13_nginx_config.patch | You can set TLS 1.3 ciphere in nginx. ex) TLS13+AESGCM+AES128 |
|
||||||
| openssl-3.0.0-dev_version_error.patch | **TEST** This is a way to fix nginx when the following errors occur during the build:<br>Error: missing binary operator before token "("<br>Maybe patched: [https://github.com/openssl/openssl/pull/7839](https://github.com/openssl/openssl/pull/7839)<br>Patched : [https://github.com/openssl/openssl/commit/5d609f22d28615c45685d9da871d432e9cb81127](https://github.com/openssl/openssl/commit/5d609f22d28615c45685d9da871d432e9cb81127) |
|
| openssl-3.0.0-dev_version_error.patch | **TEST** This is a way to fix nginx when the following errors occur during the build:<br>Error: missing binary operator before token "("<br>Maybe patched: [https://github.com/openssl/openssl/pull/7839](https://github.com/openssl/openssl/pull/7839)<br>Patched : [https://github.com/openssl/openssl/commit/5d609f22d28615c45685d9da871d432e9cb81127](https://github.com/openssl/openssl/commit/5d609f22d28615c45685d9da871d432e9cb81127) |
|
||||||
|
|
||||||
|
@ -162,12 +156,12 @@ ssl_ecdh_curve X25519:P-256:P-384;
|
||||||
ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
```
|
```
|
||||||
|
|
||||||
### OpenSSL-1.1.1a, 3.0.0-dev ciphers (draft 23, 26, 28, final)
|
### OpenSSL-1.1.1a, 3.0.0-dev ciphers
|
||||||
```
|
```
|
||||||
[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES
|
[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES
|
||||||
```
|
```
|
||||||
|
|
||||||
### OpenSSL-1.1.1a_ciphers, 3.0.0-dev_ciphers ciphers (draft 23, 26, 28, final)
|
### OpenSSL-1.1.1a_ciphers, 3.0.0-dev_ciphers ciphers
|
||||||
```
|
```
|
||||||
[TLS13+AESGCM+AES128|TLS13+AESGCM+AES256|TLS13+CHACHA20]:[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES
|
[TLS13+AESGCM+AES128|TLS13+AESGCM+AES256|TLS13+CHACHA20]:[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES
|
||||||
```
|
```
|
||||||
|
|
|
@ -220,69 +220,69 @@ index 0d4612f314..5a3516d642 100644
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
diff --git a/crypto/objects/obj_dat.h b/crypto/objects/obj_dat.h
|
diff --git a/crypto/objects/obj_dat.h b/crypto/objects/obj_dat.h
|
||||||
index 859795fa50..550e794fca 100644
|
index 78a9e7acaf..15c712b291 100644
|
||||||
--- a/crypto/objects/obj_dat.h
|
--- a/crypto/objects/obj_dat.h
|
||||||
+++ b/crypto/objects/obj_dat.h
|
+++ b/crypto/objects/obj_dat.h
|
||||||
@@ -1079,7 +1079,7 @@ static const unsigned char so[7767] = {
|
@@ -1079,7 +1079,7 @@ static const unsigned char so[7767] = {
|
||||||
0x28,0xCC,0x45,0x03,0x04, /* [ 7761] OBJ_gmac */
|
0x28,0xCC,0x45,0x03,0x04, /* [ 7761] OBJ_gmac */
|
||||||
};
|
};
|
||||||
|
|
||||||
-#define NUM_NID 1201
|
-#define NUM_NID 1203
|
||||||
+#define NUM_NID 1202
|
+#define NUM_NID 1204
|
||||||
static const ASN1_OBJECT nid_objs[NUM_NID] = {
|
static const ASN1_OBJECT nid_objs[NUM_NID] = {
|
||||||
{"UNDEF", "undefined", NID_undef},
|
{"UNDEF", "undefined", NID_undef},
|
||||||
{"rsadsi", "RSA Data Security, Inc.", NID_rsadsi, 6, &so[0]},
|
{"rsadsi", "RSA Data Security, Inc.", NID_rsadsi, 6, &so[0]},
|
||||||
@@ -2282,9 +2282,10 @@ static const ASN1_OBJECT nid_objs[NUM_NID] = {
|
@@ -2284,9 +2284,10 @@ static const ASN1_OBJECT nid_objs[NUM_NID] = {
|
||||||
{"AES-128-SIV", "aes-128-siv", NID_aes_128_siv},
|
|
||||||
{"AES-192-SIV", "aes-192-siv", NID_aes_192_siv},
|
|
||||||
{"AES-256-SIV", "aes-256-siv", NID_aes_256_siv},
|
{"AES-256-SIV", "aes-256-siv", NID_aes_256_siv},
|
||||||
|
{"BLAKE2BMAC", "blake2bmac", NID_blake2bmac},
|
||||||
|
{"BLAKE2SMAC", "blake2smac", NID_blake2smac},
|
||||||
+ {"ChaCha20-Poly1305-D", "chacha20-poly1305-draft", NID_chacha20_poly1305_draft },
|
+ {"ChaCha20-Poly1305-D", "chacha20-poly1305-draft", NID_chacha20_poly1305_draft },
|
||||||
};
|
};
|
||||||
|
|
||||||
-#define NUM_SN 1192
|
-#define NUM_SN 1194
|
||||||
+#define NUM_SN 1193
|
+#define NUM_SN 1195
|
||||||
static const unsigned int sn_objs[NUM_SN] = {
|
static const unsigned int sn_objs[NUM_SN] = {
|
||||||
364, /* "AD_DVCS" */
|
364, /* "AD_DVCS" */
|
||||||
419, /* "AES-128-CBC" */
|
419, /* "AES-128-CBC" */
|
||||||
@@ -2405,6 +2406,7 @@ static const unsigned int sn_objs[NUM_SN] = {
|
@@ -2409,6 +2410,7 @@ static const unsigned int sn_objs[NUM_SN] = {
|
||||||
417, /* "CSPName" */
|
417, /* "CSPName" */
|
||||||
1019, /* "ChaCha20" */
|
1019, /* "ChaCha20" */
|
||||||
1018, /* "ChaCha20-Poly1305" */
|
1018, /* "ChaCha20-Poly1305" */
|
||||||
+ 1201, /* "chacha20-poly1305-draft" */
|
+ 1203, /* "chacha20-poly1305-draft" */
|
||||||
367, /* "CrlID" */
|
367, /* "CrlID" */
|
||||||
391, /* "DC" */
|
391, /* "DC" */
|
||||||
31, /* "DES-CBC" */
|
31, /* "DES-CBC" */
|
||||||
@@ -3480,7 +3482,7 @@ static const unsigned int sn_objs[NUM_SN] = {
|
@@ -3484,7 +3486,7 @@ static const unsigned int sn_objs[NUM_SN] = {
|
||||||
1093, /* "x509ExtAdmission" */
|
1093, /* "x509ExtAdmission" */
|
||||||
};
|
};
|
||||||
|
|
||||||
-#define NUM_LN 1192
|
-#define NUM_LN 1194
|
||||||
+#define NUM_LN 1193
|
+#define NUM_LN 1195
|
||||||
static const unsigned int ln_objs[NUM_LN] = {
|
static const unsigned int ln_objs[NUM_LN] = {
|
||||||
363, /* "AD Time Stamping" */
|
363, /* "AD Time Stamping" */
|
||||||
405, /* "ANSI X9.62" */
|
405, /* "ANSI X9.62" */
|
||||||
@@ -3862,6 +3864,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
@@ -3868,6 +3870,7 @@ static const unsigned int ln_objs[NUM_LN] = {
|
||||||
883, /* "certificateRevocationList" */
|
883, /* "certificateRevocationList" */
|
||||||
1019, /* "chacha20" */
|
1019, /* "chacha20" */
|
||||||
1018, /* "chacha20-poly1305" */
|
1018, /* "chacha20-poly1305" */
|
||||||
+ 1201, /* "ChaCha20-Poly1305-D" */
|
+ 1203, /* "ChaCha20-Poly1305-D" */
|
||||||
54, /* "challengePassword" */
|
54, /* "challengePassword" */
|
||||||
407, /* "characteristic-two-field" */
|
407, /* "characteristic-two-field" */
|
||||||
395, /* "clearance" */
|
395, /* "clearance" */
|
||||||
diff --git a/crypto/objects/obj_mac.num b/crypto/objects/obj_mac.num
|
diff --git a/crypto/objects/obj_mac.num b/crypto/objects/obj_mac.num
|
||||||
index 021875d9e4..c13c751d74 100644
|
index 87790200d4..94d033c158 100644
|
||||||
--- a/crypto/objects/obj_mac.num
|
--- a/crypto/objects/obj_mac.num
|
||||||
+++ b/crypto/objects/obj_mac.num
|
+++ b/crypto/objects/obj_mac.num
|
||||||
@@ -1198,3 +1198,4 @@ kmac256 1197
|
@@ -1200,3 +1200,4 @@ aes_192_siv 1199
|
||||||
aes_128_siv 1198
|
|
||||||
aes_192_siv 1199
|
|
||||||
aes_256_siv 1200
|
aes_256_siv 1200
|
||||||
+chacha20_poly1305_draft 1201
|
blake2bmac 1201
|
||||||
|
blake2smac 1202
|
||||||
|
+chacha20_poly1305_draft 1203
|
||||||
diff --git a/crypto/objects/objects.txt b/crypto/objects/objects.txt
|
diff --git a/crypto/objects/objects.txt b/crypto/objects/objects.txt
|
||||||
index 851e31e5aa..e5b288d999 100644
|
index 344b67b395..21653d9b87 100644
|
||||||
--- a/crypto/objects/objects.txt
|
--- a/crypto/objects/objects.txt
|
||||||
+++ b/crypto/objects/objects.txt
|
+++ b/crypto/objects/objects.txt
|
||||||
@@ -1541,6 +1541,7 @@ sm-scheme 104 7 : SM4-CTR : sm4-ctr
|
@@ -1543,6 +1543,7 @@ sm-scheme 104 7 : SM4-CTR : sm4-ctr
|
||||||
: AES-192-CBC-HMAC-SHA256 : aes-192-cbc-hmac-sha256
|
: AES-192-CBC-HMAC-SHA256 : aes-192-cbc-hmac-sha256
|
||||||
: AES-256-CBC-HMAC-SHA256 : aes-256-cbc-hmac-sha256
|
: AES-256-CBC-HMAC-SHA256 : aes-256-cbc-hmac-sha256
|
||||||
: ChaCha20-Poly1305 : chacha20-poly1305
|
: ChaCha20-Poly1305 : chacha20-poly1305
|
||||||
|
@ -291,7 +291,7 @@ index 851e31e5aa..e5b288d999 100644
|
||||||
|
|
||||||
ISO-US 10046 2 1 : dhpublicnumber : X9.42 DH
|
ISO-US 10046 2 1 : dhpublicnumber : X9.42 DH
|
||||||
diff --git a/include/openssl/evp.h b/include/openssl/evp.h
|
diff --git a/include/openssl/evp.h b/include/openssl/evp.h
|
||||||
index 9f1dbd4b8b..774f102e48 100644
|
index 23f07eaa05..c90c6435bd 100644
|
||||||
--- a/include/openssl/evp.h
|
--- a/include/openssl/evp.h
|
||||||
+++ b/include/openssl/evp.h
|
+++ b/include/openssl/evp.h
|
||||||
@@ -928,6 +928,7 @@ const EVP_CIPHER *EVP_camellia_256_ctr(void);
|
@@ -928,6 +928,7 @@ const EVP_CIPHER *EVP_camellia_256_ctr(void);
|
||||||
|
@ -303,22 +303,22 @@ index 9f1dbd4b8b..774f102e48 100644
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
diff --git a/include/openssl/obj_mac.h b/include/openssl/obj_mac.h
|
diff --git a/include/openssl/obj_mac.h b/include/openssl/obj_mac.h
|
||||||
index 242eaeb6ce..c8960d0e5c 100644
|
index 97b2204ba6..a9b341243a 100644
|
||||||
--- a/include/openssl/obj_mac.h
|
--- a/include/openssl/obj_mac.h
|
||||||
+++ b/include/openssl/obj_mac.h
|
+++ b/include/openssl/obj_mac.h
|
||||||
@@ -4824,6 +4824,10 @@
|
@@ -4832,6 +4832,10 @@
|
||||||
#define LN_chacha20 "chacha20"
|
#define LN_chacha20 "chacha20"
|
||||||
#define NID_chacha20 1019
|
#define NID_chacha20 1019
|
||||||
|
|
||||||
+#define SN_chacha20_poly1305_draft "ChaCha20-Poly1305-D"
|
+#define SN_chacha20_poly1305_draft "ChaCha20-Poly1305-D"
|
||||||
+#define LN_chacha20_poly1305_draft "chacha20-poly1305-draft"
|
+#define LN_chacha20_poly1305_draft "chacha20-poly1305-draft"
|
||||||
+#define NID_chacha20_poly1305_draft 1201
|
+#define NID_chacha20_poly1305_draft 1203
|
||||||
+
|
+
|
||||||
#define SN_dhpublicnumber "dhpublicnumber"
|
#define SN_dhpublicnumber "dhpublicnumber"
|
||||||
#define LN_dhpublicnumber "X9.42 DH"
|
#define LN_dhpublicnumber "X9.42 DH"
|
||||||
#define NID_dhpublicnumber 920
|
#define NID_dhpublicnumber 920
|
||||||
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
|
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
|
||||||
index c7a830445b..8aa020669d 100644
|
index 35311acaf4..c2bce6822d 100644
|
||||||
--- a/include/openssl/ssl.h
|
--- a/include/openssl/ssl.h
|
||||||
+++ b/include/openssl/ssl.h
|
+++ b/include/openssl/ssl.h
|
||||||
@@ -125,6 +125,7 @@ extern "C" {
|
@@ -125,6 +125,7 @@ extern "C" {
|
||||||
|
|
|
@ -70,43 +70,6 @@ index 87b295c9f9..d118d8e864 100644
|
||||||
# define SSL_R_UNEXPECTED_RECORD 245
|
# define SSL_R_UNEXPECTED_RECORD 245
|
||||||
# define SSL_R_UNINITIALIZED 276
|
# define SSL_R_UNINITIALIZED 276
|
||||||
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
||||||
diff --git a/include/openssl/tls1.h b/include/openssl/tls1.h
|
|
||||||
index e13b5dd4bc..779341c948 100644
|
|
||||||
--- a/include/openssl/tls1.h
|
|
||||||
+++ b/include/openssl/tls1.h
|
|
||||||
@@ -30,6 +30,16 @@ extern "C" {
|
|
||||||
# define TLS1_3_VERSION 0x0304
|
|
||||||
# define TLS_MAX_VERSION TLS1_3_VERSION
|
|
||||||
|
|
||||||
+/* TODO(TLS1.3) REMOVE ME: Version indicators for draft version */
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_23 0x7f17
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_26 0x7f1a
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_27 0x7f1b
|
|
||||||
+# define TLS1_3_VERSION_DRAFT 0x7f1c
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_23 "TLS 1.3 (draft 23)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_26 "TLS 1.3 (draft 26)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_27 "TLS 1.3 (draft 27)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT "TLS 1.3 (draft 28)"
|
|
||||||
+
|
|
||||||
/* Special value for method supporting multiple versions */
|
|
||||||
# define TLS_ANY_VERSION 0x10000
|
|
||||||
|
|
||||||
diff --git a/ssl/record/ssl3_record_tls13.c b/ssl/record/ssl3_record_tls13.c
|
|
||||||
index a11ed483e6..4fd583dd03 100644
|
|
||||||
--- a/ssl/record/ssl3_record_tls13.c
|
|
||||||
+++ b/ssl/record/ssl3_record_tls13.c
|
|
||||||
@@ -173,8 +173,9 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending)
|
|
||||||
if (((alg_enc & SSL_AESCCM) != 0
|
|
||||||
&& EVP_CipherUpdate(ctx, NULL, &lenu, NULL,
|
|
||||||
(unsigned int)rec->length) <= 0)
|
|
||||||
- || EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
- sizeof(recheader)) <= 0
|
|
||||||
+ || (s->version_draft != TLS1_3_VERSION_DRAFT_23
|
|
||||||
+ && EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
+ sizeof(recheader)) <= 0)
|
|
||||||
|| EVP_CipherUpdate(ctx, rec->data, &lenu, rec->input,
|
|
||||||
(unsigned int)rec->length) <= 0
|
|
||||||
|| EVP_CipherFinal_ex(ctx, rec->data + lenu, &lenf) <= 0
|
|
||||||
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
||||||
index 866ca4dfa9..7b98b670d2 100644
|
index 866ca4dfa9..7b98b670d2 100644
|
||||||
--- a/ssl/s3_lib.c
|
--- a/ssl/s3_lib.c
|
||||||
|
@ -1022,15 +985,6 @@ index 70e5a1740f..d583840984 100644
|
||||||
/* same as above but sorted for lookup */
|
/* same as above but sorted for lookup */
|
||||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||||
/* TLSv1.3 specific ciphersuites */
|
/* TLSv1.3 specific ciphersuites */
|
||||||
@@ -1080,6 +1117,8 @@ struct ssl_st {
|
|
||||||
* DTLS1_VERSION)
|
|
||||||
*/
|
|
||||||
int version;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ int version_draft;
|
|
||||||
/* SSLv3 */
|
|
||||||
const SSL_METHOD *method;
|
|
||||||
/*
|
|
||||||
@@ -1138,7 +1177,7 @@ struct ssl_st {
|
@@ -1138,7 +1177,7 @@ struct ssl_st {
|
||||||
/* Per connection DANE state */
|
/* Per connection DANE state */
|
||||||
SSL_DANE dane;
|
SSL_DANE dane;
|
||||||
|
@ -1072,124 +1026,6 @@ index 70e5a1740f..d583840984 100644
|
||||||
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
||||||
__owur int ssl3_new(SSL *s);
|
__owur int ssl3_new(SSL *s);
|
||||||
void ssl3_free(SSL *s);
|
void ssl3_free(SSL *s);
|
||||||
diff --git a/ssl/statem/extensions_clnt.c b/ssl/statem/extensions_clnt.c
|
|
||||||
index ab4dbf6713..745897b638 100644
|
|
||||||
--- a/ssl/statem/extensions_clnt.c
|
|
||||||
+++ b/ssl/statem/extensions_clnt.c
|
|
||||||
@@ -533,8 +533,25 @@ EXT_RETURN tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
return EXT_RETURN_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list as to whether
|
|
||||||
+ * we should include versions <TLS1.2. For the moment we do. To be
|
|
||||||
+ * reviewed later.
|
|
||||||
+ */
|
|
||||||
for (currv = max_version; currv >= min_version; currv--) {
|
|
||||||
- if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this first if clause prior to release!! */
|
|
||||||
+ if (currv == TLS1_3_VERSION) {
|
|
||||||
+ if (!WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_27)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_26)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_23)) {
|
|
||||||
+ SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
+ SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
+ ERR_R_INTERNAL_ERROR);
|
|
||||||
+ return EXT_RETURN_FAIL;
|
|
||||||
+ }
|
|
||||||
+ } else if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
ERR_R_INTERNAL_ERROR);
|
|
||||||
@@ -1763,6 +1780,15 @@ int tls_parse_stoc_supported_versions(SSL *s, PACKET *pkt, unsigned int context,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (version == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_27
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ s->version_draft = version;
|
|
||||||
+ version = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* The only protocol version we support which is valid in this extension in
|
|
||||||
* a ServerHello is TLSv1.3 therefore we shouldn't be getting anything else.
|
|
||||||
diff --git a/ssl/statem/extensions_srvr.c b/ssl/statem/extensions_srvr.c
|
|
||||||
index 0f2b22392b..6c1ce9813f 100644
|
|
||||||
--- a/ssl/statem/extensions_srvr.c
|
|
||||||
+++ b/ssl/statem/extensions_srvr.c
|
|
||||||
@@ -897,7 +897,8 @@ int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
|
||||||
}
|
|
||||||
if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(&hrrpkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(&hrrpkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Fix this before release */
|
|
||||||
+ || !WPACKET_put_bytes_u16(&hrrpkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(&hrrpkt)) {
|
|
||||||
WPACKET_cleanup(&hrrpkt);
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_CTOS_COOKIE,
|
|
||||||
@@ -1652,7 +1653,8 @@ EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
|
|
||||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(pkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(pkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Update to remove the TLSv1.3 draft indicator */
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(pkt)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS,
|
|
||||||
diff --git a/ssl/statem/statem_lib.c b/ssl/statem/statem_lib.c
|
|
||||||
index 4324896f50..d0de7ffe3d 100644
|
|
||||||
--- a/ssl/statem/statem_lib.c
|
|
||||||
+++ b/ssl/statem/statem_lib.c
|
|
||||||
@@ -1786,6 +1786,8 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
unsigned int best_vers = 0;
|
|
||||||
const SSL_METHOD *best_method = NULL;
|
|
||||||
PACKET versionslist;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ unsigned int orig_candidate = 0;
|
|
||||||
|
|
||||||
suppversions->parsed = 1;
|
|
||||||
|
|
||||||
@@ -1807,6 +1809,23 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
return SSL_R_BAD_LEGACY_VERSION;
|
|
||||||
|
|
||||||
while (PACKET_get_net_2(&versionslist, &candidate_vers)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (candidate_vers == TLS1_3_VERSION
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ if (best_vers == TLS1_3_VERSION
|
|
||||||
+ && (orig_candidate > candidate_vers
|
|
||||||
+ || orig_candidate == TLS1_3_VERSION))
|
|
||||||
+ continue;
|
|
||||||
+ orig_candidate = candidate_vers;
|
|
||||||
+ candidate_vers = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list about
|
|
||||||
+ * whether to ignore versions <TLS1.2 in supported_versions. At the
|
|
||||||
+ * moment we honour them if present. To be reviewed later
|
|
||||||
+ */
|
|
||||||
if (version_cmp(s, candidate_vers, best_vers) <= 0)
|
|
||||||
continue;
|
|
||||||
if (ssl_version_supported(s, candidate_vers, &best_method))
|
|
||||||
@@ -1829,6 +1848,9 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
}
|
|
||||||
check_for_downgrade(s, best_vers, dgrd);
|
|
||||||
s->version = best_vers;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (best_vers == TLS1_3_VERSION)
|
|
||||||
+ s->version_draft = orig_candidate;
|
|
||||||
s->method = best_method;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
||||||
index e7c11c4bea..a2a6c1e44e 100644
|
index e7c11c4bea..a2a6c1e44e 100644
|
||||||
--- a/ssl/statem/statem_srvr.c
|
--- a/ssl/statem/statem_srvr.c
|
||||||
|
@ -1233,41 +1069,3 @@ index e7c11c4bea..a2a6c1e44e 100644
|
||||||
|
|
||||||
if (cipher == NULL) {
|
if (cipher == NULL) {
|
||||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||||
diff --git a/ssl/t1_trce.c b/ssl/t1_trce.c
|
|
||||||
index be3039af38..99c4ddcb41 100644
|
|
||||||
--- a/ssl/t1_trce.c
|
|
||||||
+++ b/ssl/t1_trce.c
|
|
||||||
@@ -65,6 +65,11 @@ static const ssl_trace_tbl ssl_version_tbl[] = {
|
|
||||||
{TLS1_1_VERSION, "TLS 1.1"},
|
|
||||||
{TLS1_2_VERSION, "TLS 1.2"},
|
|
||||||
{TLS1_3_VERSION, "TLS 1.3"},
|
|
||||||
+ /* TODO(TLS1.3): Remove these lines before release */
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_23, TLS1_3_VERSION_DRAFT_TXT_23},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_26, TLS1_3_VERSION_DRAFT_TXT_26},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_27, TLS1_3_VERSION_DRAFT_TXT_27},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT, TLS1_3_VERSION_DRAFT_TXT},
|
|
||||||
{DTLS1_VERSION, "DTLS 1.0"},
|
|
||||||
{DTLS1_2_VERSION, "DTLS 1.2"},
|
|
||||||
{DTLS1_BAD_VER, "DTLS 1.0 (bad)"}
|
|
||||||
@@ -638,8 +643,19 @@ static int ssl_print_version(BIO *bio, int indent, const char *name,
|
|
||||||
if (*pmsglen < 2)
|
|
||||||
return 0;
|
|
||||||
vers = ((*pmsg)[0] << 8) | (*pmsg)[1];
|
|
||||||
- if (version != NULL)
|
|
||||||
- *version = vers;
|
|
||||||
+ if (version != NULL) {
|
|
||||||
+ /* TODO(TLS1.3): Remove the draft conditional here before release */
|
|
||||||
+ switch(vers) {
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_23:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_26:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_27:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT:
|
|
||||||
+ *version = TLS1_3_VERSION;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ *version = vers;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
BIO_indent(bio, indent, 80);
|
|
||||||
BIO_printf(bio, "%s=0x%x (%s)\n",
|
|
||||||
name, vers, ssl_trace_str(vers, ssl_version_tbl));
|
|
||||||
|
|
|
@ -49,43 +49,6 @@ index 87b295c9f9..d118d8e864 100644
|
||||||
# define SSL_R_UNEXPECTED_RECORD 245
|
# define SSL_R_UNEXPECTED_RECORD 245
|
||||||
# define SSL_R_UNINITIALIZED 276
|
# define SSL_R_UNINITIALIZED 276
|
||||||
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
||||||
diff --git a/include/openssl/tls1.h b/include/openssl/tls1.h
|
|
||||||
index e13b5dd4bc..779341c948 100644
|
|
||||||
--- a/include/openssl/tls1.h
|
|
||||||
+++ b/include/openssl/tls1.h
|
|
||||||
@@ -30,6 +30,16 @@ extern "C" {
|
|
||||||
# define TLS1_3_VERSION 0x0304
|
|
||||||
# define TLS_MAX_VERSION TLS1_3_VERSION
|
|
||||||
|
|
||||||
+/* TODO(TLS1.3) REMOVE ME: Version indicators for draft version */
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_23 0x7f17
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_26 0x7f1a
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_27 0x7f1b
|
|
||||||
+# define TLS1_3_VERSION_DRAFT 0x7f1c
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_23 "TLS 1.3 (draft 23)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_26 "TLS 1.3 (draft 26)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_27 "TLS 1.3 (draft 27)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT "TLS 1.3 (draft 28)"
|
|
||||||
+
|
|
||||||
/* Special value for method supporting multiple versions */
|
|
||||||
# define TLS_ANY_VERSION 0x10000
|
|
||||||
|
|
||||||
diff --git a/ssl/record/ssl3_record_tls13.c b/ssl/record/ssl3_record_tls13.c
|
|
||||||
index a11ed483e6..4fd583dd03 100644
|
|
||||||
--- a/ssl/record/ssl3_record_tls13.c
|
|
||||||
+++ b/ssl/record/ssl3_record_tls13.c
|
|
||||||
@@ -173,8 +173,9 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending)
|
|
||||||
if (((alg_enc & SSL_AESCCM) != 0
|
|
||||||
&& EVP_CipherUpdate(ctx, NULL, &lenu, NULL,
|
|
||||||
(unsigned int)rec->length) <= 0)
|
|
||||||
- || EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
- sizeof(recheader)) <= 0
|
|
||||||
+ || (s->version_draft != TLS1_3_VERSION_DRAFT_23
|
|
||||||
+ && EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
+ sizeof(recheader)) <= 0)
|
|
||||||
|| EVP_CipherUpdate(ctx, rec->data, &lenu, rec->input,
|
|
||||||
(unsigned int)rec->length) <= 0
|
|
||||||
|| EVP_CipherFinal_ex(ctx, rec->data + lenu, &lenf) <= 0
|
|
||||||
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
||||||
index 866ca4dfa9..1b6b99cb19 100644
|
index 866ca4dfa9..1b6b99cb19 100644
|
||||||
--- a/ssl/s3_lib.c
|
--- a/ssl/s3_lib.c
|
||||||
|
@ -1057,15 +1020,6 @@ index 70e5a1740f..d583840984 100644
|
||||||
/* same as above but sorted for lookup */
|
/* same as above but sorted for lookup */
|
||||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||||
/* TLSv1.3 specific ciphersuites */
|
/* TLSv1.3 specific ciphersuites */
|
||||||
@@ -1080,6 +1117,8 @@ struct ssl_st {
|
|
||||||
* DTLS1_VERSION)
|
|
||||||
*/
|
|
||||||
int version;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ int version_draft;
|
|
||||||
/* SSLv3 */
|
|
||||||
const SSL_METHOD *method;
|
|
||||||
/*
|
|
||||||
@@ -1138,7 +1177,7 @@ struct ssl_st {
|
@@ -1138,7 +1177,7 @@ struct ssl_st {
|
||||||
/* Per connection DANE state */
|
/* Per connection DANE state */
|
||||||
SSL_DANE dane;
|
SSL_DANE dane;
|
||||||
|
@ -1107,124 +1061,6 @@ index 70e5a1740f..d583840984 100644
|
||||||
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
||||||
__owur int ssl3_new(SSL *s);
|
__owur int ssl3_new(SSL *s);
|
||||||
void ssl3_free(SSL *s);
|
void ssl3_free(SSL *s);
|
||||||
diff --git a/ssl/statem/extensions_clnt.c b/ssl/statem/extensions_clnt.c
|
|
||||||
index ab4dbf6713..745897b638 100644
|
|
||||||
--- a/ssl/statem/extensions_clnt.c
|
|
||||||
+++ b/ssl/statem/extensions_clnt.c
|
|
||||||
@@ -533,8 +533,25 @@ EXT_RETURN tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
return EXT_RETURN_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list as to whether
|
|
||||||
+ * we should include versions <TLS1.2. For the moment we do. To be
|
|
||||||
+ * reviewed later.
|
|
||||||
+ */
|
|
||||||
for (currv = max_version; currv >= min_version; currv--) {
|
|
||||||
- if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this first if clause prior to release!! */
|
|
||||||
+ if (currv == TLS1_3_VERSION) {
|
|
||||||
+ if (!WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_27)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_26)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_23)) {
|
|
||||||
+ SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
+ SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
+ ERR_R_INTERNAL_ERROR);
|
|
||||||
+ return EXT_RETURN_FAIL;
|
|
||||||
+ }
|
|
||||||
+ } else if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
ERR_R_INTERNAL_ERROR);
|
|
||||||
@@ -1763,6 +1780,15 @@ int tls_parse_stoc_supported_versions(SSL *s, PACKET *pkt, unsigned int context,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (version == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_27
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ s->version_draft = version;
|
|
||||||
+ version = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* The only protocol version we support which is valid in this extension in
|
|
||||||
* a ServerHello is TLSv1.3 therefore we shouldn't be getting anything else.
|
|
||||||
diff --git a/ssl/statem/extensions_srvr.c b/ssl/statem/extensions_srvr.c
|
|
||||||
index 0f2b22392b..6c1ce9813f 100644
|
|
||||||
--- a/ssl/statem/extensions_srvr.c
|
|
||||||
+++ b/ssl/statem/extensions_srvr.c
|
|
||||||
@@ -897,7 +897,8 @@ int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
|
||||||
}
|
|
||||||
if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(&hrrpkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(&hrrpkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Fix this before release */
|
|
||||||
+ || !WPACKET_put_bytes_u16(&hrrpkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(&hrrpkt)) {
|
|
||||||
WPACKET_cleanup(&hrrpkt);
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_CTOS_COOKIE,
|
|
||||||
@@ -1652,7 +1653,8 @@ EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
|
|
||||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(pkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(pkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Update to remove the TLSv1.3 draft indicator */
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(pkt)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS,
|
|
||||||
diff --git a/ssl/statem/statem_lib.c b/ssl/statem/statem_lib.c
|
|
||||||
index 4324896f50..d0de7ffe3d 100644
|
|
||||||
--- a/ssl/statem/statem_lib.c
|
|
||||||
+++ b/ssl/statem/statem_lib.c
|
|
||||||
@@ -1786,6 +1786,8 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
unsigned int best_vers = 0;
|
|
||||||
const SSL_METHOD *best_method = NULL;
|
|
||||||
PACKET versionslist;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ unsigned int orig_candidate = 0;
|
|
||||||
|
|
||||||
suppversions->parsed = 1;
|
|
||||||
|
|
||||||
@@ -1807,6 +1809,23 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
return SSL_R_BAD_LEGACY_VERSION;
|
|
||||||
|
|
||||||
while (PACKET_get_net_2(&versionslist, &candidate_vers)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (candidate_vers == TLS1_3_VERSION
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ if (best_vers == TLS1_3_VERSION
|
|
||||||
+ && (orig_candidate > candidate_vers
|
|
||||||
+ || orig_candidate == TLS1_3_VERSION))
|
|
||||||
+ continue;
|
|
||||||
+ orig_candidate = candidate_vers;
|
|
||||||
+ candidate_vers = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list about
|
|
||||||
+ * whether to ignore versions <TLS1.2 in supported_versions. At the
|
|
||||||
+ * moment we honour them if present. To be reviewed later
|
|
||||||
+ */
|
|
||||||
if (version_cmp(s, candidate_vers, best_vers) <= 0)
|
|
||||||
continue;
|
|
||||||
if (ssl_version_supported(s, candidate_vers, &best_method))
|
|
||||||
@@ -1829,6 +1848,9 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
}
|
|
||||||
check_for_downgrade(s, best_vers, dgrd);
|
|
||||||
s->version = best_vers;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (best_vers == TLS1_3_VERSION)
|
|
||||||
+ s->version_draft = orig_candidate;
|
|
||||||
s->method = best_method;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
||||||
index e7c11c4bea..a2a6c1e44e 100644
|
index e7c11c4bea..a2a6c1e44e 100644
|
||||||
--- a/ssl/statem/statem_srvr.c
|
--- a/ssl/statem/statem_srvr.c
|
||||||
|
@ -1268,41 +1104,3 @@ index e7c11c4bea..a2a6c1e44e 100644
|
||||||
|
|
||||||
if (cipher == NULL) {
|
if (cipher == NULL) {
|
||||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||||
diff --git a/ssl/t1_trce.c b/ssl/t1_trce.c
|
|
||||||
index be3039af38..99c4ddcb41 100644
|
|
||||||
--- a/ssl/t1_trce.c
|
|
||||||
+++ b/ssl/t1_trce.c
|
|
||||||
@@ -65,6 +65,11 @@ static const ssl_trace_tbl ssl_version_tbl[] = {
|
|
||||||
{TLS1_1_VERSION, "TLS 1.1"},
|
|
||||||
{TLS1_2_VERSION, "TLS 1.2"},
|
|
||||||
{TLS1_3_VERSION, "TLS 1.3"},
|
|
||||||
+ /* TODO(TLS1.3): Remove these lines before release */
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_23, TLS1_3_VERSION_DRAFT_TXT_23},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_26, TLS1_3_VERSION_DRAFT_TXT_26},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_27, TLS1_3_VERSION_DRAFT_TXT_27},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT, TLS1_3_VERSION_DRAFT_TXT},
|
|
||||||
{DTLS1_VERSION, "DTLS 1.0"},
|
|
||||||
{DTLS1_2_VERSION, "DTLS 1.2"},
|
|
||||||
{DTLS1_BAD_VER, "DTLS 1.0 (bad)"}
|
|
||||||
@@ -638,8 +643,19 @@ static int ssl_print_version(BIO *bio, int indent, const char *name,
|
|
||||||
if (*pmsglen < 2)
|
|
||||||
return 0;
|
|
||||||
vers = ((*pmsg)[0] << 8) | (*pmsg)[1];
|
|
||||||
- if (version != NULL)
|
|
||||||
- *version = vers;
|
|
||||||
+ if (version != NULL) {
|
|
||||||
+ /* TODO(TLS1.3): Remove the draft conditional here before release */
|
|
||||||
+ switch(vers) {
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_23:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_26:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_27:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT:
|
|
||||||
+ *version = TLS1_3_VERSION;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ *version = vers;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
BIO_indent(bio, indent, 80);
|
|
||||||
BIO_printf(bio, "%s=0x%x (%s)\n",
|
|
||||||
name, vers, ssl_trace_str(vers, ssl_version_tbl));
|
|
||||||
|
|
|
@ -70,43 +70,6 @@ index f8783717bc..0e7ad2818b 100644
|
||||||
# define SSL_R_UNEXPECTED_RECORD 245
|
# define SSL_R_UNEXPECTED_RECORD 245
|
||||||
# define SSL_R_UNINITIALIZED 276
|
# define SSL_R_UNINITIALIZED 276
|
||||||
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
||||||
diff --git a/include/openssl/tls1.h b/include/openssl/tls1.h
|
|
||||||
index 166f15ad5c..3205f1cbfb 100644
|
|
||||||
--- a/include/openssl/tls1.h
|
|
||||||
+++ b/include/openssl/tls1.h
|
|
||||||
@@ -32,6 +32,16 @@ extern "C" {
|
|
||||||
# define TLS_MAX_VERSION TLS1_3_VERSION
|
|
||||||
# endif
|
|
||||||
|
|
||||||
+/* TODO(TLS1.3) REMOVE ME: Version indicators for draft version */
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_23 0x7f17
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_26 0x7f1a
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_27 0x7f1b
|
|
||||||
+# define TLS1_3_VERSION_DRAFT 0x7f1c
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_23 "TLS 1.3 (draft 23)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_26 "TLS 1.3 (draft 26)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_27 "TLS 1.3 (draft 27)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT "TLS 1.3 (draft 28)"
|
|
||||||
+
|
|
||||||
/* Special value for method supporting multiple versions */
|
|
||||||
# define TLS_ANY_VERSION 0x10000
|
|
||||||
|
|
||||||
diff --git a/ssl/record/ssl3_record_tls13.c b/ssl/record/ssl3_record_tls13.c
|
|
||||||
index 30e5dddf82..4f1c2f2bd1 100644
|
|
||||||
--- a/ssl/record/ssl3_record_tls13.c
|
|
||||||
+++ b/ssl/record/ssl3_record_tls13.c
|
|
||||||
@@ -173,8 +173,9 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending)
|
|
||||||
if (((alg_enc & SSL_AESCCM) != 0
|
|
||||||
&& EVP_CipherUpdate(ctx, NULL, &lenu, NULL,
|
|
||||||
(unsigned int)rec->length) <= 0)
|
|
||||||
- || EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
- sizeof(recheader)) <= 0
|
|
||||||
+ || (s->version_draft != TLS1_3_VERSION_DRAFT_23
|
|
||||||
+ && EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
+ sizeof(recheader)) <= 0)
|
|
||||||
|| EVP_CipherUpdate(ctx, rec->data, &lenu, rec->input,
|
|
||||||
(unsigned int)rec->length) <= 0
|
|
||||||
|| EVP_CipherFinal_ex(ctx, rec->data + lenu, &lenf) <= 0
|
|
||||||
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
||||||
index a5b3dbbfd5..505c32d18e 100644
|
index a5b3dbbfd5..505c32d18e 100644
|
||||||
--- a/ssl/s3_lib.c
|
--- a/ssl/s3_lib.c
|
||||||
|
@ -1022,15 +985,6 @@ index bd0d4210f4..2c96db0618 100644
|
||||||
/* same as above but sorted for lookup */
|
/* same as above but sorted for lookup */
|
||||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||||
/* TLSv1.3 specific ciphersuites */
|
/* TLSv1.3 specific ciphersuites */
|
||||||
@@ -1088,6 +1125,8 @@ struct ssl_st {
|
|
||||||
* DTLS1_VERSION)
|
|
||||||
*/
|
|
||||||
int version;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ int version_draft;
|
|
||||||
/* SSLv3 */
|
|
||||||
const SSL_METHOD *method;
|
|
||||||
/*
|
|
||||||
@@ -1146,7 +1185,7 @@ struct ssl_st {
|
@@ -1146,7 +1185,7 @@ struct ssl_st {
|
||||||
/* Per connection DANE state */
|
/* Per connection DANE state */
|
||||||
SSL_DANE dane;
|
SSL_DANE dane;
|
||||||
|
@ -1072,124 +1026,6 @@ index bd0d4210f4..2c96db0618 100644
|
||||||
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
||||||
__owur int ssl3_new(SSL *s);
|
__owur int ssl3_new(SSL *s);
|
||||||
void ssl3_free(SSL *s);
|
void ssl3_free(SSL *s);
|
||||||
diff --git a/ssl/statem/extensions_clnt.c b/ssl/statem/extensions_clnt.c
|
|
||||||
index 6e133e026e..f26bc8e879 100644
|
|
||||||
--- a/ssl/statem/extensions_clnt.c
|
|
||||||
+++ b/ssl/statem/extensions_clnt.c
|
|
||||||
@@ -533,8 +533,25 @@ EXT_RETURN tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
return EXT_RETURN_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list as to whether
|
|
||||||
+ * we should include versions <TLS1.2. For the moment we do. To be
|
|
||||||
+ * reviewed later.
|
|
||||||
+ */
|
|
||||||
for (currv = max_version; currv >= min_version; currv--) {
|
|
||||||
- if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this first if clause prior to release!! */
|
|
||||||
+ if (currv == TLS1_3_VERSION) {
|
|
||||||
+ if (!WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_27)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_26)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_23)) {
|
|
||||||
+ SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
+ SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
+ ERR_R_INTERNAL_ERROR);
|
|
||||||
+ return EXT_RETURN_FAIL;
|
|
||||||
+ }
|
|
||||||
+ } else if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
ERR_R_INTERNAL_ERROR);
|
|
||||||
@@ -1763,6 +1780,15 @@ int tls_parse_stoc_supported_versions(SSL *s, PACKET *pkt, unsigned int context,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (version == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_27
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ s->version_draft = version;
|
|
||||||
+ version = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* The only protocol version we support which is valid in this extension in
|
|
||||||
* a ServerHello is TLSv1.3 therefore we shouldn't be getting anything else.
|
|
||||||
diff --git a/ssl/statem/extensions_srvr.c b/ssl/statem/extensions_srvr.c
|
|
||||||
index 6545f5727d..15786a7bfc 100644
|
|
||||||
--- a/ssl/statem/extensions_srvr.c
|
|
||||||
+++ b/ssl/statem/extensions_srvr.c
|
|
||||||
@@ -897,7 +897,8 @@ int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
|
||||||
}
|
|
||||||
if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(&hrrpkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(&hrrpkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Fix this before release */
|
|
||||||
+ || !WPACKET_put_bytes_u16(&hrrpkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(&hrrpkt)) {
|
|
||||||
WPACKET_cleanup(&hrrpkt);
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_CTOS_COOKIE,
|
|
||||||
@@ -1652,7 +1653,8 @@ EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
|
|
||||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(pkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(pkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Update to remove the TLSv1.3 draft indicator */
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(pkt)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS,
|
|
||||||
diff --git a/ssl/statem/statem_lib.c b/ssl/statem/statem_lib.c
|
|
||||||
index 2f78a3f602..5d5121d12b 100644
|
|
||||||
--- a/ssl/statem/statem_lib.c
|
|
||||||
+++ b/ssl/statem/statem_lib.c
|
|
||||||
@@ -1770,6 +1770,8 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
unsigned int best_vers = 0;
|
|
||||||
const SSL_METHOD *best_method = NULL;
|
|
||||||
PACKET versionslist;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ unsigned int orig_candidate = 0;
|
|
||||||
|
|
||||||
suppversions->parsed = 1;
|
|
||||||
|
|
||||||
@@ -1791,6 +1793,23 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
return SSL_R_BAD_LEGACY_VERSION;
|
|
||||||
|
|
||||||
while (PACKET_get_net_2(&versionslist, &candidate_vers)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (candidate_vers == TLS1_3_VERSION
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ if (best_vers == TLS1_3_VERSION
|
|
||||||
+ && (orig_candidate > candidate_vers
|
|
||||||
+ || orig_candidate == TLS1_3_VERSION))
|
|
||||||
+ continue;
|
|
||||||
+ orig_candidate = candidate_vers;
|
|
||||||
+ candidate_vers = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list about
|
|
||||||
+ * whether to ignore versions <TLS1.2 in supported_versions. At the
|
|
||||||
+ * moment we honour them if present. To be reviewed later
|
|
||||||
+ */
|
|
||||||
if (version_cmp(s, candidate_vers, best_vers) <= 0)
|
|
||||||
continue;
|
|
||||||
if (ssl_version_supported(s, candidate_vers, &best_method))
|
|
||||||
@@ -1813,6 +1832,9 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
}
|
|
||||||
check_for_downgrade(s, best_vers, dgrd);
|
|
||||||
s->version = best_vers;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (best_vers == TLS1_3_VERSION)
|
|
||||||
+ s->version_draft = orig_candidate;
|
|
||||||
s->method = best_method;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
||||||
index b0dd54903d..1d096858f8 100644
|
index b0dd54903d..1d096858f8 100644
|
||||||
--- a/ssl/statem/statem_srvr.c
|
--- a/ssl/statem/statem_srvr.c
|
||||||
|
@ -1233,41 +1069,3 @@ index b0dd54903d..1d096858f8 100644
|
||||||
|
|
||||||
if (cipher == NULL) {
|
if (cipher == NULL) {
|
||||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||||
diff --git a/ssl/t1_trce.c b/ssl/t1_trce.c
|
|
||||||
index 656fefe896..654271f368 100644
|
|
||||||
--- a/ssl/t1_trce.c
|
|
||||||
+++ b/ssl/t1_trce.c
|
|
||||||
@@ -65,6 +65,11 @@ static const ssl_trace_tbl ssl_version_tbl[] = {
|
|
||||||
{TLS1_1_VERSION, "TLS 1.1"},
|
|
||||||
{TLS1_2_VERSION, "TLS 1.2"},
|
|
||||||
{TLS1_3_VERSION, "TLS 1.3"},
|
|
||||||
+ /* TODO(TLS1.3): Remove these lines before release */
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_23, TLS1_3_VERSION_DRAFT_TXT_23},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_26, TLS1_3_VERSION_DRAFT_TXT_26},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_27, TLS1_3_VERSION_DRAFT_TXT_27},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT, TLS1_3_VERSION_DRAFT_TXT},
|
|
||||||
{DTLS1_VERSION, "DTLS 1.0"},
|
|
||||||
{DTLS1_2_VERSION, "DTLS 1.2"},
|
|
||||||
{DTLS1_BAD_VER, "DTLS 1.0 (bad)"}
|
|
||||||
@@ -638,8 +643,19 @@ static int ssl_print_version(BIO *bio, int indent, const char *name,
|
|
||||||
if (*pmsglen < 2)
|
|
||||||
return 0;
|
|
||||||
vers = ((*pmsg)[0] << 8) | (*pmsg)[1];
|
|
||||||
- if (version != NULL)
|
|
||||||
- *version = vers;
|
|
||||||
+ if (version != NULL) {
|
|
||||||
+ /* TODO(TLS1.3): Remove the draft conditional here before release */
|
|
||||||
+ switch(vers) {
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_23:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_26:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_27:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT:
|
|
||||||
+ *version = TLS1_3_VERSION;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ *version = vers;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
BIO_indent(bio, indent, 80);
|
|
||||||
BIO_printf(bio, "%s=0x%x (%s)\n",
|
|
||||||
name, vers, ssl_trace_str(vers, ssl_version_tbl));
|
|
||||||
|
|
|
@ -49,43 +49,6 @@ index f8783717bc..0e7ad2818b 100644
|
||||||
# define SSL_R_UNEXPECTED_RECORD 245
|
# define SSL_R_UNEXPECTED_RECORD 245
|
||||||
# define SSL_R_UNINITIALIZED 276
|
# define SSL_R_UNINITIALIZED 276
|
||||||
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
# define SSL_R_UNKNOWN_ALERT_TYPE 246
|
||||||
diff --git a/include/openssl/tls1.h b/include/openssl/tls1.h
|
|
||||||
index 166f15ad5c..3205f1cbfb 100644
|
|
||||||
--- a/include/openssl/tls1.h
|
|
||||||
+++ b/include/openssl/tls1.h
|
|
||||||
@@ -32,6 +32,16 @@ extern "C" {
|
|
||||||
# define TLS_MAX_VERSION TLS1_3_VERSION
|
|
||||||
# endif
|
|
||||||
|
|
||||||
+/* TODO(TLS1.3) REMOVE ME: Version indicators for draft version */
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_23 0x7f17
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_26 0x7f1a
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_27 0x7f1b
|
|
||||||
+# define TLS1_3_VERSION_DRAFT 0x7f1c
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_23 "TLS 1.3 (draft 23)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_26 "TLS 1.3 (draft 26)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT_27 "TLS 1.3 (draft 27)"
|
|
||||||
+# define TLS1_3_VERSION_DRAFT_TXT "TLS 1.3 (draft 28)"
|
|
||||||
+
|
|
||||||
/* Special value for method supporting multiple versions */
|
|
||||||
# define TLS_ANY_VERSION 0x10000
|
|
||||||
|
|
||||||
diff --git a/ssl/record/ssl3_record_tls13.c b/ssl/record/ssl3_record_tls13.c
|
|
||||||
index 30e5dddf82..4f1c2f2bd1 100644
|
|
||||||
--- a/ssl/record/ssl3_record_tls13.c
|
|
||||||
+++ b/ssl/record/ssl3_record_tls13.c
|
|
||||||
@@ -173,8 +173,9 @@ int tls13_enc(SSL *s, SSL3_RECORD *recs, size_t n_recs, int sending)
|
|
||||||
if (((alg_enc & SSL_AESCCM) != 0
|
|
||||||
&& EVP_CipherUpdate(ctx, NULL, &lenu, NULL,
|
|
||||||
(unsigned int)rec->length) <= 0)
|
|
||||||
- || EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
- sizeof(recheader)) <= 0
|
|
||||||
+ || (s->version_draft != TLS1_3_VERSION_DRAFT_23
|
|
||||||
+ && EVP_CipherUpdate(ctx, NULL, &lenu, recheader,
|
|
||||||
+ sizeof(recheader)) <= 0)
|
|
||||||
|| EVP_CipherUpdate(ctx, rec->data, &lenu, rec->input,
|
|
||||||
(unsigned int)rec->length) <= 0
|
|
||||||
|| EVP_CipherFinal_ex(ctx, rec->data + lenu, &lenf) <= 0
|
|
||||||
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c
|
||||||
index a5b3dbbfd5..6dd4ad4b68 100644
|
index a5b3dbbfd5..6dd4ad4b68 100644
|
||||||
--- a/ssl/s3_lib.c
|
--- a/ssl/s3_lib.c
|
||||||
|
@ -1057,15 +1020,6 @@ index bd0d4210f4..2c96db0618 100644
|
||||||
/* same as above but sorted for lookup */
|
/* same as above but sorted for lookup */
|
||||||
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
|
||||||
/* TLSv1.3 specific ciphersuites */
|
/* TLSv1.3 specific ciphersuites */
|
||||||
@@ -1088,6 +1125,8 @@ struct ssl_st {
|
|
||||||
* DTLS1_VERSION)
|
|
||||||
*/
|
|
||||||
int version;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ int version_draft;
|
|
||||||
/* SSLv3 */
|
|
||||||
const SSL_METHOD *method;
|
|
||||||
/*
|
|
||||||
@@ -1146,7 +1185,7 @@ struct ssl_st {
|
@@ -1146,7 +1185,7 @@ struct ssl_st {
|
||||||
/* Per connection DANE state */
|
/* Per connection DANE state */
|
||||||
SSL_DANE dane;
|
SSL_DANE dane;
|
||||||
|
@ -1107,124 +1061,6 @@ index bd0d4210f4..2c96db0618 100644
|
||||||
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
__owur int ssl3_digest_cached_records(SSL *s, int keep);
|
||||||
__owur int ssl3_new(SSL *s);
|
__owur int ssl3_new(SSL *s);
|
||||||
void ssl3_free(SSL *s);
|
void ssl3_free(SSL *s);
|
||||||
diff --git a/ssl/statem/extensions_clnt.c b/ssl/statem/extensions_clnt.c
|
|
||||||
index 6e133e026e..f26bc8e879 100644
|
|
||||||
--- a/ssl/statem/extensions_clnt.c
|
|
||||||
+++ b/ssl/statem/extensions_clnt.c
|
|
||||||
@@ -533,8 +533,25 @@ EXT_RETURN tls_construct_ctos_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
return EXT_RETURN_FAIL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list as to whether
|
|
||||||
+ * we should include versions <TLS1.2. For the moment we do. To be
|
|
||||||
+ * reviewed later.
|
|
||||||
+ */
|
|
||||||
for (currv = max_version; currv >= min_version; currv--) {
|
|
||||||
- if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this first if clause prior to release!! */
|
|
||||||
+ if (currv == TLS1_3_VERSION) {
|
|
||||||
+ if (!WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_27)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_26)
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, TLS1_3_VERSION_DRAFT_23)) {
|
|
||||||
+ SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
+ SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
+ ERR_R_INTERNAL_ERROR);
|
|
||||||
+ return EXT_RETURN_FAIL;
|
|
||||||
+ }
|
|
||||||
+ } else if (!WPACKET_put_bytes_u16(pkt, currv)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_CTOS_SUPPORTED_VERSIONS,
|
|
||||||
ERR_R_INTERNAL_ERROR);
|
|
||||||
@@ -1763,6 +1780,15 @@ int tls_parse_stoc_supported_versions(SSL *s, PACKET *pkt, unsigned int context,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (version == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_27
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || version == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ s->version_draft = version;
|
|
||||||
+ version = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* The only protocol version we support which is valid in this extension in
|
|
||||||
* a ServerHello is TLSv1.3 therefore we shouldn't be getting anything else.
|
|
||||||
diff --git a/ssl/statem/extensions_srvr.c b/ssl/statem/extensions_srvr.c
|
|
||||||
index 6545f5727d..15786a7bfc 100644
|
|
||||||
--- a/ssl/statem/extensions_srvr.c
|
|
||||||
+++ b/ssl/statem/extensions_srvr.c
|
|
||||||
@@ -897,7 +897,8 @@ int tls_parse_ctos_cookie(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
|
|
||||||
}
|
|
||||||
if (!WPACKET_put_bytes_u16(&hrrpkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(&hrrpkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(&hrrpkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Fix this before release */
|
|
||||||
+ || !WPACKET_put_bytes_u16(&hrrpkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(&hrrpkt)) {
|
|
||||||
WPACKET_cleanup(&hrrpkt);
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR, SSL_F_TLS_PARSE_CTOS_COOKIE,
|
|
||||||
@@ -1652,7 +1653,8 @@ EXT_RETURN tls_construct_stoc_supported_versions(SSL *s, WPACKET *pkt,
|
|
||||||
|
|
||||||
if (!WPACKET_put_bytes_u16(pkt, TLSEXT_TYPE_supported_versions)
|
|
||||||
|| !WPACKET_start_sub_packet_u16(pkt)
|
|
||||||
- || !WPACKET_put_bytes_u16(pkt, s->version)
|
|
||||||
+ /* TODO(TLS1.3): Update to remove the TLSv1.3 draft indicator */
|
|
||||||
+ || !WPACKET_put_bytes_u16(pkt, s->version_draft)
|
|
||||||
|| !WPACKET_close(pkt)) {
|
|
||||||
SSLfatal(s, SSL_AD_INTERNAL_ERROR,
|
|
||||||
SSL_F_TLS_CONSTRUCT_STOC_SUPPORTED_VERSIONS,
|
|
||||||
diff --git a/ssl/statem/statem_lib.c b/ssl/statem/statem_lib.c
|
|
||||||
index 2f78a3f602..5d5121d12b 100644
|
|
||||||
--- a/ssl/statem/statem_lib.c
|
|
||||||
+++ b/ssl/statem/statem_lib.c
|
|
||||||
@@ -1770,6 +1770,8 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
unsigned int best_vers = 0;
|
|
||||||
const SSL_METHOD *best_method = NULL;
|
|
||||||
PACKET versionslist;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ unsigned int orig_candidate = 0;
|
|
||||||
|
|
||||||
suppversions->parsed = 1;
|
|
||||||
|
|
||||||
@@ -1791,6 +1793,23 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
return SSL_R_BAD_LEGACY_VERSION;
|
|
||||||
|
|
||||||
while (PACKET_get_net_2(&versionslist, &candidate_vers)) {
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (candidate_vers == TLS1_3_VERSION
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_26
|
|
||||||
+ || candidate_vers == TLS1_3_VERSION_DRAFT_23) {
|
|
||||||
+ if (best_vers == TLS1_3_VERSION
|
|
||||||
+ && (orig_candidate > candidate_vers
|
|
||||||
+ || orig_candidate == TLS1_3_VERSION))
|
|
||||||
+ continue;
|
|
||||||
+ orig_candidate = candidate_vers;
|
|
||||||
+ candidate_vers = TLS1_3_VERSION;
|
|
||||||
+ }
|
|
||||||
+ /*
|
|
||||||
+ * TODO(TLS1.3): There is some discussion on the TLS list about
|
|
||||||
+ * whether to ignore versions <TLS1.2 in supported_versions. At the
|
|
||||||
+ * moment we honour them if present. To be reviewed later
|
|
||||||
+ */
|
|
||||||
if (version_cmp(s, candidate_vers, best_vers) <= 0)
|
|
||||||
continue;
|
|
||||||
if (ssl_version_supported(s, candidate_vers, &best_method))
|
|
||||||
@@ -1813,6 +1832,9 @@ int ssl_choose_server_version(SSL *s, CLIENTHELLO_MSG *hello, DOWNGRADE *dgrd)
|
|
||||||
}
|
|
||||||
check_for_downgrade(s, best_vers, dgrd);
|
|
||||||
s->version = best_vers;
|
|
||||||
+ /* TODO(TLS1.3): Remove this before release */
|
|
||||||
+ if (best_vers == TLS1_3_VERSION)
|
|
||||||
+ s->version_draft = orig_candidate;
|
|
||||||
s->method = best_method;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
diff --git a/ssl/statem/statem_srvr.c b/ssl/statem/statem_srvr.c
|
||||||
index b0dd54903d..1d096858f8 100644
|
index b0dd54903d..1d096858f8 100644
|
||||||
--- a/ssl/statem/statem_srvr.c
|
--- a/ssl/statem/statem_srvr.c
|
||||||
|
@ -1268,41 +1104,3 @@ index b0dd54903d..1d096858f8 100644
|
||||||
|
|
||||||
if (cipher == NULL) {
|
if (cipher == NULL) {
|
||||||
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE,
|
||||||
diff --git a/ssl/t1_trce.c b/ssl/t1_trce.c
|
|
||||||
index 656fefe896..654271f368 100644
|
|
||||||
--- a/ssl/t1_trce.c
|
|
||||||
+++ b/ssl/t1_trce.c
|
|
||||||
@@ -65,6 +65,11 @@ static const ssl_trace_tbl ssl_version_tbl[] = {
|
|
||||||
{TLS1_1_VERSION, "TLS 1.1"},
|
|
||||||
{TLS1_2_VERSION, "TLS 1.2"},
|
|
||||||
{TLS1_3_VERSION, "TLS 1.3"},
|
|
||||||
+ /* TODO(TLS1.3): Remove these lines before release */
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_23, TLS1_3_VERSION_DRAFT_TXT_23},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_26, TLS1_3_VERSION_DRAFT_TXT_26},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT_27, TLS1_3_VERSION_DRAFT_TXT_27},
|
|
||||||
+ {TLS1_3_VERSION_DRAFT, TLS1_3_VERSION_DRAFT_TXT},
|
|
||||||
{DTLS1_VERSION, "DTLS 1.0"},
|
|
||||||
{DTLS1_2_VERSION, "DTLS 1.2"},
|
|
||||||
{DTLS1_BAD_VER, "DTLS 1.0 (bad)"}
|
|
||||||
@@ -638,8 +643,19 @@ static int ssl_print_version(BIO *bio, int indent, const char *name,
|
|
||||||
if (*pmsglen < 2)
|
|
||||||
return 0;
|
|
||||||
vers = ((*pmsg)[0] << 8) | (*pmsg)[1];
|
|
||||||
- if (version != NULL)
|
|
||||||
- *version = vers;
|
|
||||||
+ if (version != NULL) {
|
|
||||||
+ /* TODO(TLS1.3): Remove the draft conditional here before release */
|
|
||||||
+ switch(vers) {
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_23:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_26:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT_27:
|
|
||||||
+ case TLS1_3_VERSION_DRAFT:
|
|
||||||
+ *version = TLS1_3_VERSION;
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ *version = vers;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
BIO_indent(bio, indent, 80);
|
|
||||||
BIO_printf(bio, "%s=0x%x (%s)\n",
|
|
||||||
name, vers, ssl_trace_str(vers, ssl_version_tbl));
|
|
||||||
|
|
Loading…
Reference in New Issue