From 10cd2259625f0be85a3d7bb9fd60cbc270c04245 Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Thu, 12 Apr 2012 21:26:34 +0000
Subject: [PATCH] - Added support for the SHA256 ciphersuites of AES and
Camellia
---
include/polarssl/ssl.h | 22 ++++--
library/ssl_cli.c | 12 +++-
library/ssl_srv.c | 12 +++-
library/ssl_tls.c | 142 ++++++++++++++++++++++++++++++++++++--
programs/ssl/ssl_server.c | 45 +++++++++++-
tests/compat.sh | 121 ++++++++++++++++++--------------
6 files changed, 285 insertions(+), 69 deletions(-)
diff --git a/include/polarssl/ssl.h b/include/polarssl/ssl.h
index 61a73d2ee..610448ee7 100644
--- a/include/polarssl/ssl.h
+++ b/include/polarssl/ssl.h
@@ -115,22 +115,32 @@
#define SSL_RSA_NULL_MD5 0x01 /**< Weak! */
#define SSL_RSA_NULL_SHA 0x02 /**< Weak! */
#define SSL_RSA_NULL_SHA256 0x3B /**< Weak! */
-#define SSL_RSA_DES_SHA 0x09 /**< Weak! */
-#define SSL_EDH_RSA_DES_SHA 0x15 /**< Weak! */
+#define SSL_RSA_DES_SHA 0x09 /**< Weak! Not in TLS 1.2 */
+#define SSL_EDH_RSA_DES_SHA 0x15 /**< Weak! Not in TLS 1.2 */
#define SSL_RSA_RC4_128_MD5 0x04
#define SSL_RSA_RC4_128_SHA 0x05
+
#define SSL_RSA_DES_168_SHA 0x0A
#define SSL_EDH_RSA_DES_168_SHA 0x16
+
#define SSL_RSA_AES_128_SHA 0x2F
#define SSL_EDH_RSA_AES_128_SHA 0x33
#define SSL_RSA_AES_256_SHA 0x35
#define SSL_EDH_RSA_AES_256_SHA 0x39
+#define SSL_RSA_AES_128_SHA256 0x3C /**< TLS 1.2 */
+#define SSL_RSA_AES_256_SHA256 0x3D /**< TLS 1.2 */
+#define SSL_EDH_RSA_AES_128_SHA256 0x67 /**< TLS 1.2 */
+#define SSL_EDH_RSA_AES_256_SHA256 0x6B /**< TLS 1.2 */
-#define SSL_RSA_CAMELLIA_128_SHA 0x41
-#define SSL_EDH_RSA_CAMELLIA_128_SHA 0x45
-#define SSL_RSA_CAMELLIA_256_SHA 0x84
-#define SSL_EDH_RSA_CAMELLIA_256_SHA 0x88
+#define SSL_RSA_CAMELLIA_128_SHA 0x41
+#define SSL_EDH_RSA_CAMELLIA_128_SHA 0x45
+#define SSL_RSA_CAMELLIA_256_SHA 0x84
+#define SSL_EDH_RSA_CAMELLIA_256_SHA 0x88
+#define SSL_RSA_CAMELLIA_128_SHA256 0xBA /**< TLS 1.2 */
+#define SSL_EDH_RSA_CAMELLIA_128_SHA256 0xBE /**< TLS 1.2 */
+#define SSL_RSA_CAMELLIA_256_SHA256 0xC0 /**< TLS 1.2 */
+#define SSL_EDH_RSA_CAMELLIA_256_SHA256 0xC4 /**< TLS 1.2 */
/*
* Supported Signature and Hash algorithms (For TLS 1.2)
diff --git a/library/ssl_cli.c b/library/ssl_cli.c
index 977684e8c..6f9206f9d 100644
--- a/library/ssl_cli.c
+++ b/library/ssl_cli.c
@@ -448,8 +448,12 @@ static int ssl_parse_server_key_exchange( ssl_context *ssl )
ssl->session->ciphersuite != SSL_EDH_RSA_DES_168_SHA &&
ssl->session->ciphersuite != SSL_EDH_RSA_AES_128_SHA &&
ssl->session->ciphersuite != SSL_EDH_RSA_AES_256_SHA &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_AES_128_SHA256 &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_AES_256_SHA256 &&
ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_128_SHA &&
- ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_256_SHA)
+ ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_256_SHA &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_128_SHA256 &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_256_SHA256 )
{
SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) );
ssl->state++;
@@ -777,8 +781,12 @@ static int ssl_write_client_key_exchange( ssl_context *ssl )
ssl->session->ciphersuite == SSL_EDH_RSA_DES_168_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA256 ||
ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA ||
- ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA)
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA256 )
{
#if !defined(POLARSSL_DHM_C)
SSL_DEBUG_MSG( 1, ( "support for dhm in not available" ) );
diff --git a/library/ssl_srv.c b/library/ssl_srv.c
index 67fe130aa..2d8b0b8d7 100644
--- a/library/ssl_srv.c
+++ b/library/ssl_srv.c
@@ -552,8 +552,12 @@ static int ssl_write_server_key_exchange( ssl_context *ssl )
ssl->session->ciphersuite != SSL_EDH_RSA_DES_168_SHA &&
ssl->session->ciphersuite != SSL_EDH_RSA_AES_128_SHA &&
ssl->session->ciphersuite != SSL_EDH_RSA_AES_256_SHA &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_AES_128_SHA256 &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_AES_256_SHA256 &&
ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_128_SHA &&
- ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_256_SHA)
+ ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_256_SHA &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_128_SHA256 &&
+ ssl->session->ciphersuite != SSL_EDH_RSA_CAMELLIA_256_SHA256 )
{
SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) );
ssl->state++;
@@ -761,8 +765,12 @@ static int ssl_parse_client_key_exchange( ssl_context *ssl )
ssl->session->ciphersuite == SSL_EDH_RSA_DES_168_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA256 ||
ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA ||
- ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA)
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA256 )
{
#if !defined(POLARSSL_DHM_C)
SSL_DEBUG_MSG( 1, ( "support for dhm is not available" ) );
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index b5c89a9be..e697f4ece 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -323,6 +323,20 @@ int ssl_derive_keys( ssl_context *ssl )
ssl->keylen = 32; ssl->minlen = 32;
ssl->ivlen = 16; ssl->maclen = 20;
break;
+
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_AES_128_SHA256:
+ case SSL_EDH_RSA_AES_128_SHA256:
+ ssl->keylen = 16; ssl->minlen = 32;
+ ssl->ivlen = 16; ssl->maclen = 32;
+ break;
+
+ case SSL_RSA_AES_256_SHA256:
+ case SSL_EDH_RSA_AES_256_SHA256:
+ ssl->keylen = 32; ssl->minlen = 32;
+ ssl->ivlen = 16; ssl->maclen = 32;
+ break;
+#endif
#endif
#if defined(POLARSSL_CAMELLIA_C)
@@ -337,6 +351,20 @@ int ssl_derive_keys( ssl_context *ssl )
ssl->keylen = 32; ssl->minlen = 32;
ssl->ivlen = 16; ssl->maclen = 20;
break;
+
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_CAMELLIA_128_SHA256:
+ case SSL_EDH_RSA_CAMELLIA_128_SHA256:
+ ssl->keylen = 16; ssl->minlen = 32;
+ ssl->ivlen = 16; ssl->maclen = 32;
+ break;
+
+ case SSL_RSA_CAMELLIA_256_SHA256:
+ case SSL_EDH_RSA_CAMELLIA_256_SHA256:
+ ssl->keylen = 32; ssl->minlen = 32;
+ ssl->ivlen = 16; ssl->maclen = 32;
+ break;
+#endif
#endif
#if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
@@ -430,12 +458,20 @@ int ssl_derive_keys( ssl_context *ssl )
#if defined(POLARSSL_AES_C)
case SSL_RSA_AES_128_SHA:
case SSL_EDH_RSA_AES_128_SHA:
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_AES_128_SHA256:
+ case SSL_EDH_RSA_AES_128_SHA256:
+#endif
aes_setkey_enc( (aes_context *) ssl->ctx_enc, key1, 128 );
aes_setkey_dec( (aes_context *) ssl->ctx_dec, key2, 128 );
break;
case SSL_RSA_AES_256_SHA:
case SSL_EDH_RSA_AES_256_SHA:
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_AES_256_SHA256:
+ case SSL_EDH_RSA_AES_256_SHA256:
+#endif
aes_setkey_enc( (aes_context *) ssl->ctx_enc, key1, 256 );
aes_setkey_dec( (aes_context *) ssl->ctx_dec, key2, 256 );
break;
@@ -444,12 +480,20 @@ int ssl_derive_keys( ssl_context *ssl )
#if defined(POLARSSL_CAMELLIA_C)
case SSL_RSA_CAMELLIA_128_SHA:
case SSL_EDH_RSA_CAMELLIA_128_SHA:
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_CAMELLIA_128_SHA256:
+ case SSL_EDH_RSA_CAMELLIA_128_SHA256:
+#endif
camellia_setkey_enc( (camellia_context *) ssl->ctx_enc, key1, 128 );
camellia_setkey_dec( (camellia_context *) ssl->ctx_dec, key2, 128 );
break;
case SSL_RSA_CAMELLIA_256_SHA:
case SSL_EDH_RSA_CAMELLIA_256_SHA:
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_CAMELLIA_256_SHA256:
+ case SSL_EDH_RSA_CAMELLIA_256_SHA256:
+#endif
camellia_setkey_enc( (camellia_context *) ssl->ctx_enc, key1, 256 );
camellia_setkey_dec( (camellia_context *) ssl->ctx_dec, key2, 256 );
break;
@@ -755,7 +799,11 @@ static int ssl_encrypt_buf( ssl_context *ssl )
if ( ssl->session->ciphersuite == SSL_RSA_AES_128_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA ||
ssl->session->ciphersuite == SSL_RSA_AES_256_SHA ||
- ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA)
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA ||
+ ssl->session->ciphersuite == SSL_RSA_AES_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_RSA_AES_256_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA256 )
{
aes_crypt_cbc( (aes_context *) ssl->ctx_enc,
AES_ENCRYPT, enc_msglen,
@@ -768,7 +816,11 @@ static int ssl_encrypt_buf( ssl_context *ssl )
if ( ssl->session->ciphersuite == SSL_RSA_CAMELLIA_128_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA ||
ssl->session->ciphersuite == SSL_RSA_CAMELLIA_256_SHA ||
- ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA)
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA ||
+ ssl->session->ciphersuite == SSL_RSA_CAMELLIA_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_RSA_CAMELLIA_256_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA256 )
{
camellia_crypt_cbc( (camellia_context *) ssl->ctx_enc,
CAMELLIA_ENCRYPT, enc_msglen,
@@ -885,7 +937,11 @@ static int ssl_decrypt_buf( ssl_context *ssl )
if ( ssl->session->ciphersuite == SSL_RSA_AES_128_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA ||
ssl->session->ciphersuite == SSL_RSA_AES_256_SHA ||
- ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA)
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA ||
+ ssl->session->ciphersuite == SSL_RSA_AES_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_RSA_AES_256_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_AES_256_SHA256 )
{
aes_crypt_cbc( (aes_context *) ssl->ctx_dec,
AES_DECRYPT, dec_msglen,
@@ -898,7 +954,11 @@ static int ssl_decrypt_buf( ssl_context *ssl )
if ( ssl->session->ciphersuite == SSL_RSA_CAMELLIA_128_SHA ||
ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA ||
ssl->session->ciphersuite == SSL_RSA_CAMELLIA_256_SHA ||
- ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA)
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA ||
+ ssl->session->ciphersuite == SSL_RSA_CAMELLIA_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_128_SHA256 ||
+ ssl->session->ciphersuite == SSL_RSA_CAMELLIA_256_SHA256 ||
+ ssl->session->ciphersuite == SSL_EDH_RSA_CAMELLIA_256_SHA256 )
{
camellia_crypt_cbc( (camellia_context *) ssl->ctx_dec,
CAMELLIA_DECRYPT, dec_msglen,
@@ -2212,6 +2272,20 @@ const char *ssl_get_ciphersuite_name( const int ciphersuite_id )
case SSL_EDH_RSA_AES_256_SHA:
return( "SSL-EDH-RSA-AES-256-SHA" );
+
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_AES_128_SHA256:
+ return( "SSL-RSA-AES-128-SHA256" );
+
+ case SSL_EDH_RSA_AES_128_SHA256:
+ return( "SSL-EDH-RSA-AES-128-SHA256" );
+
+ case SSL_RSA_AES_256_SHA256:
+ return( "SSL-RSA-AES-256-SHA256" );
+
+ case SSL_EDH_RSA_AES_256_SHA256:
+ return( "SSL-EDH-RSA-AES-256-SHA256" );
+#endif
#endif
#if defined(POLARSSL_CAMELLIA_C)
@@ -2226,6 +2300,20 @@ const char *ssl_get_ciphersuite_name( const int ciphersuite_id )
case SSL_EDH_RSA_CAMELLIA_256_SHA:
return( "SSL-EDH-RSA-CAMELLIA-256-SHA" );
+
+#if defined(POLARSSL_SHA2_C)
+ case SSL_RSA_CAMELLIA_128_SHA256:
+ return( "SSL-RSA-CAMELLIA-128-SHA256" );
+
+ case SSL_EDH_RSA_CAMELLIA_128_SHA256:
+ return( "SSL-EDH-RSA-CAMELLIA-128-SHA256" );
+
+ case SSL_RSA_CAMELLIA_256_SHA256:
+ return( "SSL-RSA-CAMELLIA-256-SHA256" );
+
+ case SSL_EDH_RSA_CAMELLIA_256_SHA256:
+ return( "SSL-EDH-RSA-CAMELLIA-256-SHA256" );
+#endif
#endif
#if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
@@ -2278,6 +2366,17 @@ int ssl_get_ciphersuite_id( const char *ciphersuite_name )
return( SSL_RSA_AES_256_SHA );
if (0 == strcasecmp(ciphersuite_name, "SSL-EDH-RSA-AES-256-SHA"))
return( SSL_EDH_RSA_AES_256_SHA );
+
+#if defined(POLARSSL_SHA2_C)
+ if (0 == strcasecmp(ciphersuite_name, "SSL-RSA-AES-128-SHA256"))
+ return( SSL_RSA_AES_128_SHA256 );
+ if (0 == strcasecmp(ciphersuite_name, "SSL-EDH-RSA-AES-128-SHA256"))
+ return( SSL_EDH_RSA_AES_128_SHA256 );
+ if (0 == strcasecmp(ciphersuite_name, "SSL-RSA-AES-256-SHA256"))
+ return( SSL_RSA_AES_256_SHA256 );
+ if (0 == strcasecmp(ciphersuite_name, "SSL-EDH-RSA-AES-256-SHA256"))
+ return( SSL_EDH_RSA_AES_256_SHA256 );
+#endif
#endif
#if defined(POLARSSL_CAMELLIA_C)
@@ -2289,6 +2388,17 @@ int ssl_get_ciphersuite_id( const char *ciphersuite_name )
return( SSL_RSA_CAMELLIA_256_SHA );
if (0 == strcasecmp(ciphersuite_name, "SSL-EDH-RSA-CAMELLIA-256-SHA"))
return( SSL_EDH_RSA_CAMELLIA_256_SHA );
+
+#if defined(POLARSSL_SHA2_C)
+ if (0 == strcasecmp(ciphersuite_name, "SSL-RSA-CAMELLIA-128-SHA256"))
+ return( SSL_RSA_CAMELLIA_128_SHA256 );
+ if (0 == strcasecmp(ciphersuite_name, "SSL-EDH-RSA-CAMELLIA-128-SHA256"))
+ return( SSL_EDH_RSA_CAMELLIA_128_SHA256 );
+ if (0 == strcasecmp(ciphersuite_name, "SSL-RSA-CAMELLIA-256-SHA256"))
+ return( SSL_RSA_CAMELLIA_256_SHA256 );
+ if (0 == strcasecmp(ciphersuite_name, "SSL-EDH-RSA-CAMELLIA-256-SHA256"))
+ return( SSL_EDH_RSA_CAMELLIA_256_SHA256 );
+#endif
#endif
#if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
@@ -2343,12 +2453,20 @@ int ssl_default_ciphersuites[] =
{
#if defined(POLARSSL_DHM_C)
#if defined(POLARSSL_AES_C)
- SSL_EDH_RSA_AES_128_SHA,
+#if defined(POLARSSL_SHA2_C)
+ SSL_EDH_RSA_AES_256_SHA256,
+ SSL_EDH_RSA_AES_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_EDH_RSA_AES_256_SHA,
+ SSL_EDH_RSA_AES_128_SHA,
#endif
#if defined(POLARSSL_CAMELLIA_C)
- SSL_EDH_RSA_CAMELLIA_128_SHA,
+#if defined(POLARSSL_SHA2_C)
+ SSL_EDH_RSA_CAMELLIA_256_SHA256,
+ SSL_EDH_RSA_CAMELLIA_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_EDH_RSA_CAMELLIA_256_SHA,
+ SSL_EDH_RSA_CAMELLIA_128_SHA,
#endif
#if defined(POLARSSL_DES_C)
SSL_EDH_RSA_DES_168_SHA,
@@ -2356,15 +2474,27 @@ int ssl_default_ciphersuites[] =
#endif
#if defined(POLARSSL_AES_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_AES_256_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_AES_256_SHA,
#endif
#if defined(POLARSSL_CAMELLIA_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_CAMELLIA_256_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_CAMELLIA_256_SHA,
#endif
#if defined(POLARSSL_AES_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_AES_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_AES_128_SHA,
#endif
#if defined(POLARSSL_CAMELLIA_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_CAMELLIA_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_CAMELLIA_128_SHA,
#endif
#if defined(POLARSSL_DES_C)
diff --git a/programs/ssl/ssl_server.c b/programs/ssl/ssl_server.c
index f3ad42f22..833c74a69 100644
--- a/programs/ssl/ssl_server.c
+++ b/programs/ssl/ssl_server.c
@@ -72,21 +72,64 @@ char *my_dhm_G = "4";
*/
int my_ciphersuites[] =
{
+#if defined(POLARSSL_DHM_C)
+#if defined(POLARSSL_AES_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_EDH_RSA_AES_256_SHA256,
+ SSL_EDH_RSA_AES_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_EDH_RSA_AES_256_SHA,
- SSL_EDH_RSA_CAMELLIA_256_SHA,
SSL_EDH_RSA_AES_128_SHA,
+#endif
+#if defined(POLARSSL_CAMELLIA_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_EDH_RSA_CAMELLIA_256_SHA256,
+ SSL_EDH_RSA_CAMELLIA_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
+ SSL_EDH_RSA_CAMELLIA_256_SHA,
SSL_EDH_RSA_CAMELLIA_128_SHA,
+#endif
+#if defined(POLARSSL_DES_C)
SSL_EDH_RSA_DES_168_SHA,
+#endif
+#endif
+
+#if defined(POLARSSL_AES_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_AES_256_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_AES_256_SHA,
+#endif
+#if defined(POLARSSL_CAMELLIA_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_CAMELLIA_256_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_CAMELLIA_256_SHA,
+#endif
+#if defined(POLARSSL_AES_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_AES_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_AES_128_SHA,
+#endif
+#if defined(POLARSSL_CAMELLIA_C)
+#if defined(POLARSSL_SHA2_C)
+ SSL_RSA_CAMELLIA_128_SHA256,
+#endif /* POLARSSL_SHA2_C */
SSL_RSA_CAMELLIA_128_SHA,
+#endif
+#if defined(POLARSSL_DES_C)
SSL_RSA_DES_168_SHA,
+#endif
+#if defined(POLARSSL_ARC4_C)
SSL_RSA_RC4_128_SHA,
SSL_RSA_RC4_128_MD5,
+#endif
#if defined(POLARSSL_ENABLE_WEAK_CIPHERSUITES)
+#if defined(POLARSSL_DES_C)
SSL_EDH_RSA_DES_SHA,
SSL_RSA_DES_SHA,
+#endif
#if defined(POLARSSL_CIPHER_NULL_CIPHER)
SSL_RSA_NULL_MD5,
SSL_RSA_NULL_SHA,
diff --git a/tests/compat.sh b/tests/compat.sh
index 0495ad382..ac41ec3b5 100644
--- a/tests/compat.sh
+++ b/tests/compat.sh
@@ -1,19 +1,21 @@
killall -q openssl ssl_server
-#MODES="ssl2 ssl3 tls1 tls1_1 tls1_2"
-MODES=tls1_2
+MODES="ssl3 tls1 tls1_1 tls1_2"
+#VERIFY="YES"
+VERIFY=""
+
+if [ "X$VERIFY" = "XYES" ];
+then
+ P_CLIENT_ARGS="crt_file=data_files/server2.crt key_file=data_files/server2.key"
+ O_SERVER_ARGS="-verify 10"
+fi
for MODE in $MODES;
do
echo "Running for $MODE"
echo "-----------"
-openssl s_server -cert data_files/server2.crt -key data_files/server2.key -www -quiet -cipher NULL,ALL -$MODE &
-PROCESS_ID=$!
-
-sleep 1
-
-CIPHERS=" \
+P_CIPHERS=" \
SSL-EDH-RSA-AES-128-SHA \
SSL-EDH-RSA-AES-256-SHA \
SSL-EDH-RSA-CAMELLIA-128-SHA \
@@ -32,10 +34,52 @@ CIPHERS=" \
SSL-EDH-RSA-DES-SHA \
"
-# Not supported by OpenSSL: SSL-RSA-NULL-SHA256
-for i in $CIPHERS;
+O_CIPHERS=" \
+ DHE-RSA-AES128-SHA \
+ DHE-RSA-AES256-SHA \
+ DHE-RSA-CAMELLIA128-SHA \
+ DHE-RSA-CAMELLIA256-SHA \
+ EDH-RSA-DES-CBC3-SHA \
+ AES256-SHA \
+ CAMELLIA256-SHA \
+ AES128-SHA \
+ CAMELLIA128-SHA \
+ DES-CBC3-SHA \
+ RC4-SHA \
+ RC4-MD5 \
+ NULL-MD5 \
+ NULL-SHA \
+ DES-CBC-SHA \
+ EDH-RSA-DES-CBC-SHA \
+ "
+
+if [ "$MODE" = "tls1_2" ];
+then
+ P_CIPHERS="$P_CIPHERS \
+ SSL-RSA-NULL-SHA256 \
+ SSL-RSA-AES-128-SHA256 \
+ SSL-EDH-RSA-AES-128-SHA256 \
+ SSL-RSA-AES-256-SHA256 \
+ SSL-EDH-RSA-AES-256-SHA256 \
+ "
+
+ O_CIPHERS="$O_CIPHERS \
+ NULL-SHA256 \
+ AES128-SHA256 \
+ DHE-RSA-AES128-SHA256 \
+ AES256-SHA256 \
+ DHE-RSA-AES256-SHA256 \
+ "
+fi
+
+openssl s_server -cert data_files/server2.crt -key data_files/server2.key -www -quiet -cipher NULL,ALL $O_SERVER_ARGS -$MODE &
+PROCESS_ID=$!
+
+sleep 1
+
+for i in $P_CIPHERS;
do
- RESULT="$( ../programs/ssl/ssl_client2 force_ciphersuite=$i )"
+ RESULT="$( ../programs/ssl/ssl_client2 $P_CLIENT_ARGS force_ciphersuite=$i )"
EXIT=$?
echo -n "OpenSSL Server - PolarSSL Client - $i : $EXIT - "
if [ "$EXIT" = "2" ];
@@ -56,27 +100,7 @@ PROCESS_ID=$!
sleep 1
-CIPHERS=" \
- DHE-RSA-AES128-SHA \
- DHE-RSA-AES256-SHA \
- DHE-RSA-CAMELLIA128-SHA \
- DHE-RSA-CAMELLIA256-SHA \
- EDH-RSA-DES-CBC3-SHA \
- AES256-SHA \
- CAMELLIA256-SHA \
- AES128-SHA \
- CAMELLIA128-SHA \
- DES-CBC3-SHA \
- RC4-SHA \
- RC4-MD5 \
- NULL-MD5 \
- NULL-SHA \
- DES-CBC-SHA \
- EDH-RSA-DES-CBC-SHA \
- "
-
-# Not supported by OpenSSL: NULL-SHA256
-for i in $CIPHERS;
+for i in $O_CIPHERS;
do
RESULT="$( ( echo -e 'GET HTTP/1.0'; echo; sleep 1 ) | openssl s_client -$MODE -cipher $i 2>&1)"
EXIT=$?
@@ -104,27 +128,20 @@ PROCESS_ID=$!
sleep 1
-CIPHERS=" \
- SSL-RSA-RC4-128-SHA \
- SSL-RSA-NULL-MD5 \
- SSL-EDH-RSA-AES-128-SHA \
- SSL-EDH-RSA-AES-256-SHA \
- SSL-EDH-RSA-CAMELLIA-128-SHA \
- SSL-EDH-RSA-CAMELLIA-256-SHA \
- SSL-EDH-RSA-DES-168-SHA \
- SSL-RSA-NULL-SHA \
- SSL-RSA-AES-256-SHA \
- SSL-RSA-CAMELLIA-256-SHA \
- SSL-RSA-AES-128-SHA \
- SSL-RSA-CAMELLIA-128-SHA \
- SSL-RSA-DES-168-SHA \
- SSL-RSA-RC4-128-MD5 \
- SSL-RSA-DES-SHA \
- SSL-EDH-RSA-DES-SHA \
- SSL-RSA-NULL-SHA256 \
- "
+# OpenSSL does not support RFC5246 Camellia ciphers with SHA256
+# Add for PolarSSL only test, which does support them.
+#
+if [ "$MODE" = "tls1_2" ];
+then
+ P_CIPHERS="$P_CIPHERS \
+ SSL-RSA-CAMELLIA-128-SHA256 \
+ SSL-EDH-RSA-CAMELLIA-128-SHA256 \
+ SSL-RSA-CAMELLIA-256-SHA256 \
+ SSL-EDH-RSA-CAMELLIA-256-SHA256 \
+ "
+fi
-for i in $CIPHERS;
+for i in $P_CIPHERS;
do
RESULT="$( ../programs/ssl/ssl_client2 force_ciphersuite=$i )"
EXIT=$?