1
2/*
3 * Licensed Materials - Property of IBM
4 *
5 * trousers - An open source TCG Software Stack
6 *
7 * (C) Copyright International Business Machines Corp. 2006
8 *
9 */
10
11#ifndef DAA_STRUCT_H_
12#define DAA_STRUCT_H_
13
14#include <string.h>
15#include <stdlib.h>
16#include <malloc.h>
17
18#include "tss/tcs.h"
19#include "bi.h"
20#include "arpa/inet.h"
21
22// for message digest
23#include <openssl/evp.h>
24
25#define init_tss_version(b) \
26do {\
27	(b)->versionInfo.bMajor = DAA_PARAM_TSS_VERSION[0];\
28	(b)->versionInfo.bMinor = DAA_PARAM_TSS_VERSION[1];\
29	(b)->versionInfo.bRevMajor = DAA_PARAM_TSS_VERSION[2];\
30	(b)->versionInfo.bRevMinor = DAA_PARAM_TSS_VERSION[3];\
31} while(0);
32
33BYTE *convert_alloc( TCS_CONTEXT_HANDLE tcsContext,
34			UINT32 length,
35			BYTE *source);
36
37BYTE *copy_alloc(  TCS_CONTEXT_HANDLE tcsContext,
38			UINT32 length,
39			BYTE *source);
40
41void store_bi( UINT32 *length,
42		BYTE **buffer,
43		const bi_ptr i,
44		void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
45		TSS_HOBJECT object);
46
47/* length is in network format: big indian */
48void dump_field( int length, BYTE *buffer);
49
50/********************************************************************************************
51	TSS_DAA_ATTRIB_COMMIT
52 ********************************************************************************************/
53
54typedef struct tdTSS_DAA_ATTRIB_COMMIT_internal {
55	bi_ptr beta;
56	bi_ptr sMu;
57} TSS_DAA_ATTRIB_COMMIT_internal;
58
59TSS_DAA_ATTRIB_COMMIT_internal *create_TSS_DAA_ATTRIB_COMMIT( bi_ptr beta, bi_ptr sMu);
60
61/********************************************************************************************
62 *   TSS_DAA_SELECTED_ATTRIB
63 * this struct is used internally and externally, only a call to internal_2_DAA_SELECTED_ATTRIB
64 * DAA_SELECTED_ATTRIB_2_internal will change the struct to be internal or external
65 ********************************************************************************************/
66
67void i_2_e_TSS_DAA_SELECTED_ATTRIB( TSS_DAA_SELECTED_ATTRIB *selected_attrib);
68
69void e_2_i_TSS_DAA_SELECTED_ATTRIB( TSS_DAA_SELECTED_ATTRIB *selected_attrib);
70
71/* work ONLY with internal format */
72BYTE *to_bytes_TSS_DAA_SELECTED_ATTRIB_internal( int *length, TSS_DAA_SELECTED_ATTRIB *selected_attrib);
73
74/*
75create a TSS_DAA_SELECTED_ATTRIB of length <length> with given selected attributes.
76example of selections of the second and third attributes upon 5:
77create_TSS_DAA_SELECTED_ATTRIB( &selected_attrib, 5, 0, 1, 1, 0, 0);
78*/
79void create_TSS_DAA_SELECTED_ATTRIB( TSS_DAA_SELECTED_ATTRIB *attrib, int length, ...);
80
81/********************************************************************************************
82 *   DAA PRIVATE KEY
83 ********************************************************************************************/
84
85/**
86 * DAA private key. Contains p', q' and the product of it, where n = p*q, p =
87 * 2*p'+1 and q = 2*q'+1. n is part of the public key.
88 * (from com.ibm.zurich.tcg.daa.issuer.DAAPrivateKey.java)
89 */
90typedef struct {
91	bi_ptr p_prime;
92	bi_ptr q_prime;
93	bi_ptr productPQprime;
94} DAA_PRIVATE_KEY_internal;
95
96/**
97 * allocate: 	ret->p_prime
98 * 					ret->q_prime
99 * 				  	ret->productPQprime
100 */
101DAA_PRIVATE_KEY_internal *create_TSS_DAA_PRIVATE_KEY(
102	bi_ptr pPrime,
103	bi_ptr qPrime
104);
105#if 0
106int save_DAA_PRIVATE_KEY(
107	FILE *file,
108	const DAA_PRIVATE_KEY_internal *private_key
109);
110
111DAA_PRIVATE_KEY_internal *load_DAA_PRIVATE_KEY(
112	FILE *file
113);
114TSS_DAA_PRIVATE_KEY* i_2_e_TSS_DAA_PRIVATE_KEY(
115	DAA_PRIVATE_KEY_internal *private_key_internal,
116	void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
117	TSS_HOBJECT object
118);
119
120DAA_PRIVATE_KEY_internal *e_2_i_TSS_DAA_PRIVATE_KEY(
121	TSS_DAA_PRIVATE_KEY *private_key
122);
123
124#endif
125/********************************************************************************************
126 *   TSS_DAA_PK
127 ********************************************************************************************/
128
129typedef struct tdTSS_DAA_PK_internal {
130	bi_ptr modulus;
131	bi_ptr capitalS;
132	bi_ptr capitalZ;
133	bi_ptr capitalR0;
134	bi_ptr capitalR1;
135	bi_ptr gamma;
136	bi_ptr capitalGamma;
137	bi_ptr rho;
138	bi_array_ptr capitalRReceiver;
139	bi_array_ptr capitalRIssuer;
140    	bi_array_ptr capitalY;
141	int issuerBaseNameLength;
142	BYTE *issuerBaseName;
143 	// capitalSprime calculated at each init of this structure as :
144 	//    (capitalS ^ ( 1 << DAA_PARAM_SIZE_SPLIT_EXPONENT)) % modulus
145	bi_ptr capitalSprime;
146} TSS_DAA_PK_internal;
147
148TSS_DAA_PK_internal *create_DAA_PK(
149	const bi_ptr modulus,
150	const bi_ptr capitalS,
151	const bi_ptr capitalZ,
152	const bi_ptr capitalR0,
153	const bi_ptr capitalR1,
154	const bi_ptr gamma,
155	const bi_ptr capitalGamma,
156	const bi_ptr rho,
157	const bi_array_ptr capitalRReceiver,
158	const bi_array_ptr capitalRIssuer,
159	int  issuerBaseNameLength,
160	BYTE * const issuerBaseName);
161
162/*
163 * create anf feel a TSS_DAA_PK structures
164 */
165TSS_DAA_PK_internal *e_2_i_TSS_DAA_PK(
166	TSS_DAA_PK *pk
167);
168
169TSS_DAA_PK	*i_2_e_TSS_DAA_PK(
170	TSS_DAA_PK_internal *pk_internal,
171	void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
172	TSS_HOBJECT param_alloc
173);
174#if 0
175
176/* moved to daa_debug.h */
177int save_DAA_PK_internal(
178	FILE *file,
179	const TSS_DAA_PK_internal *pk_internal
180);
181
182TSS_DAA_PK_internal *load_DAA_PK_internal(
183	FILE *file
184);
185
186#endif
187
188void dump_DAA_PK_internal(
189	char *name,
190	TSS_DAA_PK_internal *pk_internal
191);
192
193TPM_DAA_ISSUER *convert2issuer_settings(
194	TSS_DAA_PK_internal *pk_internal
195);
196
197void free_TSS_DAA_PK_internal(
198	TSS_DAA_PK_internal *pk_internal
199);
200
201void free_TSS_DAA_PK( TSS_DAA_PK *pk);
202
203BYTE *issuer_2_byte_array(
204	TPM_DAA_ISSUER *tpm_daa_issuer,
205	int *length
206);
207
208/********************************************************************************************
209 *   TSS_DAA_PK_PROOF
210 ********************************************************************************************/
211
212typedef struct tdTSS_DAA_PK_PROOF_internal {
213	BYTE *challenge;
214	int length_challenge;
215	bi_array_ptr *response;
216	int length_response;
217} TSS_DAA_PK_PROOF_internal;
218
219TSS_DAA_PK_PROOF_internal *create_DAA_PK_PROOF(
220	BYTE* const challenge,
221	const int length_challenge,
222	bi_array_ptr *response,
223	int length_reponse);
224
225/*
226 * create anf feel a TSS_DAA_PK structures
227 */
228TSS_DAA_PK *TSS_convert_DAA_PK_PROOF(
229	TSS_DAA_PK_PROOF_internal *proof
230);
231#if 0
232int save_DAA_PK_PROOF_internal(
233	FILE *file,
234	TSS_DAA_PK_PROOF_internal *pk_internal
235);
236
237TSS_DAA_PK_PROOF_internal *load_DAA_PK_PROOF_internal(
238	FILE *file
239);
240#endif
241TSS_DAA_PK_PROOF_internal *e_2_i_TSS_DAA_PK_PROOF(
242	TSS_DAA_PK_PROOF *pk_proof
243);
244
245TSS_DAA_PK_PROOF *i_2_e_TSS_DAA_PK_PROOF(
246	TSS_DAA_PK_PROOF_internal*pk_internal_proof,
247	void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
248	TSS_HOBJECT param_alloc
249);
250
251/*
252 * Encode the DAA_PK like java.security.Key#getEncoded
253 */
254BYTE *encoded_DAA_PK_internal(
255	int *result_length,
256	const TSS_DAA_PK_internal *pk
257);
258
259/********************************************************************************************
260 *   KEY PAIR WITH PROOF
261 ********************************************************************************************/
262
263typedef struct tdKEY_PAIR_WITH_PROOF_internal {
264	TSS_DAA_PK_internal *pk;
265	DAA_PRIVATE_KEY_internal *private_key;
266	TSS_DAA_PK_PROOF_internal *proof;
267} KEY_PAIR_WITH_PROOF_internal;
268
269#if 0
270
271/* moved to daa_debug.h */
272
273int save_KEY_PAIR_WITH_PROOF(
274	FILE *file,
275	KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof
276);
277
278KEY_PAIR_WITH_PROOF_internal *load_KEY_PAIR_WITH_PROOF(
279	FILE *file
280);
281
282#endif
283
284TSS_DAA_KEY_PAIR *get_TSS_DAA_KEY_PAIR(
285	KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof,
286	void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
287	TSS_HOBJECT param_alloc
288);
289
290
291/********************************************************************************************
292 *   TSS_DAA_PSEUDONYM_PLAIN
293 ********************************************************************************************/
294
295typedef struct {
296	bi_ptr nV;
297} TSS_DAA_PSEUDONYM_PLAIN_internal;
298
299TSS_DAA_PSEUDONYM_PLAIN_internal *create_TSS_DAA_PSEUDONYM_PLAIN(
300	bi_ptr nV
301);
302
303/********************************************************************************************
304 *   TSS_DAA_PSEUDONYM_ENCRYPTED
305 ********************************************************************************************/
306
307typedef struct {
308	bi_ptr sTau;
309	struct tdCS_ENCRYPTION_RESULT *cs_enc_result;
310} TSS_DAA_PSEUDONYM_ENCRYPTED_internal;
311
312
313/********************************************************************************************
314 *   TSS_DAA_SIGNATURE
315 ********************************************************************************************/
316
317typedef struct {
318	bi_ptr zeta;
319	bi_ptr capitalT;
320	int challenge_length;
321	BYTE *challenge;
322	int nonce_tpm_length;
323	BYTE *nonce_tpm;
324	bi_ptr sV;
325	bi_ptr sF0;
326	bi_ptr sF1;
327	bi_ptr sE;
328	int sA_length;
329	bi_array_ptr sA;
330} TSS_DAA_SIGNATURE_internal;
331
332TSS_DAA_SIGNATURE_internal *e_2_i_TSS_DAA_SIGNATURE(
333	TSS_DAA_SIGNATURE*signature
334);
335
336void free_TSS_DAA_SIGNATURE_internal(
337	TSS_DAA_SIGNATURE_internal *signature
338);
339
340/********************************************************************************************
341 *   TSS_DAA_JOIN_ISSUER_SESSION
342 ********************************************************************************************/
343
344typedef struct td_TSS_DAA_JOIN_ISSUER_SESSION_internal {
345	TPM_DAA_ISSUER *issuerAuthKey;
346	TSS_DAA_PK_PROOF_internal *issuerKeyPair;
347	TSS_DAA_IDENTITY_PROOF *identityProof;
348	bi_ptr capitalUprime;
349	int daaCounter;
350	int nonceIssuerLength;
351	BYTE *nonceIssuer;
352	int nonceEncryptedLength;
353	BYTE *nonceEncrypted;
354} TSS_DAA_JOIN_ISSUER_SESSION_internal;
355
356
357/********************************************************************************************
358	TSS_DAA_CRED_ISSUER
359********************************************************************************************/
360#if 0
361TSS_DAA_CRED_ISSUER *load_TSS_DAA_CRED_ISSUER( FILE *file);
362
363int save_TSS_DAA_CRED_ISSUER( FILE *file, TSS_DAA_CRED_ISSUER *credential);
364
365#endif
366/********************************************************************************************
367	TSS_DAA_CREDENTIAL
368********************************************************************************************/
369#if 0
370TSS_DAA_CREDENTIAL *load_TSS_DAA_CREDENTIAL( FILE *file);
371
372int save_TSS_DAA_CREDENTIAL(
373	FILE *file,
374	TSS_DAA_CREDENTIAL *credential
375);
376
377#endif
378
379/********************************************************************************************
380	TPM_DAA_ISSUER
381********************************************************************************************/
382
383void free_TPM_DAA_ISSUER( TPM_DAA_ISSUER *tpm_daa_issuer);
384
385#endif /*DAA_STRUCT_H_*/
386