- Added SSL_RSA_CAMELLIA_128_SHA, SSL_RSA_CAMELLIA_256_SHA, SSL_EDH_RSA_CAMELLIA_256_SHA ciphersuites to SSL
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 3e70ccf..29fcffd 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -34,6 +34,7 @@
#include "polarssl/aes.h"
#include "polarssl/arc4.h"
+#include "polarssl/camellia.h"
#include "polarssl/des.h"
#include "polarssl/debug.h"
#include "polarssl/ssl.h"
@@ -255,6 +256,19 @@
break;
#endif
+#if defined(POLARSSL_CAMELLIA_C)
+ case SSL_RSA_CAMELLIA_128_SHA:
+ ssl->keylen = 16; ssl->minlen = 32;
+ ssl->ivlen = 16; ssl->maclen = 20;
+ break;
+
+ case SSL_RSA_CAMELLIA_256_SHA:
+ case SSL_EDH_RSA_CAMELLIA_256_SHA:
+ ssl->keylen = 32; ssl->minlen = 32;
+ ssl->ivlen = 16; ssl->maclen = 20;
+ break;
+#endif
+
default:
SSL_DEBUG_MSG( 1, ( "cipher %s is not available",
ssl_get_cipher( ssl ) ) );
@@ -323,6 +337,19 @@
break;
#endif
+#if defined(POLARSSL_CAMELLIA_C)
+ case SSL_RSA_CAMELLIA_128_SHA:
+ 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:
+ camellia_setkey_enc( (camellia_context *) ssl->ctx_enc, key1, 256 );
+ camellia_setkey_dec( (camellia_context *) ssl->ctx_dec, key2, 256 );
+ break;
+#endif
+
default:
return( POLARSSL_ERR_SSL_FEATURE_UNAVAILABLE );
}
@@ -538,10 +565,27 @@
case 16:
#if defined(POLARSSL_AES_C)
- aes_crypt_cbc( (aes_context *) ssl->ctx_enc,
- AES_ENCRYPT, ssl->out_msglen,
- ssl->iv_enc, ssl->out_msg, ssl->out_msg );
- break;
+ if ( ssl->session->cipher == SSL_RSA_AES_128_SHA ||
+ ssl->session->cipher == SSL_RSA_AES_256_SHA ||
+ ssl->session->cipher == SSL_EDH_RSA_AES_256_SHA)
+ {
+ aes_crypt_cbc( (aes_context *) ssl->ctx_enc,
+ AES_ENCRYPT, ssl->out_msglen,
+ ssl->iv_enc, ssl->out_msg, ssl->out_msg );
+ break;
+ }
+#endif
+
+#if defined(POLARSSL_CAMELLIA_C)
+ if ( ssl->session->cipher == SSL_RSA_CAMELLIA_128_SHA ||
+ ssl->session->cipher == SSL_RSA_CAMELLIA_256_SHA ||
+ ssl->session->cipher == SSL_EDH_RSA_CAMELLIA_256_SHA)
+ {
+ camellia_crypt_cbc( (camellia_context *) ssl->ctx_enc,
+ CAMELLIA_ENCRYPT, ssl->out_msglen,
+ ssl->iv_enc, ssl->out_msg, ssl->out_msg );
+ break;
+ }
#endif
default:
@@ -600,12 +644,29 @@
break;
#endif
-#if defined(POLARSSL_AES_C)
case 16:
- aes_crypt_cbc( (aes_context *) ssl->ctx_dec,
- AES_DECRYPT, ssl->in_msglen,
- ssl->iv_dec, ssl->in_msg, ssl->in_msg );
- break;
+#if defined(POLARSSL_AES_C)
+ if ( ssl->session->cipher == SSL_RSA_AES_128_SHA ||
+ ssl->session->cipher == SSL_RSA_AES_256_SHA ||
+ ssl->session->cipher == SSL_EDH_RSA_AES_256_SHA)
+ {
+ aes_crypt_cbc( (aes_context *) ssl->ctx_dec,
+ AES_DECRYPT, ssl->in_msglen,
+ ssl->iv_dec, ssl->in_msg, ssl->in_msg );
+ break;
+ }
+#endif
+
+#if defined(POLARSSL_CAMELLIA_C)
+ if ( ssl->session->cipher == SSL_RSA_CAMELLIA_128_SHA ||
+ ssl->session->cipher == SSL_RSA_CAMELLIA_256_SHA ||
+ ssl->session->cipher == SSL_EDH_RSA_CAMELLIA_256_SHA)
+ {
+ camellia_crypt_cbc( (camellia_context *) ssl->ctx_dec,
+ CAMELLIA_DECRYPT, ssl->in_msglen,
+ ssl->iv_dec, ssl->in_msg, ssl->in_msg );
+ break;
+ }
#endif
default:
@@ -1731,6 +1792,17 @@
return( "SSL_EDH_RSA_AES_256_SHA" );
#endif
+#if defined(POLARSSL_CAMELLIA_C)
+ case SSL_RSA_CAMELLIA_128_SHA:
+ return( "SSL_RSA_CAMELLIA_128_SHA" );
+
+ case SSL_RSA_CAMELLIA_256_SHA:
+ return( "SSL_RSA_CAMELLIA_256_SHA" );
+
+ case SSL_EDH_RSA_CAMELLIA_256_SHA:
+ return( "SSL_EDH_RSA_CAMELLIA_256_SHA" );
+#endif
+
default:
break;
}
@@ -1744,6 +1816,9 @@
#if defined(POLARSSL_AES_C)
SSL_EDH_RSA_AES_256_SHA,
#endif
+#if defined(POLARSSL_CAMELLIA_C)
+ SSL_EDH_RSA_CAMELLIA_256_SHA,
+#endif
#if defined(POLARSSL_DES_C)
SSL_EDH_RSA_DES_168_SHA,
#endif
@@ -1753,6 +1828,10 @@
SSL_RSA_AES_128_SHA,
SSL_RSA_AES_256_SHA,
#endif
+#if defined(POLARSSL_CAMELLIA_C)
+ SSL_RSA_CAMELLIA_128_SHA,
+ SSL_RSA_CAMELLIA_256_SHA,
+#endif
#if defined(POLARSSL_DES_C)
SSL_RSA_DES_168_SHA,
#endif