Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ language: c
install: wget https://raw.githubusercontent.com/ocaml/ocaml-travisci-skeleton/master/.travis-opam.sh
script: bash -ex .travis-opam.sh
env:
- PACKAGE="tls" OCAML_VERSION=4.01 PINS="nocrypto asn1-combinators x509"
- PACKAGE="tls" OCAML_VERSION=latest PINS="nocrypto asn1-combinators x509"
- PACKAGE="tls" OCAML_VERSION=latest DEPOPTS=lwt PINS="nocrypto asn1-combinators x509"
- PACKAGE="tls" OCAML_VERSION=latest DEPOPTS=mirage-types-lwt PINS="nocrypto asn1-combinators x509" POST_INSTALL_HOOK="./.travis-test-mirage.sh"
notifications:
Expand Down
6 changes: 3 additions & 3 deletions _oasis
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Library "tls"
State, Handshake_common, Handshake_crypto,
Handshake_server, Handshake_client
Pack : true
BuildDepends : cstruct.syntax, sexplib.syntax, result, nocrypto, x509
BuildDepends : cstruct, cstruct.ppx, ppx_sexp_conv, result, nocrypto, x509
XMETARequires : cstruct, sexplib, result, nocrypto, x509
#, bisect

Expand All @@ -46,7 +46,7 @@ Library "tls-lwt"
FindlibParent : tls
Path : lwt
Modules : Tls_lwt, X509_lwt
BuildDepends : x509, tls, lwt.syntax, lwt.unix, cstruct.lwt, nocrypto.lwt
BuildDepends : x509, tls, lwt.unix, cstruct.lwt, nocrypto.lwt
XMETARequires : x509, tls, lwt, lwt.unix, cstruct.lwt, nocrypto.lwt

Library "tls-mirage"
Expand All @@ -55,7 +55,7 @@ Library "tls-mirage"
FindlibParent : tls
Path : mirage
Modules : Tls_mirage
BuildDepends : x509, tls, mirage-types, ipaddr, lwt, lwt.syntax
BuildDepends : x509, tls, mirage-types, ipaddr, lwt
XMETARequires : x509, tls, mirage-types, ipaddr, lwt

