summaryrefslogtreecommitdiff
path: root/src/include/daa/daa_structs.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/daa/daa_structs.h')
-rw-r--r--src/include/daa/daa_structs.h385
1 files changed, 385 insertions, 0 deletions
diff --git a/src/include/daa/daa_structs.h b/src/include/daa/daa_structs.h
new file mode 100644
index 0000000..5b06762
--- /dev/null
+++ b/src/include/daa/daa_structs.h
@@ -0,0 +1,385 @@
+
+/*
+ * Licensed Materials - Property of IBM
+ *
+ * trousers - An open source TCG Software Stack
+ *
+ * (C) Copyright International Business Machines Corp. 2006
+ *
+ */
+
+#ifndef DAA_STRUCT_H_
+#define DAA_STRUCT_H_
+
+#include <string.h>
+#include <stdlib.h>
+#include <malloc.h>
+
+#include "tss/tcs.h"
+#include "bi.h"
+#include "arpa/inet.h"
+
+// for message digest
+#include <openssl/evp.h>
+
+#define init_tss_version(b) \
+do {\
+ (b)->versionInfo.bMajor = DAA_PARAM_TSS_VERSION[0];\
+ (b)->versionInfo.bMinor = DAA_PARAM_TSS_VERSION[1];\
+ (b)->versionInfo.bRevMajor = DAA_PARAM_TSS_VERSION[2];\
+ (b)->versionInfo.bRevMinor = DAA_PARAM_TSS_VERSION[3];\
+} while(0);
+
+BYTE *convert_alloc( TCS_CONTEXT_HANDLE tcsContext,
+ UINT32 length,
+ BYTE *source);
+
+BYTE *copy_alloc( TCS_CONTEXT_HANDLE tcsContext,
+ UINT32 length,
+ BYTE *source);
+
+void store_bi( UINT32 *length,
+ BYTE **buffer,
+ const bi_ptr i,
+ void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
+ TSS_HOBJECT object);
+
+/* length is in network format: big indian */
+void dump_field( int length, BYTE *buffer);
+
+/********************************************************************************************
+ TSS_DAA_ATTRIB_COMMIT
+ ********************************************************************************************/
+
+typedef struct tdTSS_DAA_ATTRIB_COMMIT_internal {
+ bi_ptr beta;
+ bi_ptr sMu;
+} TSS_DAA_ATTRIB_COMMIT_internal;
+
+TSS_DAA_ATTRIB_COMMIT_internal *create_TSS_DAA_ATTRIB_COMMIT( bi_ptr beta, bi_ptr sMu);
+
+/********************************************************************************************
+ * TSS_DAA_SELECTED_ATTRIB
+ * this struct is used internally and externally, only a call to internal_2_DAA_SELECTED_ATTRIB
+ * DAA_SELECTED_ATTRIB_2_internal will change the struct to be internal or external
+ ********************************************************************************************/
+
+void i_2_e_TSS_DAA_SELECTED_ATTRIB( TSS_DAA_SELECTED_ATTRIB *selected_attrib);
+
+void e_2_i_TSS_DAA_SELECTED_ATTRIB( TSS_DAA_SELECTED_ATTRIB *selected_attrib);
+
+/* work ONLY with internal format */
+BYTE *to_bytes_TSS_DAA_SELECTED_ATTRIB_internal( int *length, TSS_DAA_SELECTED_ATTRIB *selected_attrib);
+
+/*
+create a TSS_DAA_SELECTED_ATTRIB of length <length> with given selected attributes.
+example of selections of the second and third attributes upon 5:
+create_TSS_DAA_SELECTED_ATTRIB( &selected_attrib, 5, 0, 1, 1, 0, 0);
+*/
+void create_TSS_DAA_SELECTED_ATTRIB( TSS_DAA_SELECTED_ATTRIB *attrib, int length, ...);
+
+/********************************************************************************************
+ * DAA PRIVATE KEY
+ ********************************************************************************************/
+
+/**
+ * DAA private key. Contains p', q' and the product of it, where n = p*q, p =
+ * 2*p'+1 and q = 2*q'+1. n is part of the public key.
+ * (from com.ibm.zurich.tcg.daa.issuer.DAAPrivateKey.java)
+ */
+typedef struct {
+ bi_ptr p_prime;
+ bi_ptr q_prime;
+ bi_ptr productPQprime;
+} DAA_PRIVATE_KEY_internal;
+
+/**
+ * allocate: ret->p_prime
+ * ret->q_prime
+ * ret->productPQprime
+ */
+DAA_PRIVATE_KEY_internal *create_TSS_DAA_PRIVATE_KEY(
+ bi_ptr pPrime,
+ bi_ptr qPrime
+);
+#if 0
+int save_DAA_PRIVATE_KEY(
+ FILE *file,
+ const DAA_PRIVATE_KEY_internal *private_key
+);
+
+DAA_PRIVATE_KEY_internal *load_DAA_PRIVATE_KEY(
+ FILE *file
+);
+TSS_DAA_PRIVATE_KEY* i_2_e_TSS_DAA_PRIVATE_KEY(
+ DAA_PRIVATE_KEY_internal *private_key_internal,
+ void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
+ TSS_HOBJECT object
+);
+
+DAA_PRIVATE_KEY_internal *e_2_i_TSS_DAA_PRIVATE_KEY(
+ TSS_DAA_PRIVATE_KEY *private_key
+);
+
+#endif
+/********************************************************************************************
+ * TSS_DAA_PK
+ ********************************************************************************************/
+
+typedef struct tdTSS_DAA_PK_internal {
+ bi_ptr modulus;
+ bi_ptr capitalS;
+ bi_ptr capitalZ;
+ bi_ptr capitalR0;
+ bi_ptr capitalR1;
+ bi_ptr gamma;
+ bi_ptr capitalGamma;
+ bi_ptr rho;
+ bi_array_ptr capitalRReceiver;
+ bi_array_ptr capitalRIssuer;
+ bi_array_ptr capitalY;
+ int issuerBaseNameLength;
+ BYTE *issuerBaseName;
+ // capitalSprime calculated at each init of this structure as :
+ // (capitalS ^ ( 1 << DAA_PARAM_SIZE_SPLIT_EXPONENT)) % modulus
+ bi_ptr capitalSprime;
+} TSS_DAA_PK_internal;
+
+TSS_DAA_PK_internal *create_DAA_PK(
+ const bi_ptr modulus,
+ const bi_ptr capitalS,
+ const bi_ptr capitalZ,
+ const bi_ptr capitalR0,
+ const bi_ptr capitalR1,
+ const bi_ptr gamma,
+ const bi_ptr capitalGamma,
+ const bi_ptr rho,
+ const bi_array_ptr capitalRReceiver,
+ const bi_array_ptr capitalRIssuer,
+ int issuerBaseNameLength,
+ BYTE * const issuerBaseName);
+
+/*
+ * create anf feel a TSS_DAA_PK structures
+ */
+TSS_DAA_PK_internal *e_2_i_TSS_DAA_PK(
+ TSS_DAA_PK *pk
+);
+
+TSS_DAA_PK *i_2_e_TSS_DAA_PK(
+ TSS_DAA_PK_internal *pk_internal,
+ void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
+ TSS_HOBJECT param_alloc
+);
+#if 0
+
+/* moved to daa_debug.h */
+int save_DAA_PK_internal(
+ FILE *file,
+ const TSS_DAA_PK_internal *pk_internal
+);
+
+TSS_DAA_PK_internal *load_DAA_PK_internal(
+ FILE *file
+);
+
+#endif
+
+void dump_DAA_PK_internal(
+ char *name,
+ TSS_DAA_PK_internal *pk_internal
+);
+
+TPM_DAA_ISSUER *convert2issuer_settings(
+ TSS_DAA_PK_internal *pk_internal
+);
+
+void free_TSS_DAA_PK_internal(
+ TSS_DAA_PK_internal *pk_internal
+);
+
+void free_TSS_DAA_PK( TSS_DAA_PK *pk);
+
+BYTE *issuer_2_byte_array(
+ TPM_DAA_ISSUER *tpm_daa_issuer,
+ int *length
+);
+
+/********************************************************************************************
+ * TSS_DAA_PK_PROOF
+ ********************************************************************************************/
+
+typedef struct tdTSS_DAA_PK_PROOF_internal {
+ BYTE *challenge;
+ int length_challenge;
+ bi_array_ptr *response;
+ int length_response;
+} TSS_DAA_PK_PROOF_internal;
+
+TSS_DAA_PK_PROOF_internal *create_DAA_PK_PROOF(
+ BYTE* const challenge,
+ const int length_challenge,
+ bi_array_ptr *response,
+ int length_reponse);
+
+/*
+ * create anf feel a TSS_DAA_PK structures
+ */
+TSS_DAA_PK *TSS_convert_DAA_PK_PROOF(
+ TSS_DAA_PK_PROOF_internal *proof
+);
+#if 0
+int save_DAA_PK_PROOF_internal(
+ FILE *file,
+ TSS_DAA_PK_PROOF_internal *pk_internal
+);
+
+TSS_DAA_PK_PROOF_internal *load_DAA_PK_PROOF_internal(
+ FILE *file
+);
+#endif
+TSS_DAA_PK_PROOF_internal *e_2_i_TSS_DAA_PK_PROOF(
+ TSS_DAA_PK_PROOF *pk_proof
+);
+
+TSS_DAA_PK_PROOF *i_2_e_TSS_DAA_PK_PROOF(
+ TSS_DAA_PK_PROOF_internal*pk_internal_proof,
+ void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
+ TSS_HOBJECT param_alloc
+);
+
+/*
+ * Encode the DAA_PK like java.security.Key#getEncoded
+ */
+BYTE *encoded_DAA_PK_internal(
+ int *result_length,
+ const TSS_DAA_PK_internal *pk
+);
+
+/********************************************************************************************
+ * KEY PAIR WITH PROOF
+ ********************************************************************************************/
+
+typedef struct tdKEY_PAIR_WITH_PROOF_internal {
+ TSS_DAA_PK_internal *pk;
+ DAA_PRIVATE_KEY_internal *private_key;
+ TSS_DAA_PK_PROOF_internal *proof;
+} KEY_PAIR_WITH_PROOF_internal;
+
+#if 0
+
+/* moved to daa_debug.h */
+
+int save_KEY_PAIR_WITH_PROOF(
+ FILE *file,
+ KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof
+);
+
+KEY_PAIR_WITH_PROOF_internal *load_KEY_PAIR_WITH_PROOF(
+ FILE *file
+);
+
+#endif
+
+TSS_DAA_KEY_PAIR *get_TSS_DAA_KEY_PAIR(
+ KEY_PAIR_WITH_PROOF_internal *key_pair_with_proof,
+ void * (*daa_alloc)(size_t size, TSS_HOBJECT object),
+ TSS_HOBJECT param_alloc
+);
+
+
+/********************************************************************************************
+ * TSS_DAA_PSEUDONYM_PLAIN
+ ********************************************************************************************/
+
+typedef struct {
+ bi_ptr nV;
+} TSS_DAA_PSEUDONYM_PLAIN_internal;
+
+TSS_DAA_PSEUDONYM_PLAIN_internal *create_TSS_DAA_PSEUDONYM_PLAIN(
+ bi_ptr nV
+);
+
+/********************************************************************************************
+ * TSS_DAA_PSEUDONYM_ENCRYPTED
+ ********************************************************************************************/
+
+typedef struct {
+ bi_ptr sTau;
+ struct tdCS_ENCRYPTION_RESULT *cs_enc_result;
+} TSS_DAA_PSEUDONYM_ENCRYPTED_internal;
+
+
+/********************************************************************************************
+ * TSS_DAA_SIGNATURE
+ ********************************************************************************************/
+
+typedef struct {
+ bi_ptr zeta;
+ bi_ptr capitalT;
+ int challenge_length;
+ BYTE *challenge;
+ int nonce_tpm_length;
+ BYTE *nonce_tpm;
+ bi_ptr sV;
+ bi_ptr sF0;
+ bi_ptr sF1;
+ bi_ptr sE;
+ int sA_length;
+ bi_array_ptr sA;
+} TSS_DAA_SIGNATURE_internal;
+
+TSS_DAA_SIGNATURE_internal *e_2_i_TSS_DAA_SIGNATURE(
+ TSS_DAA_SIGNATURE*signature
+);
+
+void free_TSS_DAA_SIGNATURE_internal(
+ TSS_DAA_SIGNATURE_internal *signature
+);
+
+/********************************************************************************************
+ * TSS_DAA_JOIN_ISSUER_SESSION
+ ********************************************************************************************/
+
+typedef struct td_TSS_DAA_JOIN_ISSUER_SESSION_internal {
+ TPM_DAA_ISSUER *issuerAuthKey;
+ TSS_DAA_PK_PROOF_internal *issuerKeyPair;
+ TSS_DAA_IDENTITY_PROOF *identityProof;
+ bi_ptr capitalUprime;
+ int daaCounter;
+ int nonceIssuerLength;
+ BYTE *nonceIssuer;
+ int nonceEncryptedLength;
+ BYTE *nonceEncrypted;
+} TSS_DAA_JOIN_ISSUER_SESSION_internal;
+
+
+/********************************************************************************************
+ TSS_DAA_CRED_ISSUER
+********************************************************************************************/
+#if 0
+TSS_DAA_CRED_ISSUER *load_TSS_DAA_CRED_ISSUER( FILE *file);
+
+int save_TSS_DAA_CRED_ISSUER( FILE *file, TSS_DAA_CRED_ISSUER *credential);
+
+#endif
+/********************************************************************************************
+ TSS_DAA_CREDENTIAL
+********************************************************************************************/
+#if 0
+TSS_DAA_CREDENTIAL *load_TSS_DAA_CREDENTIAL( FILE *file);
+
+int save_TSS_DAA_CREDENTIAL(
+ FILE *file,
+ TSS_DAA_CREDENTIAL *credential
+);
+
+#endif
+
+/********************************************************************************************
+ TPM_DAA_ISSUER
+********************************************************************************************/
+
+void free_TPM_DAA_ISSUER( TPM_DAA_ISSUER *tpm_daa_issuer);
+
+#endif /*DAA_STRUCT_H_*/