CODE HERE:
int main(int argc, char *argv) {
    TSS_RESULT result;
    TSS_HTPM hTPM;
    TSS_HCONTEXT hContext;
    TSS_HPOLICY hownerpolicy, hSRKPolicy, hNVPolicy;
    TSS_HKEY hSRK, hstoragekey;
    TSS_UUID SRK_UUID = TSS_UUID_SRK;
    TSS_HNVSTORE hNVStore;
    TSS_FLAG initFlags = TSS_KEY_TYPE_STORAGE | TSS_KEY_SIZE_2048 |
TSS_KEY_NO_AUTHORIZATION; //密钥标记

    int keyBlobLen, pubKeySize = 284;
    BYTE* pubKey, keyBlob;

    result = Tspi_Context_Create(&hContext);
    if (result != TSS_SUCCESS) {
        printf("Context_Create ERROR:%s(%04x)\n", get_error(result),
result);
    }
    result = Tspi_Context_Connect(hContext, NULL);
    if (result != TSS_SUCCESS) {
        printf("Context_Connect ERROR:%s(%04x)\n", get_error(result),
result);
    }
//
//
//    result = Tspi_Context_GetTpmObject(hContext, &hTPM);
//    if (result != TSS_SUCCESS) {
//        printf("Tspi_Context_GetTpmObject ERROR:%s(%04x)\n",
get_error(result), result);
//    }
//    result = Tspi_GetPolicyObject(hTPM, TSS_POLICY_USAGE,
&hownerpolicy);
//    if (result != TSS_SUCCESS) {
//        printf("Tspi_GetPolicyObject ERROR:%s(%04x)\n",
get_error(result), result);
//    }
////    result = Tspi_Policy_SetSecret(hownerpolicy,
TSS_SECRET_MODE_PLAIN, 20, (BYTE*) "00000000000000000000");
//    result = Tspi_Policy_SetSecret(hownerpolicy, TSS_SECRET_MODE_NONE,
0, NULL);
//    if (result != TSS_SUCCESS) {
//        printf("Tspi_Policy_SetSecret ERROR:%s(%04x)\n",
get_error(result), result);
//    }

    result = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM,
SRK_UUID, &hSRK);
    if (result != TSS_SUCCESS) {
        printf("Tspi_Context_LoadKeyByUUID ERROR:%s(%04x)\n",
get_error(result), result);
    }

    result = Tspi_GetPolicyObject(hSRK, TSS_POLICY_USAGE, &hSRKPolicy);
//    if (result != TSS_SUCCESS) {
//        printf("Tspi_GetPolicyObject ERROR:%s(%04x)\n",
get_error(result), result);
//    }
//
//    result = Tspi_Policy_SetSecret(hSRKPolicy, TSS_SECRET_MODE_NONE,
0, NULL);
    result = Tspi_Policy_SetSecret(hSRKPolicy, TSS_SECRET_MODE_PLAIN, 5,
(BYTE*) "admin");
//    result = Tspi_Policy_SetSecret(hSRKPolicy, TSS_SECRET_MODE_POPUP,
0, NULL);
    if (result != TSS_SUCCESS) {
        printf("Tspi_Policy_SetSecret ERROR:%s(%04x)\n",
get_error(result), result);
    }

    result = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY,
initFlags, &hstoragekey);

    result = Tspi_SetAttribUint32(hstoragekey, TSS_TSPATTRIB_KEY_INFO,
TSS_TSPATTRIB_KEYINFO_ENCSCHEME, TSS_ES_RSAESOAEP_SHA1_MGF1);

    result = Tspi_Key_CreateKey(hstoragekey, hSRK, 0);

    result = Tspi_Key_LoadKey(hstoragekey, hSRK);

    result = Tspi_Key_GetPubKey(hstoragekey, &pubKeySize, &pubKey);
//
    result = Tspi_GetAttribData(hstoragekey, TSS_TSPATTRIB_KEY_BLOB,
TSS_TSPATTRIB_KEYBLOB_BLOB, (UINT32 *) & keyBlobLen,
            (BYTE **) & keyBlob);
    result = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_NV, 0,
&hNVStore);
    
    result = Tspi_SetAttribUint32(hNVStore, TSS_TSPATTRIB_NV_INDEX, 0,
0x00011680);

    /* Set the permission for the index. */
    result = Tspi_SetAttribUint32(hNVStore,
TSS_TSPATTRIB_NV_PERMISSIONS, 0, 0x2000);

    /* Set the data size to be defined. */
    result = Tspi_SetAttribUint32(hNVStore, TSS_TSPATTRIB_NV_DATASIZE,
0, 559);
    /*Define NV space*/
    result = Tspi_NV_DefineSpace(hNVStore, 0, 0);

//    result =
Tspi_NV_WriteValue(hNVStore, /*offset*/0, /*datalength*/559, &keyBlob);
    printf("%s\n", get_error(result));
    Tspi_Context_Close(hContext);
    return 0;
}



------------------------------------------------------------------------------
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612 
_______________________________________________
TrouSerS-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/trousers-users

Reply via email to