~ubuntu-branches/ubuntu/saucy/trousers/saucy

« back to all changes in this revision

Viewing changes to src/tspi/daa/daa_platform/test.c

  • Committer: Package Import Robot
  • Author(s): Pierre Chifflier
  • Date: 2012-06-18 22:22:21 UTC
  • mfrom: (0.1.22 sid)
  • Revision ID: package-import@ubuntu.com-20120618222221-kumdab5nrfx4kvyh
Tags: 0.3.9-1
* Imported Upstream version 0.3.9
* Refreshed Debian patches
* Removed patch 04-gcc46.patch, not required anymore

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include <stdlib.h>
 
3
#include <string.h>
 
4
#include <trousers/tss.h>
 
5
#include <trousers/trousers.h>
 
6
#include "spi_internal_types.h"
 
7
#include <spi_utils.h>
 
8
#include <obj.h>
 
9
#include "tsplog.h"
 
10
#include "daa_parameter.h"
 
11
 
 
12
setenv("TCSD_FOREGROUND", "1", 1);
 
13
 
 
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) {
 
16
        TSS_RESULT result;
 
17
        TCS_CONTEXT_HANDLE tcsContext;
 
18
        TSS_HCONTEXT tspContext;
 
19
        TSS_HPOLICY hPolicy;
 
20
        TCPA_DIGEST digest;
 
21
        TPM_AUTH ownerAuth;
 
22
        UINT16 offset = 0;
 
23
        BYTE hashblob[1000];
 
24
 
 
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;
 
31
 
 
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__);
 
37
        //TODO old 4
 
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
 
41
        //TODO old 1
 
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);
 
46
 
 
47
        if ((result = secret_PerformAuth_OIAP(hTPM, TPM_ORD_DAA_Join,
 
48
             hPolicy, &digest,
 
49
             &ownerAuth)) != TSS_SUCCESS) return result;
 
50
        printf("[%s:%d] secret_PerformAuth_OIAP(hTPM, TPM_ORD_DAA_Join ret=%d\n",__FILE__, __LINE__, result);
 
51
        // out
 
52
 
 
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)
 
56
    */
 
57
 
 
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)
 
61
                return result;
 
62
 
 
63
        offset = 0;
 
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)))
 
70
        {
 
71
                printf("[%s:%d] obj_policy_validate_auth=%d\n",__FILE__, __LINE__, result);
 
72
        }
 
73
        return result;
 
74
}
 
75
 
 
76
 
 
77
int main(int argc, char *argv[])
 
78
{
 
79
    TSS_HCONTEXT hContext;
 
80
    TSS_RESULT result;
 
81
    TSS_HTPM hTPM;
 
82
    TSS_HPOLICY hPolicy;
 
83
 
 
84
    // Create Context
 
85
    printf("Create Context\n");
 
86
    result = Tspi_Context_Create( &hContext );
 
87
    if ( result != TSS_SUCCESS )
 
88
    {
 
89
        fprintf( stderr, "Tspi_Context_Create %d\n", result );
 
90
        exit( result );
 
91
    }
 
92
 
 
93
    // Connect to Context
 
94
    printf("\nConnect to the context\n");
 
95
    result = Tspi_Context_Connect( hContext, NULL );
 
96
    if ( result != TSS_SUCCESS ) goto out_close;
 
97
 
 
98
    if( (result = Tspi_Context_GetTpmObject( hContext, &hTPM)) != TSS_SUCCESS)
 
99
        goto out_close;
 
100
 
 
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)
 
104
        goto out_close;
 
105
    //BUSS
 
106
    if( (result = Tspi_Policy_SetSecret( hPolicy, TSS_SECRET_MODE_PLAIN, strlen( szTpmPasswd), szTpmPasswd)) != TSS_SUCCESS)
 
107
        goto out_close;
 
108
    printf("Tspi_Policy_SetSecret hPolicy received;%d\n", hPolicy);
 
109
 
 
110
     //BUSS
 
111
    // in
 
112
    //int modulus_length = DAA_PARAM_SIZE_MODULUS_GAMMA / 8;
 
113
    UINT32 inputSize0 = sizeof(int);
 
114
    UINT32 inputSize1 = 0;
 
115
    UINT32 outputSize = 0;
 
116
    int ia_length = 7;
 
117
    BYTE *inputData0 = (BYTE *)(&ia_length);//= (BYTE *)malloc( inputSize0)
 
118
    BYTE *inputData1 = NULL;
 
119
    BYTE *outputData = NULL;
 
120
 
 
121
    if( (result = Tspi_DAA_Join(hTPM, 0, inputSize0, inputData0, inputSize1, inputData1, &outputSize, &outputData)) != TSS_SUCCESS) goto out_close;
 
122
 
 
123
    goto out;
 
124
out_close:
 
125
        printf( "Tspi Error:%d - %s\n", result, err_string( result) );
 
126
 
 
127
out:
 
128
        printf("ouputSize=%d\n", outputSize);
 
129
        if( outputData != NULL) {
 
130
                int i;
 
131
                printf("outputData(hex  )=[\n");
 
132
                for( i=0; i<(int)outputSize; i++) printf("%x ", outputData[i]);
 
133
                printf("\n]");
 
134
                printf("outputData(ascii)=[\n");
 
135
                for( i=0; i<(int)outputSize; i++) printf("%c ", outputData[i]);
 
136
                printf("\n]");
 
137
        }
 
138
    Tspi_Context_FreeMemory( hContext, NULL );
 
139
    Tspi_Context_Close( hContext );
 
140
    printf("[%s:%d] THE END\n",__FILE__, __LINE__);
 
141
    return result;
 
142
}