Added ChaCha20+Poly1305 support (stand-alone, cipher suites).

This commit is contained in:
Thomas Pornin 2016-12-13 20:01:19 +01:00
parent 9e71c0673a
commit b42bd5972f
26 changed files with 1952 additions and 523 deletions

View file

@ -235,11 +235,12 @@ extern const cipher_suite cipher_suites[];
#define REQ_SHA384 0x0008 /* suite needs SHA-384 */
#define REQ_AESCBC 0x0010 /* suite needs AES/CBC encryption */
#define REQ_AESGCM 0x0020 /* suite needs AES/GCM encryption */
#define REQ_3DESCBC 0x0040 /* suite needs 3DES/CBC encryption */
#define REQ_RSAKEYX 0x0080 /* suite uses RSA key exchange */
#define REQ_ECDHE_RSA 0x0100 /* suite uses ECDHE_RSA key exchange */
#define REQ_ECDHE_ECDSA 0x0200 /* suite uses ECDHE_ECDSA key exchange */
#define REQ_ECDH 0x0400 /* suite uses static ECDH key exchange */
#define REQ_CHAPOL 0x0040 /* suite needs ChaCha20+Poly1305 */
#define REQ_3DESCBC 0x0080 /* suite needs 3DES/CBC encryption */
#define REQ_RSAKEYX 0x0100 /* suite uses RSA key exchange */
#define REQ_ECDHE_RSA 0x0200 /* suite uses ECDHE_RSA key exchange */
#define REQ_ECDHE_ECDSA 0x0400 /* suite uses ECDHE_ECDSA key exchange */
#define REQ_ECDH 0x0800 /* suite uses static ECDH key exchange */
/*
* Parse a list of cipher suite names. The names are comma-separated. If

View file

@ -915,6 +915,15 @@ do_client(int argc, char *argv[])
&br_sslrec_in_gcm_vtable,
&br_sslrec_out_gcm_vtable);
}
if ((req & REQ_CHAPOL) != 0) {
br_ssl_engine_set_chacha20(&cc.eng,
&br_chacha20_ct_run);
br_ssl_engine_set_poly1305(&cc.eng,
&br_poly1305_ctmul_run);
br_ssl_engine_set_chapol(&cc.eng,
&br_sslrec_in_chapol_vtable,
&br_sslrec_out_chapol_vtable);
}
if ((req & REQ_3DESCBC) != 0) {
br_ssl_engine_set_des_cbc(&cc.eng,
&br_des_ct_cbcenc_vtable,

View file

@ -46,6 +46,18 @@ const hash_function hash_functions[] = {
/* see brssl.h */
const cipher_suite cipher_suites[] = {
{
"ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
REQ_ECDHE_ECDSA | REQ_CHAPOL | REQ_SHA256 | REQ_TLS12,
"ECDHE with ECDSA, ChaCha20+Poly1305 encryption (TLS 1.2+)"
},
{
"ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
REQ_ECDHE_RSA | REQ_CHAPOL | REQ_SHA256 | REQ_TLS12,
"ECDHE with ECDSA, ChaCha20+Poly1305 encryption (TLS 1.2+)"
},
{
"ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,

View file

@ -947,6 +947,15 @@ do_server(int argc, char *argv[])
&br_sslrec_in_gcm_vtable,
&br_sslrec_out_gcm_vtable);
}
if ((req & REQ_CHAPOL) != 0) {
br_ssl_engine_set_chacha20(&cc.eng,
&br_chacha20_ct_run);
br_ssl_engine_set_poly1305(&cc.eng,
&br_poly1305_ctmul_run);
br_ssl_engine_set_chapol(&cc.eng,
&br_sslrec_in_chapol_vtable,
&br_sslrec_out_chapol_vtable);
}
if ((req & REQ_3DESCBC) != 0) {
br_ssl_engine_set_des_cbc(&cc.eng,
&br_des_ct_cbcenc_vtable,