int proc_aikclient_init(void * sub_proc,void * para) { int ret; TSS_RESULT result; char local_uuid[DIGEST_SIZE*2+1]; struct aik_proc_pointer * aik_pointer; // main_pointer= kmalloc(sizeof(struct main_proc_pointer),GFP_KERNEL); aik_pointer= malloc(sizeof(struct aik_proc_pointer)); if(aik_pointer==NULL) return -ENOMEM; memset(aik_pointer,0,sizeof(struct aik_proc_pointer)); result=TESI_Local_ReloadWithAuth("ooo","sss"); if(result!=TSS_SUCCESS) { printf("open tpm error %d!\n",result); return -ENFILE; } void * context; ret=sec_subject_getcontext(sub_proc,&context); if(ret<0) return ret; ret=sec_object_setpointer(context,aik_pointer); if(ret<0) return ret; return 0; }
int client_manager_init(void * proc,void * para) { int ret; TSS_RESULT result; char local_uuid[DIGEST_SIZE*2+1]; struct main_proc_pointer * main_pointer; // main_pointer= kmalloc(sizeof(struct main_proc_pointer),GFP_KERNEL); // system("mkdir pubkey privkey cert"); main_pointer= malloc(sizeof(struct main_proc_pointer)); if(main_pointer==NULL) return -ENOMEM; main_pointer->hAIKey=NULL; OpenSSL_add_all_algorithms(); ERR_load_crypto_strings(); result=TESI_Local_ReloadWithAuth("ooo","sss"); if(result!=TSS_SUCCESS) { printf("open tpm error %d!\n",result); return -ENFILE; } printf("open tpm success!\n"); proc_share_data_setpointer(main_pointer); return 0; }
int key_response_init(void * sub_proc,void * para) { int ret; TSS_RESULT result; result=TESI_Local_ReloadWithAuth("ooo","sss"); if ( result != TSS_SUCCESS ) { printf( "TPM auth error!", result ); exit( result ); } return 0; }
int symmkey_gen_init(void * sub_proc,void * para) { int ret; TSS_RESULT result; char local_uuid[DIGEST_SIZE]; result=TESI_Local_ReloadWithAuth("ooo","sss"); if(result!=TSS_SUCCESS) { printf("open tpm error %d!\n",result); return -ENFILE; } // prepare the slot sock return 0; }
int public_key_memdb_init() { TSS_RESULT * result; int ret; result=TESI_Local_ReloadWithAuth("ooo","sss"); if(result!=TSS_SUCCESS) { printf("reload tpm error %d!\n",result); return -ENFILE; } result=TESI_Local_GetPubEK("pubkey/pubek","ooo"); if(result!=TSS_SUCCESS) { printf("get tpm pubek error %d!\n",result); return -ENFILE; } ret=load_policy_pubek("pubkey/pubek"); return 0; }
int proc_aik_request(void * sub_proc,void * message) { TSS_RESULT result; TSS_HKEY hSignKey; TSS_HKEY hAIKey, hCAKey; struct aik_request_info reqinfo; struct policyfile_data * reqdata; int ret; BYTE *labelString = "UserA"; UINT32 labelLen = strlen(labelString) + 1; char local_uuid[DIGEST_SIZE*2+1]; char proc_name[DIGEST_SIZE*2+1]; ret=proc_share_data_getvalue("uuid",local_uuid); ret=proc_share_data_getvalue("proc_name",proc_name); printf("begin aik request!\n"); char buffer[1024]; char digest[DIGEST_SIZE]; int blobsize=0; int fd; // create a signkey and write its key in localsignkey.key, write its pubkey in localsignkey.pem result=TESI_Local_ReloadWithAuth("ooo","sss"); result=TESI_Local_CreateSignKey(&hSignKey,(TSS_HKEY)NULL,"sss","kkk"); if(result == TSS_SUCCESS) printf("Create SignKey SUCCEED!\n"); TESI_Local_WriteKeyBlob(hSignKey,"privkey/localsignkey"); TESI_Local_WritePubKey(hSignKey,"pubkey/localsignkey"); // fill the reqinfo struct calculate_sm3("pubkey/localsignkey.pem",digest); digest_to_uuid(digest,reqinfo.signpubkey_uuid); calculate_sm3("pubkey/pubek.pem",digest); digest_to_uuid(digest,reqinfo.pubek_uuid); reqinfo.user_name=labelString; get_local_uuid(reqinfo.user_uuid); // create info blob void * struct_template=create_struct_template(req_info_desc); if(struct_template==NULL) return -EINVAL; blobsize=struct_2_blob(&reqinfo,buffer,struct_template); // Load the CA Key result=TESI_Local_GetPubKeyFromCA(&hCAKey,"cert/CA"); if (result != TSS_SUCCESS) { printf("Get pubkey error %s!\n", tss_err_string(result)); exit(result); } TESI_AIK_CreateIdentKey(&hAIKey,NULL,"sss","kkk"); if (result != TSS_SUCCESS) { printf("Create AIK error %s!\n", tss_err_string(result)); exit(result); } labelLen=strlen(labelString); result = TESI_AIK_GenerateReq(hCAKey,blobsize,buffer,hAIKey,"cert/aik"); if (result != TSS_SUCCESS){ printf("Generate aik failed%s!\n",tss_err_string(result)); exit(result); } TESI_Local_WriteKeyBlob(hAIKey,"privkey/AIK"); ret=build_filedata_struct(&reqdata,"cert/aik.req"); void * send_msg; send_msg=message_create("FILD",message); if(send_msg!=NULL) { message_add_record(send_msg,reqdata); sec_subject_sendmsg(sub_proc,send_msg); } return 0; }