HP-UX Trusted Computing Services A.01.00 Administrator's Guide

// Create the encrypted blob object (in software)
tResult = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_ENCDATA, dataInitFlags, &hEncData);
if (tResult != TSS_SUCCESS) {
fprintf(stderr, "Tspi_Context_CreateObject failed. Error: %s\n", Trspi_Error_String(tResult));
goto out_close;
}
// Set blob password to NULL
tResult = Tspi_GetPolicyObject(hEncData, TSS_POLICY_USAGE, &hPolicy);
if (tResult != TSS_SUCCESS) {
fprintf(stderr, "Tspi_GetPolicyObject failed. Error: %s\n", Trspi_Error_String(tResult));
goto out_close;
}
tResult = Tspi_Policy_SetSecret(hPolicy, TSS_SECRET_MODE_NONE, 0, NULL);
if (tResult != TSS_SUCCESS) {
fprintf(stderr, "Tspi_Policy_SetSecret failed. Error: %s\n", Trspi_Error_String(tResult));
goto out_close;
}
// Bind blob to TPM key created above
tResult = Tspi_Data_Bind(hEncData, hKey, strlen(secret), (BYTE *)secret);
if (tResult != TSS_SUCCESS) {
fprintf(stderr, "Tspi_Data_Bind failed. Error: %s\n", Trspi_Error_String(tResult));
goto out_close;
}
// Retrieve the encrypted data blob
tResult = Tspi_GetAttribData(hEncData, TSS_TSPATTRIB_ENCDATA_BLOB, TSS_TSPATTRIB_ENCDATABLOB_BLOB, &blobLen,
&blob);
if (tResult != TSS_SUCCESS) {
fprintf(stderr, "Tspi_GetAttribData failed. Error: %s\n", Trspi_Error_String(tResult));
goto out_close;
}
// Finally, print the UUID and encrypted blob
printHex((BYTE *)keyUUID, sizeof(TSS_UUID));
printf("\n");
printHex(blob, blobLen);
retcode = 0;
out_close:
Tspi_Context_Close(hContext);
out:
return retcode;
}
int
parseOptions(int argc, char **argv) {
int index;
int c;
opterr = 0;
while ((c = getopt (argc, argv, "p:s:h:")) != -1)
switch (c) {
case 'p':
password = optarg;
break;
case 'h':
host = optarg;
break;
case 's':
secret = optarg;
break;
case '?':
default:
if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt);
usage();
return 1;
}
return 0;
}
TSS_UUID *
uuidGen(TSS_HTPM hTPM){
TSS_RESULT tResult;
TSS_UUID *uuid;
tResult = Tspi_TPM_GetRandom(hTPM, sizeof(TSS_UUID), (BYTE **)&uuid);
if (tResult != TSS_SUCCESS) {
fprintf(stderr, "Tspi_TPM_GetRandom failed. Error: %s\n", Trspi_Error_String(tResult));
return NULL;
}
// Put in the variant and version bits
uuid->usTimeHigh &= 0x0FFF;
47