xref: /netbsd-src/crypto/external/cpl/trousers/dist/src/tspi/daa/daa_issuer/key_verification.c (revision 1023804e3833a0bd94414f2545512128f6502c74)
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