Executable "test_runner"
Expand Down
82 changes: 43 additions & 39 deletions _tags
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# OASIS_START
# DO NOT EDIT (digest: 37ed62dccae839c5299ce53d3857fa9c)
# DO NOT EDIT (digest: 91782dc3c9349b5380268d014014617e)
# Ignore VCS directories, you can use the same kind of rule outside
# OASIS_START/STOP if you want to exclude directories that contains
# useless stuff for the build process
Expand Down Expand Up @@ -32,160 +32,164 @@ true: annot, bin_annot
"lib/handshake_crypto.cmx": for-pack(Tls)
"lib/handshake_server.cmx": for-pack(Tls)
"lib/handshake_client.cmx": for-pack(Tls)
<lib/*.ml{,i,y}>: pkg_cstruct.syntax
<lib/*.ml{,i,y}>: pkg_cstruct
<lib/*.ml{,i,y}>: pkg_cstruct.ppx
<lib/*.ml{,i,y}>: pkg_nocrypto
<lib/*.ml{,i,y}>: pkg_ppx_sexp_conv
<lib/*.ml{,i,y}>: pkg_result
<lib/*.ml{,i,y}>: pkg_sexplib.syntax
<lib/*.ml{,i,y}>: pkg_x509
# Library tests
"tests/tests.cmxs": use_tests
# Library tls-lwt
"lwt/tls-lwt.cmxs": use_tls-lwt
<lwt/*.ml{,i,y}>: pkg_cstruct
<lwt/*.ml{,i,y}>: pkg_cstruct.lwt
<lwt/*.ml{,i,y}>: pkg_cstruct.syntax
<lwt/*.ml{,i,y}>: pkg_lwt.syntax
<lwt/*.ml{,i,y}>: pkg_cstruct.ppx
<lwt/*.ml{,i,y}>: pkg_lwt.unix
<lwt/*.ml{,i,y}>: pkg_nocrypto
<lwt/*.ml{,i,y}>: pkg_nocrypto.lwt
<lwt/*.ml{,i,y}>: pkg_ppx_sexp_conv
<lwt/*.ml{,i,y}>: pkg_result
<lwt/*.ml{,i,y}>: pkg_sexplib.syntax
<lwt/*.ml{,i,y}>: pkg_x509
<lwt/*.ml{,i,y}>: use_tls
# Library tls-mirage
"mirage/tls-mirage.cmxs": use_tls-mirage
<mirage/*.ml{,i,y}>: pkg_cstruct.syntax
<mirage/*.ml{,i,y}>: pkg_cstruct
<mirage/*.ml{,i,y}>: pkg_cstruct.ppx
<mirage/*.ml{,i,y}>: pkg_ipaddr
<mirage/*.ml{,i,y}>: pkg_lwt
<mirage/*.ml{,i,y}>: pkg_lwt.syntax
<mirage/*.ml{,i,y}>: pkg_mirage-types
<mirage/*.ml{,i,y}>: pkg_nocrypto
<mirage/*.ml{,i,y}>: pkg_ppx_sexp_conv
<mirage/*.ml{,i,y}>: pkg_result
<mirage/*.ml{,i,y}>: pkg_sexplib.syntax
<mirage/*.ml{,i,y}>: pkg_x509
<mirage/*.ml{,i,y}>: use_tls
# Executable test_runner
"tests/unittestrunner.native": pkg_cstruct.syntax
"tests/unittestrunner.native": pkg_cstruct
"tests/unittestrunner.native": pkg_cstruct.ppx
"tests/unittestrunner.native": pkg_cstruct.unix
"tests/unittestrunner.native": pkg_nocrypto
"tests/unittestrunner.native": pkg_oUnit
"tests/unittestrunner.native": pkg_ppx_sexp_conv
"tests/unittestrunner.native": pkg_result
"tests/unittestrunner.native": pkg_sexplib.syntax
"tests/unittestrunner.native": pkg_x509
"tests/unittestrunner.native": use_tests
"tests/unittestrunner.native": use_tls
# Executable feedback
"tests/feedback.native": pkg_cstruct.syntax
"tests/feedback.native": pkg_cstruct
"tests/feedback.native": pkg_cstruct.ppx
"tests/feedback.native": pkg_cstruct.unix
"tests/feedback.native": pkg_nocrypto
"tests/feedback.native": pkg_oUnit
"tests/feedback.native": pkg_ppx_sexp_conv
"tests/feedback.native": pkg_result
"tests/feedback.native": pkg_sexplib.syntax
"tests/feedback.native": pkg_x509
"tests/feedback.native": use_tests
"tests/feedback.native": use_tls
<tests/*.ml{,i,y}>: pkg_cstruct.syntax
<tests/*.ml{,i,y}>: pkg_cstruct
<tests/*.ml{,i,y}>: pkg_cstruct.ppx
<tests/*.ml{,i,y}>: pkg_cstruct.unix
<tests/*.ml{,i,y}>: pkg_nocrypto
<tests/*.ml{,i,y}>: pkg_oUnit
<tests/*.ml{,i,y}>: pkg_ppx_sexp_conv
<tests/*.ml{,i,y}>: pkg_result
<tests/*.ml{,i,y}>: pkg_sexplib.syntax
<tests/*.ml{,i,y}>: pkg_x509
<tests/*.ml{,i,y}>: use_tests
<tests/*.ml{,i,y}>: use_tls
# Executable starttls_server
"lwt/examples/starttls_server.native": pkg_cstruct
"lwt/examples/starttls_server.native": pkg_cstruct.lwt
"lwt/examples/starttls_server.native": pkg_cstruct.syntax
"lwt/examples/starttls_server.native": pkg_lwt.syntax
"lwt/examples/starttls_server.native": pkg_cstruct.ppx
"lwt/examples/starttls_server.native": pkg_lwt.unix
"lwt/examples/starttls_server.native": pkg_nocrypto
"lwt/examples/starttls_server.native": pkg_nocrypto.lwt
"lwt/examples/starttls_server.native": pkg_ppx_sexp_conv
"lwt/examples/starttls_server.native": pkg_result
"lwt/examples/starttls_server.native": pkg_sexplib.syntax
"lwt/examples/starttls_server.native": pkg_str
"lwt/examples/starttls_server.native": pkg_x509
"lwt/examples/starttls_server.native": use_tls
"lwt/examples/starttls_server.native": use_tls-lwt
<lwt/examples/*.ml{,i,y}>: pkg_str
# Executable echo_server
"lwt/examples/echo_server.native": pkg_cstruct
"lwt/examples/echo_server.native": pkg_cstruct.lwt
"lwt/examples/echo_server.native": pkg_cstruct.syntax
"lwt/examples/echo_server.native": pkg_lwt.syntax
"lwt/examples/echo_server.native": pkg_cstruct.ppx
"lwt/examples/echo_server.native": pkg_lwt.unix
"lwt/examples/echo_server.native": pkg_nocrypto
"lwt/examples/echo_server.native": pkg_nocrypto.lwt
"lwt/examples/echo_server.native": pkg_ppx_sexp_conv
"lwt/examples/echo_server.native": pkg_result
"lwt/examples/echo_server.native": pkg_sexplib.syntax
"lwt/examples/echo_server.native": pkg_x509
"lwt/examples/echo_server.native": use_tls
"lwt/examples/echo_server.native": use_tls-lwt
# Executable echo_server_sni
"lwt/examples/echo_server_sni.native": pkg_cstruct
"lwt/examples/echo_server_sni.native": pkg_cstruct.lwt
"lwt/examples/echo_server_sni.native": pkg_cstruct.syntax
"lwt/examples/echo_server_sni.native": pkg_lwt.syntax
"lwt/examples/echo_server_sni.native": pkg_cstruct.ppx
"lwt/examples/echo_server_sni.native": pkg_lwt.unix
"lwt/examples/echo_server_sni.native": pkg_nocrypto
"lwt/examples/echo_server_sni.native": pkg_nocrypto.lwt
"lwt/examples/echo_server_sni.native": pkg_ppx_sexp_conv
"lwt/examples/echo_server_sni.native": pkg_result
"lwt/examples/echo_server_sni.native": pkg_sexplib.syntax
"lwt/examples/echo_server_sni.native": pkg_x509
"lwt/examples/echo_server_sni.native": use_tls
"lwt/examples/echo_server_sni.native": use_tls-lwt
# Executable echo_client
"lwt/examples/echo_client.native": pkg_cstruct
"lwt/examples/echo_client.native": pkg_cstruct.lwt
"lwt/examples/echo_client.native": pkg_cstruct.syntax
"lwt/examples/echo_client.native": pkg_lwt.syntax
"lwt/examples/echo_client.native": pkg_cstruct.ppx
"lwt/examples/echo_client.native": pkg_lwt.unix
"lwt/examples/echo_client.native": pkg_nocrypto
"lwt/examples/echo_client.native": pkg_nocrypto.lwt
"lwt/examples/echo_client.native": pkg_ppx_sexp_conv
"lwt/examples/echo_client.native": pkg_result
"lwt/examples/echo_client.native": pkg_sexplib.syntax
"lwt/examples/echo_client.native": pkg_x509
"lwt/examples/echo_client.native": use_tls
"lwt/examples/echo_client.native": use_tls-lwt
# Executable http_client
"lwt/examples/http_client.native": pkg_cstruct
"lwt/examples/http_client.native": pkg_cstruct.lwt
"lwt/examples/http_client.native": pkg_cstruct.syntax
"lwt/examples/http_client.native": pkg_lwt.syntax
"lwt/examples/http_client.native": pkg_cstruct.ppx
"lwt/examples/http_client.native": pkg_lwt.unix
"lwt/examples/http_client.native": pkg_nocrypto
"lwt/examples/http_client.native": pkg_nocrypto.lwt
"lwt/examples/http_client.native": pkg_ppx_sexp_conv
"lwt/examples/http_client.native": pkg_result
"lwt/examples/http_client.native": pkg_sexplib.syntax
"lwt/examples/http_client.native": pkg_x509
"lwt/examples/http_client.native": use_tls
"lwt/examples/http_client.native": use_tls-lwt
# Executable test_server
"lwt/examples/test_server.native": pkg_cstruct
"lwt/examples/test_server.native": pkg_cstruct.lwt
"lwt/examples/test_server.native": pkg_cstruct.syntax
"lwt/examples/test_server.native": pkg_lwt.syntax
"lwt/examples/test_server.native": pkg_cstruct.ppx
"lwt/examples/test_server.native": pkg_lwt.unix
"lwt/examples/test_server.native": pkg_nocrypto
"lwt/examples/test_server.native": pkg_nocrypto.lwt
"lwt/examples/test_server.native": pkg_ppx_sexp_conv
"lwt/examples/test_server.native": pkg_result
"lwt/examples/test_server.native": pkg_sexplib.syntax
"lwt/examples/test_server.native": pkg_x509
"lwt/examples/test_server.native": use_tls
"lwt/examples/test_server.native": use_tls-lwt
# Executable test_client
"lwt/examples/test_client.native": pkg_cstruct
"lwt/examples/test_client.native": pkg_cstruct.lwt
"lwt/examples/test_client.native": pkg_cstruct.syntax
"lwt/examples/test_client.native": pkg_lwt.syntax
"lwt/examples/test_client.native": pkg_cstruct.ppx
"lwt/examples/test_client.native": pkg_lwt.unix
"lwt/examples/test_client.native": pkg_nocrypto
"lwt/examples/test_client.native": pkg_nocrypto.lwt
"lwt/examples/test_client.native": pkg_ppx_sexp_conv
"lwt/examples/test_client.native": pkg_result
"lwt/examples/test_client.native": pkg_sexplib.syntax
"lwt/examples/test_client.native": pkg_x509
"lwt/examples/test_client.native": use_tls
"lwt/examples/test_client.native": use_tls-lwt
<lwt/examples/*.ml{,i,y}>: pkg_cstruct
<lwt/examples/*.ml{,i,y}>: pkg_cstruct.lwt
<lwt/examples/*.ml{,i,y}>: pkg_cstruct.syntax
<lwt/examples/*.ml{,i,y}>: pkg_lwt.syntax
<lwt/examples/*.ml{,i,y}>: pkg_cstruct.ppx
<lwt/examples/*.ml{,i,y}>: pkg_lwt.unix
<lwt/examples/*.ml{,i,y}>: pkg_nocrypto
<lwt/examples/*.ml{,i,y}>: pkg_nocrypto.lwt
<lwt/examples/*.ml{,i,y}>: pkg_ppx_sexp_conv
<lwt/examples/*.ml{,i,y}>: pkg_result
<lwt/examples/*.ml{,i,y}>: pkg_sexplib.syntax
<lwt/examples/*.ml{,i,y}>: pkg_x509
<lwt/examples/*.ml{,i,y}>: use_tls
<lwt/examples/*.ml{,i,y}>: use_tls-lwt
Expand Down
12 changes: 6 additions & 6 deletions lib/ciphersuite.ml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
type key_exchange_algorithm =
| RSA
| DHE_RSA
with sexp
[@@deriving sexp]

(** [needs_certificate kex] is a predicate which is true if the [kex] requires a server certificate *)
let needs_certificate = function
Expand All @@ -22,26 +22,26 @@ let required_keytype_and_usage = function

type stream_cipher =
| RC4_128
with sexp
[@@deriving sexp]

type block_cipher =
| TRIPLE_DES_EDE_CBC
| AES_128_CBC
| AES_256_CBC
with sexp
[@@deriving sexp]

type aead_cipher =
| AES_128_CCM
| AES_256_CCM
| AES_128_GCM
| AES_256_GCM
with sexp
[@@deriving sexp]

type payload_protection =
| Stream of stream_cipher * Nocrypto.Hash.hash
| Block of block_cipher * Nocrypto.Hash.hash
| AEAD of aead_cipher
with sexp
[@@deriving sexp]

(** [key_length iv payload_protection] is [(key size, IV size, mac size)] where key IV, and mac sizes are the required bytes for the given [payload_protection] *)
let key_length iv pp =
Expand Down Expand Up @@ -84,7 +84,7 @@ type ciphersuite = [
| `TLS_DHE_RSA_WITH_AES_128_CCM
| `TLS_RSA_WITH_AES_256_CCM
| `TLS_RSA_WITH_AES_128_CCM
] with sexp
] [@@deriving sexp]

let any_ciphersuite_to_ciphersuite = function
| Packet.TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 -> Some `TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
Expand Down
10 changes: 5 additions & 5 deletions lib/config.ml
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ open Core
open Sexplib.Std


type certchain = X509.t list * Rsa.priv with sexp
type certchain = X509.t list * Rsa.priv [@@deriving sexp]

type own_cert = [
| `None
| `Single of certchain
| `Multiple of certchain list
| `Multiple_default of certchain * certchain list
] with sexp
] [@@deriving sexp]

type session_cache = SessionID.t -> epoch_data option
let session_cache_of_sexp _ = fun _ -> None
Expand All @@ -30,7 +30,7 @@ type config = {
own_certificates : own_cert ;
session_cache : session_cache ;
cached_session : epoch_data option ;
} with sexp
} [@@deriving sexp]

module Ciphers = struct

Expand Down Expand Up @@ -206,8 +206,8 @@ let validate_server config =
(* TODO: verify that certificates are x509 v3 if TLS_1_2 *)


type client = config with sexp
type server = config with sexp
type client = config [@@deriving sexp]
type server = config [@@deriving sexp]

let of_server conf = conf
and of_client conf = conf
Expand Down
Loading