diff options
author | jsing <> | 2014-06-13 13:28:53 +0000 |
---|---|---|
committer | jsing <> | 2014-06-13 13:28:53 +0000 |
commit | 1b457449c180438027e5a01bd91548b9c39cdcb5 (patch) | |
tree | 438ba40d37fa8918a8cbfba204604048af3118cc /src | |
parent | f783149b42dde459053d469f10461a7db0238550 (diff) | |
download | openbsd-1b457449c180438027e5a01bd91548b9c39cdcb5.tar.gz openbsd-1b457449c180438027e5a01bd91548b9c39cdcb5.tar.bz2 openbsd-1b457449c180438027e5a01bd91548b9c39cdcb5.zip |
Add ChaCha20-Poly1305 based ciphersuites.
Based on Adam Langley's chromium patches.
Tested by and ok sthen@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/s3_lib.c | 53 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 53 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_ciph.c | 16 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/tls1.h | 13 | ||||
-rw-r--r-- | src/lib/libssl/ssl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/ssl_ciph.c | 16 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/tls1.h | 13 |
10 files changed, 162 insertions, 14 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 939557e48e..fa7df59779 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.60 2014/06/13 13:21:09 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.61 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -2287,6 +2287,57 @@ SSL_CIPHER ssl3_ciphers[] = { | |||
2287 | .alg_bits = 256 | 2287 | .alg_bits = 256 |
2288 | }, | 2288 | }, |
2289 | #endif | 2289 | #endif |
2290 | |||
2291 | #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) | ||
2292 | { | ||
2293 | .valid = 1, | ||
2294 | .name = TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305, | ||
2295 | .id = TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305, | ||
2296 | .algorithm_mkey = SSL_kEECDH, | ||
2297 | .algorithm_auth = SSL_aRSA, | ||
2298 | .algorithm_enc = SSL_CHACHA20POLY1305, | ||
2299 | .algorithm_mac = SSL_AEAD, | ||
2300 | .algorithm_ssl = SSL_TLSV1_2, | ||
2301 | .algo_strength = SSL_NOT_EXP|SSL_HIGH, | ||
2302 | .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| | ||
2303 | SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), | ||
2304 | .strength_bits = 256, | ||
2305 | .alg_bits = 0, | ||
2306 | }, | ||
2307 | |||
2308 | { | ||
2309 | .valid = 1, | ||
2310 | .name = TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, | ||
2311 | .id = TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305, | ||
2312 | .algorithm_mkey = SSL_kEECDH, | ||
2313 | .algorithm_auth = SSL_aECDSA, | ||
2314 | .algorithm_enc = SSL_CHACHA20POLY1305, | ||
2315 | .algorithm_mac = SSL_AEAD, | ||
2316 | .algorithm_ssl = SSL_TLSV1_2, | ||
2317 | .algo_strength = SSL_NOT_EXP|SSL_HIGH, | ||
2318 | .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| | ||
2319 | SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), | ||
2320 | .strength_bits = 256, | ||
2321 | .alg_bits = 0, | ||
2322 | }, | ||
2323 | |||
2324 | { | ||
2325 | .valid = 1, | ||
2326 | .name = TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305, | ||
2327 | .id = TLS1_CK_DHE_RSA_CHACHA20_POLY1305, | ||
2328 | .algorithm_mkey = SSL_kEDH, | ||
2329 | .algorithm_auth = SSL_aRSA, | ||
2330 | .algorithm_enc = SSL_CHACHA20POLY1305, | ||
2331 | .algorithm_mac = SSL_AEAD, | ||
2332 | .algorithm_ssl = SSL_TLSV1_2, | ||
2333 | .algo_strength = SSL_NOT_EXP|SSL_HIGH, | ||
2334 | .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| | ||
2335 | SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), | ||
2336 | .strength_bits = 256, | ||
2337 | .alg_bits = 0, | ||
2338 | }, | ||
2339 | #endif | ||
2340 | |||
2290 | /* end of list */ | 2341 | /* end of list */ |
2291 | }; | 2342 | }; |
2292 | 2343 | ||
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index 939557e48e..fa7df59779 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.60 2014/06/13 13:21:09 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.61 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -2287,6 +2287,57 @@ SSL_CIPHER ssl3_ciphers[] = { | |||
2287 | .alg_bits = 256 | 2287 | .alg_bits = 256 |
2288 | }, | 2288 | }, |
2289 | #endif | 2289 | #endif |
2290 | |||
2291 | #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) | ||
2292 | { | ||
2293 | .valid = 1, | ||
2294 | .name = TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305, | ||
2295 | .id = TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305, | ||
2296 | .algorithm_mkey = SSL_kEECDH, | ||
2297 | .algorithm_auth = SSL_aRSA, | ||
2298 | .algorithm_enc = SSL_CHACHA20POLY1305, | ||
2299 | .algorithm_mac = SSL_AEAD, | ||
2300 | .algorithm_ssl = SSL_TLSV1_2, | ||
2301 | .algo_strength = SSL_NOT_EXP|SSL_HIGH, | ||
2302 | .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| | ||
2303 | SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), | ||
2304 | .strength_bits = 256, | ||
2305 | .alg_bits = 0, | ||
2306 | }, | ||
2307 | |||
2308 | { | ||
2309 | .valid = 1, | ||
2310 | .name = TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, | ||
2311 | .id = TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305, | ||
2312 | .algorithm_mkey = SSL_kEECDH, | ||
2313 | .algorithm_auth = SSL_aECDSA, | ||
2314 | .algorithm_enc = SSL_CHACHA20POLY1305, | ||
2315 | .algorithm_mac = SSL_AEAD, | ||
2316 | .algorithm_ssl = SSL_TLSV1_2, | ||
2317 | .algo_strength = SSL_NOT_EXP|SSL_HIGH, | ||
2318 | .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| | ||
2319 | SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), | ||
2320 | .strength_bits = 256, | ||
2321 | .alg_bits = 0, | ||
2322 | }, | ||
2323 | |||
2324 | { | ||
2325 | .valid = 1, | ||
2326 | .name = TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305, | ||
2327 | .id = TLS1_CK_DHE_RSA_CHACHA20_POLY1305, | ||
2328 | .algorithm_mkey = SSL_kEDH, | ||
2329 | .algorithm_auth = SSL_aRSA, | ||
2330 | .algorithm_enc = SSL_CHACHA20POLY1305, | ||
2331 | .algorithm_mac = SSL_AEAD, | ||
2332 | .algorithm_ssl = SSL_TLSV1_2, | ||
2333 | .algo_strength = SSL_NOT_EXP|SSL_HIGH, | ||
2334 | .algorithm2 = SSL_HANDSHAKE_MAC_SHA256|TLS1_PRF_SHA256| | ||
2335 | SSL_CIPHER_ALGORITHM2_AEAD|FIXED_NONCE_LEN(0), | ||
2336 | .strength_bits = 256, | ||
2337 | .alg_bits = 0, | ||
2338 | }, | ||
2339 | #endif | ||
2340 | |||
2290 | /* end of list */ | 2341 | /* end of list */ |
2291 | }; | 2342 | }; |
2292 | 2343 | ||
diff --git a/src/lib/libssl/src/ssl/ssl.h b/src/lib/libssl/src/ssl/ssl.h index 1a2bdf7628..3e09bd3521 100644 --- a/src/lib/libssl/src/ssl/ssl.h +++ b/src/lib/libssl/src/ssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.55 2014/06/13 11:52:03 jsing Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.56 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -289,6 +289,7 @@ extern "C" { | |||
289 | #define SSL_TXT_CAMELLIA128 "CAMELLIA128" | 289 | #define SSL_TXT_CAMELLIA128 "CAMELLIA128" |
290 | #define SSL_TXT_CAMELLIA256 "CAMELLIA256" | 290 | #define SSL_TXT_CAMELLIA256 "CAMELLIA256" |
291 | #define SSL_TXT_CAMELLIA "CAMELLIA" | 291 | #define SSL_TXT_CAMELLIA "CAMELLIA" |
292 | #define SSL_TXT_CHACHA20 "CHACHA20" | ||
292 | 293 | ||
293 | #define SSL_TXT_MD5 "MD5" | 294 | #define SSL_TXT_MD5 "MD5" |
294 | #define SSL_TXT_SHA1 "SHA1" | 295 | #define SSL_TXT_SHA1 "SHA1" |
diff --git a/src/lib/libssl/src/ssl/ssl_ciph.c b/src/lib/libssl/src/ssl/ssl_ciph.c index 25291bfd4a..a89c8253c8 100644 --- a/src/lib/libssl/src/ssl/ssl_ciph.c +++ b/src/lib/libssl/src/ssl/ssl_ciph.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_ciph.c,v 1.52 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl_ciph.c,v 1.53 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -916,6 +916,11 @@ ssl_cipher_get_evp_aead(const SSL_SESSION *s, const EVP_AEAD **aead) | |||
916 | *aead = EVP_aead_aes_256_gcm(); | 916 | *aead = EVP_aead_aes_256_gcm(); |
917 | return 1; | 917 | return 1; |
918 | #endif | 918 | #endif |
919 | #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) | ||
920 | case SSL_CHACHA20POLY1305: | ||
921 | *aead = EVP_aead_chacha20_poly1305(); | ||
922 | return 1; | ||
923 | #endif | ||
919 | default: | 924 | default: |
920 | break; | 925 | break; |
921 | } | 926 | } |
@@ -1617,7 +1622,11 @@ ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1617 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); | 1622 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); |
1618 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); | 1623 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); |
1619 | 1624 | ||
1620 | /* AES is our preferred symmetric cipher */ | 1625 | /* |
1626 | * CHACHA20 is fast and safe on all hardware and is thus our preferred | ||
1627 | * symmetric cipher, with AES second. | ||
1628 | */ | ||
1629 | ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20POLY1305, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); | ||
1621 | ssl_cipher_apply_rule(0, 0, 0, SSL_AES, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); | 1630 | ssl_cipher_apply_rule(0, 0, 0, SSL_AES, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); |
1622 | 1631 | ||
1623 | /* Temporarily enable everything else for sorting */ | 1632 | /* Temporarily enable everything else for sorting */ |
@@ -1871,6 +1880,9 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1871 | case SSL_SEED: | 1880 | case SSL_SEED: |
1872 | enc="SEED(128)"; | 1881 | enc="SEED(128)"; |
1873 | break; | 1882 | break; |
1883 | case SSL_CHACHA20POLY1305: | ||
1884 | enc = "ChaCha20-Poly1305"; | ||
1885 | break; | ||
1874 | default: | 1886 | default: |
1875 | enc="unknown"; | 1887 | enc="unknown"; |
1876 | break; | 1888 | break; |
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index ea5f8c3d4e..6ce2e17a15 100644 --- a/src/lib/libssl/src/ssl/ssl_locl.h +++ b/src/lib/libssl/src/ssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.50 2014/06/13 10:52:24 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.51 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -296,6 +296,7 @@ | |||
296 | #define SSL_SEED 0x00000800L | 296 | #define SSL_SEED 0x00000800L |
297 | #define SSL_AES128GCM 0x00001000L | 297 | #define SSL_AES128GCM 0x00001000L |
298 | #define SSL_AES256GCM 0x00002000L | 298 | #define SSL_AES256GCM 0x00002000L |
299 | #define SSL_CHACHA20POLY1305 0x00004000L | ||
299 | 300 | ||
300 | #define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) | 301 | #define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) |
301 | #define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) | 302 | #define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) |
diff --git a/src/lib/libssl/src/ssl/tls1.h b/src/lib/libssl/src/ssl/tls1.h index dbe8979a88..3bbb2acc2f 100644 --- a/src/lib/libssl/src/ssl/tls1.h +++ b/src/lib/libssl/src/ssl/tls1.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls1.h,v 1.18 2014/06/13 04:29:13 miod Exp $ */ | 1 | /* $OpenBSD: tls1.h,v 1.19 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -479,7 +479,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | |||
479 | #define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 | 479 | #define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 |
480 | 480 | ||
481 | /* ECDH HMAC based ciphersuites from RFC5289 */ | 481 | /* ECDH HMAC based ciphersuites from RFC5289 */ |
482 | |||
483 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 | 482 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 |
484 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 | 483 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 |
485 | #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 | 484 | #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 |
@@ -499,6 +498,11 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | |||
499 | #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 | 498 | #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 |
500 | #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 | 499 | #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 |
501 | 500 | ||
501 | /* ChaCha20-Poly1305 based ciphersuites. */ | ||
502 | #define TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305 0x0300CC13 | ||
503 | #define TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305 0x0300CC14 | ||
504 | #define TLS1_CK_DHE_RSA_CHACHA20_POLY1305 0x0300CC15 | ||
505 | |||
502 | /* XXX | 506 | /* XXX |
503 | * Inconsistency alert: | 507 | * Inconsistency alert: |
504 | * The OpenSSL names of ciphers with ephemeral DH here include the string | 508 | * The OpenSSL names of ciphers with ephemeral DH here include the string |
@@ -650,6 +654,11 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | |||
650 | #define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" | 654 | #define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" |
651 | #define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" | 655 | #define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" |
652 | 656 | ||
657 | /* ChaCha20-Poly1305 based ciphersuites. */ | ||
658 | #define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" | ||
659 | #define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" | ||
660 | #define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" | ||
661 | |||
653 | #define TLS_CT_RSA_SIGN 1 | 662 | #define TLS_CT_RSA_SIGN 1 |
654 | #define TLS_CT_DSS_SIGN 2 | 663 | #define TLS_CT_DSS_SIGN 2 |
655 | #define TLS_CT_RSA_FIXED_DH 3 | 664 | #define TLS_CT_RSA_FIXED_DH 3 |
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index 1a2bdf7628..3e09bd3521 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.55 2014/06/13 11:52:03 jsing Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.56 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -289,6 +289,7 @@ extern "C" { | |||
289 | #define SSL_TXT_CAMELLIA128 "CAMELLIA128" | 289 | #define SSL_TXT_CAMELLIA128 "CAMELLIA128" |
290 | #define SSL_TXT_CAMELLIA256 "CAMELLIA256" | 290 | #define SSL_TXT_CAMELLIA256 "CAMELLIA256" |
291 | #define SSL_TXT_CAMELLIA "CAMELLIA" | 291 | #define SSL_TXT_CAMELLIA "CAMELLIA" |
292 | #define SSL_TXT_CHACHA20 "CHACHA20" | ||
292 | 293 | ||
293 | #define SSL_TXT_MD5 "MD5" | 294 | #define SSL_TXT_MD5 "MD5" |
294 | #define SSL_TXT_SHA1 "SHA1" | 295 | #define SSL_TXT_SHA1 "SHA1" |
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c index 25291bfd4a..a89c8253c8 100644 --- a/src/lib/libssl/ssl_ciph.c +++ b/src/lib/libssl/ssl_ciph.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_ciph.c,v 1.52 2014/06/12 15:49:31 deraadt Exp $ */ | 1 | /* $OpenBSD: ssl_ciph.c,v 1.53 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -916,6 +916,11 @@ ssl_cipher_get_evp_aead(const SSL_SESSION *s, const EVP_AEAD **aead) | |||
916 | *aead = EVP_aead_aes_256_gcm(); | 916 | *aead = EVP_aead_aes_256_gcm(); |
917 | return 1; | 917 | return 1; |
918 | #endif | 918 | #endif |
919 | #if !defined(OPENSSL_NO_CHACHA) && !defined(OPENSSL_NO_POLY1305) | ||
920 | case SSL_CHACHA20POLY1305: | ||
921 | *aead = EVP_aead_chacha20_poly1305(); | ||
922 | return 1; | ||
923 | #endif | ||
919 | default: | 924 | default: |
920 | break; | 925 | break; |
921 | } | 926 | } |
@@ -1617,7 +1622,11 @@ ssl_create_cipher_list(const SSL_METHOD *ssl_method, | |||
1617 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); | 1622 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); |
1618 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); | 1623 | ssl_cipher_apply_rule(0, SSL_kEECDH, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); |
1619 | 1624 | ||
1620 | /* AES is our preferred symmetric cipher */ | 1625 | /* |
1626 | * CHACHA20 is fast and safe on all hardware and is thus our preferred | ||
1627 | * symmetric cipher, with AES second. | ||
1628 | */ | ||
1629 | ssl_cipher_apply_rule(0, 0, 0, SSL_CHACHA20POLY1305, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); | ||
1621 | ssl_cipher_apply_rule(0, 0, 0, SSL_AES, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); | 1630 | ssl_cipher_apply_rule(0, 0, 0, SSL_AES, 0, 0, 0, CIPHER_ADD, -1, &head, &tail); |
1622 | 1631 | ||
1623 | /* Temporarily enable everything else for sorting */ | 1632 | /* Temporarily enable everything else for sorting */ |
@@ -1871,6 +1880,9 @@ SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int len) | |||
1871 | case SSL_SEED: | 1880 | case SSL_SEED: |
1872 | enc="SEED(128)"; | 1881 | enc="SEED(128)"; |
1873 | break; | 1882 | break; |
1883 | case SSL_CHACHA20POLY1305: | ||
1884 | enc = "ChaCha20-Poly1305"; | ||
1885 | break; | ||
1874 | default: | 1886 | default: |
1875 | enc="unknown"; | 1887 | enc="unknown"; |
1876 | break; | 1888 | break; |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index ea5f8c3d4e..6ce2e17a15 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.50 2014/06/13 10:52:24 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.51 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -296,6 +296,7 @@ | |||
296 | #define SSL_SEED 0x00000800L | 296 | #define SSL_SEED 0x00000800L |
297 | #define SSL_AES128GCM 0x00001000L | 297 | #define SSL_AES128GCM 0x00001000L |
298 | #define SSL_AES256GCM 0x00002000L | 298 | #define SSL_AES256GCM 0x00002000L |
299 | #define SSL_CHACHA20POLY1305 0x00004000L | ||
299 | 300 | ||
300 | #define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) | 301 | #define SSL_AES (SSL_AES128|SSL_AES256|SSL_AES128GCM|SSL_AES256GCM) |
301 | #define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) | 302 | #define SSL_CAMELLIA (SSL_CAMELLIA128|SSL_CAMELLIA256) |
diff --git a/src/lib/libssl/tls1.h b/src/lib/libssl/tls1.h index dbe8979a88..3bbb2acc2f 100644 --- a/src/lib/libssl/tls1.h +++ b/src/lib/libssl/tls1.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls1.h,v 1.18 2014/06/13 04:29:13 miod Exp $ */ | 1 | /* $OpenBSD: tls1.h,v 1.19 2014/06/13 13:28:53 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -479,7 +479,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | |||
479 | #define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 | 479 | #define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 |
480 | 480 | ||
481 | /* ECDH HMAC based ciphersuites from RFC5289 */ | 481 | /* ECDH HMAC based ciphersuites from RFC5289 */ |
482 | |||
483 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 | 482 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 |
484 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 | 483 | #define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 |
485 | #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 | 484 | #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 |
@@ -499,6 +498,11 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | |||
499 | #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 | 498 | #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 |
500 | #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 | 499 | #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 |
501 | 500 | ||
501 | /* ChaCha20-Poly1305 based ciphersuites. */ | ||
502 | #define TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305 0x0300CC13 | ||
503 | #define TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305 0x0300CC14 | ||
504 | #define TLS1_CK_DHE_RSA_CHACHA20_POLY1305 0x0300CC15 | ||
505 | |||
502 | /* XXX | 506 | /* XXX |
503 | * Inconsistency alert: | 507 | * Inconsistency alert: |
504 | * The OpenSSL names of ciphers with ephemeral DH here include the string | 508 | * The OpenSSL names of ciphers with ephemeral DH here include the string |
@@ -650,6 +654,11 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) | |||
650 | #define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" | 654 | #define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" |
651 | #define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" | 655 | #define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" |
652 | 656 | ||
657 | /* ChaCha20-Poly1305 based ciphersuites. */ | ||
658 | #define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" | ||
659 | #define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" | ||
660 | #define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" | ||
661 | |||
653 | #define TLS_CT_RSA_SIGN 1 | 662 | #define TLS_CT_RSA_SIGN 1 |
654 | #define TLS_CT_DSS_SIGN 2 | 663 | #define TLS_CT_DSS_SIGN 2 |
655 | #define TLS_CT_RSA_FIXED_DH 3 | 664 | #define TLS_CT_RSA_FIXED_DH 3 |