diff --git a/tests/scripts/generate_test_code.py b/tests/scripts/generate_test_code.py
index 26d1c29..ce6f88c 100755
--- a/tests/scripts/generate_test_code.py
+++ b/tests/scripts/generate_test_code.py
@@ -122,7 +122,7 @@
 functions are populated with checks and return codes by this script.
 
 Template file contains "replacement" fields that are formatted
-strings processed by Python str.format() method.
+strings processed by Python string.Template.substitute() method.
 
 This script:
 ============
@@ -132,9 +132,9 @@
 This script replaces following fields in the template and generates
 the test source file:
 
-{test_common_helpers}       <-- All common code from helpers.function
+$test_common_helpers        <-- All common code from helpers.function
                                 is substituted here.
-{functions_code}            <-- Test functions are substituted here
+$functions_code             <-- Test functions are substituted here
                                 from the input test_suit_xyz.function
                                 file. C preprocessor checks are generated
                                 for the build dependencies specified
@@ -143,21 +143,21 @@
                                 functions with code to expand the
                                 string parameters read from the data
                                 file.
-{expression_code}           <-- This script enumerates the
+$expression_code            <-- This script enumerates the
                                 expressions in the .data file and
                                 generates code to handle enumerated
                                 expression Ids and return the values.
-{dep_check_code}            <-- This script enumerates all
+$dep_check_code             <-- This script enumerates all
                                 build dependencies and generate
                                 code to handle enumerated build
                                 dependency Id and return status: if
                                 the dependency is defined or not.
-{dispatch_code}             <-- This script enumerates the functions
+$dispatch_code              <-- This script enumerates the functions
                                 specified in the input test data file
                                 and generates the initializer for the
                                 function table in the template
                                 file.
