xref: /netbsd-src/crypto/external/cpl/trousers/dist/src/tspi/daa/daa_issuer/issuer_setup.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 "tcslog.h"
20 #include "bi.h"
21 #include "daa_parameter.h"
22 #include "issuer.h"
23 
24 static char *DEFAULT_FILENAME = "issuer.txt";
25 static char *DEFAULT_ISSUER = "IBM-Issuer";
26 
27 static const int DEFAULT_ISSUER_ATTRIBUTES = 2;	// A1 A2
28 static const int DEFAULT_RECEIVER_ATTRIBUTES = 3;	// A3 A4 A5
29 
print_usage(char * cmd)30 int print_usage(char *cmd) {
31 	fprintf(stderr, "usage: %s\n", cmd);
32 	fprintf(stderr, "	\t-npa,\t--nb_platform_attr\tnumber of attributes that the\
33  Platform can choose and which will not be visible to the Issuer (default: %d)\n",
34 			DEFAULT_ISSUER_ATTRIBUTES);
35 	fprintf(stderr, "	\t-nia,\t--nb_issuer_attr\tnumber of attributes that the issuer\
36  can choose and which will be visible to both the Platform and the Issuer(default: %d)\n",
37 			DEFAULT_RECEIVER_ATTRIBUTES);
38 	fprintf(stderr, "	\t-if,\t--issuer_file\tthe file that will contain all key pair\
39  and proof to be used by the issuer (default: %s)\n",
40 			DEFAULT_FILENAME);
41 	fprintf(stderr, "	\t-i,\t--issuer\tissuer identity (default: %s)\n",
42 			DEFAULT_ISSUER);
43 	return -1;
44 }
45 
main(int argc,char * argv[])46 int main(int argc, char *argv[]) {
47 	int nb_platform_attr = DEFAULT_ISSUER_ATTRIBUTES;
48 	int nb_issuer_attr = DEFAULT_RECEIVER_ATTRIBUTES;
49 	char *filename = DEFAULT_FILENAME;
50 	char *issuer = DEFAULT_ISSUER;
51 	int i;
52 	char *param;
53 	TSS_HCONTEXT hContext;
54 	TSS_DAA_KEY_PAIR *key_pair;
55 	TSS_DAA_PK_PROOF *public_keyproof;
56 	TSS_RESULT result;
57 	TSS_HDAA hDAA;
58 	TSS_DAA_PK_PROOF_internal *public_keyproof_internal;
59 	TSS_DAA_PK_internal *pk;
60 	TSS_DAA_PRIVATE_KEY *private_key;
61 	DAA_PRIVATE_KEY_internal *private_key_internal;
62 	KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof;
63 
64 	printf("Issuer Setup (%s:%s,%s)\n", argv[0], __DATE__, __TIME__);
65 	i = 1;
66 	while( i < argc) {
67 		param = argv[ i];
68 		if         ( strcmp( param, "-if") == 0 || strcmp( param, "--issuer_file")) {
69 			i++;
70 			if( i == argc) return print_usage( argv[0]);
71 			filename = argv[i];
72 		} else if( strcmp( param, "-npa") == 0 || strcmp( param, "--nb_platform_attr")) {
73 			i++;
74 			if( i == argc) return print_usage( argv[0]);
75 			nb_platform_attr = atoi( argv[i]);
76 		} else if( strcmp( param, "-nia") == 0 || strcmp( param, "--nb_issuer_attr")) {
77 			i++;
78 			if( i == argc) return print_usage( argv[0]);
79 			nb_issuer_attr = atoi(argv[i]);
80 		} else if( strcmp( param, "-i") == 0 || strcmp( param, "--issuer")) {
81 			i++;
82 			if( i == argc) return print_usage( argv[0]);
83 			issuer = argv[i];
84 		} else {
85 			fprintf(stderr, 	"%s:unrecognized option `%s'\n", argv[0], param);
86 			return print_usage( argv[0]);
87 		}
88 		i++;
89 	}
90 	bi_init( NULL);
91 	// Create Context
92 	printf("Create Context\n");
93 	result = Tspi_Context_Create( &hContext );
94 	if ( result != TSS_SUCCESS )
95 	{
96 		fprintf( stderr, "Tspi_Context_Create %d\n", result );
97 		exit( result );
98 	}
99 
100 	// Connect to Context
101 	printf("Connect to the context\n");
102 	result = Tspi_Context_Connect( hContext, NULL );
103 	if ( result != TSS_SUCCESS )
104 	{
105 		fprintf( stderr, "Tspi_Context_Connect error:%d\n", result );
106 		Tspi_Context_FreeMemory( hContext, NULL );
107 		Tspi_Context_Close( hContext );
108 		exit( result );
109 	}
110 	//Create Object
111 	result = obj_daa_add( hContext, &hDAA);
112 	if (result != TSS_SUCCESS) {
113 		goto close;
114 	}
115 	result = Tspi_DAA_IssueSetup(
116 		hDAA,	// in
117 		strlen( issuer),	// in
118 		(BYTE *)issuer,	// in
119 		nb_platform_attr,	// in
120 		nb_issuer_attr,	// in
121 		(TSS_HKEY *)&key_pair,	// out
122 		&public_keyproof);	// out
123 	if( result != TSS_SUCCESS) goto close;
124 
125 	// TSS_DAA_KEY_PAIR_internal *key_pair_internal = DAA_KEY_PAIR_2_internal( key_pair);
126 	public_keyproof_internal = e_2_i_TSS_DAA_PK_PROOF( public_keyproof);
127 	pk = e_2_i_TSS_DAA_PK( key_pair->public_key);
128 	private_key = key_pair->private_key;
129 	private_key_internal = e_2_i_TSS_DAA_PRIVATE_KEY( private_key);
130 	key_pair_with_proof =
131 		(KEY_PAIR_WITH_PROOF_internal *)malloc( sizeof(KEY_PAIR_WITH_PROOF_internal));
132 	if( key_pair_with_proof == NULL) {
133 		fprintf("malloc of %d bytes failed", sizeof(KEY_PAIR_WITH_PROOF_internal));
134 		goto close;
135 	}
136 	key_pair_with_proof->pk = pk;
137 	key_pair_with_proof->private_key = private_key_internal;
138 	key_pair_with_proof->proof = public_keyproof_internal;
139 
140 	printf("Saving key pair with proof  -> 	\'%s\'", filename);
141 	FILE *file = fopen( filename, "w");
142 	if( file == NULL) {
143 		fprintf( stderr, "%s: Error when saving \'%s\': %s\n",
144 			argv[0],
145 			filename,
146 			strerror( errno));
147 		return -1;
148 	}
149 	if( save_KEY_PAIR_WITH_PROOF( file, key_pair_with_proof) != 0) {
150 		fprintf( stderr, "%s: Error when saving \'%s\': %s\n",
151 			argv[0],
152 			filename,
153 			strerror( errno));
154 		return -1;
155 	}
156 	fclose( file);
157 	printf("\nDone.\n");
158 close:
159 	obj_daa_remove( hDAA, hContext);
160 	printf("Closing the context\n");
161 	Tspi_Context_FreeMemory( hContext, NULL );
162 	Tspi_Context_Close( hContext );
163 	bi_release();
164 	printf("Result: %d", result);
165 	return result;
166 }
167