- Added additional cases for MPI, MDx
 - Added test case set for Camellia, DES and 3-DES

diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index cea5edd..c4ef3d1 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -22,7 +22,115 @@
 
     TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
     TEST_ASSERT( mpi_write_string( &X, {radix_A}, str, &len ) == 0 );
-    TEST_ASSERT( strcmp( str, {input_A} ) == 0 );
+    TEST_ASSERT( strcasecmp( str, {input_A} ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_read_binary:input_X:radix_A:input_A
+{
+    mpi X;
+    unsigned char str[1000];
+    unsigned char buf[1000];
+    int len = 1000;
+
+    mpi_init(&X, NULL);
+
+    int input_len = unhexify( buf, {input_X} );
+
+    TEST_ASSERT( mpi_read_binary( &X, buf, input_len ) == 0 );
+    TEST_ASSERT( mpi_write_string( &X, {radix_A}, (char *) str, &len ) == 0 );
+    TEST_ASSERT( strcmp( (char *) str, {input_A} ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_write_binary:radix_X:input_X:input_A
+{
+    mpi X;
+    unsigned char str[1000];
+    unsigned char buf[1000];
+
+    memset( buf, 0x00, 1000 );
+    memset( str, 0x00, 1000 );
+
+    mpi_init(&X, NULL);
+
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    
+    int buflen = mpi_size( &X );
+    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == 0 );
+
+    hexify( str, buf, buflen );
+
+    TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_read_file:radix_X:input_file:input_A
+{
+    mpi X;
+    unsigned char str[1000];
+    unsigned char buf[1000];
+
+    memset( buf, 0x00, 1000 );
+    memset( str, 0x00, 1000 );
+
+    mpi_init(&X, NULL);
+
+    FILE *file = fopen( {input_file}, "r" );
+    TEST_ASSERT( mpi_read_file( &X, {radix_X}, file ) == 0 );
+    fclose(file);
+
+    int buflen = mpi_size( &X );
+    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == 0 );
+
+    hexify( str, buf, buflen );
+
+    TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_write_file:radix_X:input_X:output_radix:output_file
+{
+    mpi X, Y;
+    mpi_init( &X, &Y, NULL );
+
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+
+    FILE *file_out = fopen( {output_file}, "w" );
+    TEST_ASSERT( mpi_write_file( NULL, &X, {output_radix}, file_out ) == 0 );
+    fclose(file_out);
+
+    FILE *file_in = fopen( {output_file}, "r" );
+    TEST_ASSERT( mpi_read_file( &Y, {output_radix}, file_in ) == 0 );
+    fclose(file_in);
+
+    TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_lsb:radix_X:input_X:nr_bits
+{
+    mpi X;
+    mpi_init(&X, NULL);
+
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_lsb( &X ) == {nr_bits} );
+}
+END_CASE
+
+BEGIN_CASE
+mpi_msb:radix_X:input_X:nr_bits
+{
+    mpi X;
+    mpi_init(&X, NULL);
+
+    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_msb( &X ) == {nr_bits} );
 }
 END_CASE
 
@@ -93,6 +201,18 @@
 END_CASE
 
 BEGIN_CASE
+mpi_copy_self:input_X
+{
+    mpi X;
+    mpi_init(&X, NULL);
+
+    TEST_ASSERT( mpi_lset( &X, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_copy( &X, &X ) == 0 );
+    TEST_ASSERT( mpi_cmp_int( &X, {input_X} ) == 0 );
+}
+END_CASE
+
+BEGIN_CASE
 mpi_swap:input_X:input_Y
 {
     mpi X, Y, A;
@@ -382,6 +502,12 @@
 }
 END_CASE
 
+BEGIN_CASE
+mpi_selftest:
+{
+    TEST_ASSERT( mpi_self_test( 0 ) == 0 );
+}
+END_CASE
 /* Helper Code
     char str[1000];
     int len = 1000;