-{platform_code}             <-- Platform specific setup and test
+$platform_code              <-- Platform specific setup and test
                                 dispatch code.
 
 """
@@ -167,6 +167,7 @@
 import os
 import re
 import sys
+import string
 import argparse
 
 
@@ -967,7 +968,7 @@
         for line_no, line in enumerate(template_f.readlines(), 1):
             # Update line number. +1 as #line directive sets next line number
             snippets['line_no'] = line_no + 1
-            code = line.format(**snippets)
+            code = string.Template(line).substitute(**snippets)
             c_f.write(code)
 
 
diff --git a/tests/suites/main_test.function b/tests/suites/main_test.function
index 9b37782..2ba919c 100644
--- a/tests/suites/main_test.function
+++ b/tests/suites/main_test.function
@@ -3,17 +3,17 @@
  * *** THIS FILE HAS BEEN MACHINE GENERATED ***
  *
  * This file has been machine generated using the script:
- * {generator_script}
+ * $generator_script
  *
- * Test file      : {test_file}
+ * Test file      : $test_file
  *
  * The following files were used to create this file.
  *
- *      Main code file      : {test_main_file}
- *      Platform code file  : {test_platform_file}
- *      Helper file         : {test_common_helper_file}
- *      Test suite file     : {test_case_file}
- *      Test suite data     : {test_case_data_file}
+ *      Main code file      : $test_main_file
+ *      Platform code file  : $test_platform_file
+ *      Helper file         : $test_common_helper_file
+ *      Test suite file     : $test_case_file
+ *      Test suite data     : $test_case_data_file
  *
  *
  *  This file is part of Mbed TLS (https://tls.mbed.org)
@@ -29,9 +29,9 @@
 /*----------------------------------------------------------------------------*/
 /* Common helper code */
 
-{test_common_helpers}
+$test_common_helpers
 
-#line {line_no} "suites/main_test.function"
+#line $line_no "suites/main_test.function"
 
 
 /*----------------------------------------------------------------------------*/
@@ -40,9 +40,9 @@
 
 #define TEST_SUITE_ACTIVE
 
-{functions_code}
+$functions_code
 
-#line {line_no} "suites/main_test.function"
+#line $line_no "suites/main_test.function"
 
 
 /*----------------------------------------------------------------------------*/
@@ -54,7 +54,7 @@
  *              For optimizing space for embedded targets each expression/macro
  *              is identified by a unique identifier instead of string literals.
  *              Identifiers and evaluation code is generated by script:
- *              {generator_script}
+ *              $generator_script
  *
  * \param exp_id    Expression identifier.
  * \param out_value Pointer to int to hold the integer.
@@ -62,24 +62,24 @@
  * \return       0 if exp_id is found. 1 otherwise.
  */
 int get_expression( int32_t exp_id, int32_t * out_value )
-{{
+{
     int ret = KEY_VALUE_MAPPING_FOUND;
 
     (void) exp_id;
     (void) out_value;
 
     switch( exp_id )
-    {{
-{expression_code}
-#line {line_no} "suites/main_test.function"
+    {
+$expression_code
+#line $line_no "suites/main_test.function"
         default:
-           {{
+           {
                 ret = KEY_VALUE_MAPPING_NOT_FOUND;
-           }}
+           }
            break;
-    }}
+    }
     return( ret );
-}}
+}
 
 
 /**
@@ -87,27 +87,27 @@
  *              For optimizing space for embedded targets each dependency
  *              is identified by a unique identifier instead of string literals.
  *              Identifiers and check code is generated by script:
- *              {generator_script}
+ *              $generator_script
  *
  * \param exp_id    Dependency identifier.
  *
  * \return       DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED
  */
 int dep_check( int dep_id )
-{{
+{
     int ret = DEPENDENCY_NOT_SUPPORTED;
 
     (void) dep_id;
 
     switch( dep_id )
-    {{
-{dep_check_code}
-#line {line_no} "suites/main_test.function"
+    {
+$dep_check_code
+#line $line_no "suites/main_test.function"
         default:
             break;
-    }}
+    }
     return( ret );
-}}
+}
 
 
 /**
@@ -125,14 +125,14 @@
 /**
  * \brief       Table of test function wrappers. Used by dispatch_test().
  *              This table is populated by script:
- *              {generator_script}
+ *              $generator_script
  *
  */
 TestWrapper_t test_funcs[] =
-{{
-{dispatch_code}
-#line {line_no} "suites/main_test.function"
-}};
+{
+$dispatch_code
+#line $line_no "suites/main_test.function"
+};
 
 
 /**
@@ -145,25 +145,25 @@
  *               DISPATCH_UNSUPPORTED_SUITE if not compile time enabled.
  */
 int dispatch_test( int func_idx, void ** params )
-{{
+{
     int ret = DISPATCH_TEST_SUCCESS;
     TestWrapper_t fp = NULL;
 
     if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) )
-    {{
+    {
         fp = test_funcs[func_idx];
         if ( fp )
             fp( params );
         else
-            ret = ( DISPATCH_UNSUPPORTED_SUITE );
-    }}
+            ret = DISPATCH_UNSUPPORTED_SUITE;
+    }
     else
-    {{
-        ret = ( DISPATCH_TEST_FN_NOT_FOUND );
-    }}
+    {
+        ret = DISPATCH_TEST_FN_NOT_FOUND;
+    }
 
     return( ret );
-}}
+}
 
 
 /**
@@ -176,28 +176,28 @@
  *               DISPATCH_UNSUPPORTED_SUITE if not compile time enabled.
  */
 int check_test( int func_idx )
-{{
+{
     int ret = DISPATCH_TEST_SUCCESS;
     TestWrapper_t fp = NULL;
 
     if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) )
-    {{
+    {
         fp = test_funcs[func_idx];
         if ( fp == NULL )
-            ret = ( DISPATCH_UNSUPPORTED_SUITE );
-    }}
+            ret = DISPATCH_UNSUPPORTED_SUITE;
+    }
     else
-    {{
-        ret = ( DISPATCH_TEST_FN_NOT_FOUND );
-    }}
+    {
+        ret = DISPATCH_TEST_FN_NOT_FOUND;
+    }
 
     return( ret );
-}}
+}
 
 
-{platform_code}
+$platform_code
 
-#line {line_no} "suites/main_test.function"
+#line $line_no "suites/main_test.function"
 
 /*----------------------------------------------------------------------------*/
 /* Main Test code */
@@ -212,17 +212,17 @@
  * \return       Exit code.
  */
 int main( int argc, const char *argv[] )
-{{
+{
     int ret = platform_setup();
     if( ret != 0 )
-    {{
+    {
         mbedtls_fprintf( stderr,
                          "FATAL: Failed to initialize platform - error %d\n",
                          ret );
         return( -1 );
-    }}
+    }
     ret = execute_tests( argc, argv );
     platform_teardown();
     return( ret );
-}}
+}
 
