xref: /netbsd-src/crypto/external/cpl/trousers/dist/src/tcs/tcsi_selftest.c (revision 2d5f7628c5531eb583b9313ac2fd1cf8582b4479)
1 
2 /*
3  * Licensed Materials - Property of IBM
4  *
5  * trousers - An open source TCG Software Stack
6  *
7  * (C) Copyright International Business Machines Corp. 2004
8  *
9  */
10 
11 
12 #include <stdlib.h>
13 #include <stdio.h>
14 #include <string.h>
15 #include <inttypes.h>
16 
17 #include "trousers/tss.h"
18 #include "trousers_types.h"
19 #include "tcs_tsp.h"
20 #include "tcsps.h"
21 #include "tcs_utils.h"
22 #include "tcs_int_literals.h"
23 #include "capabilities.h"
24 #include "tcslog.h"
25 #include "req_mgr.h"
26 #include "tcsd_wrap.h"
27 #include "tcsd.h"
28 
29 
30 TSS_RESULT
TCSP_SelfTestFull_Internal(TCS_CONTEXT_HANDLE hContext)31 TCSP_SelfTestFull_Internal(TCS_CONTEXT_HANDLE hContext)	/* in */
32 {
33 	UINT64 offset = 0;
34 	UINT32 paramSize;
35 	TSS_RESULT result;
36 	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
37 
38 	LogDebug("Entering Self Test Full");
39 	if ((result = ctx_verify_context(hContext)))
40 		return result;
41 
42 	if ((result = tpm_rqu_build(TPM_ORD_SelfTestFull, &offset, txBlob, NULL)))
43 		return result;
44 
45 	if ((result = req_mgr_submit_req(txBlob)))
46 		return result;
47 
48 	result = UnloadBlob_Header(txBlob, &paramSize);
49 	LogResult("Self Test Full", result);
50 	return result;
51 }
52 
53 TSS_RESULT
TCSP_CertifySelfTest_Internal(TCS_CONTEXT_HANDLE hContext,TCS_KEY_HANDLE keyHandle,TCPA_NONCE antiReplay,TPM_AUTH * privAuth,UINT32 * sigSize,BYTE ** sig)54 TCSP_CertifySelfTest_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
55 			      TCS_KEY_HANDLE keyHandle,	/* in */
56 			      TCPA_NONCE antiReplay,	/* in */
57 			      TPM_AUTH * privAuth,	/* in, out */
58 			      UINT32 * sigSize,	/* out */
59 			      BYTE ** sig)	/* out */
60 {
61 	UINT64 offset = 0;
62 	UINT32 paramSize;
63 	TSS_RESULT result;
64 	TCPA_KEY_HANDLE keySlot;
65 	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
66 
67 	LogDebug("Entering Certify Self Test");
68 
69 	if ((result = ctx_verify_context(hContext)))
70 		goto done;
71 
72 	if (privAuth != NULL) {
73 		LogDebug("Auth Used");
74 		if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle)))
75 			goto done;
76 	} else {
77 		LogDebug("No Auth");
78 	}
79 
80 	if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot)))
81 		goto done;
82 
83 	if ((result = tpm_rqu_build(TPM_ORD_CertifySelfTest, &offset, txBlob, keySlot,
84 				    TPM_NONCE_SIZE, antiReplay.nonce, privAuth, NULL)))
85 		return result;
86 
87 	if ((result = req_mgr_submit_req(txBlob)))
88 		goto done;
89 
90 	result = UnloadBlob_Header(txBlob, &paramSize);
91 	if (!result) {
92 		result = tpm_rsp_parse(TPM_ORD_CertifySelfTest, txBlob, paramSize, sigSize, sig,
93 				       privAuth, NULL);
94 	}
95 	LogResult("Certify Self Test", result);
96 done:
97 	auth_mgr_release_auth(privAuth, NULL, hContext);
98 	return result;
99 }
100 
101 TSS_RESULT
TCSP_GetTestResult_Internal(TCS_CONTEXT_HANDLE hContext,UINT32 * outDataSize,BYTE ** outData)102 TCSP_GetTestResult_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
103 			    UINT32 * outDataSize,	/* out */
104 			    BYTE ** outData)	/* out */
105 {
106 	TSS_RESULT result;
107 	UINT32 paramSize;
108 	UINT64 offset = 0;
109 	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];
110 
111 	LogDebug("Entering Get Test Result");
112 	if ((result = ctx_verify_context(hContext)))
113 		return result;
114 
115 	if ((result = tpm_rqu_build(TPM_ORD_GetTestResult, &offset, txBlob, NULL)))
116 		return result;
117 
118 	if ((result = req_mgr_submit_req(txBlob)))
119 		return result;
120 
121 	result = UnloadBlob_Header(txBlob, &paramSize);
122 	if (!result) {
123 		result = tpm_rsp_parse(TPM_ORD_GetTestResult, txBlob, paramSize, outDataSize,
124 				       outData, NULL, NULL);
125 	}
126 	LogResult("Get Test Result", result);
127 	return result;
128 }
129 
130