Added support for CCM and CCM_8 cipher suites.

This commit is contained in:
Thomas Pornin 2018-07-28 22:31:50 +02:00
parent d69276c18d
commit e37c90ac68
19 changed files with 1278 additions and 546 deletions

View file

@ -252,12 +252,13 @@ 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_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 */
#define REQ_AESCCM 0x0040 /* suite needs AES/CCM encryption */
#define REQ_CHAPOL 0x0080 /* suite needs ChaCha20+Poly1305 */
#define REQ_3DESCBC 0x0100 /* suite needs 3DES/CBC encryption */
#define REQ_RSAKEYX 0x0200 /* suite uses RSA key exchange */
#define REQ_ECDHE_RSA 0x0400 /* suite uses ECDHE_RSA key exchange */
#define REQ_ECDHE_ECDSA 0x0800 /* suite uses ECDHE_ECDSA key exchange */
#define REQ_ECDH 0x1000 /* suite uses static ECDH key exchange */
/*
* Parse a list of cipher suite names. The names are comma-separated. If

View file

@ -952,6 +952,9 @@ do_client(int argc, char *argv[])
if ((req & REQ_AESCBC) != 0) {
br_ssl_engine_set_default_aes_cbc(&cc.eng);
}
if ((req & REQ_AESCCM) != 0) {
br_ssl_engine_set_default_aes_ccm(&cc.eng);
}
if ((req & REQ_AESGCM) != 0) {
br_ssl_engine_set_default_aes_gcm(&cc.eng);
}

View file

@ -82,6 +82,30 @@ const cipher_suite cipher_suites[] = {
REQ_ECDHE_RSA | REQ_AESGCM | REQ_SHA384 | REQ_TLS12,
"ECDHE with RSA, AES-256/GCM encryption (TLS 1.2+)"
},
{
"ECDHE_ECDSA_WITH_AES_128_CCM",
BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM,
REQ_ECDHE_ECDSA | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"ECDHE with ECDSA, AES-128/CCM encryption (TLS 1.2+)"
},
{
"ECDHE_ECDSA_WITH_AES_256_CCM",
BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM,
REQ_ECDHE_ECDSA | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"ECDHE with ECDSA, AES-256/CCM encryption (TLS 1.2+)"
},
{
"ECDHE_ECDSA_WITH_AES_128_CCM_8",
BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8,
REQ_ECDHE_ECDSA | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"ECDHE with ECDSA, AES-128/CCM_8 encryption (TLS 1.2+)"
},
{
"ECDHE_ECDSA_WITH_AES_256_CCM_8",
BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8,
REQ_ECDHE_ECDSA | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"ECDHE with ECDSA, AES-256/CCM_8 encryption (TLS 1.2+)"
},
{
"ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
@ -214,6 +238,30 @@ const cipher_suite cipher_suites[] = {
REQ_RSAKEYX | REQ_AESGCM | REQ_SHA384 | REQ_TLS12,
"RSA key exchange, AES-256/GCM encryption (TLS 1.2+)"
},
{
"RSA_WITH_AES_128_CCM",
BR_TLS_RSA_WITH_AES_128_CCM,
REQ_RSAKEYX | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"RSA key exchange, AES-128/CCM encryption (TLS 1.2+)"
},
{
"RSA_WITH_AES_256_CCM",
BR_TLS_RSA_WITH_AES_256_CCM,
REQ_RSAKEYX | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"RSA key exchange, AES-256/CCM encryption (TLS 1.2+)"
},
{
"RSA_WITH_AES_128_CCM_8",
BR_TLS_RSA_WITH_AES_128_CCM_8,
REQ_RSAKEYX | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"RSA key exchange, AES-128/CCM_8 encryption (TLS 1.2+)"
},
{
"RSA_WITH_AES_256_CCM_8",
BR_TLS_RSA_WITH_AES_256_CCM_8,
REQ_RSAKEYX | REQ_AESCCM | REQ_SHA256 | REQ_TLS12,
"RSA key exchange, AES-256/CCM_8 encryption (TLS 1.2+)"
},
{
"RSA_WITH_AES_128_CBC_SHA256",
BR_TLS_RSA_WITH_AES_128_CBC_SHA256,
@ -347,15 +395,19 @@ static const struct {
{ "aes_big_cbcenc", "big", &br_aes_big_cbcenc_vtable },
{ "aes_big_cbcdec", "big", &br_aes_big_cbcdec_vtable },
{ "aes_big_ctr", "big", &br_aes_big_ctr_vtable },
{ "aes_big_ctrcbc", "big", &br_aes_big_ctrcbc_vtable },
{ "aes_small_cbcenc", "small", &br_aes_small_cbcenc_vtable },
{ "aes_small_cbcdec", "small", &br_aes_small_cbcdec_vtable },
{ "aes_small_ctr", "small", &br_aes_small_ctr_vtable },
{ "aes_small_ctrcbc", "small", &br_aes_small_ctrcbc_vtable },
{ "aes_ct_cbcenc", "ct", &br_aes_ct_cbcenc_vtable },
{ "aes_ct_cbcdec", "ct", &br_aes_ct_cbcdec_vtable },
{ "aes_ct_ctr", "ct", &br_aes_ct_ctr_vtable },
{ "aes_ct_ctrcbc", "ct", &br_aes_ct_ctrcbc_vtable },
{ "aes_ct64_cbcenc", "ct64", &br_aes_ct64_cbcenc_vtable },
{ "aes_ct64_cbcdec", "ct64", &br_aes_ct64_cbcdec_vtable },
{ "aes_ct64_ctr", "ct64", &br_aes_ct64_ctr_vtable },
{ "aes_ct64_ctrcbc", "ct64", &br_aes_ct64_ctrcbc_vtable },
{ "des_tab_cbcenc", "tab", &br_des_tab_cbcenc_vtable },
{ "des_tab_cbcdec", "tab", &br_des_tab_cbcdec_vtable },
@ -418,6 +470,8 @@ static const struct {
(const void *(*)(void))&br_aes_x86ni_cbcdec_get_vtable },
{ "aes_x86ni_ctr", "x86ni",
(const void *(*)(void))&br_aes_x86ni_ctr_get_vtable },
{ "aes_x86ni_ctrcbc", "x86ni",
(const void *(*)(void))&br_aes_x86ni_ctrcbc_get_vtable },
{ "chacha20_sse2", "sse2",
(const void *(*)(void))&br_chacha20_sse2_get },
{ "ghash_pclmul", "pclmul",

View file

@ -1058,6 +1058,9 @@ do_server(int argc, char *argv[])
if ((req & REQ_AESCBC) != 0) {
br_ssl_engine_set_default_aes_cbc(&cc.eng);
}
if ((req & REQ_AESCCM) != 0) {
br_ssl_engine_set_default_aes_ccm(&cc.eng);
}
if ((req & REQ_AESGCM) != 0) {
br_ssl_engine_set_default_aes_gcm(&cc.eng);
}

View file

@ -723,6 +723,9 @@ do_twrch(int argc, char *argv[])
if ((req & REQ_AESCBC) != 0) {
br_ssl_engine_set_default_aes_cbc(&cc.eng);
}
if ((req & REQ_AESCCM) != 0) {
br_ssl_engine_set_default_aes_ccm(&cc.eng);
}
if ((req & REQ_AESGCM) != 0) {
br_ssl_engine_set_default_aes_gcm(&cc.eng);
}