int vtpm_memdb_init()  // get the tpm information and init the vtpm database
{
	int retval;
	int ret;
	char * record_package;
	TSS_HKEY 		hSignKey;
	TSS_RESULT result;
	BYTE digest[DIGEST_SIZE];

	struct vTPM_info	*local_tpm;
	struct vTPM_wrappedkey	*local_signkey;
	struct vTPM_publickey   *local_signpubkey;
	char * keypass="******";

	local_tpm=malloc(sizeof(struct vTPM_info));
	if(local_tpm==NULL)
		return -ENOMEM;

	local_signkey=malloc(sizeof(struct vTPM_wrappedkey));
	if(local_signkey==NULL)
		return -ENOMEM;

	local_signpubkey=malloc(sizeof(struct vTPM_publickey));
	if(local_signpubkey==NULL)
		return -ENOMEM;

	// if it is the first time to exec it, we should create a sign key for controller.

	result=TESI_Local_Reload();

	if ( result != TSS_SUCCESS )
	{
		printf("TESI_Local_Load Err!\n");
		return result;
	}
		// create this vtpm's info struct
	
	char local_uuid[DIGEST_SIZE*2+1];
	
	ret=proc_share_data_getvalue("uuid",local_uuid);

	ret=create_physical_tpm_struct(local_tpm,local_uuid,"vtpm_manager","ooo","sss",NULL,NULL);
       	AddPolicy(local_tpm,"VM_T");
       	ExportPolicyToFile("lib/VM_T.lib","VM_T");

	printf("create local tpm info success!\n");
	TESI_Local_Fin();
	return 0;
}
示例#2
0
int main( int argc, char ** argv )
{

	int ret;
	char			*function = "Tspi_TESI_Init";
	TSS_RESULT		result = 0;
	TSS_HKEY 		hCAKey;
	TSS_HKEY 		hSignKey;
	TSS_HKEY 		hReloadKey;
	TSS_HKEY 		hReloadPubKey;

	X509_REQ * cert_req;
	X509 * cert;
	
	char uuid[DIGEST_SIZE*2];
	char buf[4096];

	RSA * rsa;
	RSA * rsa1;
	RSA * rsa2;

	if(argc!=3)
	{
		printf("Error Usage: Should be %s  [CA_name] [Key_passwd])",argv[0]);
		return -EINVAL;
	}

	OpenSSL_add_all_algorithms();
	ERR_load_crypto_strings();

	result=TESI_Local_Reload();

	if ( result != TSS_SUCCESS )
	{
		printf("TESI_Local_Load Err!\n");
		return result;
	}

	int num=1024;
	result=TESI_Local_GetRandom(buf,num);
	if(result == TSS_SUCCESS)
		printf("Get %d Random num SUCCEED!\n",num);
	else
		return -EINVAL;
	
	RAND_seed(buf,num);
	
	rsa=Generate_RSA_Key();
	if(rsa==NULL)
	{
		printf("Generate RSA Key Failed!\n");
		return -EINVAL;
	}

	printf("Generate RSA Key Succeed!\n",num);

	WritePrivKey(rsa,argv[1],argv[2]);
	WritePubKey(rsa,argv[1]);

	result=ReadPubKey(&rsa1,argv[1]);
	if(result != TSS_SUCCESS)
		return -EINVAL;

	result=ReadPrivKey(&rsa2,argv[1],argv[2]);
	if(result != TSS_SUCCESS)
		return -EINVAL;
	
	result=Create_X509_RSA_Cert(argv[1],6,entries,rsa1,rsa2);
	return result;
}