1 /*
2 * Licensed Materials - Property of IBM
3 *
4 * trousers - An open source TCG Software Stack
5 *
6 * (C) Copyright International Business Machines Corp. 2006
7 *
8 */
9
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include <errno.h>
14
15 #include <trousers/tss.h>
16 #include "spi_internal_types.h"
17 #include "spi_utils.h"
18 #include "obj.h"
19 #include "issuer.h"
20
21 static char *DEFAULT_FILENAME = "issuer.txt";
22
23 //static TSS_HCONTEXT _hContext;
24
intern_alloc(size_t size,TSS_HOBJECT param_alloc)25 static void *intern_alloc( size_t size, TSS_HOBJECT param_alloc) {
26 // void *ret = calloc_tspi( , size);
27 void *ret = malloc( size);
28 LogDebug("[intern_alloc (%d)] -> %d", (int)size, (int)ret);
29 return ret;
30 }
31
isCorrect(TSS_HDAA hDAA,TSS_DAA_PK_internal * pk_internal,TSS_DAA_PK_PROOF_internal * proof_internal)32 void isCorrect( TSS_HDAA hDAA,
33 TSS_DAA_PK_internal *pk_internal,
34 TSS_DAA_PK_PROOF_internal *proof_internal)
35 {
36 TSS_BOOL isCorrect;
37 TSS_RESULT result;
38 TSS_DAA_PK *pk;
39 TSS_DAA_PK_PROOF *pk_proof;
40
41 pk = i_2_e_TSS_DAA_PK( pk_internal, &intern_alloc, (TSS_HOBJECT)NULL);
42 pk_proof = i_2_e_TSS_DAA_PK_PROOF( proof_internal,
43 &intern_alloc,
44 (TSS_HOBJECT)NULL);
45 result = Tspi_DAA_IssuerKeyVerification( hDAA,
46 (TSS_HKEY)pk,
47 pk_proof,
48 &isCorrect);
49 if ( result != TSS_SUCCESS ) {
50 fprintf( stderr, "Tspi_DAA_IssuerKeyVerification error: %d\n", result );
51 }
52 free_TSS_DAA_PK( pk);
53 printf("isCorrect=%d\n", isCorrect);
54 }
55
print_usage(char * cmd)56 int print_usage(char *cmd) {
57 fprintf(stderr, "usage: %s\n", cmd);
58 fprintf(stderr, "\t-if,\t--issuer_file\tthe file that will contain\
59 all key pair and proof to be used by the issuer (default: %s)\n", DEFAULT_FILENAME);
60 return -1;
61 }
62
main(int argc,char * argv[])63 int main(int argc, char *argv[]) {
64 char *filename = DEFAULT_FILENAME;
65 int i=1;
66 char *param;
67 TSS_RESULT result;
68 TSS_HCONTEXT hContext;
69 TSS_HDAA hDAA;
70 FILE *file;
71
72 // foreground = 1; // for debug
73 printf("Key Verification (%s:%s,%s)\n", argv[0], __DATE__, __TIME__);
74 while( i < argc) {
75 param = argv[ i];
76 if( strcmp( param, "-if") == 0 || strcmp( param, "--issuer_file")) {
77 i++;
78 if( i == argc) return print_usage( argv[0]);
79 filename = argv[i];
80 } else {
81 fprintf(stderr, "%s:unrecognized option `%s'\n", argv[0], param);
82 return print_usage( argv[0]);
83 }
84 i++;
85 }
86 bi_init( NULL);
87 printf("Loading issuer info (keypair & proof) -> \'%s\'", filename);
88 file = fopen( filename, "r");
89 if( file == NULL) {
90 fprintf( stderr,
91 "%s: Error when opening \'%s\': %s\n",
92 argv[0],
93 filename,
94 strerror( errno));
95 return -1;
96 }
97 KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof = load_KEY_PAIR_WITH_PROOF( file);
98 if( key_pair_with_proof == NULL) {
99 fprintf( stderr,
100 "%s: Error when reading \'%s\': %s\n",
101 argv[0],
102 filename,
103 strerror( errno));
104 return -1;
105 }
106 fclose( file);
107
108 // Create Context
109 printf("\nCreate Context\n");
110 result = Tspi_Context_Create( &hContext );
111 if ( result != TSS_SUCCESS )
112 {
113 fprintf( stderr, "Tspi_Context_Create %d\n", result );
114 exit( result );
115 }
116
117 // Connect to Context
118 printf("\nConnect to the context\n");
119 result = Tspi_Context_Connect( hContext, NULL );
120 if ( result != TSS_SUCCESS )
121 {
122 fprintf( stderr, "Tspi_Context_Connect error:%d\n", result );
123 Tspi_Context_FreeMemory( hContext, NULL );
124 Tspi_Context_Close( hContext );
125 exit( result );
126 }
127
128 //TODO save key in the persistent store
129 // result = ps_write_key( fd, )
130
131 //Create Object
132 result = obj_daa_add( hContext, &hDAA);
133 if (result != TSS_SUCCESS) {
134 LogError("Tspi_Context_CreateObject:%d", result);
135 Tspi_Context_Close(hContext);
136 LogError("issuer_setup: %s", err_string(result));
137 exit(result);
138 }
139
140 // TSS_HDAA, TSS_HKEY, TSS_DAA_PK_PROOF, TSS_BOOL*
141 isCorrect( hDAA, key_pair_with_proof->pk, key_pair_with_proof->proof);
142 obj_daa_remove( hDAA, hContext);
143 printf("\nClosing the context\n");
144 Tspi_Context_FreeMemory( hContext, NULL );
145 Tspi_Context_Close( hContext );
146 exit( 0 );
147 }
148