From: Kent Y. <ky...@us...> - 2005-11-17 17:21:49
|
Update of /cvsroot/trousers/testsuite/tcg/common In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31869 Modified Files: common.c Log Message: added seal_and_unseal function Index: common.c =================================================================== RCS file: /cvsroot/trousers/testsuite/tcg/common/common.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** common.c 3 Oct 2005 20:37:37 -0000 1.8 --- common.c 17 Nov 2005 17:21:35 -0000 1.9 *************** *** 652,653 **** --- 652,721 ---- } + TSS_RESULT + seal_and_unseal(TSS_HCONTEXT hContext, TSS_HKEY hKey, TSS_HENCDATA hEncData, + TSS_HPCRS hPcrs) + { + + TSS_RESULT result; + BYTE rgbDataToSeal[] = "932brh3270yrnc7y0nrj28c89cjrmj4398jng4399mch8"; + UINT32 ulDataLength = sizeof(rgbDataToSeal); + BYTE *rgbEncryptedData, *prgbDataToUnseal; + UINT32 ulEncryptedDataLength, pulDataLength; + + printf("Data before sealing:\n"); + print_hex(rgbDataToSeal, ulDataLength); + + result = Tspi_Data_Seal(hEncData, hKey, ulDataLength, rgbDataToSeal, + hPcrs); + if ( result != TSS_SUCCESS ) + { + print_error( "Tspi_Data_Seal", result ); + return result; + } + + result = Tspi_GetAttribData(hEncData, TSS_TSPATTRIB_ENCDATA_BLOB, + TSS_TSPATTRIB_ENCDATABLOB_BLOB, + &ulEncryptedDataLength, &rgbEncryptedData); + if ( result != TSS_SUCCESS ) + { + print_error( "Tspi_GetAttribData", result ); + return result; + } + + printf("Data after sealing:\n"); + print_hex(rgbEncryptedData, ulEncryptedDataLength); + + result = Tspi_Data_Unseal(hEncData, hKey, &pulDataLength, + &prgbDataToUnseal ); + if ( result != TSS_SUCCESS ) + { + print_error( "Tspi_Data_Unseal", result ); + if( !(checkNonAPI(result)) ) + { + print_error( "Tspi_Data_Unseal", result ); + } + else + { + print_error_nonapi( "Tspi_Data_Unseal", result ); + } + } + else + { + printf("Data after unsealing:\n"); + print_hex(prgbDataToUnseal, pulDataLength); + + if (pulDataLength != ulDataLength) { + printf("ERROR: Size of decrypted data does not match!" + " (%u != %u)\n", pulDataLength, ulDataLength); + result = TSS_E_FAIL; + } else if (memcmp(prgbDataToUnseal, rgbDataToSeal, ulDataLength)) { + printf("ERROR: Content of decrypted data does not match!\n"); + result = TSS_E_FAIL; + } else { + result = TSS_SUCCESS; + } + } + + return result; + } + |