diff --git a/tests/scripts/mbedtls_test.py b/tests/scripts/mbedtls_test.py
index b8f8a37..7dba1b2 100644
--- a/tests/scripts/mbedtls_test.py
+++ b/tests/scripts/mbedtls_test.py
@@ -1,24 +1,33 @@
+# Greentea host test script for on-target tests.
+#
+# Copyright (C) 2006-2017, ARM Limited, All Rights Reserved
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This file is part of mbed TLS (https://tls.mbed.org)
+
+
 """
-  Greentea host test script for on-target tests.
+Greentea host test script for on-target tests.
 
-  Copyright (C) 2006-2017, ARM Limited, All Rights Reserved
-  SPDX-License-Identifier: Apache-2.0
-
-  Licensed under the Apache License, Version 2.0 (the "License"); you may
-  not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-
-  This file is part of mbed TLS (https://tls.mbed.org)
+Host test script for testing mbed TLS test suites on target. Implements
+BaseHostTest to handle key,value pairs (events) coming from mbed TLS
+tests. Reads data file corresponding to the executing binary and dispatches
+test cases.
 """
 
+
 import re
 import os
 import binascii
@@ -38,7 +47,9 @@
 
     def parse(self, data_file):
         """
+        Data file parser.
 
+        :param data_file: Data file path
         """
         with open(data_file, 'r') as f:
             self.__parse(f)
@@ -46,6 +57,11 @@
     @staticmethod
     def __escaped_split(str, ch):
         """
+        Splits str on ch except when escaped.
+
+        :param str: String to split
+        :param ch: Split character
+        :return: List of splits
         """
         if len(ch) > 1:
             raise ValueError('Expected split character. Found string!')
@@ -65,6 +81,10 @@
 
     def __parse(self, file):
         """
+        Parses data file using supplied file object.
+
+        :param file: Data file object
+        :return:
         """
         for line in file:
             line = line.strip()
@@ -93,6 +113,7 @@
 
     def get_test_data(self):
         """
+        Returns test data.
         """
         return self.tests
 
@@ -115,6 +136,7 @@
 
     def __init__(self):
         """
+        Constructor initialises test index to 0.
         """
         super(MbedTlsTest, self).__init__()
         self.tests = []
@@ -130,6 +152,7 @@
 
     def setup(self):
         """
+        Setup hook implementation. Reads test suite data file and parses out tests.
         """
         binary_path = self.get_config_item('image_path')
         script_dir = os.path.split(os.path.abspath(__file__))[0]
@@ -148,6 +171,7 @@
 
     def print_test_info(self):
         """
+        Prints test summary read by Greentea to detect test cases.
         """
         self.log('{{__testcase_count;%d}}' % len(self.tests))
         for name, _, _, _ in self.tests:
@@ -156,7 +180,7 @@
     @staticmethod
     def align_32bit(b):
         """
-        4 byte aligns byte array.
+        4 byte aligns input byte array.
 
         :return:
         """
@@ -167,8 +191,8 @@
         """
         Converts Hex string representation to byte array
 
-        :param hex_str:
-        :return:
+        :param hex_str: Hex in string format.
+        :return: Output Byte array
         """
         assert hex_str[0] == '"' and hex_str[len(hex_str) - 1] == '"', \
             "HEX test parameter missing '\"': %s" % hex_str
@@ -183,8 +207,8 @@
         """
         Coverts i to bytearray in big endian format.
 
-        :param i:
-        :return:
+        :param i: Input integer
+        :return: Output bytes array in big endian or network order
         """
         b = bytearray([((i >> x) & 0xff) for x in [24, 16, 8, 0]])
         return b
@@ -193,10 +217,10 @@
         """
         Converts test vector into a byte array that can be sent to the target.
 
-        :param function_id:
-        :param deps:
-        :param parameters:
-        :return:
+        :param function_id: Test Function Identifier
+        :param deps: Dependency list
+        :param parameters: Test function input parameters
+        :return: Byte array and its length
         """
         b = bytearray([len(deps)])
         if len(deps):
@@ -243,10 +267,10 @@
         """
         Runs the test.
 
-        :param name:
-        :param function_id:
-        :param deps:
-        :param args:
+        :param name: Test name
+        :param function_id: function identifier
+        :param deps: Dependencies list
+        :param args: test parameters
         :return:
         """
         self.log("Running: %s" % name)
@@ -256,6 +280,11 @@
 
     @staticmethod
     def get_result(value):
+        """
+        Converts result from string type to integer
+        :param value: Result code in string
+        :return: Integer result code
+        """
         try:
             return int(value)
         except ValueError:
@@ -264,13 +293,25 @@
 
     @event_callback('GO')
     def on_go(self, key, value, timestamp):
+        """
+        Called on key "GO". Kicks off test execution.
+
+        :param key: Event key
+        :param value: Value. ignored
+        :param timestamp: Timestamp ignored.
+        :return:
+        """
         self.run_next_test()
 
     @event_callback("R")
     def on_result(self, key, value, timestamp):
         """
-        Handle result.
+        Handle result. Prints test start, finish prints required by Greentea to detect test execution.
 
+        :param key: Event key
+        :param value: Value. ignored
+        :param timestamp: Timestamp ignored.
+        :return:
         """
         int_val = self.get_result(value)
         name, function, deps, args = self.tests[self.test_index]
@@ -282,11 +323,12 @@
     @event_callback("F")
     def on_failure(self, key, value, timestamp):
         """
-        Handles test execution failure. Hence marking test as skipped.
+        Handles test execution failure. That means dependency not supported or
+        Test function not supported. Hence marking test as skipped.
 
-        :param key:
-        :param value:
-        :param timestamp:
+        :param key: Event key
+        :param value: Value. ignored
+        :param timestamp: Timestamp ignored.
         :return:
         """
         int_val = self.get_result(value)
