调用TSPI中的hash函数散列测试
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <tss/tss_error.h>
#include <tss/platform.h>
#include <tss/tss_defines.h>
#include <tss/tss_typedef.h>
#include <tss/tss_structs.h>
#include <tss/tspi.h>
#include <trousers/trousers.h>
#define Debug(message, tResult) printf("%s : %s\n", message, (char *)Trspi_Error_String(result))
int main()
{
TSS_HCONTEXT hContext; //上下文
int i;
TSS_RESULT result;
printf("#########程序开始运行:###########\n");
/**********上下文及其初始化连接*********/
//选择你正在与之通信的TPM,默认情况下是系统TPM(用NULL表示)
result = Tspi_Context_Create(&hContext);
Debug(" 1-Create Context",result);
result = Tspi_Context_Connect(hContext,NULL);
Debug(" 2-Context Connect", result);
/*==================================*/
/*********散列对象*****************/
TSS_HHASH hHash;
BYTE *digest, *data = "DATA TO HASH";
UINT32 digestLen;
//创建散列值对象
Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_HASH, TSS_HASH_SHA1, &hHash);
//将数据散列,因为对象类型是 TSS_HASH_SHA1,所以TSS知道用SHA-1算法进行散列
Tspi_Hash_UpdateHashValue(hHash, strlen(data), data);
//取回散列值对象的摘要
Tspi_Hash_GetHashValue(hHash, &digestLen, &digest);
//输出被散列的源数据对象
printf("----被散列的源数据: \n");
for (i = 0; i < strlen(data); i++)
printf("%02x", *(data + i));
//输出被散列后的hash值
printf("\n----被散列后的hash值: \n");
for (i = 0; i < digestLen; i++)
printf("%02x", *(digest + i));
/*==================================*/
/*********释放资源************/
//清理上下文对象
Tspi_Context_FreeMemory(hContext, NULL);
Tspi_Context_Close(hContext);
printf("\n######释放资源成功,程序结束。#########\n");
return 0;
}