Hi all again.
I have a problem with encrypting and decrypting. I am sure the problem is when
I am loading the key to decrypt..but maybe someone can point me into the good
direction.
I made a couple of functions to use in the program. First, I create a key using:
Myfunc_Createkey()
{
TSS_UUID SRK_UUID = TSS_UUID_SRK;
initFlags = TSS_KEY_TYPE_BIND |
TSS_KEY_SIZE_512 | TSS_KEY_NO_AUTHORIZATION | TSS_KEY_NOT_MIGRATABLE;
Tspi_Context_LoadKeyByUUID(hContext,TSS_PS_TYPE_SYSTEM,SRK_UUID,&hSRK);
Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_POLICY,
TSS_POLICY_USAGE, &hPolicySRK);
Tspi_GetPolicyObject(hSRK,
TSS_POLICY_USAGE, &hPolicySRK);
Tspi_Policy_SetSecret(hPolicySRK,
TSS_SECRET_MODE_PLAIN, secret_srk_len, (BYTE*)secret_srk);
Tspi_Policy_AssignToObject(hPolicySRK,
hSRK);
Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_RSAKEY,initFlags,&hKey);
Tspi_SetAttribUint32(hKey,TSS_TSPATTRIB_KEY_INFO,TSS_TSPATTRIB_KEYINFO_ENCSCHEME,TSS_ES_RSAESPKCSV15);
Tspi_Key_CreateKey(hKey,hSRK,0);
UINT32 outSize;
BYTE *out;
FILE *fKey=fopen("hKey.key","w");
Tspi_GetAttribData(hKey,TSS_TSPATTRIB_KEY_BLOB,TSS_TSPATTRIB_KEYBLOB_BLOB,&outSize,&out);
out[outSize]='\0';
fwrite(out,1,outSize,fKey);
}
Here I am trying to write the key Blob to a file, so I can load it when I want
to decrypt a file. I want to encrypt/decrypt a file that contains the symmetric
key.
Now i do the encryption using this function:
Myfunc_BindData()
{
TSS_HENCDATA
hEncData;
UINT32
keySize,outSize,inSize;
BYTE *out,*in;
Myfunc_Createkey();
result =
Tspi_Key_LoadKey(hKey,hSRK);
FILE
*fOut,*fIn=fopen("keytoencrypt.txt","r");
fseek(fIn,0,SEEK_END);
inSize=ftell(fIn);
rewind(fIn);
in=new unsigned char[inSize];
fread(in,1,inSize,fIn);
in[inSize]='\0';
fclose(fIn);
Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_ENCDATA,TSS_ENCDATA_BIND,
&hEncData );
Tspi_GetAttribUint32( hKey, TSS_TSPATTRIB_KEY_INFO,TSS_TSPATTRIB_KEYINFO_SIZE,
&keySize );
Tspi_Data_Bind( hEncData, hKey, inSize,
in);
Tspi_GetAttribData(hEncData,TSS_TSPATTRIB_ENCDATA_BLOB,TSS_TSPATT
RIB_ENCDATABLOB_BLOB,&outSize,&out);
out[outSize]='\0';
fOut=fopen("encryptedkey.txt","w");
fwrite(out,1,outSize,fOut);
Tspi_Key_UnloadKey(hKey);
Tspi_Context_CloseObject(hContext,hKey);
Tspi_Context_CloseObject(
hContext, hEncData);
return 0;
}
If I try to encrypt here using Tspi_data_unbind it works perfect. But if try to
load the key used at the encryption from the blob saved to the file, I am
having problems. Here is what I've tryed:
Myfunc_UnbindData()
{
TSS_UUID SRK_UUID = TSS_UUID_SRK;
initFlags = TSS_KEY_TYPE_BIND |
TSS_KEY_SIZE_512 | TSS_KEY_NO_AUTHORIZATION | TSS_KEY_NOT_MIGRATABLE;
TSS_HENCDATA
hEncData;
UINT32
outSize,inSize;
BYTE *out,*in;
Tspi_Context_LoadKeyByUUID(hContext,TSS_PS_TYPE_SYSTEM,SRK_UUID,&hSRK);
Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_POLICY,
TSS_POLICY_USAGE, &hPolicySRK);
Tspi_GetPolicyObject(hSRK,
TSS_POLICY_USAGE, &hPolicySRK);
Tspi_Policy_SetSecret(hPolicySRK,
TSS_SECRET_MODE_PLAIN, secret_srk_len, (BYTE*)secret_srk);
Tspi_Policy_AssignToObject(hPolicySRK,
hSRK);
FILE *fKey=fopen("hKey.key","r");
UINT32 keySize;
BYTE *key;
fseek(fKey,0,SEEK_END);
keySize=ftell(fKey);
rewind(fKey);
key=new unsigned
char[keySize];
fread(key,1,keySize,fKey);
key[keySize]='\0';
fclose(fKey);
Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_RSAKEY,initFlags,&hKey);
Tspi_SetAttribUint32(hKey,TSS_TSPATTRIB_KEY_INFO,TSS_TSPATTRIB_KEYINFO_ENCSCHEME,TSS_ES_RSAESPKCSV15);
Tspi_SetAttribData(hKey,TSS_TSPATTRIB_KEY_BLOB,TSS_TSPATTRIB_KEYBLOB_BLOB,keySize,key);
Tspi_Context_LoadKeyByBlob(hContext,hSRK,keySize,key,&hKey);
//Here I get an error, so I guess it is a problem with the write/read key blob
from file.
//Tspi_Key_LoadKey(hKey,hSRK);
FILE *fIn=fopen("encryptedkey.txt","r");
fseek(fIn,0,SEEK_END);
inSize=ftell(fIn);
rewind(fIn);
in=new unsigned
char[inSize];
fread(in,1,inSize,fIn);
in[inSize]='\0';
fclose(fIn);
Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_ENCDATA,TSS_ENCDATA_BIND,
&hEncData );
Tspi_SetAttribData(
hEncData,TSS_TSPATTRIB_ENCDATA_BLOB, TSS_TSPATTRIB_ENCDATABLOB_BLOB, inSize, in
);
Tspi_Data_Unbind( hEncData, hKey,
&outSize, &out);
FILE *fOut=fopen("backtoplaintext.txt","w");
fwrite(out,1,outSize,fOut);
return 0;
}
Any ideea will be much apreciated, 10x for the time.
------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
TrouSerS-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/trousers-users