4
#include <trousers/tss.h>
5
#include <trousers/trousers.h>
6
#include "spi_internal_types.h"
10
#include "daa_parameter.h"
12
setenv("TCSD_FOREGROUND", "1", 1);
14
// simulating Tspi_TPM_DAA_JoinInit (spi_daa.c)
15
TSS_RESULT Tspi_DAA_Join(TSS_HTPM hTPM, int stage, UINT32 inputSize0, BYTE *inputData0, UINT32 inputSize1, BYTE *inputData1, UINT32 *outputSize, BYTE **outputData) {
17
TCS_CONTEXT_HANDLE tcsContext;
18
TSS_HCONTEXT tspContext;
25
printf("[%s:%d] obj_tpm_is_connected(hTPM)\n", __FILE__, __LINE__);
26
if( (result = obj_tpm_is_connected( hTPM, &tcsContext)) != TSS_SUCCESS) return result;
27
printf("[%s:%d] obj_tpm_get_tsp_context(hTPM)\n", __FILE__, __LINE__);
28
if( (result = obj_tpm_get_tsp_context( hTPM, &tspContext)) != TSS_SUCCESS) return result;
29
printf("[%s:%d] obj_tpm_get_policy(hTPM)\n", __FILE__, __LINE__);
30
if( (result = obj_tpm_get_policy( hTPM, &hPolicy)) != TSS_SUCCESS) return result;
32
printf("[%s:%d] Trspi_LoadBlob_UINT32(&offset, TPM_ORD_DAA_Join, hashblob)\n", __FILE__, __LINE__);
33
Trspi_LoadBlob_UINT32(&offset, TPM_ORD_DAA_Join, hashblob); // hash TPM_COMMAND_CODE
34
printf("[%s:%d] Trspi_Hash(TSS_HASH_SHA1, offset, hashblob, digest.digest)\n",__FILE__, __LINE__);
35
Trspi_LoadBlob_BYTE(&offset, stage, hashblob); // hash stage
36
printf("[%s:%d] Trspi_LoadBlob_UINT32(&offset, 0, hashblob)\n",__FILE__, __LINE__);
38
Trspi_LoadBlob_UINT32(&offset, inputSize0, hashblob); // hash inputSize0
39
printf("[%s:%d] Trspi_LoadBlob_UINT32(&offset, 0, hashblob)\n",__FILE__, __LINE__);
40
Trspi_LoadBlob( &offset, inputSize0, hashblob, inputData0); // hash inputData0
42
Trspi_LoadBlob_UINT32(&offset, inputSize1, hashblob); // hash inputSize1
43
printf("[%s:%d] Trspi_LoadBlob_UINT32(&offset, 0, hashblob)\n",__FILE__, __LINE__);
44
Trspi_LoadBlob( &offset, inputSize1, hashblob, inputData1); // hash inputData1
45
Trspi_Hash(TSS_HASH_SHA1, offset, hashblob, digest.digest);
47
if ((result = secret_PerformAuth_OIAP(hTPM, TPM_ORD_DAA_Join,
49
&ownerAuth)) != TSS_SUCCESS) return result;
50
printf("[%s:%d] secret_PerformAuth_OIAP(hTPM, TPM_ORD_DAA_Join ret=%d\n",__FILE__, __LINE__, result);
53
/* step of the following call:
54
TCSP_DAAJoin tcsd_api/calltcsapi.c (define in spi_utils.h)
55
TCSP_DAAJoin_TP tcsd_api/tcstp.c (define in trctp.h)
58
printf("[%s:%d] TCSP_DAAJoin(%x,%x,%x,%x,%x,%x,%x)\n",__FILE__, __LINE__,
59
(int)hTPM, 0, inputSize0,(int)inputData0,inputSize1,(int)inputData1,(int)&ownerAuth);
60
if ( (result = TCSP_DaaJoin( tcsContext, hTPM, 0, inputSize0, inputData0, inputSize1, inputData1, &ownerAuth, outputSize, outputData)) != TSS_SUCCESS)
64
Trspi_LoadBlob_UINT32(&offset, result, hashblob);
65
Trspi_LoadBlob_UINT32(&offset, TPM_ORD_DAA_Join, hashblob);
66
Trspi_LoadBlob_UINT32(&offset, *outputSize, hashblob);
67
Trspi_LoadBlob(&offset, *outputSize, hashblob, *outputData);
68
Trspi_Hash(TSS_HASH_SHA1, offset, hashblob, digest.digest);
69
if( (result = obj_policy_validate_auth_oiap( hPolicy, &digest, &ownerAuth)))
71
printf("[%s:%d] obj_policy_validate_auth=%d\n",__FILE__, __LINE__, result);
77
int main(int argc, char *argv[])
79
TSS_HCONTEXT hContext;
85
printf("Create Context\n");
86
result = Tspi_Context_Create( &hContext );
87
if ( result != TSS_SUCCESS )
89
fprintf( stderr, "Tspi_Context_Create %d\n", result );
94
printf("\nConnect to the context\n");
95
result = Tspi_Context_Connect( hContext, NULL );
96
if ( result != TSS_SUCCESS ) goto out_close;
98
if( (result = Tspi_Context_GetTpmObject( hContext, &hTPM)) != TSS_SUCCESS)
101
// Get the correct policy using the TPM ownership PASSWD
102
char *szTpmPasswd = "OWN_PWD";
103
if( (result = Tspi_GetPolicyObject( hTPM, TSS_POLICY_USAGE, &hPolicy)) != TSS_SUCCESS)
106
if( (result = Tspi_Policy_SetSecret( hPolicy, TSS_SECRET_MODE_PLAIN, strlen( szTpmPasswd), szTpmPasswd)) != TSS_SUCCESS)
108
printf("Tspi_Policy_SetSecret hPolicy received;%d\n", hPolicy);
112
//int modulus_length = DAA_PARAM_SIZE_MODULUS_GAMMA / 8;
113
UINT32 inputSize0 = sizeof(int);
114
UINT32 inputSize1 = 0;
115
UINT32 outputSize = 0;
117
BYTE *inputData0 = (BYTE *)(&ia_length);//= (BYTE *)malloc( inputSize0)
118
BYTE *inputData1 = NULL;
119
BYTE *outputData = NULL;
121
if( (result = Tspi_DAA_Join(hTPM, 0, inputSize0, inputData0, inputSize1, inputData1, &outputSize, &outputData)) != TSS_SUCCESS) goto out_close;
125
printf( "Tspi Error:%d - %s\n", result, err_string( result) );
128
printf("ouputSize=%d\n", outputSize);
129
if( outputData != NULL) {
131
printf("outputData(hex )=[\n");
132
for( i=0; i<(int)outputSize; i++) printf("%x ", outputData[i]);
134
printf("outputData(ascii)=[\n");
135
for( i=0; i<(int)outputSize; i++) printf("%c ", outputData[i]);
138
Tspi_Context_FreeMemory( hContext, NULL );
139
Tspi_Context_Close( hContext );
140
printf("[%s:%d] THE END\n",__FILE__, __LINE__);