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