diff --git a/tests/scripts/mbedtls_test.py b/tests/scripts/mbedtls_test.py
index fa5b507..b43e613 100644
--- a/tests/scripts/mbedtls_test.py
+++ b/tests/scripts/mbedtls_test.py
@@ -1,6 +1,6 @@
 """
 mbed SDK
-Copyright (c) 2011-2013 ARM Limited
+Copyright (c) 2017 ARM Limited
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
@@ -17,7 +17,7 @@
 
 import re
 import os
-import time
+import binascii
 from mbed_host_tests import BaseHostTest, event_callback
 
 
@@ -62,25 +62,23 @@
     def __parse(self, file):
         """
         """
-        line = file.readline().strip()
-        while line:
+        for line in file:
             line = line.strip()
             if len(line) == 0:
-                line = file.readline()
                 continue
             # Read test name
             name = line
 
             # Check dependencies
             deps = []
-            line = file.readline().strip()
+            line = file.next().strip()
             m = re.search('depends_on\:(.*)', line)
             if m:
                 deps = [int(x) for x in m.group(1).split(':')]
-                line = file.readline().strip()
+                line = file.next().strip()
 
             # Read test vectors
-            line = line.replace('\\n', '\n#')
+            line = line.replace('\\n', '\n')
             parts = self.__escaped_split(line, ':')
             function = int(parts[0])
             x = parts[1:]
@@ -88,7 +86,6 @@
             assert l % 2 == 0, "Number of test arguments should be even: %s" % line
             args = [(x[i * 2], x[(i * 2) + 1]) for i in range(len(x)/2)]
             self.tests.append((name, function, deps, args))
-            line = file.readline()
 
     def get_test_data(self):
         """
@@ -98,7 +95,8 @@
 
 class MbedTlsTest(BaseHostTest):
     """
-    Host test for mbed-tls target tests.
+    Event handler for mbedtls unit tests. This script is loaded at run time
+    by htrun while executing mbedtls unit tests.
     """
     # From suites/helpers.function
     DEPENDENCY_SUPPORTED = 0
@@ -172,29 +170,46 @@
             "HEX test parameter missing '\"': %s" % hex_str
         hex_str = hex_str.strip('"')
         assert len(hex_str) % 2 == 0, "HEX parameter len should be mod of 2: %s" % hex_str
-        b = bytearray()
 
-        for i in xrange(len(hex_str) / 2):
-            h = hex_str[i * 2] + hex_str[(i * 2) + 1]
-            try:
-                b += bytearray([int(h, 16)])
-            except ValueError:
-                raise ValueError("Invalid HEX value: %s" % hex_str)
+        b = binascii.unhexlify(hex_str)
         return b
 
-    def parameters_to_bytes(self, b, parameters):
+    @staticmethod
+    def int32_to_bigendian_bytes(i):
+        """
+        Coverts i to bytearray in big endian format.
+
+        :param i:
+        :return:
+        """
+        b = bytearray([((i >> x) & 0xff) for x in [24, 16, 8, 0]])
+        return b
+
+    def test_vector_to_bytes(self, function_id, deps, parameters):
+        """
+        Converts test vector into a byte array that can be sent to the target.
+
+        :param function_id:
+        :param deps:
+        :param parameters:
+        :return:
+        """
+        b = bytearray([len(deps)])
+        if len(deps):
+            b += bytearray(deps)
+        b += bytearray([function_id, len(parameters)])
         for typ, param in parameters:
             if typ == 'int' or typ == 'exp':
                 i = int(param)
                 b += 'I' if typ == 'int' else 'E'
                 self.align_32bit(b)
-                b += bytearray([((i >> x) & 0xff) for x in [24, 16, 8, 0]])
+                b += self.int32_to_bigendian_bytes(i)
             elif typ == 'char*':
                 param = param.strip('"')
                 i = len(param) + 1  # + 1 for null termination
                 b += 'S'
                 self.align_32bit(b)
-                b += bytearray([((i >> x) & 0xff) for x in [24, 16, 8, 0]])
+                b += self.int32_to_bigendian_bytes(i)
                 b += bytearray(list(param))
                 b += '\0'   # Null terminate
             elif typ == 'hex':
@@ -202,9 +217,10 @@
                 b += 'H'
                 self.align_32bit(b)
                 i = len(hb)
-                b += bytearray([((i >> x) & 0xff) for x in [24, 16, 8, 0]])
+                b += self.int32_to_bigendian_bytes(i)
                 b += hb
-        return b
+        length = self.int32_to_bigendian_bytes(len(b))
+        return b, length
 
     def run_next_test(self):
         """
@@ -214,19 +230,26 @@
         self.test_index += 1
         self.dep_index = 0
         if self.test_index < len(self.tests):
-            name, function, deps, args = self.tests[self.test_index]
-            self.log("Running: %s" % name)
-            bytes = bytearray([len(deps)])
-            if len(deps):
-                bytes += bytearray(deps)
-            bytes += bytearray([function, len(args)])
-            self.parameters_to_bytes(bytes, args)
-            key = bytearray([((len(bytes) >> x) & 0xff) for x in [24, 16, 8, 0]])
-            #self.log("Bytes: " + " ".join(["%x '%c'" % (x, x) for x in bytes]))
-            self.send_kv(key, bytes)
+            name, function_id, deps, args = self.tests[self.test_index]
+            self.run_test(name, function_id, deps, args)
         else:
             self.notify_complete(True)
 
+    def run_test(self, name, function_id, deps, args):
+        """
+        Runs the test.
+
+        :param name:
+        :param function_id:
+        :param deps:
+        :param args:
+        :return:
+        """
+        self.log("Running: %s" % name)
+
+        bytes, length = self.test_vector_to_bytes(function_id, deps, args)
+        self.send_kv(length, bytes)
+
     @staticmethod
     def get_result(value):
         try:
