[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 06/14] vTPM/TPM2: Create and load SK on TPM 2.0
TPM2_Create is used to create an object that can be loaded into a TPM using TPM2_Load(). If the command completes successfully, the TPM will create the new object and return the objectâs creation. data (creationData), its public area (outPublic), and its encrypted sensitive area (outPrivate). Preservation of the returned data is the responsibility of the caller. The object will need to be loaded (TPM2_Load()). TPM2_Load is used to load objects into the TPM. This command is used when both a TPM2B_PUBLIC and TPM2B_PRIVATE are to be loaded. If only a TPM2B_PUBLIC is to be loaded, the TPM2_LoadExternal command is used. Signed-off-by: Quan Xu <quan.xu@xxxxxxxxx> --- stubdom/vtpmmgr/init.c | 101 ++++++++++++++++++++++++++++++++++++++++++++++ stubdom/vtpmmgr/vtpmmgr.h | 1 + 2 files changed, 102 insertions(+) diff --git a/stubdom/vtpmmgr/init.c b/stubdom/vtpmmgr/init.c index c654071..8244bb0 100644 --- a/stubdom/vtpmmgr/init.c +++ b/stubdom/vtpmmgr/init.c @@ -580,3 +580,104 @@ TPM_RC tpm2_take_ownership(void) abort_egress: return status; } + +TPM_RESULT vtpmmgr2_create(void) +{ + TPM_RESULT status = TPM_SUCCESS; + + TPMTRYRETURN(tpm2_take_ownership()); + + /* create SK */ + TPM2_Create_Params_out out; + TPM2_Create_Params_in in = { + .inSensitive = { + .size = 4 + 20, + .sensitive = { + .userAuth.size = 20, + .userAuth.buffer = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, + .data.size = 0, + }, + }, + .inPublic = { + .size = (60), + .publicArea = { + .type = TPM2_ALG_RSA, + .nameAlg = TPM2_ALG_SHA256, +#define SK_OBJ_ATTR (fixedTPM | fixedParent | userWithAuth |\ + sensitiveDataOrigin |decrypt) + .objectAttributes = SK_OBJ_ATTR, + .authPolicy.size = 0, + .parameters.rsaDetail = { + .symmetric = { + .algorithm = TPM2_ALG_NULL, + }, + .scheme = { + TPM2_ALG_OAEP, + .details.oaep.hashAlg = TPM2_ALG_SHA256, + }, + .keyBits = RSA_KEY_SIZES_BITS, + .exponent = 0, + }, + .unique.rsa.size = 0, + }, + }, + .outsideInfo.size = 0, + .creationPCR.count = 0, + };/*end in */ + + TPMTRYRETURN(TPM2_Create(vtpm_globals.srk_handle, &in, &out)); + TPMTRYRETURN(TPM2_Load(vtpm_globals.srk_handle, + &vtpm_globals.tpm2_storage_key.Private, + &vtpm_globals.tpm2_storage_key.Public, + &vtpm_globals.sk_handle, + &vtpm_globals.sk_name)); + + vtpmloginfo(VTPM_LOG_VTPM, "SK HANDLE: 0x%X\n", vtpm_globals.sk_handle); + /*end create SK*/ + +#if 0 /*Bind & unBind*/ +{ + unsigned char rand[20]; + unsigned char cipher[256], out[256]; + vtpmmgr_rand(rand, 20); + int i; + UINT32 olen; + + printk("rand: "); + for (i = 0; i < 20; i++) { + printk(" %u ", rand[i]); + } + printk("\n"); + TPMTRYRETURN(TPM2_Bind(vtpm_globals.sk_handle, + rand, + 20, + cipher)); + printk("cipher : "); + for (i = 0; i < 256; i++) { + printk("%02x", cipher[i]); + } + printk("\n"); + TPMTRYRETURN(TPM2_UnBind(vtpm_globals.sk_handle, + 256, + cipher, + &olen, + out)); + printk("olen : %d \n", olen); + printk("out : "); + for (i = 0; i < olen; i++) + printk(" %u ", out[i]); + printk("\n"); +} +#endif + + /*Create new disk image*/ + TPMTRYRETURN(vtpm_new_disk()); + + goto egress; + +abort_egress: +egress: + vtpmloginfo(VTPM_LOG_VTPM, "Finished initialized new VTPM manager\n"); + return status; +} diff --git a/stubdom/vtpmmgr/vtpmmgr.h b/stubdom/vtpmmgr/vtpmmgr.h index 95519ba..9889feb 100644 --- a/stubdom/vtpmmgr/vtpmmgr.h +++ b/stubdom/vtpmmgr/vtpmmgr.h @@ -95,5 +95,6 @@ inline TPM_RESULT vtpmmgr_rand(unsigned char* bytes, size_t num_bytes) { /* TPM 2.0 */ TPM_RC tpm2_take_ownership(void); +TPM_RESULT vtpmmgr2_create(void); #endif -- 1.8.3.2 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |