Tests added

Signed-off-by: Pascal Brand <pascal.brand@st.com>
diff --git a/ta/os_test/testframework.c b/ta/os_test/testframework.c
new file mode 100644
index 0000000..823a72a
--- /dev/null
+++ b/ta/os_test/testframework.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) 2014, STMicroelectronics International N.V.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "tee_internal_api.h"
+#include "testframework.h"
+
+/*
+ * TEE_BigIntConvertFromString
+ *
+ * !! Not part of the spec !!
+ *
+ * Assigns dest the value of the src, where src is a zero-terminated character
+ * string. If the src starts with a valid number, the valid part will be
+ * converted and the rest of the src will not be parsed further. src is assumed
+ * to be in base 16. Returns -1 if the src was malformed, and the number of base
+ * digits converted (not including leading zeros) if the conversion was OK. If
+ * the src is a null-ptr we return -1. If the src is empty, we don't touch dest
+ * and just returns 0. If the src only consists of white spaces, we set dest to
+ * zero returns 0.
+ */
+int TEE_BigIntConvertFromString(TEE_BigInt *dest, const char *src)
+{
+	mpanum mpa_dest = (mpa_num_base *) dest;
+
+	return mpa_set_str(mpa_dest, src);
+}
+
+/*
+ * TEE_BigIntConvertToString
+ *
+ * !! Not part of the spec !!
+ *
+ * Prints a zero-terminated string representation of src into dest. The need
+ * length of dest is the space needed to print src plus additional chars for the
+ * minus sign and the terminating '\0' char. If grouping is used (!= 0), we pad
+ * the number string with zeros to the left, up to the current group size.  A
+ * pointer to str is returned. If something went wrong, we return 0.
+ *
+ * mode is one of the following:
+ *     TEE_MATHAPI_PRINT_MODE_HEX_LC   : output in lower case hex
+ *     TEE_MATHAPI_PRINT_MODE_DEC      : output in decimal
+ */
+char *TEE_BigIntConvertToString(char *dest, int mode, int groupsize,
+				const TEE_BigInt *src)
+{
+	mpanum mpa_src = (mpa_num_base *) src;
+
+	if (dest == 0) {
+		dest = TEE_Malloc(mpa_get_str_size(), 0);
+		if (dest == 0)
+			return 0;
+	}
+	return mpa_get_str(dest, mode, groupsize, mpa_src);
+}
+
+static uint8_t myrand(void)
+{
+	static uint32_t lcg_state = 17;
+	static const uint32_t a = 1664525;
+	static const uint32_t c = 1013904223;
+
+	lcg_state = (a * lcg_state + c);
+	return (uint8_t) (lcg_state >> 24);
+}
+
+static int getrand(int min, int max)
+{
+	return (myrand() % (max - min)) + min;
+}
+
+static char nibble_to_char(int c)
+{
+	if (c < 10)
+		return '0' + (char)c;
+	c -= 10;
+	return 'A' + (char)c;
+}
+
+static char getrandchar(int base)
+{
+	return nibble_to_char(getrand(0, base == 16 ? 15 : 9));
+}
+
+/*
+ *  Function:   tb_get_random_str
+ *
+ *  Sets str to a random number in base 16 of max length
+ *  MAX_RAND_DIGITS. str must point to a memory arear which is
+ *  at least MAX_RAND_STR_SIZE big.
+ *  if allow_neg is 1 we can generate negative numbers
+ */
+void tb_get_random_str(char *str, int allow_neg)
+{
+	char *ptr;
+	int r;
+	int neg = 0;
+	int j;
+	char c;
+
+	ptr = str;
+	if (allow_neg) {
+		neg = getrand(0, 1);
+		if (neg)
+			*ptr++ = '-';
+	}
+	r = getrand(0, MAX_RAND_DIGITS);
+	if (r == 0 && neg) {
+		*str++ = '0';
+		*str = '\0';
+		return;
+	}
+
+	for (j = 0; j < r; j++) {
+		c = getrandchar(16);
+
+		/* avoid leading zeros since that is difficult to test later */
+		if (j == 0 && c == '0') {
+			while ((c = getrandchar(16)) == '0')
+				;
+		}
+		*ptr++ = c;
+	}
+	*ptr++ = '\0';
+}
+
+/*
+ *  Function:   tb_set_random_value
+ *
+ *  Sets a to a random value and returns the representation in str (in base
+ *  "base")
+ */
+void tb_set_random_value(TEE_BigInt *a, char *str, int allow_neg)
+{
+	do {
+		tb_get_random_str(str, allow_neg);
+	} while (*str == '\0');
+
+	TEE_BigIntConvertFromString(a, str);
+}
+
+static uint32_t mempool_u32[mpa_scratch_mem_size_in_U32(10, 2048)];
+mpa_scratch_mem mempool = (void *)&mempool_u32;
+
+void tb_main(void)
+{
+	mpa_init_scratch_mem(mempool, 10, 2048);
+
+	tb_var();
+	tb_conv();
+	tb_cmp();
+	tb_addsub();
+	tb_mul();
+	tb_div();
+	tb_modulus();
+	tb_prime();
+
+	ALL_PASSED;
+}