2016-11-03 21:13:18 +00:00
```
_____ _ ____ _ _
|_ _| | / ___| | |_ _ __ (_)___
| | | | \___ \ _____| __ | '__| / __ |
| | | |___ ___) |_____ | |_| | | \__ \
|_| |_____|____/ \__|_| |_|___/
```
crypto/tls, now with 100% more 1.3.
2017-02-14 22:47:21 +00:00
THE API IS NOT STABLE AND DOCUMENTATION IS NOT GUARANTEED.
2016-11-03 21:13:18 +00:00
[![Build Status ](https://travis-ci.org/cloudflare/tls-tris.svg?branch=master )](https://travis-ci.org/cloudflare/tls-tris)
## Usage
Since `crypto/tls` is very deeply (and not that elegantly) coupled with the Go stdlib,
tls-tris shouldn't be used as an external package. It is also impossible to vendor it
as `crypto/tls` because stdlib packages would import the standard one and mismatch.
So, to build with tls-tris, you need to use a custom GOROOT.
2018-03-21 10:05:19 +00:00
2016-11-03 21:13:18 +00:00
A script is provided that will take care of it for you: `./_dev/go.sh` .
Just use that instead of the `go` tool.
2018-03-21 10:05:19 +00:00
The script also transparently fetches the custom Cloudflare Go 1.10 compiler with the required backports.
2016-11-03 21:13:18 +00:00
2018-03-21 10:05:19 +00:00
## Development
2016-11-03 21:13:18 +00:00
2018-03-21 10:05:19 +00:00
### Dependencies
2016-11-03 21:13:18 +00:00
2018-03-21 10:05:19 +00:00
Copy paste line bellow to install all required dependencies:
2016-11-03 21:13:18 +00:00
2018-03-21 10:05:19 +00:00
* ArchLinux:
```
pacman -S go docker gcc git make patch python2 python-docker rsync
```
2016-11-03 21:13:18 +00:00
2018-03-21 10:05:19 +00:00
* Debian:
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
apt-get install build-essential docker go patch python python-pip rsync
pip install setuptools
pip install docker
2016-11-03 21:13:18 +00:00
```
2018-05-24 10:18:27 +01:00
* Ubuntu (18.04) :
```
apt-get update
apt-get install build-essential docker docker.io golang patch python python-pip rsync sudo
pip install setuptools
pip install docker
sudo usermod -a -G docker $USER
```
2018-05-24 01:35:33 +01:00
2018-03-21 10:05:19 +00:00
Similar dependencies can be found on any UNIX based system/distribution.
### Building
2016-11-03 21:13:18 +00:00
2018-03-21 10:05:19 +00:00
There are number of things that need to be setup before running tests. Most important step is to copy ``go env GOROOT`` directory to ``_dev`` and swap TLS implementation and recompile GO. Then for testing we use go implementation from ``_dev/GOROOT``.
2016-11-03 21:13:18 +00:00
```
2018-05-24 10:18:27 +01:00
git clone https://github.com/cloudflare/tls-tris.git
2018-06-26 09:32:47 +01:00
cd tls-tris; cp _dev/utils/pre-commit .git/hooks/
make -f _dev/Makefile build-all
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
### Testing
We run 3 kinds of test:.
* Unit testing: < br /> ``make -f _dev/Makefile test-unit``
* Testing against BoringSSL test suite: < br /> ``make -f _dev/Makefile test-bogo``
2018-08-09 20:47:50 +01:00
* Compatibility testing (see below):< br /> ``make -f _dev/Makefile test-interop``
2018-03-21 10:05:19 +00:00
To run all the tests in one go use:
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
make -f _dev/Makefile test
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
### Testing interoperability with 3rd party libraries
In order to ensure compatibility we are testing our implementation against BoringSSL, NSS and PicoTLS.
Makefile has a specific target for testing interoperability with external libraries. Following command can be used in order to run such test:
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
make -f _dev/Makefile test-interop
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
The makefile target is just a wrapper and it executes ``_dev/interop_test_runner`` script written in python. The script implements interoperability tests using ``python unittest`` framework.
Script can be started from command line directly. For example:
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
> ./interop_test_runner -v InteropServer_NSS.test_zero_rtt
test_zero_rtt (__main__.InteropServer_NSS) ... ok
----------------------------------------------------------------------
Ran 1 test in 8.765s
OK
2016-11-03 21:13:18 +00:00
```
2018-03-21 10:05:19 +00:00
### Debugging
When the environment variable `TLSDEBUG` is set to `error` , Tris will print a hexdump of the Client Hello and a stack trace if an handshake error occurs. If the value is `short` , only the error and the first meaningful stack frame are printed.