test(realm): add tests for realm attestation

With this patch, TFTF adds two tests for realm attestation. One tests
the full process of retrieving the attestation token from the host. The
second one triggers a failure by calling RSI_ATTEST_TOKEN_CONTINUE
without calling RSI_ATTEST_TOKEN_INIT first.

Signed-off-by: Juan Pablo Conde <juanpablo.conde@arm.com>
Change-Id: I885402377af1f02ce7e90c80dbe1079fe4c1b178
diff --git a/realm/realm_rsi.c b/realm/realm_rsi.c
index b2a49d4..db2394c 100644
--- a/realm/realm_rsi.c
+++ b/realm/realm_rsi.c
@@ -87,3 +87,57 @@
 	}
 	return res.ret0;
 }
+
+/* This function will initialize the attestation context */
+u_register_t rsi_attest_token_init(u_register_t challenge_0,
+				   u_register_t challenge_1,
+				   u_register_t challenge_2,
+				   u_register_t challenge_3,
+				   u_register_t challenge_4,
+				   u_register_t challenge_5,
+				   u_register_t challenge_6,
+				   u_register_t challenge_7,
+				   u_register_t *out_token_upper_bound)
+{
+	smc_ret_values_ext res = {};
+
+	tftf_smc_no_retval_x8(&(smc_args_ext) {
+		RSI_ATTEST_TOKEN_INIT,
+		challenge_0,
+		challenge_1,
+		challenge_2,
+		challenge_3,
+		challenge_4,
+		challenge_5,
+		challenge_6,
+		challenge_7
+	},
+	&res);
+
+	if (res.ret0 == RSI_SUCCESS) {
+		*out_token_upper_bound = res.ret1;
+	}
+
+	return res.ret0;
+}
+
+/* This function will retrieve the (or part of) attestation token */
+u_register_t rsi_attest_token_continue(u_register_t buffer_addr,
+					u_register_t offset,
+					u_register_t buffer_size,
+					u_register_t *bytes_copied)
+{
+	smc_ret_values res = {};
+
+	res = tftf_smc(&(smc_args) {
+		RSI_ATTEST_TOKEN_CONTINUE,
+		buffer_addr,
+		offset,
+		buffer_size
+	});
+
+	if ((res.ret0 == RSI_SUCCESS) || (res.ret0 == RSI_INCOMPLETE)) {
+		*bytes_copied = res.ret1;
+	}
+	return res.ret0;
+}