s2n-tls is a C99 implementation of the TLS/SSL protocols that is designed to be simple, small, fast, and with security as a priority. It is released and licensed under the Apache License 2.0. If you are building on OSX, you can use build tools like Ninja. The s2n-tls I/O APIs are designed to be intuitive to developers familiar with the widely-used POSIX I/O APIs, and s2n-tls supports blocking, non-blocking, and full-duplex I/O. Additionally there are no locks or mutexes within s2n-tls. s2n-tls implements SSLv3, TLS1.0, TLS1.1, TLS1.2, and TLS1.3. For encryption, s2n-tls supports 128-bit and 256-bit AES in the CBC and GCM modes, ChaCha20, 3DES, and RC4. For forward secrecy, s2n-tls supports both DHE and ECDHE. s2n-tls also supports the Server Name Indicator (SNI), Application-Layer Protocol Negotiation (ALPN), and Online Certificate Status Protocol (OCSP) TLS extensions. SSLv3, RC4, 3DES, and DHE are each disabled by default for security reasons.
Features
- s2n-tls features a simple API to use the latest "default" set of preferences
- Internally s2n-tls takes a systematic approach to data protection and includes several mechanisms designed to improve safety
- s2n-tls is about 6,000 lines of code
- s2n's code is also structured and written with a focus on reviewability
- All s2n-tls code is subject to code review
- s2n-tls includes positive and negative unit tests and end-to-end test cases