ChaCha20-Poly1305 support.
diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c
index e235020..2cee44c 100644
--- a/ssl/ssl_ciph.c
+++ b/ssl/ssl_ciph.c
@@ -296,6 +296,7 @@
 	{0,SSL_TXT_CAMELLIA128,0,0,0,SSL_CAMELLIA128,0,0,0,0,0,0},
 	{0,SSL_TXT_CAMELLIA256,0,0,0,SSL_CAMELLIA256,0,0,0,0,0,0},
 	{0,SSL_TXT_CAMELLIA   ,0,0,0,SSL_CAMELLIA128|SSL_CAMELLIA256,0,0,0,0,0,0},
+	{0,SSL_TXT_CHACHA20   ,0,0,0,SSL_CHACHA20POLY1305,0,0,0,0,0,0},
 
 	/* MAC aliases */	
 	{0,SSL_TXT_MD5,0,     0,0,0,SSL_MD5,   0,0,0,0,0},
@@ -385,9 +386,15 @@
 		return 0;
 
 #ifndef OPENSSL_NO_AES
-	/* There is only one AEAD for now. */
-	*aead = EVP_aead_aes_128_gcm();
-	return 1;
+	switch (c->algorithm_enc)
+		{
+	case SSL_AES128GCM:
+		*aead = EVP_aead_aes_128_gcm();
+		return 1;
+	case SSL_CHACHA20POLY1305:
+		*aead = EVP_aead_chacha20_poly1305();
+		return 1;
+		}
 #endif
 
 	return 0;
@@ -1621,6 +1628,9 @@
 	case SSL_SEED:
 		enc="SEED(128)";
 		break;
+	case SSL_CHACHA20POLY1305:
+		enc="ChaCha20-Poly1305";
+		break;
 	default:
 		enc="unknown";
 		break;
@@ -1681,6 +1691,11 @@
 	return (c->algorithm_mac & (SSL_AES128GCM|SSL_AES256GCM)) != 0;
 	}
 
+int SSL_CIPHER_is_CHACHA20POLY1305(const SSL_CIPHER *c)
+	{
+	return (c->algorithm_enc & SSL_CHACHA20POLY1305) != 0;
+	}
+
 char *SSL_CIPHER_get_version(const SSL_CIPHER *c)
 	{
 	int i;