diff --git a/tests/suites/main_test.function b/tests/suites/main_test.function
index 88bbeb7..f90cedd 100644
--- a/tests/suites/main_test.function
+++ b/tests/suites/main_test.function
@@ -242,7 +242,7 @@
             fprintf( stdout, "-------\n" );
             fflush( stdout );
         }
-        else if( ret == 0  && test_errors == 0 )
+        else if( ret == 0 && test_errors == 0 )
         {
             fprintf( stdout, "PASS\n" );
             fflush( stdout );
diff --git a/tests/suites/test_suite_aes.function b/tests/suites/test_suite_aes.function
index ce1cb7d..747abf1 100644
--- a/tests/suites/test_suite_aes.function
+++ b/tests/suites/test_suite_aes.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/aes.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_AES_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_AES_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-aes_encrypt_ecb:hex_key_string:hex_src_string:hex_dst_string:#setkey_result
+/* BEGIN_CASE */
+void aes_encrypt_ecb( char *hex_key_string, char *hex_src_string,
+                      char *hex_dst_string, int setkey_result )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -21,22 +23,23 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    TEST_ASSERT( aes_setkey_enc( &ctx, key_str, key_len * 8 ) == {setkey_result} );
-    if( {setkey_result} == 0 )
+    TEST_ASSERT( aes_setkey_enc( &ctx, key_str, key_len * 8 ) == setkey_result );
+    if( setkey_result == 0 )
     {
         TEST_ASSERT( aes_crypt_ecb( &ctx, AES_ENCRYPT, src_str, output ) == 0 );
         hexify( dst_str, output, 16 );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-aes_decrypt_ecb:hex_key_string:hex_src_string:hex_dst_string:#setkey_result
+/* BEGIN_CASE */
+void aes_decrypt_ecb( char *hex_key_string, char *hex_src_string,
+                      char *hex_dst_string, int setkey_result )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -50,22 +53,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    TEST_ASSERT( aes_setkey_dec( &ctx, key_str, key_len * 8 ) == {setkey_result} );
-    if( {setkey_result} == 0 )
+    TEST_ASSERT( aes_setkey_dec( &ctx, key_str, key_len * 8 ) == setkey_result );
+    if( setkey_result == 0 )
     {
         TEST_ASSERT( aes_crypt_ecb( &ctx, AES_DECRYPT, src_str, output ) == 0 );
         hexify( dst_str, output, 16 );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-aes_encrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void aes_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                      char *hex_src_string, char *hex_dst_string,
+                      int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -81,23 +86,25 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    data_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    data_len = unhexify( src_str, hex_src_string );
 
     aes_setkey_enc( &ctx, key_str, key_len * 8 );
-    TEST_ASSERT( aes_crypt_cbc( &ctx, AES_ENCRYPT, data_len, iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0 )
+    TEST_ASSERT( aes_crypt_cbc( &ctx, AES_ENCRYPT, data_len, iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, data_len );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-aes_decrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void aes_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                      char *hex_src_string, char *hex_dst_string,
+                      int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -113,23 +120,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    data_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    data_len = unhexify( src_str, hex_src_string );
 
     aes_setkey_dec( &ctx, key_str, key_len * 8 );
-    TEST_ASSERT( aes_crypt_cbc( &ctx, AES_DECRYPT, data_len, iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0)
+    TEST_ASSERT( aes_crypt_cbc( &ctx, AES_DECRYPT, data_len, iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0)
     {
         hexify( dst_str, output, data_len );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-aes_encrypt_cfb128:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void aes_encrypt_cfb128( char *hex_key_string, char *hex_iv_string,
+                         char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -146,20 +154,21 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    unhexify( src_str, hex_src_string );
 
     aes_setkey_enc( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( aes_crypt_cfb128( &ctx, AES_ENCRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
     hexify( dst_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-aes_decrypt_cfb128:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void aes_decrypt_cfb128( char *hex_key_string, char *hex_iv_string,
+                         char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -176,21 +185,21 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    unhexify( src_str, hex_src_string );
 
     aes_setkey_enc( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( aes_crypt_cfb128( &ctx, AES_DECRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
     hexify( dst_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-aes_selftest:
+/* BEGIN_CASE */
+void aes_selftest()
 {
     TEST_ASSERT( aes_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_arc4.function b/tests/suites/test_suite_arc4.function
index edfe5c7..302b2e5 100644
--- a/tests/suites/test_suite_arc4.function
+++ b/tests/suites/test_suite_arc4.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/arc4.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_ARC4_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_ARC4_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-arc4_crypt:hex_src_string:hex_key_string:hex_dst_string
+/* BEGIN_CASE */
+void arc4_crypt( char *hex_src_string, char *hex_key_string,
+                 char *hex_dst_string )
 {
     unsigned char src_str[1000];
     unsigned char key_str[1000];
@@ -21,20 +23,20 @@
     memset(dst_str, 0x00, 1000);
     memset(dst_hexstr, 0x00, 2000);
 
-    src_len = unhexify( src_str, {hex_src_string} );
-    key_len = unhexify( key_str, {hex_key_string} );
+    src_len = unhexify( src_str, hex_src_string );
+    key_len = unhexify( key_str, hex_key_string );
 
     arc4_setup(&ctx, key_str, key_len);
     TEST_ASSERT( arc4_crypt(&ctx, src_len, src_str, dst_str ) == 0 );
     hexify( dst_hexstr, dst_str, src_len );
 
-    TEST_ASSERT( strcmp( (char *) dst_hexstr, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_hexstr, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-arc4_selftest:
+/* BEGIN_CASE */
+void arc4_selftest()
 {
     TEST_ASSERT( arc4_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_base64.function b/tests/suites/test_suite_base64.function
index e8f67a3..1355a96 100644
--- a/tests/suites/test_suite_base64.function
+++ b/tests/suites/test_suite_base64.function
@@ -1,32 +1,34 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/base64.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_BASE64_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_BASE64_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-base64_encode:src_string:dst_string:#dst_buf_size:#result
+/* BEGIN_CASE */
+void base64_encode( char *src_string, char *dst_string, int dst_buf_size,
+                    int result )
 {
     unsigned char src_str[1000];
     unsigned char dst_str[1000];
-    size_t len = {dst_buf_size};
+    size_t len = dst_buf_size;
 
     memset(src_str, 0x00, 1000);
     memset(dst_str, 0x00, 1000);
 
-    strcpy( (char *) src_str, {src_string} );
-    TEST_ASSERT( base64_encode( dst_str, &len, src_str, strlen( (char *) src_str ) ) == {result} );
-    if( {result} == 0 )
+    strcpy( (char *) src_str, src_string );
+    TEST_ASSERT( base64_encode( dst_str, &len, src_str, strlen( (char *) src_str ) ) == result );
+    if( result == 0 )
     {
-        TEST_ASSERT( strcmp( (char *) dst_str, {dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-base64_decode:src_string:dst_string:#result
+/* BEGIN_CASE */
+void base64_decode( char *src_string, char *dst_string, int result )
 {
     unsigned char src_str[1000];
     unsigned char dst_str[1000];
@@ -36,18 +38,18 @@
     memset(src_str, 0x00, 1000);
     memset(dst_str, 0x00, 1000);
     
-    strcpy( (char *) src_str, {src_string} );
-    TEST_ASSERT( res = base64_decode( dst_str, &len, src_str, strlen( (char *) src_str ) ) == {result} );
-    if( {result} == 0 )
+    strcpy( (char *) src_str, src_string );
+    TEST_ASSERT( res = base64_decode( dst_str, &len, src_str, strlen( (char *) src_str ) ) == result );
+    if( result == 0 )
     {
-        TEST_ASSERT( strcmp( (char *) dst_str, {dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-base64_selftest:
+/* BEGIN_CASE */
+void base64_selftest()
 {
     TEST_ASSERT( base64_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_blowfish.function b/tests/suites/test_suite_blowfish.function
index a7e6785..6bdcb65 100644
--- a/tests/suites/test_suite_blowfish.function
+++ b/tests/suites/test_suite_blowfish.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include "polarssl/blowfish.h"
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_BLOWFISH_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_BLOWFISH_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-blowfish_encrypt_ecb:hex_key_string:hex_src_string:hex_dst_string:#setkey_result
+/* BEGIN_CASE */
+void blowfish_encrypt_ecb( char *hex_key_string, char *hex_src_string,
+                           char *hex_dst_string, int setkey_result )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -21,22 +23,23 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    TEST_ASSERT( blowfish_setkey( &ctx, key_str, key_len * 8 ) == {setkey_result} );
-    if( {setkey_result} == 0 )
+    TEST_ASSERT( blowfish_setkey( &ctx, key_str, key_len * 8 ) == setkey_result );
+    if( setkey_result == 0 )
     {
         TEST_ASSERT( blowfish_crypt_ecb( &ctx, BLOWFISH_ENCRYPT, src_str, output ) == 0 );
         hexify( dst_str, output, 8 );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-blowfish_decrypt_ecb:hex_key_string:hex_src_string:hex_dst_string:#setkey_result
+/* BEGIN_CASE */
+void blowfish_decrypt_ecb( char *hex_key_string, char *hex_src_string,
+                           char *hex_dst_string, int setkey_result )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -50,22 +53,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    TEST_ASSERT( blowfish_setkey( &ctx, key_str, key_len * 8 ) == {setkey_result} );
-    if( {setkey_result} == 0 )
+    TEST_ASSERT( blowfish_setkey( &ctx, key_str, key_len * 8 ) == setkey_result );
+    if( setkey_result == 0 )
     {
         TEST_ASSERT( blowfish_crypt_ecb( &ctx, BLOWFISH_DECRYPT, src_str, output ) == 0 );
         hexify( dst_str, output, 8 );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-blowfish_encrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void blowfish_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                           char *hex_src_string, char *hex_dst_string,
+                           int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -81,24 +86,26 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    data_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    data_len = unhexify( src_str, hex_src_string );
 
     blowfish_setkey( &ctx, key_str, key_len * 8 );
 
-    TEST_ASSERT( blowfish_crypt_cbc( &ctx, BLOWFISH_ENCRYPT, data_len , iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0 )
+    TEST_ASSERT( blowfish_crypt_cbc( &ctx, BLOWFISH_ENCRYPT, data_len , iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, data_len );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-blowfish_decrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void blowfish_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                           char *hex_src_string, char *hex_dst_string,
+                           int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -114,23 +121,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    data_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    data_len = unhexify( src_str, hex_src_string );
 
     blowfish_setkey( &ctx, key_str, key_len * 8 );
-    TEST_ASSERT( blowfish_crypt_cbc( &ctx, BLOWFISH_DECRYPT, data_len , iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0)
+    TEST_ASSERT( blowfish_crypt_cbc( &ctx, BLOWFISH_DECRYPT, data_len , iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0)
     {
         hexify( dst_str, output, data_len );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-blowfish_encrypt_cfb64:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void blowfish_encrypt_cfb64( char *hex_key_string, char *hex_iv_string,
+                             char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -147,20 +155,21 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     blowfish_setkey( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( blowfish_crypt_cfb64( &ctx, BLOWFISH_ENCRYPT, src_len, &iv_offset, iv_str, src_str, output ) == 0 );
     hexify( dst_str, output, src_len );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-blowfish_decrypt_cfb64:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void blowfish_decrypt_cfb64( char *hex_key_string, char *hex_iv_string,
+                             char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -177,20 +186,21 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     blowfish_setkey( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( blowfish_crypt_cfb64( &ctx, BLOWFISH_DECRYPT, src_len, &iv_offset, iv_str, src_str, output ) == 0 );
     hexify( dst_str, output, src_len );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-blowfish_encrypt_ctr:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void blowfish_encrypt_ctr( char *hex_key_string, char *hex_iv_string,
+                           char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -209,14 +219,14 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     blowfish_setkey( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( blowfish_crypt_ctr( &ctx, src_len, &iv_offset, iv_str, stream_str, src_str, output ) == 0 );
     hexify( dst_str, output, src_len );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_camellia.function b/tests/suites/test_suite_camellia.function
index 2aa63fa..a219e7a 100644
--- a/tests/suites/test_suite_camellia.function
+++ b/tests/suites/test_suite_camellia.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/camellia.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_CAMELLIA_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_CAMELLIA_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-camellia_encrypt_ecb:hex_key_string:hex_src_string:hex_dst_string:#setkey_result
+/* BEGIN_CASE */
+void camellia_encrypt_ecb( char *hex_key_string, char *hex_src_string,
+                           char *hex_dst_string, int setkey_result )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -21,22 +23,23 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    TEST_ASSERT( camellia_setkey_enc( &ctx, key_str, key_len * 8 ) == {setkey_result} );
-    if( {setkey_result} == 0 )
+    TEST_ASSERT( camellia_setkey_enc( &ctx, key_str, key_len * 8 ) == setkey_result );
+    if( setkey_result == 0 )
     {
         TEST_ASSERT( camellia_crypt_ecb( &ctx, CAMELLIA_ENCRYPT, src_str, output ) == 0 );
         hexify( dst_str, output, 16 );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-camellia_decrypt_ecb:hex_key_string:hex_src_string:hex_dst_string:#setkey_result
+/* BEGIN_CASE */
+void camellia_decrypt_ecb( char *hex_key_string, char *hex_src_string,
+                           char *hex_dst_string, int setkey_result )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -50,22 +53,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    TEST_ASSERT( camellia_setkey_dec( &ctx, key_str, key_len * 8 ) == {setkey_result} );
-    if( {setkey_result} == 0 )
+    TEST_ASSERT( camellia_setkey_dec( &ctx, key_str, key_len * 8 ) == setkey_result );
+    if( setkey_result == 0 )
     {
         TEST_ASSERT( camellia_crypt_ecb( &ctx, CAMELLIA_DECRYPT, src_str, output ) == 0 );
         hexify( dst_str, output, 16 );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-camellia_encrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void camellia_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                           char *hex_src_string, char *hex_dst_string,
+                           int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -81,23 +86,25 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    data_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    data_len = unhexify( src_str, hex_src_string );
 
     camellia_setkey_enc( &ctx, key_str, key_len * 8 );
-    TEST_ASSERT( camellia_crypt_cbc( &ctx, CAMELLIA_ENCRYPT, data_len, iv_str, src_str, output) == {cbc_result} );
-    if( {cbc_result} == 0 )
+    TEST_ASSERT( camellia_crypt_cbc( &ctx, CAMELLIA_ENCRYPT, data_len, iv_str, src_str, output) == cbc_result );
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, data_len );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-camellia_decrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void camellia_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                           char *hex_src_string, char *hex_dst_string,
+                           int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -113,23 +120,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    data_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    data_len = unhexify( src_str, hex_src_string );
 
     camellia_setkey_dec( &ctx, key_str, key_len * 8 );
-    TEST_ASSERT( camellia_crypt_cbc( &ctx, CAMELLIA_DECRYPT, data_len, iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0 )
+    TEST_ASSERT( camellia_crypt_cbc( &ctx, CAMELLIA_DECRYPT, data_len, iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, data_len );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-camellia_encrypt_cfb128:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void camellia_encrypt_cfb128( char *hex_key_string, char *hex_iv_string,
+                              char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -146,20 +154,21 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    unhexify( src_str, hex_src_string );
 
     camellia_setkey_enc( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( camellia_crypt_cfb128( &ctx, CAMELLIA_ENCRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
     hexify( dst_str, output, 16 );
 
-    TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-camellia_decrypt_cfb128:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void camellia_decrypt_cfb128( char *hex_key_string, char *hex_iv_string,
+                              char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -176,21 +185,21 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    unhexify( src_str, hex_src_string );
 
     camellia_setkey_enc( &ctx, key_str, key_len * 8 );
     TEST_ASSERT( camellia_crypt_cfb128( &ctx, CAMELLIA_DECRYPT, 16, &iv_offset, iv_str, src_str, output ) == 0 );
     hexify( dst_str, output, 16 );
 
-    TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-camellia_selftest:
+/* BEGIN_CASE */
+void camellia_selftest()
 {
     TEST_ASSERT( camellia_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_cipher.function b/tests/suites/test_suite_cipher.function
index 6366910..1f7943a 100644
--- a/tests/suites/test_suite_cipher.function
+++ b/tests/suites/test_suite_cipher.function
@@ -1,15 +1,17 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/cipher.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_CIPHER_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_CIPHER_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-enc_dec_buf:#cipher_id:cipher_string:#key_len:#length_val:#pad_mode
+/* BEGIN_CASE */
+void enc_dec_buf( int cipher_id, char *cipher_string, int key_len,
+                  int length_val, int pad_mode )
 {
-    size_t length = {length_val};
+    size_t length = length_val;
     unsigned char key[32];
     unsigned char iv[16];
 
@@ -35,21 +37,21 @@
     memset( decbuf, 0, 64 );
 
     /* Check and get info structures */
-    cipher_info = cipher_info_from_type( {cipher_id} );
+    cipher_info = cipher_info_from_type( cipher_id );
     TEST_ASSERT( NULL != cipher_info );
-    TEST_ASSERT( cipher_info_from_string( {cipher_string} ) == cipher_info );
+    TEST_ASSERT( cipher_info_from_string( cipher_string ) == cipher_info );
 
     /* Initialise enc and dec contexts */
     TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
     TEST_ASSERT( 0 == cipher_init_ctx( &ctx_enc, cipher_info ) );
     
-    TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, {key_len}, POLARSSL_DECRYPT ) );
-    TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, {key_len}, POLARSSL_ENCRYPT ) );
+    TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, key_len, POLARSSL_DECRYPT ) );
+    TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, key_len, POLARSSL_ENCRYPT ) );
 
-    if( -1 != {pad_mode} )
+    if( -1 != pad_mode )
     {
-        TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx_dec, {pad_mode} ) );
-        TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx_enc, {pad_mode} ) );
+        TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx_dec, pad_mode ) );
+        TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx_enc, pad_mode ) );
     }
 
     TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
@@ -91,12 +93,13 @@
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx_enc ) );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-enc_fail:#cipher_id:#pad_mode:#key_len:#length_val:#ret
+/* BEGIN_CASE */
+void enc_fail( int cipher_id, int pad_mode, int key_len,
+               int length_val, int ret )
 {
-    size_t length = {length_val};
+    size_t length = length_val;
     unsigned char key[32];
     unsigned char iv[16];
 
@@ -117,26 +120,26 @@
     memset( encbuf, 0, 64 );
 
     /* Check and get info structures */
-    cipher_info = cipher_info_from_type( {cipher_id} );
+    cipher_info = cipher_info_from_type( cipher_id );
     TEST_ASSERT( NULL != cipher_info );
 
     /* Initialise context */
     TEST_ASSERT( 0 == cipher_init_ctx( &ctx, cipher_info ) );
-    TEST_ASSERT( 0 == cipher_setkey( &ctx, key, {key_len}, POLARSSL_ENCRYPT ) );
-    TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx, {pad_mode} ) );
+    TEST_ASSERT( 0 == cipher_setkey( &ctx, key, key_len, POLARSSL_ENCRYPT ) );
+    TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx, pad_mode ) );
     TEST_ASSERT( 0 == cipher_reset( &ctx, iv ) );
 
     /* encode length number of bytes from inbuf */
     TEST_ASSERT( 0 == cipher_update( &ctx, inbuf, length, encbuf, &outlen ) );
-    TEST_ASSERT( {ret} == cipher_finish( &ctx, encbuf + outlen, &outlen ) );
+    TEST_ASSERT( ret == cipher_finish( &ctx, encbuf + outlen, &outlen ) );
 
     /* done */
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx ) );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-dec_empty_buf:
+/* BEGIN_CASE */
+void dec_empty_buf()
 {
     unsigned char key[32];
     unsigned char iv[16];
@@ -175,13 +178,14 @@
 
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-enc_dec_buf_multipart:#cipher_id:#key_len:#first_length_val:#second_length_val
+/* BEGIN_CASE */
+void enc_dec_buf_multipart( int cipher_id, int key_len, int first_length_val,
+                            int second_length_val )
 {
-    size_t first_length = {first_length_val};
-    size_t second_length = {second_length_val};
+    size_t first_length = first_length_val;
+    size_t second_length = second_length_val;
     size_t length = first_length + second_length;
     unsigned char key[32];
     unsigned char iv[16];
@@ -208,14 +212,14 @@
     memset( decbuf, 0, 64 );
 
     /* Initialise enc and dec contexts */
-    cipher_info = cipher_info_from_type( {cipher_id} );
+    cipher_info = cipher_info_from_type( cipher_id );
     TEST_ASSERT( NULL != cipher_info);
     
     TEST_ASSERT( 0 == cipher_init_ctx( &ctx_dec, cipher_info ) );
     TEST_ASSERT( 0 == cipher_init_ctx( &ctx_enc, cipher_info ) );
     
-    TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, {key_len}, POLARSSL_DECRYPT ) );
-    TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, {key_len}, POLARSSL_ENCRYPT ) );
+    TEST_ASSERT( 0 == cipher_setkey( &ctx_dec, key, key_len, POLARSSL_DECRYPT ) );
+    TEST_ASSERT( 0 == cipher_setkey( &ctx_enc, key, key_len, POLARSSL_ENCRYPT ) );
 
     TEST_ASSERT( 0 == cipher_reset( &ctx_dec, iv ) );
     TEST_ASSERT( 0 == cipher_reset( &ctx_enc, iv ) );
@@ -256,26 +260,26 @@
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx_dec ) );
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx_enc ) );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-set_padding:#cipher_id:#pad_mode:#ret
+/* BEGIN_CASE */
+void set_padding( int cipher_id, int pad_mode, int ret )
 {
     const cipher_info_t *cipher_info;
     cipher_context_t ctx;
 
-    cipher_info = cipher_info_from_type( {cipher_id} );
+    cipher_info = cipher_info_from_type( cipher_id );
     TEST_ASSERT( NULL != cipher_info );
     TEST_ASSERT( 0 == cipher_init_ctx( &ctx, cipher_info ) );
 
-    TEST_ASSERT( {ret} == cipher_set_padding_mode( &ctx, {pad_mode} ) );
+    TEST_ASSERT( ret == cipher_set_padding_mode( &ctx, pad_mode ) );
 
     TEST_ASSERT( 0 == cipher_free_ctx( &ctx ) );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-check_padding:#pad_mode:input_str:#ret:#dlen_check
+/* BEGIN_CASE */
+void check_padding( int pad_mode, char *input_str, int ret, int dlen_check )
 {
     cipher_info_t cipher_info;
     cipher_context_t ctx;
@@ -287,19 +291,19 @@
     cipher_info.mode = POLARSSL_MODE_CBC;
     ctx.cipher_info = &cipher_info;
 
-    TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx, {pad_mode} ) );
+    TEST_ASSERT( 0 == cipher_set_padding_mode( &ctx, pad_mode ) );
 
-    ilen = unhexify( input, {input_str} );
+    ilen = unhexify( input, input_str );
 
-    TEST_ASSERT( {ret} == ctx.get_padding( input, ilen, &dlen ) );
-    if( 0 == {ret} )
-        TEST_ASSERT( dlen == (size_t) {dlen_check} );
+    TEST_ASSERT( ret == ctx.get_padding( input, ilen, &dlen ) );
+    if( 0 == ret )
+        TEST_ASSERT( dlen == (size_t) dlen_check );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-cipher_selftest:
+/* BEGIN_CASE */
+void cipher_selftest()
 {
     TEST_ASSERT( cipher_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_ctr_drbg.function b/tests/suites/test_suite_ctr_drbg.function
index 110eb8c..b11a7d0 100644
--- a/tests/suites/test_suite_ctr_drbg.function
+++ b/tests/suites/test_suite_ctr_drbg.function
@@ -1,4 +1,4 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/ctr_drbg.h>
 
 int test_offset;
@@ -9,14 +9,17 @@
     test_offset += 32;
     return( 0 );
 }
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_CTR_DRBG_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_CTR_DRBG_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-ctr_drbg_validate_pr:add_init_string:entropy_string:add1_string:add2_string:result_str
+/* BEGIN_CASE */
+void ctr_drbg_validate_pr( char *add_init_string, char *entropy_string,
+                           char *add1_string, char *add2_string,
+                           char *result_str )
 {
     unsigned char entropy[512];
     unsigned char add_init[512];
@@ -29,10 +32,10 @@
 
     memset( output_str, 0, 512 );
 
-    unhexify( entropy, {entropy_string} );
-    add_init_len = unhexify( add_init, {add_init_string} );
-    add1_len = unhexify( add1, {add1_string} );
-    add2_len = unhexify( add2, {add2_string} );
+    unhexify( entropy, entropy_string );
+    add_init_len = unhexify( add_init, add_init_string );
+    add1_len = unhexify( add1, add1_string );
+    add2_len = unhexify( add2, add2_string );
 
     test_offset = 0;
     TEST_ASSERT( ctr_drbg_init_entropy_len( &ctx, entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
@@ -41,12 +44,14 @@
     TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add1, add1_len ) == 0 );
     TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add2, add2_len ) == 0 );
     hexify( output_str, buf, 16 );
-    TEST_ASSERT( strcmp( (char *) output_str, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) output_str, result_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ctr_drbg_validate_nopr:add_init_string:entropy_string:add1_string:add_reseed_string:add2_string:result_str
+/* BEGIN_CASE */
+void ctr_drbg_validate_nopr( char *add_init_string, char *entropy_string,
+                             char *add1_string, char *add_reseed_string,
+                             char *add2_string, char *result_str )
 {
     unsigned char entropy[512];
     unsigned char add_init[512];
@@ -60,11 +65,11 @@
 
     memset( output_str, 0, 512 );
 
-    unhexify( entropy, {entropy_string} );
-    add_init_len = unhexify( add_init, {add_init_string} );
-    add1_len = unhexify( add1, {add1_string} );
-    add_reseed_len = unhexify( add_reseed, {add_reseed_string} );
-    add2_len = unhexify( add2, {add2_string} );
+    unhexify( entropy, entropy_string );
+    add_init_len = unhexify( add_init, add_init_string );
+    add1_len = unhexify( add1, add1_string );
+    add_reseed_len = unhexify( add_reseed, add_reseed_string );
+    add2_len = unhexify( add2, add2_string );
 
     test_offset = 0;
     TEST_ASSERT( ctr_drbg_init_entropy_len( &ctx, entropy_func, entropy, add_init, add_init_len, 32 ) == 0 );
@@ -73,6 +78,6 @@
     TEST_ASSERT( ctr_drbg_reseed( &ctx, add_reseed, add_reseed_len ) == 0 );
     TEST_ASSERT( ctr_drbg_random_with_add( &ctx, buf, 16, add2, add2_len ) == 0 );
     hexify( output_str, buf, 16 );
-    TEST_ASSERT( strcmp( (char *) output_str, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) output_str, result_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_debug.function b/tests/suites/test_suite_debug.function
index 688f82c..a355eab 100644
--- a/tests/suites/test_suite_debug.function
+++ b/tests/suites/test_suite_debug.function
@@ -1,4 +1,4 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/debug.h>
 
 struct buffer_data
@@ -15,14 +15,16 @@
     memcpy(buffer->ptr, str, strlen(str));
     buffer->ptr += strlen(str);
 }
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_DEBUG_C:POLARSSL_BIGNUM_C:POLARSSL_SSL_TLS_C:POLARSSL_RSA_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_DEBUG_C:POLARSSL_BIGNUM_C:POLARSSL_SSL_TLS_C:POLARSSL_RSA_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-debug_print_crt:crt_file:file:#line:prefix:result_str
+/* BEGIN_CASE */
+void debug_print_crt( char *crt_file, char *file, int line, char *prefix,
+                      char *result_str )
 {
     x509_cert   crt;
     ssl_context ssl;
@@ -35,17 +37,18 @@
 
     ssl_set_dbg(&ssl, string_debug, &buffer);
 
-    TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
-    debug_print_crt( &ssl, 0, {file}, {line}, {prefix}, &crt);
+    TEST_ASSERT( x509parse_crtfile( &crt, crt_file ) == 0 );
+    debug_print_crt( &ssl, 0, file, line, prefix, &crt);
 
-    TEST_ASSERT( strcmp( buffer.buf, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
 
     x509_free( &crt );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-debug_print_mpi:#radix:value:file:#line:prefix:result_str
+/* BEGIN_CASE */
+void debug_print_mpi( int radix, char *value, char *file, int line,
+                      char *prefix, char *result_str )
 {
     ssl_context ssl;
     struct buffer_data buffer;
@@ -57,15 +60,13 @@
     memset( buffer.buf, 0, 2000 );
     buffer.ptr = buffer.buf; 
 
-    TEST_ASSERT( mpi_read_string( &val, {radix}, {value} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &val, radix, value ) == 0 );
     ssl_set_dbg(&ssl, string_debug, &buffer);
 
-    debug_print_mpi( &ssl, 0, {file}, {line}, {prefix}, &val);
+    debug_print_mpi( &ssl, 0, file, line, prefix, &val);
 
-    TEST_ASSERT( strcmp( buffer.buf, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( buffer.buf, result_str ) == 0 );
 
     mpi_free( &val );
 }
-END_CASE
-
-    
+/* END_CASE */
diff --git a/tests/suites/test_suite_des.function b/tests/suites/test_suite_des.function
index 7e1a993..865a467 100644
--- a/tests/suites/test_suite_des.function
+++ b/tests/suites/test_suite_des.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/des.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_DES_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_DES_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-des_encrypt_ecb:hex_key_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void des_encrypt_ecb( char *hex_key_string, char *hex_src_string,
+                      char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -20,19 +22,20 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
     des_setkey_enc( &ctx, key_str );
     TEST_ASSERT( des_crypt_ecb( &ctx, src_str, output ) == 0 );
     hexify( dst_str, output, 8 );
 
-    TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des_decrypt_ecb:hex_key_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void des_decrypt_ecb( char *hex_key_string, char *hex_src_string,
+                      char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -45,19 +48,20 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
     des_setkey_dec( &ctx, key_str );
     TEST_ASSERT( des_crypt_ecb( &ctx, src_str, output ) == 0 );
     hexify( dst_str, output, 8 );
 
-    TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des_encrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void des_encrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                      char *hex_src_string, char *hex_dst_string, int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -73,23 +77,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     des_setkey_enc( &ctx, key_str );
-    TEST_ASSERT( des_crypt_cbc( &ctx, DES_ENCRYPT, src_len, iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0 )
+    TEST_ASSERT( des_crypt_cbc( &ctx, DES_ENCRYPT, src_len, iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, src_len );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des_decrypt_cbc:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void des_decrypt_cbc( char *hex_key_string, char *hex_iv_string,
+                      char *hex_src_string, char *hex_dst_string, int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -105,23 +110,24 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     des_setkey_dec( &ctx, key_str );
-    TEST_ASSERT( des_crypt_cbc( &ctx, DES_DECRYPT, src_len, iv_str, src_str, output ) == {cbc_result} );
-    if( {cbc_result} == 0 )
+    TEST_ASSERT( des_crypt_cbc( &ctx, DES_DECRYPT, src_len, iv_str, src_str, output ) == cbc_result );
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, src_len );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des3_encrypt_ecb:#key_count:hex_key_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void des3_encrypt_ecb( int key_count, char *hex_key_string,
+                       char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -134,12 +140,12 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    if( {key_count} == 2 )
+    if( key_count == 2 )
         des3_set2key_enc( &ctx, key_str );
-    else if( {key_count} == 3 )
+    else if( key_count == 3 )
         des3_set3key_enc( &ctx, key_str );
     else
         TEST_ASSERT( 0 );
@@ -147,12 +153,13 @@
     TEST_ASSERT( des3_crypt_ecb( &ctx, src_str, output ) == 0 );
     hexify( dst_str, output, 8 );
 
-    TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des3_decrypt_ecb:#key_count:hex_key_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void des3_decrypt_ecb( int key_count, char *hex_key_string,
+                       char *hex_src_string, char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -165,12 +172,12 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
-    if( {key_count} == 2 )
+    if( key_count == 2 )
         des3_set2key_dec( &ctx, key_str );
-    else if( {key_count} == 3 )
+    else if( key_count == 3 )
         des3_set3key_dec( &ctx, key_str );
     else
         TEST_ASSERT( 0 );
@@ -178,12 +185,14 @@
     TEST_ASSERT( des3_crypt_ecb( &ctx, src_str, output ) == 0 );
     hexify( dst_str, output, 8 );
 
-    TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des3_encrypt_cbc:#key_count:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void des3_encrypt_cbc( int key_count, char *hex_key_string,
+                       char *hex_iv_string, char *hex_src_string,
+                       char *hex_dst_string, int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -199,30 +208,32 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
-    if( {key_count} == 2 )
+    if( key_count == 2 )
         des3_set2key_enc( &ctx, key_str );
-    else if( {key_count} == 3 )
+    else if( key_count == 3 )
         des3_set3key_enc( &ctx, key_str );
     else
         TEST_ASSERT( 0 );
 
-    TEST_ASSERT( des3_crypt_cbc( &ctx, DES_ENCRYPT, src_len, iv_str, src_str, output ) == {cbc_result} );
+    TEST_ASSERT( des3_crypt_cbc( &ctx, DES_ENCRYPT, src_len, iv_str, src_str, output ) == cbc_result );
 
-    if( {cbc_result} == 0 )
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, src_len );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des3_decrypt_cbc:#key_count:hex_key_string:hex_iv_string:hex_src_string:hex_dst_string:#cbc_result
+/* BEGIN_CASE */
+void des3_decrypt_cbc( int key_count, char *hex_key_string,
+                       char *hex_iv_string, char *hex_src_string,
+                       char *hex_dst_string, int cbc_result )
 {
     unsigned char key_str[100];
     unsigned char iv_str[100];
@@ -238,30 +249,30 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( iv_str, {hex_iv_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( iv_str, hex_iv_string );
+    src_len = unhexify( src_str, hex_src_string );
 
-    if( {key_count} == 2 )
+    if( key_count == 2 )
         des3_set2key_dec( &ctx, key_str );
-    else if( {key_count} == 3 )
+    else if( key_count == 3 )
         des3_set3key_dec( &ctx, key_str );
     else
         TEST_ASSERT( 0 );
 
-    TEST_ASSERT( des3_crypt_cbc( &ctx, DES_DECRYPT, src_len, iv_str, src_str, output ) == {cbc_result} );
+    TEST_ASSERT( des3_crypt_cbc( &ctx, DES_DECRYPT, src_len, iv_str, src_str, output ) == cbc_result );
 
-    if( {cbc_result} == 0 )
+    if( cbc_result == 0 )
     {
         hexify( dst_str, output, src_len );
 
-        TEST_ASSERT( strcasecmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) dst_str, hex_dst_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des_key_parity_run:
+/* BEGIN_CASE */
+void des_key_parity_run()
 {
     int i, j, cnt;
     unsigned char key[DES_KEY_SIZE];
@@ -301,11 +312,11 @@
         TEST_ASSERT( des_key_check_key_parity( key ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-des_selftest:
+/* BEGIN_CASE */
+void des_selftest()
 {
     TEST_ASSERT( des_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_dhm.function b/tests/suites/test_suite_dhm.function
index e3c8617..e6524cc 100644
--- a/tests/suites/test_suite_dhm.function
+++ b/tests/suites/test_suite_dhm.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/dhm.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_DHM_C:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_DHM_C:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-dhm_do_dhm:#NOTUSED:#radix_P:input_P:#radix_G:input_G
+/* BEGIN_CASE */
+void dhm_do_dhm( int NOTUSED, int radix_P, char *input_P,
+                 int radix_G, char *input_G )
 {
     dhm_context ctx_srv;
     dhm_context ctx_cli;
@@ -33,8 +35,8 @@
     memset( sec_cli, 0x00, 1000 );
     memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
 
-    TEST_ASSERT( mpi_read_string( &ctx_srv.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx_srv.G, {radix_G}, {input_G} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx_srv.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx_srv.G, radix_G, input_G ) == 0 );
     x_size = mpi_size( &ctx_srv.P );
 
     TEST_ASSERT( dhm_make_params( &ctx_srv, x_size, ske, &ske_len, &rnd_pseudo_rand, &rnd_info ) == 0 );
@@ -57,4 +59,4 @@
     dhm_free( &ctx_srv );
     dhm_free( &ctx_cli );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_ecdh.function b/tests/suites/test_suite_ecdh.function
index 12a3b1d..6acf4df 100644
--- a/tests/suites/test_suite_ecdh.function
+++ b/tests/suites/test_suite_ecdh.function
@@ -1,13 +1,14 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/ecdh.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_ECDH_C:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_ECDH_C:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-ecdh_primitive_random:#id
+/* BEGIN_CASE */
+void ecdh_primitive_random( int id )
 {
     ecp_group grp;
     ecp_point qA, qB;
@@ -20,7 +21,7 @@
     mpi_init( &zA ); mpi_init( &zB );
     memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
     TEST_ASSERT( ecdh_gen_public( &grp, &dA, &qA, &rnd_pseudo_rand, &rnd_info )
                  == 0 );
@@ -36,10 +37,12 @@
     mpi_free( &dA ); mpi_free( &dB );
     mpi_free( &zA ); mpi_free( &zB );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecdh_primitive_testvec:#id:dA_str:xA_str:yA_str:dB_str:xB_str:yB_str:z_str
+/* BEGIN_CASE */
+void ecdh_primitive_testvec( int id, char *dA_str, char *xA_str, char *yA_str,
+                             char *dB_str, char *xB_str, char *yB_str,
+                             char *z_str )
 {
     ecp_group grp;
     ecp_point qA, qB;
@@ -50,23 +53,23 @@
     mpi_init( &dA ); mpi_init( &dB );
     mpi_init( &zA ); mpi_init( &zB ); mpi_init( &check );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
-    TEST_ASSERT( ecdh_gen_public( &grp, &dA, &qA, &not_rnd, {dA_str} ) == 0 );
+    TEST_ASSERT( ecdh_gen_public( &grp, &dA, &qA, &not_rnd, dA_str ) == 0 );
     TEST_ASSERT( ! ecp_is_zero( &qA ) );
-    TEST_ASSERT( mpi_read_string( &check, 16, {xA_str} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &check, 16, xA_str ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &qA.X, &check ) == 0 );
-    TEST_ASSERT( mpi_read_string( &check, 16, {yA_str} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &check, 16, yA_str ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &qA.Y, &check ) == 0 );
 
-    TEST_ASSERT( ecdh_gen_public( &grp, &dB, &qB, &not_rnd, {dB_str} ) == 0 );
+    TEST_ASSERT( ecdh_gen_public( &grp, &dB, &qB, &not_rnd, dB_str ) == 0 );
     TEST_ASSERT( ! ecp_is_zero( &qB ) );
-    TEST_ASSERT( mpi_read_string( &check, 16, {xB_str} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &check, 16, xB_str ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &qB.X, &check ) == 0 );
-    TEST_ASSERT( mpi_read_string( &check, 16, {yB_str} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &check, 16, yB_str ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &qB.Y, &check ) == 0 );
 
-    TEST_ASSERT( mpi_read_string( &check, 16, {z_str} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &check, 16, z_str ) == 0 );
     TEST_ASSERT( ecdh_compute_shared( &grp, &zA, &qB, &dA ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &zA, &check ) == 0 );
     TEST_ASSERT( ecdh_compute_shared( &grp, &zB, &qA, &dB ) == 0 );
@@ -77,10 +80,10 @@
     mpi_free( &dA ); mpi_free( &dB );
     mpi_free( &zA ); mpi_free( &zB ); mpi_free( &check );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecdh_exchange:#id
+/* BEGIN_CASE */
+void ecdh_exchange( int id )
 {
     ecdh_context srv, cli;
     unsigned char buf[1000];
@@ -92,7 +95,7 @@
     ecdh_init( &cli );
     memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
 
-    TEST_ASSERT( ecp_use_known_dp( &srv.grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &srv.grp, id ) == 0 );
 
     memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
     TEST_ASSERT( ecdh_make_params( &srv, &len, buf, 1000,
@@ -111,4 +114,4 @@
     ecdh_free( &srv );
     ecdh_free( &cli );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_ecdsa.function b/tests/suites/test_suite_ecdsa.function
index 3cb1b9f..5e1ba64 100644
--- a/tests/suites/test_suite_ecdsa.function
+++ b/tests/suites/test_suite_ecdsa.function
@@ -1,13 +1,14 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/ecdsa.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_ECDSA_C:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_ECDSA_C:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-ecdsa_prim_random:#id
+/* BEGIN_CASE */
+void ecdsa_prim_random( int id )
 {
     ecp_group grp;
     ecp_point Q;
@@ -23,7 +24,7 @@
 
     /* prepare material for signature */
     TEST_ASSERT( rnd_pseudo_rand( &rnd_info, buf, sizeof( buf ) ) == 0 );
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
     TEST_ASSERT( ecp_gen_keypair( &grp, &d, &Q, &rnd_pseudo_rand, &rnd_info )
                  == 0 );
 
@@ -35,10 +36,12 @@
     ecp_point_free( &Q );
     mpi_free( &d ); mpi_free( &r ); mpi_free( &s );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecdsa_prim_test_vectors:#id:d_str:xQ_str:yQ_str:k_str:hash_str:r_str:s_str
+/* BEGIN_CASE */
+void ecdsa_prim_test_vectors( int id, char *d_str, char *xQ_str, char *yQ_str,
+                              char *k_str, char *hash_str, char *r_str,
+                              char *s_str )
 {
     ecp_group grp;
     ecp_point Q;
@@ -52,15 +55,15 @@
     mpi_init( &r_check ); mpi_init( &s_check );
     memset( buf, 0, sizeof( buf ) );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
-    TEST_ASSERT( ecp_point_read_string( &Q, 16, {xQ_str}, {yQ_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &d, 16, {d_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &r_check, 16, {r_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &s_check, 16, {s_str} ) == 0 );
-    len = unhexify(buf, {hash_str});
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
+    TEST_ASSERT( ecp_point_read_string( &Q, 16, xQ_str, yQ_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &d, 16, d_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &r_check, 16, r_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &s_check, 16, s_str ) == 0 );
+    len = unhexify(buf, hash_str);
 
     TEST_ASSERT( ecdsa_sign( &grp, &r, &s, &d, buf, len,
-                &not_rnd, {k_str} ) == 0 );
+                &not_rnd, k_str ) == 0 );
 
     TEST_ASSERT( mpi_cmp_mpi( &r, &r_check ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &s, &s_check ) == 0 );
@@ -72,4 +75,4 @@
     mpi_free( &d ); mpi_free( &r ); mpi_free( &s );
     mpi_free( &r_check ); mpi_free( &s_check );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_ecp.function b/tests/suites/test_suite_ecp.function
index 3b2d70b..042077e 100644
--- a/tests/suites/test_suite_ecp.function
+++ b/tests/suites/test_suite_ecp.function
@@ -1,15 +1,17 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/ecp.h>
 
 #define POLARSSL_ECP_PF_UNKNOWN     -1
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_ECP_C:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-ecp_small_add:#a_zero:x_a:y_a:#b_zero:x_b:y_b:#c_zero:#x_c:#y_c
+/* BEGIN_CASE */
+void ecp_small_add( int a_zero, char *x_a, char *y_a, int b_zero, char *x_b,
+                    char *y_b, int c_zero, int x_c, int y_c )
 {
     ecp_group grp;
     ecp_point A, B, C;
@@ -20,43 +22,44 @@
     TEST_ASSERT( ecp_group_read_string( &grp, 10,
                 "47", "4", "17", "42", "13" ) == 0 );
 
-    if( {a_zero} )
+    if( a_zero )
         ecp_set_zero( &A );
     else
-        TEST_ASSERT( ecp_point_read_string( &A, 10, {x_a}, {y_a} ) == 0 );
+        TEST_ASSERT( ecp_point_read_string( &A, 10, x_a, y_a ) == 0 );
 
-    if( {b_zero} )
+    if( b_zero )
         ecp_set_zero( &B );
     else
-        TEST_ASSERT( ecp_point_read_string( &B, 10, {x_b}, {y_b} ) == 0 );
+        TEST_ASSERT( ecp_point_read_string( &B, 10, x_b, y_b ) == 0 );
 
     TEST_ASSERT( ecp_add( &grp, &C, &A, &B ) == 0 );
 
-    if( {c_zero} )
+    if( c_zero )
         TEST_ASSERT( mpi_cmp_int( &C.Z, 0 ) == 0 );
     else
     {
-        TEST_ASSERT( mpi_cmp_int( &C.X, {x_c} ) == 0 );
-        TEST_ASSERT( mpi_cmp_int( &C.Y, {y_c} ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &C.X, x_c ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &C.Y, y_c ) == 0 );
     }
 
     TEST_ASSERT( ecp_add( &grp, &C, &B, &A ) == 0 );
 
-    if( {c_zero} )
+    if( c_zero )
         TEST_ASSERT( mpi_cmp_int( &C.Z, 0 ) == 0 );
     else
     {
-        TEST_ASSERT( mpi_cmp_int( &C.X, {x_c} ) == 0 );
-        TEST_ASSERT( mpi_cmp_int( &C.Y, {y_c} ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &C.X, x_c ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &C.Y, y_c ) == 0 );
     }
 
     ecp_group_free( &grp );
     ecp_point_free( &A ); ecp_point_free( &B ); ecp_point_free( &C );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_small_sub:#a_zero:x_a:y_a:#b_zero:x_b:y_b:#c_zero:#x_c:#y_c
+/* BEGIN_CASE */
+void ecp_small_sub( int a_zero, char *x_a, char *y_a, int b_zero, char *x_b,
+                    char *y_b, int c_zero, int x_c, int y_c )
 {
     ecp_group grp;
     ecp_point A, B, C;
@@ -67,33 +70,33 @@
     TEST_ASSERT( ecp_group_read_string( &grp, 10,
                 "47", "4", "17", "42", "13" ) == 0 );
 
-    if( {a_zero} )
+    if( a_zero )
         ecp_set_zero( &A );
     else
-        TEST_ASSERT( ecp_point_read_string( &A, 10, {x_a}, {y_a} ) == 0 );
+        TEST_ASSERT( ecp_point_read_string( &A, 10, x_a, y_a ) == 0 );
 
-    if( {b_zero} )
+    if( b_zero )
         ecp_set_zero( &B );
     else
-        TEST_ASSERT( ecp_point_read_string( &B, 10, {x_b}, {y_b} ) == 0 );
+        TEST_ASSERT( ecp_point_read_string( &B, 10, x_b, y_b ) == 0 );
 
     TEST_ASSERT( ecp_sub( &grp, &C, &A, &B ) == 0 );
 
-    if( {c_zero} )
+    if( c_zero )
         TEST_ASSERT( mpi_cmp_int( &C.Z, 0 ) == 0 );
     else
     {
-        TEST_ASSERT( mpi_cmp_int( &C.X, {x_c} ) == 0 );
-        TEST_ASSERT( mpi_cmp_int( &C.Y, {y_c} ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &C.X, x_c ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &C.Y, y_c ) == 0 );
     }
 
     ecp_group_free( &grp );
     ecp_point_free( &A ); ecp_point_free( &B ); ecp_point_free( &C );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_small_mul:#m_str:#r_zero:#x_r:#y_r:#ret
+/* BEGIN_CASE */
+void ecp_small_mul( int m_str, int r_zero, int x_r, int y_r, int ret )
 {
     ecp_group grp;
     ecp_point R;
@@ -106,26 +109,26 @@
     TEST_ASSERT( ecp_group_read_string( &grp, 10,
                 "47", "4", "17", "42", "13" ) == 0 );
 
-    TEST_ASSERT( mpi_lset( &m, {m_str} ) == 0 );
+    TEST_ASSERT( mpi_lset( &m, m_str ) == 0 );
 
-    TEST_ASSERT( ecp_mul( &grp, &R, &m, &grp.G ) == {ret} );
+    TEST_ASSERT( ecp_mul( &grp, &R, &m, &grp.G ) == ret );
 
-    if( {r_zero} )
+    if( r_zero )
         TEST_ASSERT( mpi_cmp_int( &R.Z, 0 ) == 0 );
     else
     {
-        TEST_ASSERT( mpi_cmp_int( &R.X, {x_r} ) == 0 );
-        TEST_ASSERT( mpi_cmp_int( &R.Y, {y_r} ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &R.X, x_r ) == 0 );
+        TEST_ASSERT( mpi_cmp_int( &R.Y, y_r ) == 0 );
     }
 
     ecp_group_free( &grp );
     ecp_point_free( &R );
     mpi_free( &m );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_small_check_pub:#x:#y:#z:#ret
+/* BEGIN_CASE */
+void ecp_small_check_pub( int x, int y, int z, int ret )
 {
     ecp_group grp;
     ecp_point P;
@@ -136,19 +139,21 @@
     TEST_ASSERT( ecp_group_read_string( &grp, 10,
                 "47", "4", "17", "42", "13" ) == 0 );
 
-    TEST_ASSERT( mpi_lset( &P.X, {x} ) == 0 );
-    TEST_ASSERT( mpi_lset( &P.Y, {y} ) == 0 );
-    TEST_ASSERT( mpi_lset( &P.Z, {z} ) == 0 );
+    TEST_ASSERT( mpi_lset( &P.X, x ) == 0 );
+    TEST_ASSERT( mpi_lset( &P.Y, y ) == 0 );
+    TEST_ASSERT( mpi_lset( &P.Z, z ) == 0 );
 
-    TEST_ASSERT( ecp_check_pubkey( &grp, &P ) == {ret} );
+    TEST_ASSERT( ecp_check_pubkey( &grp, &P ) == ret );
 
     ecp_group_free( &grp );
     ecp_point_free( &P );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_test_vect:#id:dA_str:xA_str:yA_str:dB_str:xB_str:yB_str:xZ_str:yZ_str
+/* BEGIN_CASE */
+void ecp_test_vect( int id, char *dA_str, char *xA_str, char *yA_str,
+                    char *dB_str, char *xB_str, char *yB_str, char *xZ_str,
+                    char *yZ_str )
 {
     ecp_group grp;
     ecp_point R;
@@ -158,18 +163,18 @@
     mpi_init( &dA ); mpi_init( &xA ); mpi_init( &yA ); mpi_init( &dB );
     mpi_init( &xB ); mpi_init( &yB ); mpi_init( &xZ ); mpi_init( &yZ );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
     TEST_ASSERT( ecp_check_pubkey( &grp, &grp.G ) == 0 );
 
-    TEST_ASSERT( mpi_read_string( &dA, 16, {dA_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &xA, 16, {xA_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &yA, 16, {yA_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &dB, 16, {dB_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &xB, 16, {xB_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &yB, 16, {yB_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &xZ, 16, {xZ_str} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &yZ, 16, {yZ_str} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &dA, 16, dA_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &xA, 16, xA_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &yA, 16, yA_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &dB, 16, dB_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &xB, 16, xB_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &yB, 16, yB_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &xZ, 16, xZ_str ) == 0 );
+    TEST_ASSERT( mpi_read_string( &yZ, 16, yZ_str ) == 0 );
 
     TEST_ASSERT( ecp_mul( &grp, &R, &dA, &grp.G ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &R.X, &xA ) == 0 );
@@ -193,10 +198,10 @@
     mpi_free( &dA ); mpi_free( &xA ); mpi_free( &yA ); mpi_free( &dB );
     mpi_free( &xB ); mpi_free( &yB ); mpi_free( &xZ ); mpi_free( &yZ );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_fast_mod:#id:N_str
+/* BEGIN_CASE */
+void ecp_fast_mod( int id, char *N_str )
 {
     ecp_group grp;
     mpi N, R;
@@ -204,8 +209,8 @@
     mpi_init( &N ); mpi_init( &R );
     ecp_group_init( &grp );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &N, 16, {N_str} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
+    TEST_ASSERT( mpi_read_string( &N, 16, N_str ) == 0 );
 
     /*
      * Store correct result before we touch N
@@ -224,10 +229,11 @@
     mpi_free( &N ); mpi_free( &R );
     ecp_group_free( &grp );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_write_binary:#id:x:y:z:#format:out:#blen:#ret
+/* BEGIN_CASE */
+void ecp_write_binary( int id, char *x, char *y, char *z, int format,
+                       char *out, int blen, int ret )
 {
     ecp_group grp;
     ecp_point P;
@@ -239,27 +245,28 @@
 
     ecp_group_init( &grp ); ecp_point_init( &P );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
-    TEST_ASSERT( mpi_read_string( &P.X, 16, {x} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &P.Y, 16, {y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &P.Z, 16, {z} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &P.X, 16, x ) == 0 );
+    TEST_ASSERT( mpi_read_string( &P.Y, 16, y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &P.Z, 16, z ) == 0 );
 
-    TEST_ASSERT( ecp_point_write_binary( &grp, &P, {format},
-                                   &olen, buf, {blen} ) == {ret} );
+    TEST_ASSERT( ecp_point_write_binary( &grp, &P, format,
+                                   &olen, buf, blen ) == ret );
 
-    if( {ret} == 0 )
+    if( ret == 0 )
     {
         hexify( str, buf, olen );
-        TEST_ASSERT( strcasecmp( (char *) str, {out} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) str, out ) == 0 );
     }
 
     ecp_group_free( &grp ); ecp_point_free( &P );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_read_binary:#id:input:x:y:z:#ret
+/* BEGIN_CASE */
+void ecp_read_binary( int id, char *input, char *x, char *y, char *z,
+                      int ret )
 {
     ecp_group grp;
     ecp_point P;
@@ -272,17 +279,17 @@
     ecp_group_init( &grp ); ecp_point_init( &P );
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
-    TEST_ASSERT( mpi_read_string( &X, 16, {x} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, 16, {y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Z, 16, {z} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, 16, x ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, 16, y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Z, 16, z ) == 0 );
 
-    ilen = unhexify( buf, {input} );
+    ilen = unhexify( buf, input );
 
-    TEST_ASSERT( ecp_point_read_binary( &grp, &P, buf, ilen ) == {ret} );
+    TEST_ASSERT( ecp_point_read_binary( &grp, &P, buf, ilen ) == ret );
 
-    if( {ret} == 0 )
+    if( ret == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &P.X, &X ) == 0 );
         TEST_ASSERT( mpi_cmp_mpi( &P.Y, &Y ) == 0 );
@@ -292,10 +299,11 @@
     ecp_group_free( &grp ); ecp_point_free( &P );
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_tls_read_point:#id:input:x:y:z:#ret
+/* BEGIN_CASE */
+void ecp_tls_read_point( int id, char *input, char *x, char *y, char *z,
+                         int ret )
 {
     ecp_group grp;
     ecp_point P;
@@ -309,17 +317,17 @@
     ecp_group_init( &grp ); ecp_point_init( &P );
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
-    TEST_ASSERT( mpi_read_string( &X, 16, {x} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, 16, {y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Z, 16, {z} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, 16, x ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, 16, y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Z, 16, z ) == 0 );
 
-    ilen = unhexify( buf, {input} );
+    ilen = unhexify( buf, input );
 
-    TEST_ASSERT( ecp_tls_read_point( &grp, &P, &vbuf, ilen ) == {ret} );
+    TEST_ASSERT( ecp_tls_read_point( &grp, &P, &vbuf, ilen ) == ret );
 
-    if( {ret} == 0 )
+    if( ret == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &P.X, &X ) == 0 );
         TEST_ASSERT( mpi_cmp_mpi( &P.Y, &Y ) == 0 );
@@ -330,10 +338,10 @@
     ecp_group_free( &grp ); ecp_point_free( &P );
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_tls_write_read_point:#id
+/* BEGIN_CASE */
+void ecp_tls_write_read_point( int id )
 {
     ecp_group grp;
     ecp_point pt;
@@ -344,7 +352,7 @@
     ecp_group_init( &grp );
     ecp_point_init( &pt );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
     memset( buf, 0x00, sizeof( buf ) ); vbuf = buf;
     TEST_ASSERT( ecp_tls_write_point( &grp, &grp.G,
@@ -381,10 +389,10 @@
     ecp_group_free( &grp );
     ecp_point_free( &pt );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_tls_read_group:record:#result:#bits
+/* BEGIN_CASE */
+void ecp_tls_read_group( char *record, int result, int bits )
 {
     ecp_group grp;
     unsigned char buf[10];
@@ -394,23 +402,23 @@
     ecp_group_init( &grp );
     memset( buf, 0x00, sizeof( buf ) );
 
-    len = unhexify( buf, {record} );
+    len = unhexify( buf, record );
 
     ret = ecp_tls_read_group( &grp, &vbuf, len );
 
-    TEST_ASSERT( ret == {result} );
+    TEST_ASSERT( ret == result );
     if( ret == 0)
     {
-        TEST_ASSERT( mpi_msb( &grp.P ) == (size_t) {bits} );
+        TEST_ASSERT( mpi_msb( &grp.P ) == (size_t) bits );
         TEST_ASSERT( *vbuf == 0x00 );
     }
 
     ecp_group_free( &grp );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_tls_write_read_group:#id
+/* BEGIN_CASE */
+void ecp_tls_write_read_group( int id )
 {
     ecp_group grp1, grp2;
     unsigned char buf[10];
@@ -422,7 +430,7 @@
     ecp_group_init( &grp2 );
     memset( buf, 0x00, sizeof( buf ) );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp1, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp1, id ) == 0 );
 
     TEST_ASSERT( ecp_tls_write_group( &grp1, &len, buf, 10 ) == 0 );
     TEST_ASSERT( ( ret = ecp_tls_read_group( &grp2, &vbuf, len ) ) == 0 );
@@ -436,10 +444,10 @@
     ecp_group_free( &grp1 );
     ecp_group_free( &grp2 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_check_privkey:#id
+/* BEGIN_CASE */
+void ecp_check_privkey( int id )
 {
     ecp_group grp;
     mpi d;
@@ -447,7 +455,7 @@
     ecp_group_init( &grp );
     mpi_init( &d );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
     TEST_ASSERT( mpi_lset( &d, 0 ) == 0 );
     TEST_ASSERT( ecp_check_privkey( &grp, &d ) == POLARSSL_ERR_ECP_GENERIC );
@@ -458,10 +466,10 @@
     ecp_group_free( &grp );
     mpi_free( &d );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_gen_keypair:#id
+/* BEGIN_CASE */
+void ecp_gen_keypair( int id )
 {
     ecp_group grp;
     ecp_point Q;
@@ -473,7 +481,7 @@
     mpi_init( &d );
     memset( &rnd_info, 0x00, sizeof( rnd_pseudo_info ) );
 
-    TEST_ASSERT( ecp_use_known_dp( &grp, {id} ) == 0 );
+    TEST_ASSERT( ecp_use_known_dp( &grp, id ) == 0 );
 
     TEST_ASSERT( ecp_gen_keypair( &grp, &d, &Q, &rnd_pseudo_rand, &rnd_info )
                  == 0 );
@@ -485,11 +493,11 @@
     ecp_point_free( &Q );
     mpi_free( &d );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-ecp_selftest:
+/* BEGIN_CASE */
+void ecp_selftest()
 {
     TEST_ASSERT( ecp_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_error.function b/tests/suites/test_suite_error.function
index d2ba86c..4129f3d 100644
--- a/tests/suites/test_suite_error.function
+++ b/tests/suites/test_suite_error.function
@@ -1,18 +1,19 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/error.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_ERROR_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_ERROR_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-error_strerror:#code:result_str
+/* BEGIN_CASE */
+void error_strerror( int code, char *result_str )
 {
     char buf[500];
 
-    error_strerror( {code}, buf, 500 );
+    error_strerror( code, buf, 500 );
 
-    TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( buf, result_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_gcm.function b/tests/suites/test_suite_gcm.function
index 1c02407..c00ec0b 100644
--- a/tests/suites/test_suite_gcm.function
+++ b/tests/suites/test_suite_gcm.function
@@ -1,13 +1,17 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/gcm.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_GCM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_GCM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-gcm_encrypt_and_tag:hex_key_string:hex_src_string:hex_iv_string:hex_add_string:hex_dst_string:#tag_len_bits:hex_tag_string:#init_result
+/* BEGIN_CASE */
+void gcm_encrypt_and_tag( char *hex_key_string, char *hex_src_string,
+                          char *hex_iv_string, char *hex_add_string,
+                          char *hex_dst_string, int tag_len_bits,
+                          char *hex_tag_string, int  init_result )
 {
     unsigned char key_str[128];
     unsigned char src_str[128];
@@ -19,7 +23,7 @@
     unsigned char tag_output[16];
     gcm_context ctx;
     unsigned int key_len;
-    size_t pt_len, iv_len, add_len, tag_len = {tag_len_bits} / 8;
+    size_t pt_len, iv_len, add_len, tag_len = tag_len_bits / 8;
 
     memset(key_str, 0x00, 128);
     memset(src_str, 0x00, 128);
@@ -30,26 +34,29 @@
     memset(output, 0x00, 128);
     memset(tag_output, 0x00, 16);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    pt_len = unhexify( src_str, {hex_src_string} );
-    iv_len = unhexify( iv_str, {hex_iv_string} );
-    add_len = unhexify( add_str, {hex_add_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    pt_len = unhexify( src_str, hex_src_string );
+    iv_len = unhexify( iv_str, hex_iv_string );
+    add_len = unhexify( add_str, hex_add_string );
 
-    TEST_ASSERT( gcm_init( &ctx, key_str, key_len * 8 ) == {init_result} );
-    if( {init_result} == 0 )
+    TEST_ASSERT( gcm_init( &ctx, key_str, key_len * 8 ) == init_result );
+    if( init_result == 0 )
     {
         TEST_ASSERT( gcm_crypt_and_tag( &ctx, GCM_ENCRYPT, pt_len, iv_str, iv_len, add_str, add_len, src_str, output, tag_len, tag_output ) == 0 );
         hexify( dst_str, output, pt_len );
         hexify( tag_str, tag_output, tag_len );
 
-        TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
-        TEST_ASSERT( strcmp( (char *) tag_str, {hex_tag_string} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
+        TEST_ASSERT( strcmp( (char *) tag_str, hex_tag_string ) == 0 );
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-gcm_decrypt_and_verify:hex_key_string:hex_src_string:hex_iv_string:hex_add_string:#tag_len_bits:hex_tag_string:pt_result:#init_result
+/* BEGIN_CASE */
+void gcm_decrypt_and_verify( char *hex_key_string, char *hex_src_string,
+                             char *hex_iv_string, char *hex_add_string,
+                             int tag_len_bits, char *hex_tag_string,
+                             char *pt_result, int init_result )
 {
     unsigned char key_str[128];
     unsigned char src_str[128];
@@ -60,7 +67,7 @@
     unsigned char output[128];
     gcm_context ctx;
     unsigned int key_len;
-    size_t pt_len, iv_len, add_len, tag_len = {tag_len_bits} / 8;
+    size_t pt_len, iv_len, add_len, tag_len = tag_len_bits / 8;
     int ret;
 
     memset(key_str, 0x00, 128);
@@ -71,18 +78,18 @@
     memset(tag_str, 0x00, 128);
     memset(output, 0x00, 128);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    pt_len = unhexify( src_str, {hex_src_string} );
-    iv_len = unhexify( iv_str, {hex_iv_string} );
-    add_len = unhexify( add_str, {hex_add_string} );
-    unhexify( tag_str, {hex_tag_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    pt_len = unhexify( src_str, hex_src_string );
+    iv_len = unhexify( iv_str, hex_iv_string );
+    add_len = unhexify( add_str, hex_add_string );
+    unhexify( tag_str, hex_tag_string );
 
-    TEST_ASSERT( gcm_init( &ctx, key_str, key_len * 8 ) == {init_result} );
-    if( {init_result} == 0 )
+    TEST_ASSERT( gcm_init( &ctx, key_str, key_len * 8 ) == init_result );
+    if( init_result == 0 )
     {
         ret = gcm_auth_decrypt( &ctx, pt_len, iv_str, iv_len, add_str, add_len, tag_str, tag_len, src_str, output );
 
-        if( strcmp( "FAIL", {pt_result} ) == 0 )
+        if( strcmp( "FAIL", pt_result ) == 0 )
         {
             TEST_ASSERT( ret == POLARSSL_ERR_GCM_AUTH_FAILED );
         }
@@ -90,15 +97,15 @@
         {
             hexify( dst_str, output, pt_len );
 
-            TEST_ASSERT( strcmp( (char *) dst_str, {pt_result} ) == 0 );
+            TEST_ASSERT( strcmp( (char *) dst_str, pt_result ) == 0 );
         }
     }
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-gcm_selftest:
+/* BEGIN_CASE */
+void gcm_selftest()
 {
     TEST_ASSERT( gcm_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_hmac_shax.function b/tests/suites/test_suite_hmac_shax.function
index d4c0fe3..d7f81d5 100644
--- a/tests/suites/test_suite_hmac_shax.function
+++ b/tests/suites/test_suite_hmac_shax.function
@@ -1,11 +1,12 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/sha1.h>
 #include <polarssl/sha256.h>
 #include <polarssl/sha512.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_CASE
-sha1_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha1_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+                char *hex_hash_string)
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -18,18 +19,19 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 41);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha1_hmac( key_str, key_len, src_str, src_len, output );
     hexify( hash_str, output, 20 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha224_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha224_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+                  char *hex_hash_string)
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -42,18 +44,19 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 57);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha256_hmac( key_str, key_len, src_str, src_len, output, 1 );
     hexify( hash_str, output, 28 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha256_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha256_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+                  char *hex_hash_string)
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -66,18 +69,19 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 65);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha256_hmac( key_str, key_len, src_str, src_len, output, 0 );
     hexify( hash_str, output, 32 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha384_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha384_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+                  char *hex_hash_string)
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -90,18 +94,19 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 97);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha512_hmac( key_str, key_len, src_str, src_len, output, 1 );
     hexify( hash_str, output, 48 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha512_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha512_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+                  char *hex_hash_string)
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -114,12 +119,12 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 129);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha512_hmac( key_str, key_len, src_str, src_len, output, 0 );
     hexify( hash_str, output, 64 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_md.function b/tests/suites/test_suite_md.function
index d336ae0..042af17 100644
--- a/tests/suites/test_suite_md.function
+++ b/tests/suites/test_suite_md.function
@@ -1,4 +1,4 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/md.h>
 #include <polarssl/md2.h>
 #include <polarssl/md4.h>
@@ -6,14 +6,15 @@
 #include <polarssl/sha1.h>
 #include <polarssl/sha256.h>
 #include <polarssl/sha512.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_MD_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_MD_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-md_text:text_md_name:text_src_string:hex_hash_string
+/* BEGIN_CASE */
+void md_text( char *text_md_name, char *text_src_string, char *hex_hash_string )
 {
     char md_name[100];
     unsigned char src_str[1000];
@@ -26,21 +27,21 @@
     memset(hash_str, 0x00, 1000);
     memset(output, 0x00, 100);
 
-    strcpy( (char *) src_str, {text_src_string} );
+    strcpy( (char *) src_str, text_src_string );
     
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string(md_name);
     TEST_ASSERT( md_info != NULL );
 
     TEST_ASSERT ( 0 == md( md_info, src_str, strlen( (char *) src_str ), output ) );
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-md_hex:text_md_name:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void md_hex( char *text_md_name, char *hex_src_string, char *hex_hash_string )
 {
     char md_name[100];
     unsigned char src_str[10000];
@@ -54,21 +55,22 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 100);
 
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string(md_name);
     TEST_ASSERT( md_info != NULL );
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
     TEST_ASSERT ( 0 == md( md_info, src_str, src_len, output ) );
 
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-md_text_multi:text_md_name:text_src_string:hex_hash_string
+/* BEGIN_CASE */
+void md_text_multi( char *text_md_name, char *text_src_string,
+                    char *hex_hash_string )
 {
     char md_name[100];
     unsigned char src_str[1000];
@@ -83,9 +85,9 @@
     memset(hash_str, 0x00, 1000);
     memset(output, 0x00, 100);
 
-    strcpy( (char *) src_str, {text_src_string} );
+    strcpy( (char *) src_str, text_src_string );
     
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string(md_name);
     TEST_ASSERT( md_info != NULL );
     TEST_ASSERT ( 0 == md_init_ctx( &ctx, md_info ) );
@@ -98,12 +100,13 @@
     
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-md_hex_multi:text_md_name:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void md_hex_multi( char *text_md_name, char *hex_src_string,
+                   char *hex_hash_string )
 {
     char md_name[100];
     unsigned char src_str[10000];
@@ -118,12 +121,12 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 100);
 
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string(md_name);
     TEST_ASSERT( md_info != NULL );
     TEST_ASSERT ( 0 == md_init_ctx( &ctx, md_info ) );
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
     
     TEST_ASSERT ( 0 == md_starts( &ctx ) );
     TEST_ASSERT ( ctx.md_ctx != NULL );
@@ -133,12 +136,13 @@
     
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-md_hmac:text_md_name:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void md_hmac( char *text_md_name, int trunc_size, char *hex_key_string,
+              char *hex_src_string, char *hex_hash_string )
 {
     char md_name[100];
     unsigned char src_str[10000];
@@ -154,22 +158,23 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 100);
 
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string( md_name );
     TEST_ASSERT( md_info != NULL );
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     TEST_ASSERT ( md_hmac( md_info, key_str, key_len, src_str, src_len, output ) == 0 );
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-md_hmac_multi:text_md_name:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void md_hmac_multi( char *text_md_name, int trunc_size, char *hex_key_string,
+                    char *hex_src_string, char *hex_hash_string )
 {
     char md_name[100];
     unsigned char src_str[10000];
@@ -186,27 +191,27 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 100);
 
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string( md_name );
     TEST_ASSERT( md_info != NULL );
     TEST_ASSERT ( 0 == md_init_ctx( &ctx, md_info ) );
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     TEST_ASSERT ( 0 == md_hmac_starts( &ctx, key_str, key_len ) );
     TEST_ASSERT ( ctx.md_ctx != NULL );
     TEST_ASSERT ( 0 == md_hmac_update( &ctx, src_str, src_len ) );
     TEST_ASSERT ( 0 == md_hmac_finish( &ctx, output ) );
     TEST_ASSERT ( 0 == md_free_ctx( &ctx ) );
-    
+
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
-BEGIN_CASE
-md_file:text_md_name:filename:hex_hash_string
+/* END_CASE */
+/* BEGIN_CASE */
+void md_file( char *text_md_name, char *filename, char *hex_hash_string )
 {
     char md_name[100];
     unsigned char hash_str[1000];
@@ -217,13 +222,13 @@
     memset(hash_str, 0x00, 1000);
     memset(output, 0x00, 100);
 
-    strncpy( (char *) md_name, {text_md_name}, 100 );
+    strncpy( (char *) md_name, text_md_name, 100 );
     md_info = md_info_from_string( md_name );
     TEST_ASSERT( md_info != NULL );
 
-    md_file( md_info, {filename}, output);
+    md_file( md_info, filename, output);
     hexify( hash_str, output, md_get_size(md_info) );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_mdx.function b/tests/suites/test_suite_mdx.function
index f6bf695..53a6801 100644
--- a/tests/suites/test_suite_mdx.function
+++ b/tests/suites/test_suite_mdx.function
@@ -1,11 +1,11 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/md2.h>
 #include <polarssl/md4.h>
 #include <polarssl/md5.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_CASE depends_on:POLARSSL_MD2_C
-md2_text:text_src_string:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD2_C */
+void md2_text( char *text_src_string, char *hex_hash_string )
 {
     unsigned char src_str[1000];
     unsigned char hash_str[1000];
@@ -15,17 +15,17 @@
     memset(hash_str, 0x00, 1000);
     memset(output, 0x00, 33);
 
-    strcpy( (char *) src_str, {text_src_string} );
+    strcpy( (char *) src_str, text_src_string );
 
     md2( src_str, strlen( (char *) src_str ), output );
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD4_C
-md4_text:text_src_string:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD4_C */
+void md4_text( char *text_src_string, char *hex_hash_string )
 {
     unsigned char src_str[1000];
     unsigned char hash_str[1000];
@@ -35,17 +35,17 @@
     memset(hash_str, 0x00, 1000);
     memset(output, 0x00, 33);
 
-    strcpy( (char *) src_str, {text_src_string} );
+    strcpy( (char *) src_str, text_src_string );
 
     md4( src_str, strlen( (char *) src_str ), output );
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD5_C
-md5_text:text_src_string:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD5_C */
+void md5_text( char *text_src_string, char *hex_hash_string )
 {
     unsigned char src_str[1000];
     unsigned char hash_str[1000];
@@ -55,17 +55,18 @@
     memset(hash_str, 0x00, 1000);
     memset(output, 0x00, 33);
 
-    strcpy( (char *) src_str, {text_src_string} );
+    strcpy( (char *) src_str, text_src_string );
 
     md5( src_str, strlen( (char *) src_str ), output );
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD2_C
-md2_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD2_C */
+void md2_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+               char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -78,18 +79,19 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 33);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     md2_hmac( key_str, key_len, src_str, src_len, output );
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD4_C
-md4_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD4_C */
+void md4_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+               char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -102,18 +104,19 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 33);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     md4_hmac( key_str, key_len, src_str, src_len, output );
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD5_C
-md5_hmac:#trunc_size:hex_key_string:hex_src_string:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD5_C */
+void md5_hmac( int trunc_size, char *hex_key_string, char *hex_src_string,
+               char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char key_str[10000];
@@ -126,18 +129,18 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 33);
 
-    key_len = unhexify( key_str, {hex_key_string} );
-    src_len = unhexify( src_str, {hex_src_string} );
+    key_len = unhexify( key_str, hex_key_string );
+    src_len = unhexify( src_str, hex_src_string );
 
     md5_hmac( key_str, key_len, src_str, src_len, output );
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strncmp( (char *) hash_str, {hex_hash_string}, {trunc_size} * 2 ) == 0 );
+    TEST_ASSERT( strncmp( (char *) hash_str, hex_hash_string, trunc_size * 2 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD2_C
-md2_file:filename:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD2_C */
+void md2_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[65];
     unsigned char output[33];
@@ -145,15 +148,15 @@
     memset(hash_str, 0x00, 65);
     memset(output, 0x00, 33);
 
-    md2_file( {filename}, output);
+    md2_file( filename, output);
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD4_C
-md4_file:filename:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD4_C */
+void md4_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[65];
     unsigned char output[33];
@@ -161,15 +164,15 @@
     memset(hash_str, 0x00, 65);
     memset(output, 0x00, 33);
 
-    md4_file( {filename}, output);
+    md4_file( filename, output);
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD5_C
-md5_file:filename:hex_hash_string
+/* BEGIN_CASE depends_on:POLARSSL_MD5_C */
+void md5_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[65];
     unsigned char output[33];
@@ -177,30 +180,30 @@
     memset(hash_str, 0x00, 65);
     memset(output, 0x00, 33);
 
-    md5_file( {filename}, output);
+    md5_file( filename, output);
     hexify( hash_str, output, 16 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD2_C
-md2_selftest:
+/* BEGIN_CASE depends_on:POLARSSL_MD2_C */
+void md2_selftest()
 {
     TEST_ASSERT( md2_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD4_C
-md4_selftest:
+/* BEGIN_CASE depends_on:POLARSSL_MD4_C */
+void md4_selftest()
 {
     TEST_ASSERT( md4_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE depends_on:POLARSSL_MD5_C
-md5_selftest:
+/* BEGIN_CASE depends_on:POLARSSL_MD5_C */
+void md5_selftest()
 {
     TEST_ASSERT( md5_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_mpi.function b/tests/suites/test_suite_mpi.function
index 43d1d08..6a99a60 100644
--- a/tests/suites/test_suite_mpi.function
+++ b/tests/suites/test_suite_mpi.function
@@ -1,36 +1,39 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/bignum.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-mpi_read_write_string:#radix_X:input_X:#radix_A:input_A:#output_size:#result_read:#result_write
+/* BEGIN_CASE */
+void mpi_read_write_string( int radix_X, char *input_X, int radix_A,
+                            char *input_A, int output_size, int result_read,
+                            int result_write )
 {
     mpi X;
     char str[1000];
-    size_t len = {output_size};
+    size_t len = output_size;
 
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == {result_read} );
-    if( {result_read} == 0 )
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == result_read );
+    if( result_read == 0 )
     {
-        TEST_ASSERT( mpi_write_string( &X, {radix_A}, str, &len ) == {result_write} );
-        if( {result_write} == 0 )
+        TEST_ASSERT( mpi_write_string( &X, radix_A, str, &len ) == result_write );
+        if( result_write == 0 )
         {
-            TEST_ASSERT( strcasecmp( str, {input_A} ) == 0 );
+            TEST_ASSERT( strcasecmp( str, input_A ) == 0 );
         }
     }
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_read_binary:input_X:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_read_binary( char *input_X, int radix_A, char *input_A )
 {
     mpi X;
     unsigned char str[1000];
@@ -40,18 +43,19 @@
 
     mpi_init( &X );
 
-    input_len = unhexify( buf, {input_X} );
+    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 );
+    TEST_ASSERT( mpi_write_string( &X, radix_A, (char *) str, &len ) == 0 );
+    TEST_ASSERT( strcmp( (char *) str, input_A ) == 0 );
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_write_binary:#radix_X:input_X:input_A:#output_size:#result
+/* BEGIN_CASE */
+void mpi_write_binary( int radix_X, char *input_X, char *input_A,
+                       int output_size, int result )
 {
     mpi X;
     unsigned char str[1000];
@@ -63,26 +67,27 @@
 
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
     
     buflen = mpi_size( &X );
-    if( buflen > (size_t) {output_size} )
-        buflen = (size_t) {output_size};
+    if( buflen > (size_t) output_size )
+        buflen = (size_t) output_size;
 
-    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == {result} );
-    if( {result} == 0)
+    TEST_ASSERT( mpi_write_binary( &X, buf, buflen ) == result );
+    if( result == 0)
     {
         hexify( str, buf, buflen );
 
-        TEST_ASSERT( strcasecmp( (char *) str, {input_A} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) str, input_A ) == 0 );
     }
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_read_file:#radix_X:input_file:input_A:#result
+/* BEGIN_CASE */
+void mpi_read_file( int radix_X, char *input_file, char *input_A,
+                    int result )
 {
     mpi X;
     unsigned char str[1000];
@@ -95,169 +100,174 @@
 
     mpi_init( &X );
 
-    file = fopen( {input_file}, "r" );
-    TEST_ASSERT( mpi_read_file( &X, {radix_X}, file ) == {result} );
+    file = fopen( input_file, "r" );
+    TEST_ASSERT( mpi_read_file( &X, radix_X, file ) == result );
     fclose(file);
 
-    if( {result} == 0 )
+    if( result == 0 )
     {
         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 );
+        TEST_ASSERT( strcasecmp( (char *) str, input_A ) == 0 );
     }
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_write_file:#radix_X:input_X:#output_radix:output_file
+/* BEGIN_CASE */
+void mpi_write_file( int radix_X, char *input_X, int output_radix,
+                     char *output_file )
 {
     mpi X, Y;
     FILE *file_out, *file_in;
 
     mpi_init( &X ); mpi_init( &Y );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
 
-    file_out = fopen( {output_file}, "w" );
+    file_out = fopen( output_file, "w" );
     TEST_ASSERT( file_out != NULL );
-    TEST_ASSERT( mpi_write_file( NULL, &X, {output_radix}, file_out ) == 0 );
+    TEST_ASSERT( mpi_write_file( NULL, &X, output_radix, file_out ) == 0 );
     fclose(file_out);
 
-    file_in = fopen( {output_file}, "r" );
+    file_in = fopen( output_file, "r" );
     TEST_ASSERT( file_in != NULL );
-    TEST_ASSERT( mpi_read_file( &Y, {output_radix}, file_in ) == 0 );
+    TEST_ASSERT( mpi_read_file( &Y, output_radix, file_in ) == 0 );
     fclose(file_in);
 
     TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_get_bit:#radix_X:input_X:#pos:#val
+/* BEGIN_CASE */
+void mpi_get_bit( int radix_X, char *input_X, int pos, int val )
 {
     mpi X;
     mpi_init( &X );
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_get_bit( &X, {pos} ) == {val} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_get_bit( &X, pos ) == val );
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_set_bit:#radix_X:input_X:#pos:#val:#radix_Y:output_Y
+/* BEGIN_CASE */
+void mpi_set_bit( int radix_X, char *input_X, int pos, int val, int radix_Y,
+                  char *output_Y )
 {
     mpi X, Y;
     mpi_init( &X ); mpi_init( &Y );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {output_Y} ) == 0 );
-    TEST_ASSERT( mpi_set_bit( &X, {pos}, {val} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, output_Y ) == 0 );
+    TEST_ASSERT( mpi_set_bit( &X, pos, val ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_lsb:#radix_X:input_X:#nr_bits
+/* BEGIN_CASE */
+void mpi_lsb( int radix_X, char *input_X, int nr_bits )
 {
     mpi X;
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_lsb( &X ) == (size_t) {nr_bits} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_lsb( &X ) == (size_t) nr_bits );
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_msb:#radix_X:input_X:#nr_bits
+/* BEGIN_CASE */
+void mpi_msb( int radix_X, char *input_X, int nr_bits )
 {
     mpi X;
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_msb( &X ) == (size_t) {nr_bits} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_msb( &X ) == (size_t) nr_bits );
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_gcd:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_gcd( int radix_X, char *input_X, int radix_Y, char *input_Y,
+              int radix_A, char *input_A )
 {
     mpi A, X, Y, Z;
     mpi_init( &A ); mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_gcd( &Z, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &A ); mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_cmp_int:#input_X:#input_A:#result_CMP
+/* BEGIN_CASE */
+void mpi_cmp_int( int input_X, int input_A, int result_CMP )
 {
     mpi X;
     mpi_init( &X  );
 
-    TEST_ASSERT( mpi_lset( &X, {input_X} ) == 0);
-    TEST_ASSERT( mpi_cmp_int( &X, {input_A} ) == {result_CMP});
+    TEST_ASSERT( mpi_lset( &X, input_X ) == 0);
+    TEST_ASSERT( mpi_cmp_int( &X, input_A ) == result_CMP);
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_cmp_mpi:#radix_X:input_X:#radix_Y:input_Y:#input_A
+/* BEGIN_CASE */
+void mpi_cmp_mpi( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int input_A )
 {
     mpi X, Y;
     mpi_init( &X ); mpi_init( &Y );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) == {input_A} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) == input_A );
 
     mpi_free( &X ); mpi_free( &Y );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_cmp_abs:#radix_X:input_X:#radix_Y:input_Y:#input_A
+/* BEGIN_CASE */
+void mpi_cmp_abs( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int input_A )
 {
     mpi X, Y;
     mpi_init( &X ); mpi_init( &Y );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_cmp_abs( &X, &Y ) == {input_A} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_cmp_abs( &X, &Y ) == input_A );
 
     mpi_free( &X ); mpi_free( &Y );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_copy:#input_X:#input_A
+/* BEGIN_CASE */
+void mpi_copy( int input_X, int input_A )
 {
     mpi X, Y, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_lset( &X, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_lset( &Y, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_lset( &A, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_lset( &X, input_X ) == 0 );
+    TEST_ASSERT( mpi_lset( &Y, input_A ) == 0 );
+    TEST_ASSERT( mpi_lset( &A, input_A ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) != 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Y, &A ) == 0 );
     TEST_ASSERT( mpi_copy( &Y, &X ) == 0 );
@@ -266,31 +276,31 @@
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_copy_self:#input_X
+/* BEGIN_CASE */
+void mpi_copy_self( int input_X )
 {
     mpi X;
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_lset( &X, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_lset( &X, input_X ) == 0 );
     TEST_ASSERT( mpi_copy( &X, &X ) == 0 );
-    TEST_ASSERT( mpi_cmp_int( &X, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_cmp_int( &X, input_X ) == 0 );
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_swap:#input_X:#input_Y
+/* BEGIN_CASE */
+void mpi_swap( int input_X,  int input_Y )
 {
     mpi X, Y, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_lset( &X, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_lset( &Y, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_lset( &A, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_lset( &X, input_X ) == 0 );
+    TEST_ASSERT( mpi_lset( &Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_lset( &A, input_X ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &Y ) != 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
     mpi_swap( &X, &Y );
@@ -299,163 +309,173 @@
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_add_mpi:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_add_mpi( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A )
 {
     mpi X, Y, Z, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_add_mpi( &Z, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_add_abs:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_add_abs( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A )
 {
     mpi X, Y, Z, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_add_abs( &Z, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_add_abs_add_first:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_add_abs_add_first( int radix_X, char *input_X, int radix_Y,
+                            char *input_Y, int radix_A, char *input_A )
 {
     mpi X, Y, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_add_abs( &X, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_add_abs_add_second:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_add_abs_add_second( int radix_X, char *input_X, int radix_Y,
+                             char *input_Y, int radix_A, char *input_A )
 {
     mpi X, Y, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_add_abs( &Y, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Y, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_add_int:#radix_X:input_X:#input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_add_int( int radix_X, char *input_X, int input_Y, int radix_A,
+                  char *input_A )
 {
     mpi X, Z, A;
     mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_add_int( &Z, &X, {input_Y} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_add_int( &Z, &X, input_Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_sub_mpi:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_sub_mpi( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A )
 {
     mpi X, Y, Z, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_sub_mpi( &Z, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_sub_abs:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A:#sub_result
+/* BEGIN_CASE */
+void mpi_sub_abs( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A, int sub_result )
 {
     mpi X, Y, Z, A;
     int res;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     
     res = mpi_sub_abs( &Z, &X, &Y );
-    TEST_ASSERT( res == {sub_result} );
+    TEST_ASSERT( res == sub_result );
     if( res == 0 )
         TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_sub_int:#radix_X:input_X:#input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_sub_int( int radix_X, char *input_X, int input_Y, int radix_A,
+                  char *input_A )
 {
     mpi X, Z, A;
     mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_sub_int( &Z, &X, {input_Y} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_sub_int( &Z, &X, input_Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_mul_mpi:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_mul_mpi( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A )
 {
     mpi X, Y, Z, A;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     TEST_ASSERT( mpi_mul_mpi( &Z, &X, &Y ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_mul_int:#radix_X:input_X:#input_Y:#radix_A:input_A:result_comparison
+/* BEGIN_CASE */
+void mpi_mul_int( int radix_X, char *input_X, int input_Y, int radix_A,
+                  char *input_A, char *result_comparison )
 {
     mpi X, Z, A;
     mpi_init( &X ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_mul_int( &Z, &X, {input_Y} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_mul_int( &Z, &X, input_Y ) == 0 );
     if( strcmp( result_comparison, "==" ) == 0 )
         TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
     else if( strcmp( result_comparison, "!=" ) == 0 )
@@ -465,22 +485,24 @@
 
     mpi_free( &X ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_div_mpi:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A:#radix_B:input_B:#div_result
+/* BEGIN_CASE */
+void mpi_div_mpi( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A, int radix_B, char *input_B,
+                  int div_result )
 {
     mpi X, Y, Q, R, A, B;
     int res;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Q ); mpi_init( &R );
     mpi_init( &A ); mpi_init( &B );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &B, {radix_B}, {input_B} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_read_string( &B, radix_B, input_B ) == 0 );
     res = mpi_div_mpi( &Q, &R, &X, &Y );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( res == div_result );
     if( res == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &Q, &A ) == 0 );
@@ -490,21 +512,22 @@
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Q ); mpi_free( &R );
     mpi_free( &A ); mpi_free( &B );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_div_int:#radix_X:input_X:#input_Y:#radix_A:input_A:#radix_B:input_B:#div_result
+/* BEGIN_CASE */
+void mpi_div_int( int radix_X, char *input_X, int input_Y, int radix_A,
+                  char *input_A, int radix_B, char *input_B, int div_result )
 {
     mpi X, Q, R, A, B;
     int res;
     mpi_init( &X ); mpi_init( &Q ); mpi_init( &R ); mpi_init( &A );
     mpi_init( &B );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &B, {radix_B}, {input_B} ) == 0 );
-    res = mpi_div_int( &Q, &R, &X, {input_Y} );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_read_string( &B, radix_B, input_B ) == 0 );
+    res = mpi_div_int( &Q, &R, &X, input_Y );
+    TEST_ASSERT( res == div_result );
     if( res == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &Q, &A ) == 0 );
@@ -514,20 +537,21 @@
     mpi_free( &X ); mpi_free( &Q ); mpi_free( &R ); mpi_free( &A );
     mpi_free( &B );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_mod_mpi:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A:#div_result
+/* BEGIN_CASE */
+void mpi_mod_mpi( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A, int div_result )
 {
     mpi X, Y, A;
     int res;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     res = mpi_mod_mpi( &X, &X, &Y );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( res == div_result );
     if( res == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
@@ -535,46 +559,49 @@
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_mod_int:#radix_X:input_X:#input_Y:#input_A:#div_result
+/* BEGIN_CASE */
+void mpi_mod_int( int radix_X, char *input_X, int input_Y, int input_A,
+                  int div_result )
 {
     mpi X;
     int res;
     t_uint r;
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    res = mpi_mod_int( &r, &X, {input_Y} );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    res = mpi_mod_int( &r, &X, input_Y );
+    TEST_ASSERT( res == div_result );
     if( res == 0 )
     {
-        TEST_ASSERT( r == (t_uint) {input_A} );
+        TEST_ASSERT( r == (t_uint) input_A );
     }
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_exp_mod:#radix_A:input_A:#radix_E:input_E:#radix_N:input_N:#radix_RR:input_RR:#radix_X:input_X:#div_result
+/* BEGIN_CASE */
+void mpi_exp_mod( int radix_A, char *input_A, int radix_E, char *input_E,
+                  int radix_N, char *input_N, int radix_RR, char *input_RR,
+                  int radix_X, char *input_X, int div_result )
 {
     mpi A, E, N, RR, Z, X;
     int res;
     mpi_init( &A  ); mpi_init( &E ); mpi_init( &N );
     mpi_init( &RR ); mpi_init( &Z ); mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &E, {radix_E}, {input_E} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_read_string( &E, radix_E, input_E ) == 0 );
+    TEST_ASSERT( mpi_read_string( &N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
 
-    if( strlen( {input_RR} ) )
-        TEST_ASSERT( mpi_read_string( &RR, {radix_RR}, {input_RR} ) == 0 );
+    if( strlen( input_RR ) )
+        TEST_ASSERT( mpi_read_string( &RR, radix_RR, input_RR ) == 0 );
 
     res = mpi_exp_mod( &Z, &A, &E, &N, &RR );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( res == div_result );
     if( res == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &Z, &X ) == 0 );
@@ -583,20 +610,21 @@
     mpi_free( &A  ); mpi_free( &E ); mpi_free( &N );
     mpi_free( &RR ); mpi_free( &Z ); mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_inv_mod:#radix_X:input_X:#radix_Y:input_Y:#radix_A:input_A:#div_result
+/* BEGIN_CASE */
+void mpi_inv_mod( int radix_X, char *input_X, int radix_Y, char *input_Y,
+                  int radix_A, char *input_A, int div_result )
 {
     mpi X, Y, Z, A;
     int res;
     mpi_init( &X ); mpi_init( &Y ); mpi_init( &Z ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &Y, {radix_Y}, {input_Y} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &Y, radix_Y, input_Y ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
     res = mpi_inv_mod( &Z, &X, &Y );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( res == div_result );
     if( res == 0 )
     {
         TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
@@ -604,63 +632,58 @@
 
     mpi_free( &X ); mpi_free( &Y ); mpi_free( &Z ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_is_prime:#radix_X:input_X:#div_result
+/* BEGIN_CASE */
+void mpi_is_prime( int radix_X, char *input_X, int div_result )
 {
     mpi X;
     int res;
     mpi_init( &X );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
     res = mpi_is_prime( &X, rnd_std_rand, NULL );
-    TEST_ASSERT( res == {div_result} );
+    TEST_ASSERT( res == div_result );
 
     mpi_free( &X );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_shift_l:#radix_X:input_X:#shift_X:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_shift_l( int radix_X, char *input_X, int shift_X, int radix_A,
+                  char *input_A)
 {
     mpi X, A;
     mpi_init( &X ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_shift_l( &X, {shift_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_shift_l( &X, shift_X ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_shift_r:#radix_X:input_X:#shift_X:#radix_A:input_A
+/* BEGIN_CASE */
+void mpi_shift_r( int radix_X, char *input_X, int shift_X, int radix_A,
+                  char *input_A )
 {
     mpi X, A;
     mpi_init( &X ); mpi_init( &A );
 
-    TEST_ASSERT( mpi_read_string( &X, {radix_X}, {input_X} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &A, {radix_A}, {input_A} ) == 0 );
-    TEST_ASSERT( mpi_shift_r( &X, {shift_X} ) == 0 );
+    TEST_ASSERT( mpi_read_string( &X, radix_X, input_X ) == 0 );
+    TEST_ASSERT( mpi_read_string( &A, radix_A, input_A ) == 0 );
+    TEST_ASSERT( mpi_shift_r( &X, shift_X ) == 0 );
     TEST_ASSERT( mpi_cmp_mpi( &X, &A ) == 0 );
 
     mpi_free( &X ); mpi_free( &A );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-mpi_selftest:
+/* BEGIN_CASE */
+void mpi_selftest()
 {
     TEST_ASSERT( mpi_self_test( 0 ) == 0 );
 }
-END_CASE
-/* Helper Code
-    char str[1000];
-    int len = 1000;
-    mpi_write_string(&Z, 10, str, &len);
-    printf("Z: %d %s\n", Z.s, str);
-    TEST_ASSERT( mpi_cmp_mpi( &Z, &A ) == 0 );
-*/
+/* END_CASE */
diff --git a/tests/suites/test_suite_pbkdf2.function b/tests/suites/test_suite_pbkdf2.function
index a041721..f6c8a49 100644
--- a/tests/suites/test_suite_pbkdf2.function
+++ b/tests/suites/test_suite_pbkdf2.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/pbkdf2.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_PBKDF2_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_PBKDF2_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-pbkdf2_hmac:#hash:hex_password_string:hex_salt_string:#it_cnt:#key_len:result_key_string
+/* BEGIN_CASE */
+void pbkdf2_hmac( int hash, char *hex_password_string, char *hex_salt_string,
+                  int it_cnt, int key_len, char *result_key_string )
 {
     unsigned char pw_str[100];
     unsigned char salt_str[100];
@@ -23,18 +25,18 @@
     memset(salt_str, 0x00, 100);
     memset(dst_str, 0x00, 100);
 
-    pw_len = unhexify( pw_str, {hex_password_string} );
-    salt_len = unhexify( salt_str, {hex_salt_string} );
+    pw_len = unhexify( pw_str, hex_password_string );
+    salt_len = unhexify( salt_str, hex_salt_string );
 
 
-    info = md_info_from_type( {hash} );
+    info = md_info_from_type( hash );
     TEST_ASSERT( info != NULL );
     TEST_ASSERT( md_init_ctx( &ctx, info ) == 0 );
     TEST_ASSERT( pbkdf2_hmac( &ctx, pw_str, pw_len, salt_str, salt_len,
-                              {it_cnt}, {key_len}, key ) == 0 );
+                              it_cnt, key_len, key ) == 0 );
     TEST_ASSERT( md_free_ctx( &ctx ) == 0 );
 
-    hexify( dst_str, key, {key_len} );
-    TEST_ASSERT( strcmp( (char *) dst_str, {result_key_string} ) == 0 );
+    hexify( dst_str, key, key_len );
+    TEST_ASSERT( strcmp( (char *) dst_str, result_key_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_pkcs1_v21.function b/tests/suites/test_suite_pkcs1_v21.function
index 5722f5f..21ef421 100644
--- a/tests/suites/test_suite_pkcs1_v21.function
+++ b/tests/suites/test_suite_pkcs1_v21.function
@@ -1,4 +1,4 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/rsa.h>
 #include <polarssl/md.h>
 #include <polarssl/md2.h>
@@ -7,14 +7,18 @@
 #include <polarssl/sha1.h>
 #include <polarssl/sha256.h>
 #include <polarssl/sha512.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_PKCS1_V21:POLARSSL_RSA_C:POLARSSL_BIGNUM_C:POLARSSL_SHA1_C:POLARSSL_GENPRIME
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_PKCS1_V21:POLARSSL_RSA_C:POLARSSL_BIGNUM_C:POLARSSL_SHA1_C:POLARSSL_GENPRIME
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-pkcs1_rsaes_oaep_encrypt:#mod:#radix_N:input_N:#radix_E:input_E:#hash:message_hex_string:seed:result_hex_str:#result
+/* BEGIN_CASE */
+void pkcs1_rsaes_oaep_encrypt( int mod, int radix_N, char *input_N, int radix_E,
+                               char *input_E, int hash,
+                               char *message_hex_string, char *seed,
+                               char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -24,36 +28,40 @@
     size_t msg_len;
     rnd_buf_info info;
 
-    info.length = unhexify( rnd_buf, {seed} );
+    info.length = unhexify( rnd_buf, seed );
     info.buf = rnd_buf;
 
-    rsa_init( &ctx, RSA_PKCS_V21, {hash} );
+    rsa_init( &ctx, RSA_PKCS_V21, hash );
     memset( message_str, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8 + ( ( mod % 8 ) ? 1 : 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
+    msg_len = unhexify( message_str, message_hex_string );
 
-    TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_buffer_rand, &info, RSA_PUBLIC, msg_len, message_str, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_buffer_rand, &info, RSA_PUBLIC, msg_len, message_str, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-pkcs1_rsaes_oaep_decrypt:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:#hash:result_hex_str:seed:message_hex_string:#result
+/* BEGIN_CASE */
+void pkcs1_rsaes_oaep_decrypt( int mod, int radix_P, char *input_P,
+                               int radix_Q, char *input_Q, int radix_N,
+                               char *input_N, int radix_E, char *input_E,
+                               int hash, char *result_hex_str, char *seed,
+                               char *message_hex_string, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -64,17 +72,17 @@
     ((void) seed);
 
     mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
-    rsa_init( &ctx, RSA_PKCS_V21, {hash} );
+    rsa_init( &ctx, RSA_PKCS_V21, hash );
 
     memset( message_str, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8 + ( ( mod % 8 ) ? 1 : 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
                 
     TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
     TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
@@ -87,23 +95,27 @@
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
 
-    unhexify( message_str, {message_hex_string} );
+    unhexify( message_str, message_hex_string );
 
-    TEST_ASSERT( rsa_pkcs1_decrypt( &ctx, RSA_PRIVATE, &output_len, message_str, output, 1000 ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_decrypt( &ctx, RSA_PRIVATE, &output_len, message_str, output, 1000 ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strncasecmp( (char *) output_str, {result_hex_str}, strlen( {result_hex_str} ) ) == 0 );
+        TEST_ASSERT( strncasecmp( (char *) output_str, result_hex_str, strlen( result_hex_str ) ) == 0 );
     }
 
     mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-pkcs1_rsassa_pss_sign:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:#digest:#hash:message_hex_string:salt:result_hex_str:#result
+/* BEGIN_CASE */
+void pkcs1_rsassa_pss_sign( int mod, int radix_P, char *input_P, int radix_Q,
+                            char *input_Q, int radix_N, char *input_N,
+                            int radix_E, char *input_E, int digest, int hash,
+                            char *message_hex_string, char *salt,
+                            char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char hash_result[1000];
@@ -115,22 +127,22 @@
     size_t msg_len;
     rnd_buf_info info;
 
-    info.length = unhexify( rnd_buf, {salt} );
+    info.length = unhexify( rnd_buf, salt );
     info.buf = rnd_buf;
 
     mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
-    rsa_init( &ctx, RSA_PKCS_V21, {hash} );
+    rsa_init( &ctx, RSA_PKCS_V21, hash );
 
     memset( message_str, 0x00, 1000 );
     memset( hash_result, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8 + ( ( mod % 8 ) ? 1 : 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
     TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
@@ -143,26 +155,29 @@
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
+    msg_len = unhexify( message_str, message_hex_string );
 
-    if( md_info_from_type( {digest} ) != NULL )
-        TEST_ASSERT( md( md_info_from_type( {digest} ), message_str, msg_len, hash_result ) == 0 );
+    if( md_info_from_type( digest ) != NULL )
+        TEST_ASSERT( md( md_info_from_type( digest ), message_str, msg_len, hash_result ) == 0 );
 
-    TEST_ASSERT( rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, RSA_PRIVATE, {digest}, 0, hash_result, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_sign( &ctx, &rnd_buffer_rand, &info, RSA_PRIVATE, digest, 0, hash_result, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len);
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-pkcs1_rsassa_pss_verify:#mod:#radix_N:input_N:#radix_E:input_E:#digest:#hash:message_hex_string:salt:result_hex_str:#result
+/* BEGIN_CASE */
+void pkcs1_rsassa_pss_verify( int mod, int radix_N, char *input_N, int radix_E,
+                              char *input_E, int digest, int hash,
+                              char *message_hex_string, char *salt,
+                              char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char hash_result[1000];
@@ -171,25 +186,25 @@
     size_t msg_len;
     ((void) salt);
 
-    rsa_init( &ctx, RSA_PKCS_V21, {hash} );
+    rsa_init( &ctx, RSA_PKCS_V21, hash );
     memset( message_str, 0x00, 1000 );
     memset( hash_result, 0x00, 1000 );
     memset( result_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8 + ( ( {mod} % 8 ) ? 1 : 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8 + ( ( mod % 8 ) ? 1 : 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
-    unhexify( result_str, {result_hex_str} );
+    msg_len = unhexify( message_str, message_hex_string );
+    unhexify( result_str, result_hex_str );
 
-    if( md_info_from_type( {digest} ) != NULL )
-        TEST_ASSERT( md( md_info_from_type( {digest} ), message_str, msg_len, hash_result ) == 0 );
+    if( md_info_from_type( digest ) != NULL )
+        TEST_ASSERT( md( md_info_from_type( digest ), message_str, msg_len, hash_result ) == 0 );
 
-    TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, {digest}, 0, hash_result, result_str ) == {result} );
+    TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, digest, 0, hash_result, result_str ) == result );
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_pkcs5.function b/tests/suites/test_suite_pkcs5.function
index 4fe6b40..26bc38f 100644
--- a/tests/suites/test_suite_pkcs5.function
+++ b/tests/suites/test_suite_pkcs5.function
@@ -1,13 +1,16 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/pkcs5.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_PKCS5_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_PKCS5_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-pbkdf2_hmac:#hash:hex_password_string:hex_salt_string:#it_cnt:#key_len:result_key_string
+/* BEGIN_CASE */
+void pbkdf2_hmac( int hash, char *hex_password_string,
+                  char *hex_salt_string, int it_cnt, int key_len,
+                  char *result_key_string )
 {
     unsigned char pw_str[100];
     unsigned char salt_str[100];
@@ -23,18 +26,18 @@
     memset(salt_str, 0x00, 100);
     memset(dst_str, 0x00, 100);
 
-    pw_len = unhexify( pw_str, {hex_password_string} );
-    salt_len = unhexify( salt_str, {hex_salt_string} );
+    pw_len = unhexify( pw_str, hex_password_string );
+    salt_len = unhexify( salt_str, hex_salt_string );
 
 
-    info = md_info_from_type( {hash} );
+    info = md_info_from_type( hash );
     TEST_ASSERT( info != NULL );
     TEST_ASSERT( md_init_ctx( &ctx, info ) == 0 );
     TEST_ASSERT( pkcs5_pbkdf2_hmac( &ctx, pw_str, pw_len, salt_str, salt_len,
-                                     {it_cnt}, {key_len}, key ) == 0 );
+                                     it_cnt, key_len, key ) == 0 );
     TEST_ASSERT( md_free_ctx( &ctx ) == 0 );
 
-    hexify( dst_str, key, {key_len} );
-    TEST_ASSERT( strcmp( (char *) dst_str, {result_key_string} ) == 0 );
+    hexify( dst_str, key, key_len );
+    TEST_ASSERT( strcmp( (char *) dst_str, result_key_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_rsa.function b/tests/suites/test_suite_rsa.function
index 30eff8f..af26264 100644
--- a/tests/suites/test_suite_rsa.function
+++ b/tests/suites/test_suite_rsa.function
@@ -1,4 +1,4 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/rsa.h>
 #include <polarssl/md2.h>
 #include <polarssl/md4.h>
@@ -8,14 +8,18 @@
 #include <polarssl/sha512.h>
 #include <polarssl/entropy.h>
 #include <polarssl/ctr_drbg.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_RSA_C:POLARSSL_BIGNUM_C:POLARSSL_GENPRIME
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_RSA_C:POLARSSL_BIGNUM_C:POLARSSL_GENPRIME
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-rsa_pkcs1_sign:message_hex_string:#padding_mode:#digest:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_pkcs1_sign( char *message_hex_string, int padding_mode, int digest,
+                     int mod, int radix_P, char *input_P, int radix_Q,
+                     char *input_Q, int radix_N, char *input_N, int radix_E,
+                     char *input_E, char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char hash_result[1000];
@@ -26,18 +30,18 @@
     int msg_len;
 
     mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
 
     memset( message_str, 0x00, 1000 );
     memset( hash_result, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
     TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
@@ -50,26 +54,28 @@
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
+    msg_len = unhexify( message_str, message_hex_string );
 
-    if( md_info_from_type( {digest} ) != NULL )
-        TEST_ASSERT( md( md_info_from_type( {digest} ), message_str, msg_len, hash_result ) == 0 );
+    if( md_info_from_type( digest ) != NULL )
+        TEST_ASSERT( md( md_info_from_type( digest ), message_str, msg_len, hash_result ) == 0 );
 
-    TEST_ASSERT( rsa_pkcs1_sign( &ctx, NULL, NULL, RSA_PRIVATE, {digest}, 0, hash_result, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_sign( &ctx, NULL, NULL, RSA_PRIVATE, digest, 0, hash_result, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_pkcs1_verify:message_hex_string:#padding_mode:#digest:#mod:#radix_N:input_N:#radix_E:input_E:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_pkcs1_verify( char *message_hex_string, int padding_mode, int digest,
+                       int mod, int radix_N, char *input_N, int radix_E,
+                       char *input_E, char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char hash_result[1000];
@@ -77,32 +83,36 @@
     rsa_context ctx;
     int msg_len;
 
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
     memset( message_str, 0x00, 1000 );
     memset( hash_result, 0x00, 1000 );
     memset( result_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
-    unhexify( result_str, {result_hex_str} );
+    msg_len = unhexify( message_str, message_hex_string );
+    unhexify( result_str, result_hex_str );
 
-    if( md_info_from_type( {digest} ) != NULL )
-        TEST_ASSERT( md( md_info_from_type( {digest} ), message_str, msg_len, hash_result ) == 0 );
+    if( md_info_from_type( digest ) != NULL )
+        TEST_ASSERT( md( md_info_from_type( digest ), message_str, msg_len, hash_result ) == 0 );
 
-    TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, {digest}, 0, hash_result, result_str ) == {result} );
+    TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, digest, 0, hash_result, result_str ) == result );
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
 
-BEGIN_CASE
-rsa_pkcs1_sign_raw:message_hex_string:hash_result_string:#padding_mode:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:result_hex_str
+/* BEGIN_CASE */
+void rsa_pkcs1_sign_raw( char *message_hex_string, char *hash_result_string,
+                         int padding_mode, int mod, int radix_P, char *input_P,
+                         int radix_Q, char *input_Q, int radix_N,
+                         char *input_N, int radix_E, char *input_E,
+                         char *result_hex_str )
 {
     unsigned char message_str[1000];
     unsigned char hash_result[1000];
@@ -113,18 +123,18 @@
     int hash_len;
 
     mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
 
     memset( message_str, 0x00, 1000 );
     memset( hash_result, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
     TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
@@ -137,22 +147,25 @@
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
 
-    unhexify( message_str, {message_hex_string} );
-    hash_len = unhexify( hash_result, {hash_result_string} );
+    unhexify( message_str, message_hex_string );
+    hash_len = unhexify( hash_result, hash_result_string );
 
     TEST_ASSERT( rsa_pkcs1_sign( &ctx, NULL, NULL, RSA_PRIVATE, POLARSSL_MD_NONE, hash_len, hash_result, output ) == 0 );
 
     hexify( output_str, output, ctx.len );
 
-    TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+    TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
 
     mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_pkcs1_verify_raw:message_hex_string:hash_result_string:#padding_mode:#mod:#radix_N:input_N:#radix_E:input_E:result_hex_str:#correct
+/* BEGIN_CASE */
+void rsa_pkcs1_verify_raw( char *message_hex_string, char *hash_result_string,
+                           int padding_mode, int mod, int radix_N,
+                           char *input_N, int radix_E, char *input_E,
+                           char *result_hex_str, int correct )
 {
     unsigned char message_str[1000];
     unsigned char hash_result[1000];
@@ -160,29 +173,31 @@
     rsa_context ctx;
     size_t hash_len;
 
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
     memset( message_str, 0x00, 1000 );
     memset( hash_result, 0x00, 1000 );
     memset( result_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    unhexify( message_str, {message_hex_string} );
-    hash_len = unhexify( hash_result, {hash_result_string} );
-    unhexify( result_str, {result_hex_str} );
+    unhexify( message_str, message_hex_string );
+    hash_len = unhexify( hash_result, hash_result_string );
+    unhexify( result_str, result_hex_str );
 
-    TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, POLARSSL_MD_NONE, hash_len, hash_result, result_str ) == {correct} );
+    TEST_ASSERT( rsa_pkcs1_verify( &ctx, RSA_PUBLIC, POLARSSL_MD_NONE, hash_len, hash_result, result_str ) == correct );
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_pkcs1_encrypt:message_hex_string:#padding_mode:#mod:#radix_N:input_N:#radix_E:input_E:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_pkcs1_encrypt( char *message_hex_string, int padding_mode, int mod,
+                        int radix_N, char *input_N, int radix_E, char *input_E,
+                        char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -193,33 +208,36 @@
 
     memset( &rnd_info, 0, sizeof( rnd_pseudo_info ) );
 
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
     memset( message_str, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
+    msg_len = unhexify( message_str, message_hex_string );
 
-    TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_pseudo_rand, &rnd_info, RSA_PUBLIC, msg_len, message_str, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_pseudo_rand, &rnd_info, RSA_PUBLIC, msg_len, message_str, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_pkcs1_encrypt_bad_rng:message_hex_string:#padding_mode:#mod:#radix_N:input_N:#radix_E:input_E:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_pkcs1_encrypt_bad_rng( char *message_hex_string, int padding_mode,
+                                int mod, int radix_N, char *input_N,
+                                int radix_E, char *input_E,
+                                char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -227,33 +245,36 @@
     rsa_context ctx;
     size_t msg_len;
 
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
     memset( message_str, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    msg_len = unhexify( message_str, {message_hex_string} );
+    msg_len = unhexify( message_str, message_hex_string );
 
-    TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_zero_rand, NULL, RSA_PUBLIC, msg_len, message_str, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_encrypt( &ctx, &rnd_zero_rand, NULL, RSA_PUBLIC, msg_len, message_str, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_pkcs1_decrypt:message_hex_string:#padding_mode:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:#max_output:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_pkcs1_decrypt( char *message_hex_string, int padding_mode, int mod,
+                        int radix_P, char *input_P, int radix_Q, char *input_Q,
+                        int radix_N, char *input_N, int radix_E, char *input_E,
+                        int max_output, char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -263,17 +284,17 @@
     size_t output_len;
 
     mpi_init( &P1 ); mpi_init( &Q1 ); mpi_init( &H ); mpi_init( &G );
-    rsa_init( &ctx, {padding_mode}, 0 );
+    rsa_init( &ctx, padding_mode, 0 );
 
     memset( message_str, 0x00, 1000 );
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
     TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
@@ -286,24 +307,25 @@
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
 
-    unhexify( message_str, {message_hex_string} );
+    unhexify( message_str, message_hex_string );
     output_len = 0;
 
-    TEST_ASSERT( rsa_pkcs1_decrypt( &ctx, RSA_PRIVATE, &output_len, message_str, output, {max_output} ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_pkcs1_decrypt( &ctx, RSA_PRIVATE, &output_len, message_str, output, max_output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strncasecmp( (char *) output_str, {result_hex_str}, strlen( {result_hex_str} ) ) == 0 );
+        TEST_ASSERT( strncasecmp( (char *) output_str, result_hex_str, strlen( result_hex_str ) ) == 0 );
     }
 
     mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_public:message_hex_string:#mod:#radix_N:input_N:#radix_E:input_E:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_public( char *message_hex_string, int mod, int radix_N, char *input_N,
+                 int radix_E, char *input_E, char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -315,28 +337,30 @@
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( rsa_check_pubkey( &ctx ) == 0 );
 
-    unhexify( message_str, {message_hex_string} );
+    unhexify( message_str, message_hex_string );
 
-    TEST_ASSERT( rsa_public( &ctx, message_str, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_public( &ctx, message_str, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_private:message_hex_string:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:result_hex_str:#result
+/* BEGIN_CASE */
+void rsa_private( char *message_hex_string, int mod, int radix_P, char *input_P,
+                  int radix_Q, char *input_Q, int radix_N, char *input_N,
+                  int radix_E, char *input_E, char *result_hex_str, int result )
 {
     unsigned char message_str[1000];
     unsigned char output[1000];
@@ -351,11 +375,11 @@
     memset( output, 0x00, 1000 );
     memset( output_str, 0x00, 1000 );
 
-    ctx.len = {mod} / 8;
-    TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
-    TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+    ctx.len = mod / 8;
+    TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
+    TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
 
     TEST_ASSERT( mpi_sub_int( &P1, &ctx.P, 1 ) == 0 );
     TEST_ASSERT( mpi_sub_int( &Q1, &ctx.Q, 1 ) == 0 );
@@ -368,102 +392,108 @@
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
 
-    unhexify( message_str, {message_hex_string} );
+    unhexify( message_str, message_hex_string );
 
-    TEST_ASSERT( rsa_private( &ctx, message_str, output ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_private( &ctx, message_str, output ) == result );
+    if( result == 0 )
     {
         hexify( output_str, output, ctx.len );
 
-        TEST_ASSERT( strcasecmp( (char *) output_str, {result_hex_str} ) == 0 );
+        TEST_ASSERT( strcasecmp( (char *) output_str, result_hex_str ) == 0 );
     }
 
     mpi_free( &P1 ); mpi_free( &Q1 ); mpi_free( &H ); mpi_free( &G );
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_check_privkey_null:
+/* BEGIN_CASE */
+void rsa_check_privkey_null()
 {
     rsa_context ctx;
     memset( &ctx, 0x00, sizeof( rsa_context ) );
 
     TEST_ASSERT( rsa_check_privkey( &ctx ) == POLARSSL_ERR_RSA_KEY_CHECK_FAILED );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_check_pubkey:#radix_N:input_N:#radix_E:input_E:#result
+/* BEGIN_CASE */
+void rsa_check_pubkey( int radix_N, char *input_N, int radix_E, char *input_E,
+                       int result )
 {
     rsa_context ctx;
 
     rsa_init( &ctx, RSA_PKCS_V15, 0 );
 
-    if( strlen( {input_N} ) )
+    if( strlen( input_N ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
     }
-    if( strlen( {input_E} ) )
+    if( strlen( input_E ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
     }
 
-    TEST_ASSERT( rsa_check_pubkey( &ctx ) == {result} );
+    TEST_ASSERT( rsa_check_pubkey( &ctx ) == result );
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_check_privkey:#mod:#radix_P:input_P:#radix_Q:input_Q:#radix_N:input_N:#radix_E:input_E:#radix_D:input_D:#radix_DP:input_DP:#radix_DQ:input_DQ:#radix_QP:input_QP:#result
+/* BEGIN_CASE */
+void rsa_check_privkey( int mod, int radix_P, char *input_P, int radix_Q,
+                        char *input_Q, int radix_N, char *input_N,
+                        int radix_E, char *input_E, int radix_D, char *input_D,
+                        int radix_DP, char *input_DP, int radix_DQ,
+                        char *input_DQ, int radix_QP, char *input_QP,
+                        int result )
 {
     rsa_context ctx;
 
     rsa_init( &ctx, RSA_PKCS_V15, 0 );
 
-    ctx.len = {mod} / 8;
-    if( strlen( {input_P} ) )
+    ctx.len = mod / 8;
+    if( strlen( input_P ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.P, {radix_P}, {input_P} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.P, radix_P, input_P ) == 0 );
     }
-    if( strlen( {input_Q} ) )
+    if( strlen( input_Q ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.Q, {radix_Q}, {input_Q} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.Q, radix_Q, input_Q ) == 0 );
     }
-    if( strlen( {input_N} ) )
+    if( strlen( input_N ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.N, {radix_N}, {input_N} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.N, radix_N, input_N ) == 0 );
     }
-    if( strlen( {input_E} ) )
+    if( strlen( input_E ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.E, {radix_E}, {input_E} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.E, radix_E, input_E ) == 0 );
     }
-    if( strlen( {input_D} ) )
+    if( strlen( input_D ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.D, {radix_D}, {input_D} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.D, radix_D, input_D ) == 0 );
     }
-    if( strlen( {input_DP} ) )
+    if( strlen( input_DP ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.DP, {radix_DP}, {input_DP} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.DP, radix_DP, input_DP ) == 0 );
     }
-    if( strlen( {input_DQ} ) )
+    if( strlen( input_DQ ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.DQ, {radix_DQ}, {input_DQ} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.DQ, radix_DQ, input_DQ ) == 0 );
     }
-    if( strlen( {input_QP} ) )
+    if( strlen( input_QP ) )
     {
-        TEST_ASSERT( mpi_read_string( &ctx.QP, {radix_QP}, {input_QP} ) == 0 );
+        TEST_ASSERT( mpi_read_string( &ctx.QP, radix_QP, input_QP ) == 0 );
     }
 
-    TEST_ASSERT( rsa_check_privkey( &ctx ) == {result} );
+    TEST_ASSERT( rsa_check_privkey( &ctx ) == result );
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_gen_key:#nrbits:#exponent:#result
+/* BEGIN_CASE */
+void rsa_gen_key( int nrbits, int exponent, int result)
 {
     rsa_context ctx;
     entropy_context entropy;
@@ -476,19 +506,19 @@
 
     rsa_init( &ctx, 0, 0 );
 
-    TEST_ASSERT( rsa_gen_key( &ctx, ctr_drbg_random, &ctr_drbg, {nrbits}, {exponent} ) == {result} );
-    if( {result} == 0 )
+    TEST_ASSERT( rsa_gen_key( &ctx, ctr_drbg_random, &ctr_drbg, nrbits, exponent ) == result );
+    if( result == 0 )
     {
         TEST_ASSERT( rsa_check_privkey( &ctx ) == 0 );
     }
 
     rsa_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-rsa_selftest:
+/* BEGIN_CASE */
+void rsa_selftest()
 {
     TEST_ASSERT( rsa_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_shax.function b/tests/suites/test_suite_shax.function
index 75fad33..96ba827 100644
--- a/tests/suites/test_suite_shax.function
+++ b/tests/suites/test_suite_shax.function
@@ -1,11 +1,11 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/sha1.h>
 #include <polarssl/sha256.h>
 #include <polarssl/sha512.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_CASE
-sha1:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha1( char *hex_src_string, char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char hash_str[10000];
@@ -16,17 +16,17 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 41);
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha1( src_str, src_len, output );
     hexify( hash_str, output, 20 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha224:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha224(char *hex_src_string, char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char hash_str[10000];
@@ -37,17 +37,17 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 57);
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha256( src_str, src_len, output, 1 );
     hexify( hash_str, output, 28 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha256:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha256(char *hex_src_string, char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char hash_str[10000];
@@ -58,17 +58,17 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 65);
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha256( src_str, src_len, output, 0 );
     hexify( hash_str, output, 32 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha384:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha384(char *hex_src_string, char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char hash_str[10000];
@@ -79,17 +79,17 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 97);
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha512( src_str, src_len, output, 1 );
     hexify( hash_str, output, 48 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha512:hex_src_string:hex_hash_string
+/* BEGIN_CASE */
+void sha512(char *hex_src_string, char *hex_hash_string )
 {
     unsigned char src_str[10000];
     unsigned char hash_str[10000];
@@ -100,17 +100,17 @@
     memset(hash_str, 0x00, 10000);
     memset(output, 0x00, 129);
 
-    src_len = unhexify( src_str, {hex_src_string} );
+    src_len = unhexify( src_str, hex_src_string );
 
     sha512( src_str, src_len, output, 0);
     hexify( hash_str, output, 64 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha1_file:filename:hex_hash_string
+/* BEGIN_CASE */
+void sha1_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[41];
     unsigned char output[21];
@@ -118,15 +118,15 @@
     memset(hash_str, 0x00, 41);
     memset(output, 0x00, 21);
 
-    sha1_file( {filename}, output);
+    sha1_file( filename, output);
     hexify( hash_str, output, 20 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha224_file:filename:hex_hash_string
+/* BEGIN_CASE */
+void sha224_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[57];
     unsigned char output[29];
@@ -134,15 +134,15 @@
     memset(hash_str, 0x00, 57);
     memset(output, 0x00, 29);
 
-    sha256_file( {filename}, output, 1);
+    sha256_file( filename, output, 1);
     hexify( hash_str, output, 28 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha256_file:filename:hex_hash_string
+/* BEGIN_CASE */
+void sha256_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[65];
     unsigned char output[33];
@@ -150,15 +150,15 @@
     memset(hash_str, 0x00, 65);
     memset(output, 0x00, 33);
 
-    sha256_file( {filename}, output, 0);
+    sha256_file( filename, output, 0);
     hexify( hash_str, output, 32 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha384_file:filename:hex_hash_string
+/* BEGIN_CASE */
+void sha384_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[97];
     unsigned char output[49];
@@ -166,15 +166,15 @@
     memset(hash_str, 0x00, 97);
     memset(output, 0x00, 49);
 
-    sha512_file( {filename}, output, 1);
+    sha512_file( filename, output, 1);
     hexify( hash_str, output, 48 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha512_file:filename:hex_hash_string
+/* BEGIN_CASE */
+void sha512_file( char *filename, char *hex_hash_string )
 {
     unsigned char hash_str[129];
     unsigned char output[65];
@@ -182,30 +182,30 @@
     memset(hash_str, 0x00, 129);
     memset(output, 0x00, 65);
 
-    sha512_file( {filename}, output, 0);
+    sha512_file( filename, output, 0);
     hexify( hash_str, output, 64 );
 
-    TEST_ASSERT( strcmp( (char *) hash_str, {hex_hash_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) hash_str, hex_hash_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha1_selftest:
+/* BEGIN_CASE */
+void sha1_selftest()
 {
     TEST_ASSERT( sha1_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha256_selftest:
+/* BEGIN_CASE */
+void sha256_selftest()
 {
     TEST_ASSERT( sha256_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-sha512_selftest:
+/* BEGIN_CASE */
+void sha512_selftest()
 {
     TEST_ASSERT( sha512_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_version.function b/tests/suites/test_suite_version.function
index 06f63b6..b28707f 100644
--- a/tests/suites/test_suite_version.function
+++ b/tests/suites/test_suite_version.function
@@ -1,13 +1,14 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/version.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_VERSION_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_VERSION_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-check_compiletime_version:version_str
+/* BEGIN_CASE */
+void check_compiletime_version( char *version_str )
 {
     char build_str[100];
     char build_str_full[100];
@@ -29,12 +30,12 @@
     TEST_ASSERT( build_int == POLARSSL_VERSION_NUMBER );
     TEST_ASSERT( strcmp( build_str, POLARSSL_VERSION_STRING ) == 0 );
     TEST_ASSERT( strcmp( build_str_full, POLARSSL_VERSION_STRING_FULL ) == 0 );
-    TEST_ASSERT( strcmp( {version_str}, POLARSSL_VERSION_STRING ) == 0 );
+    TEST_ASSERT( strcmp( version_str, POLARSSL_VERSION_STRING ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-check_runtime_version:version_str
+/* BEGIN_CASE */
+void check_runtime_version( char *version_str )
 {
     char build_str[100];
     char get_str[100];
@@ -55,10 +56,10 @@
         (get_int >> 24) & 0xFF,
         (get_int >> 16) & 0xFF,
         (get_int >> 8) & 0xFF );
-    snprintf( build_str_full, 100, "PolarSSL %s", {version_str} );
+    snprintf( build_str_full, 100, "PolarSSL %s", version_str );
 
-    TEST_ASSERT( strcmp( build_str, {version_str} ) == 0 );
+    TEST_ASSERT( strcmp( build_str, version_str ) == 0 );
     TEST_ASSERT( strcmp( build_str_full, get_str_full ) == 0 );
-    TEST_ASSERT( strcmp( {version_str}, get_str ) == 0 );
+    TEST_ASSERT( strcmp( version_str, get_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_x509parse.function b/tests/suites/test_suite_x509parse.function
index f0defa3..cec4d8d 100644
--- a/tests/suites/test_suite_x509parse.function
+++ b/tests/suites/test_suite_x509parse.function
@@ -1,4 +1,4 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/x509.h>
 #include <polarssl/pem.h>
 #include <polarssl/oid.h>
@@ -23,14 +23,15 @@
     return 0;
 }
 
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_X509_PARSE_C:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_X509_PARSE_C:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-x509_cert_info:crt_file:result_str
+/* BEGIN_CASE */
+void x509_cert_info( char *crt_file, char *result_str )
 {
     x509_cert   crt;
     char buf[2000];
@@ -39,7 +40,7 @@
     memset( &crt, 0, sizeof( x509_cert ) );
     memset( buf, 0, 2000 );
 
-    TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
+    TEST_ASSERT( x509parse_crtfile( &crt, crt_file ) == 0 );
     res = x509parse_cert_info( buf, 2000, "", &crt );
 
     x509_free( &crt );
@@ -47,12 +48,12 @@
     TEST_ASSERT( res != -1 );
     TEST_ASSERT( res != -2 );
 
-    TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( buf, result_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509_crl_info:crl_file:result_str
+/* BEGIN_CASE */
+void x509_crl_info( char *crl_file, char *result_str )
 {
     x509_crl   crl;
     char buf[2000];
@@ -61,7 +62,7 @@
     memset( &crl, 0, sizeof( x509_crl ) );
     memset( buf, 0, 2000 );
 
-    TEST_ASSERT( x509parse_crlfile( &crl, {crl_file} ) == 0 );
+    TEST_ASSERT( x509parse_crlfile( &crl, crl_file ) == 0 );
     res = x509parse_crl_info( buf, 2000, "", &crl );
 
     x509_crl_free( &crl );
@@ -69,12 +70,14 @@
     TEST_ASSERT( res != -1 );
     TEST_ASSERT( res != -2 );
 
-    TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( buf, result_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509_verify:crt_file:ca_file:crl_file:cn_name_str:#result:#flags_result:verify_callback
+/* BEGIN_CASE */
+void x509_verify( char *crt_file, char *ca_file, char *crl_file,
+                  char *cn_name_str, int result, int flags_result,
+                  char *verify_callback )
 {
     x509_cert   crt;
     x509_cert   ca;
@@ -88,21 +91,21 @@
     memset( &ca, 0, sizeof( x509_cert ) );
     memset( &crl, 0, sizeof( x509_crl ) );
 
-    if( strcmp( {cn_name_str}, "NULL" ) != 0 )
-        cn_name = {cn_name_str};
+    if( strcmp( cn_name_str, "NULL" ) != 0 )
+        cn_name = cn_name_str;
 
-    if( strcmp( {verify_callback}, "NULL" ) == 0 )
+    if( strcmp( verify_callback, "NULL" ) == 0 )
         f_vrfy = NULL;
-    else if( strcmp( {verify_callback}, "verify_none" ) == 0 )
+    else if( strcmp( verify_callback, "verify_none" ) == 0 )
         f_vrfy = verify_none;
-    else if( strcmp( {verify_callback}, "verify_all" ) == 0 )
+    else if( strcmp( verify_callback, "verify_all" ) == 0 )
         f_vrfy = verify_all;
     else
         TEST_ASSERT( "No known verify callback selected" == 0 );
 
-    TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
-    TEST_ASSERT( x509parse_crtfile( &ca, {ca_file} ) == 0 );
-    TEST_ASSERT( x509parse_crlfile( &crl, {crl_file} ) == 0 );
+    TEST_ASSERT( x509parse_crtfile( &crt, crt_file ) == 0 );
+    TEST_ASSERT( x509parse_crtfile( &ca, ca_file ) == 0 );
+    TEST_ASSERT( x509parse_crlfile( &crl, crl_file ) == 0 );
 
     res = x509parse_verify( &crt, &ca, &crl, cn_name, &flags, f_vrfy, NULL );
 
@@ -110,13 +113,13 @@
     x509_free( &ca );
     x509_crl_free( &crl );
 
-    TEST_ASSERT( res == ( {result} ) );
-    TEST_ASSERT( flags == ( {flags_result} ) );
+    TEST_ASSERT( res == ( result ) );
+    TEST_ASSERT( flags == ( flags_result ) );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509_dn_gets:crt_file:entity:result_str
+/* BEGIN_CASE */
+void x509_dn_gets( char *crt_file, char *entity, char *result_str )
 {
     x509_cert   crt;
     char buf[2000];
@@ -125,10 +128,10 @@
     memset( &crt, 0, sizeof( x509_cert ) );
     memset( buf, 0, 2000 );
 
-    TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
-    if( strcmp( {entity}, "subject" ) == 0 )
+    TEST_ASSERT( x509parse_crtfile( &crt, crt_file ) == 0 );
+    if( strcmp( entity, "subject" ) == 0 )
         res =  x509parse_dn_gets( buf, 2000, &crt.subject );
-    else if( strcmp( {entity}, "issuer" ) == 0 )
+    else if( strcmp( entity, "issuer" ) == 0 )
         res =  x509parse_dn_gets( buf, 2000, &crt.issuer );
     else
         TEST_ASSERT( "Unknown entity" == 0 );
@@ -138,45 +141,45 @@
     TEST_ASSERT( res != -1 );
     TEST_ASSERT( res != -2 );
 
-    TEST_ASSERT( strcmp( buf, {result_str} ) == 0 );
+    TEST_ASSERT( strcmp( buf, result_str ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509_time_expired:crt_file:entity:#result
+/* BEGIN_CASE */
+void x509_time_expired( char *crt_file, char *entity, int result )
 {
     x509_cert   crt;
 
     memset( &crt, 0, sizeof( x509_cert ) );
 
-    TEST_ASSERT( x509parse_crtfile( &crt, {crt_file} ) == 0 );
+    TEST_ASSERT( x509parse_crtfile( &crt, crt_file ) == 0 );
 
-    if( strcmp( {entity}, "valid_from" ) == 0 )
-        TEST_ASSERT( x509parse_time_expired( &crt.valid_from ) == {result} );
-    else if( strcmp( {entity}, "valid_to" ) == 0 )
-        TEST_ASSERT( x509parse_time_expired( &crt.valid_to ) == {result} );
+    if( strcmp( entity, "valid_from" ) == 0 )
+        TEST_ASSERT( x509parse_time_expired( &crt.valid_from ) == result );
+    else if( strcmp( entity, "valid_to" ) == 0 )
+        TEST_ASSERT( x509parse_time_expired( &crt.valid_to ) == result );
     else
         TEST_ASSERT( "Unknown entity" == 0 );
 
     x509_free( &crt );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_keyfile_rsa:key_file:password:#result
+/* BEGIN_CASE */
+void x509parse_keyfile_rsa( char *key_file, char *password, int result )
 {
     rsa_context rsa;
     int res;
-    char *pwd = {password};
+    char *pwd = password;
 
     memset( &rsa, 0, sizeof( rsa_context ) );
 
     if( strcmp( pwd, "NULL" ) == 0 )
         pwd = NULL;
 
-    res = x509parse_keyfile_rsa( &rsa, {key_file}, pwd );
+    res = x509parse_keyfile_rsa( &rsa, key_file, pwd );
 
-    TEST_ASSERT( res == {result} );
+    TEST_ASSERT( res == result );
 
     if( res == 0 )
     {
@@ -185,19 +188,19 @@
 
     rsa_free( &rsa );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_public_keyfile_rsa:key_file:#result
+/* BEGIN_CASE */
+void x509parse_public_keyfile_rsa( char *key_file, int result )
 {
     rsa_context rsa;
     int res;
 
     memset( &rsa, 0, sizeof( rsa_context ) );
 
-    res = x509parse_public_keyfile_rsa( &rsa, {key_file} );
+    res = x509parse_public_keyfile_rsa( &rsa, key_file );
 
-    TEST_ASSERT( res == {result} );
+    TEST_ASSERT( res == result );
 
     if( res == 0 )
     {
@@ -206,19 +209,19 @@
 
     rsa_free( &rsa );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_public_keyfile_ec:key_file:#result
+/* BEGIN_CASE */
+void x509parse_public_keyfile_ec( char *key_file, int result )
 {
     pk_context ctx;
     int res;
 
     pk_init( &ctx );
 
-    res = x509parse_public_keyfile( &ctx, {key_file} );
+    res = x509parse_public_keyfile( &ctx, key_file );
 
-    TEST_ASSERT( res == {result} );
+    TEST_ASSERT( res == result );
 
     if( res == 0 )
     {
@@ -230,19 +233,19 @@
 
     pk_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_keyfile_ec:key_file:password:#result
+/* BEGIN_CASE */
+void x509parse_keyfile_ec( char *key_file, char *password, int result )
 {
     pk_context ctx;
     int res;
 
     pk_init( &ctx );
 
-    res = x509parse_keyfile( &ctx, {key_file}, {password} );
+    res = x509parse_keyfile( &ctx, key_file, password );
 
-    TEST_ASSERT( res == {result} );
+    TEST_ASSERT( res == result );
 
     if( res == 0 )
     {
@@ -254,10 +257,10 @@
 
     pk_free( &ctx );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_crt:crt_data:result_str:#result
+/* BEGIN_CASE */
+void x509parse_crt( char *crt_data, char *result_str, int result )
 {
     x509_cert   crt;
     unsigned char buf[2000];
@@ -268,25 +271,25 @@
     memset( buf, 0, 2000 );
     memset( output, 0, 2000 );
 
-    data_len = unhexify( buf, {crt_data} );
+    data_len = unhexify( buf, crt_data );
 
-    TEST_ASSERT( x509parse_crt( &crt, buf, data_len ) == ( {result} ) );
-    if( ( {result} ) == 0 )
+    TEST_ASSERT( x509parse_crt( &crt, buf, data_len ) == ( result ) );
+    if( ( result ) == 0 )
     {
         res = x509parse_cert_info( (char *) output, 2000, "", &crt );
-        
+
         TEST_ASSERT( res != -1 );
         TEST_ASSERT( res != -2 );
 
-        TEST_ASSERT( strcmp( (char *) output, {result_str} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 );
     }
 
     x509_free( &crt );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_crl:crl_data:result_str:#result
+/* BEGIN_CASE */
+void x509parse_crl( char *crl_data, char *result_str, int result )
 {
     x509_crl   crl;
     unsigned char buf[2000];
@@ -297,25 +300,25 @@
     memset( buf, 0, 2000 );
     memset( output, 0, 2000 );
 
-    data_len = unhexify( buf, {crl_data} );
+    data_len = unhexify( buf, crl_data );
 
-    TEST_ASSERT( x509parse_crl( &crl, buf, data_len ) == ( {result} ) );
-    if( ( {result} ) == 0 )
+    TEST_ASSERT( x509parse_crl( &crl, buf, data_len ) == ( result ) );
+    if( ( result ) == 0 )
     {
         res = x509parse_crl_info( (char *) output, 2000, "", &crl );
-        
+
         TEST_ASSERT( res != -1 );
         TEST_ASSERT( res != -2 );
 
-        TEST_ASSERT( strcmp( (char *) output, {result_str} ) == 0 );
+        TEST_ASSERT( strcmp( (char *) output, result_str ) == 0 );
     }
 
     x509_crl_free( &crl );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509parse_key_rsa:key_data:result_str:#result
+/* BEGIN_CASE */
+void x509parse_key_rsa( char *key_data, char *result_str, int result )
 {
     rsa_context   rsa;
     unsigned char buf[2000];
@@ -327,21 +330,21 @@
     memset( buf, 0, 2000 );
     memset( output, 0, 2000 );
 
-    data_len = unhexify( buf, {key_data} );
+    data_len = unhexify( buf, key_data );
 
-    TEST_ASSERT( x509parse_key_rsa( &rsa, buf, data_len, NULL, 0 ) == ( {result} ) );
-    if( ( {result} ) == 0 )
+    TEST_ASSERT( x509parse_key_rsa( &rsa, buf, data_len, NULL, 0 ) == ( result ) );
+    if( ( result ) == 0 )
     {
         TEST_ASSERT( 1 );
     }
 
     rsa_free( &rsa );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-x509_selftest:
+/* BEGIN_CASE */
+void x509_selftest()
 {
     TEST_ASSERT( x509_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_x509write.function b/tests/suites/test_suite_x509write.function
index b4f7835..680dfb4 100644
--- a/tests/suites/test_suite_x509write.function
+++ b/tests/suites/test_suite_x509write.function
@@ -1,16 +1,18 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/x509write.h>
 #include <polarssl/x509.h>
 #include <polarssl/pem.h>
 #include <polarssl/oid.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_X509_WRITE_C:POLARSSL_BIGNUM_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ * depends_on:POLARSSL_X509_WRITE_C:POLARSSL_BIGNUM_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-x509_cert_req_check:key_file:#md_type:cert_req_check_file
+/* BEGIN_CASE */
+void x509_cert_req_check( char *key_file, int md_type,
+                          char *cert_req_check_file )
 {
     rsa_context rsa;
     pem_context pem;
@@ -41,17 +43,17 @@
     strcpy( cur->name, "NL" );
 
     memset( &rsa, 0, sizeof(rsa_context) );
-    ret = x509parse_keyfile_rsa( &rsa, {key_file}, NULL );
+    ret = x509parse_keyfile_rsa( &rsa, key_file, NULL );
     TEST_ASSERT( ret == 0 );
     if( ret != 0 )
-        return 0;
+        return;
 
-    ret = x509_write_cert_req( buf, 4000, &rsa, &req_name, {md_type} );
+    ret = x509_write_cert_req( buf, 4000, &rsa, &req_name, md_type );
     TEST_ASSERT( ret >= 0 );
 
     c = buf + 3999 - ret;
 
-    f = fopen( {cert_req_check_file}, "r" );
+    f = fopen( cert_req_check_file, "r" );
     TEST_ASSERT( f != NULL );
     fread( check_buf, 1, 4000, f );
     fclose( f );
@@ -71,4 +73,4 @@
     rsa_free( &rsa );
     pem_free( &pem );
 }
-END_CASE
+/* END_CASE */
diff --git a/tests/suites/test_suite_xtea.function b/tests/suites/test_suite_xtea.function
index e0ad026..748b50c 100644
--- a/tests/suites/test_suite_xtea.function
+++ b/tests/suites/test_suite_xtea.function
@@ -1,13 +1,15 @@
-BEGIN_HEADER
+/* BEGIN_HEADER */
 #include <polarssl/xtea.h>
-END_HEADER
+/* END_HEADER */
 
-BEGIN_DEPENDENCIES
-depends_on:POLARSSL_XTEA_C
-END_DEPENDENCIES
+/* BEGIN_DEPENDENCIES
+ *depends_on:POLARSSL_XTEA_C
+ * END_DEPENDENCIES
+ */
 
-BEGIN_CASE
-xtea_encrypt_ecb:hex_key_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void xtea_encrypt_ecb( char *hex_key_string, char *hex_src_string,
+                       char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -20,19 +22,20 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
     xtea_setup( &ctx, key_str );
     TEST_ASSERT( xtea_crypt_ecb( &ctx, XTEA_ENCRYPT, src_str, output ) == 0 );
     hexify( dst_str, output, 8 );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-xtea_decrypt_ecb:hex_key_string:hex_src_string:hex_dst_string
+/* BEGIN_CASE */
+void xtea_decrypt_ecb( char *hex_key_string, char *hex_src_string,
+                       char *hex_dst_string )
 {
     unsigned char key_str[100];
     unsigned char src_str[100];
@@ -45,20 +48,20 @@
     memset(dst_str, 0x00, 100);
     memset(output, 0x00, 100);
 
-    unhexify( key_str, {hex_key_string} );
-    unhexify( src_str, {hex_src_string} );
+    unhexify( key_str, hex_key_string );
+    unhexify( src_str, hex_src_string );
 
     xtea_setup( &ctx, key_str );
     TEST_ASSERT( xtea_crypt_ecb( &ctx, XTEA_DECRYPT, src_str, output ) == 0 );
     hexify( dst_str, output, 8 );
 
-    TEST_ASSERT( strcmp( (char *) dst_str, {hex_dst_string} ) == 0 );
+    TEST_ASSERT( strcmp( (char *) dst_str, hex_dst_string ) == 0 );
 }
-END_CASE
+/* END_CASE */
 
-BEGIN_CASE
-xtea_selftest:
+/* BEGIN_CASE */
+void xtea_selftest()
 {
     TEST_ASSERT( xtea_self_test( 0 ) == 0 );
 }
-END_CASE
+/* END_CASE */
