Add arc4 support in the cipher layer
diff --git a/library/cipher.c b/library/cipher.c
index 826d8fc..5a260a0 100644
--- a/library/cipher.c
+++ b/library/cipher.c
@@ -36,6 +36,10 @@
#include <stdlib.h>
+#if defined(POLARSSL_ARC4_C)
+#define POLARSSL_CIPHER_MODE_STREAM
+#endif
+
#if defined _MSC_VER && !defined strcasecmp
#define strcasecmp _stricmp
#endif
@@ -61,6 +65,10 @@
#endif /* defined(POLARSSL_AES_C) */
+#if defined(POLARSSL_ARC4_C)
+ POLARSSL_CIPHER_ARC4_128,
+#endif
+
#if defined(POLARSSL_CAMELLIA_C)
POLARSSL_CIPHER_CAMELLIA_128_CBC,
POLARSSL_CIPHER_CAMELLIA_192_CBC,
@@ -279,6 +287,11 @@
#endif /* defined(POLARSSL_CIPHER_MODE_CTR) */
#endif
+#if defined(POLARSSL_ARC4_C)
+ if( !strcasecmp( "ARC4-128", cipher_name ) )
+ return( cipher_info_from_type( POLARSSL_CIPHER_ARC4_128 ) );
+#endif
+
#if defined(POLARSSL_DES_C)
if( !strcasecmp( "DES-CBC", cipher_name ) )
return cipher_info_from_type( POLARSSL_CIPHER_DES_CBC );
@@ -527,6 +540,21 @@
}
#endif
+#if defined(POLARSSL_CIPHER_MODE_STREAM)
+ if( ctx->cipher_info->mode == POLARSSL_MODE_STREAM )
+ {
+ if( 0 != ( ret = ctx->cipher_info->base->stream_func( ctx->cipher_ctx,
+ ilen, input, output ) ) )
+ {
+ return ret;
+ }
+
+ *olen = ilen;
+
+ return 0;
+ }
+#endif
+
return POLARSSL_ERR_CIPHER_FEATURE_UNAVAILABLE;
}
@@ -697,6 +725,7 @@
if( POLARSSL_MODE_CFB == ctx->cipher_info->mode ||
POLARSSL_MODE_CTR == ctx->cipher_info->mode ||
+ POLARSSL_MODE_STREAM == ctx->cipher_info->mode ||
POLARSSL_MODE_NULL == ctx->cipher_info->mode )
{
return 0;