添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

unsigned char buf[256];

int buf_size = sizeof(buf);

unsigned char random_cmd[] = {0, TPM_TAG_RQU_COMMAND,

0, 0, 0, 14, 0, 0, 0, TPM_ORD_GetRandom, 0, 0, 0, 8};

unsigned char tpm_sha1start[]={0,TPM_TAG_RQU_COMMAND,

0,0,0,10, 0,0,0,TPM_ORD_SHA1Start};

unsigned char tpm_sha1complete[]={0,TPM_TAG_RQU_COMMAND,

0,0,0,78,0,0,0,TPM_ORD_SHA1Complete, 0,0,0,64, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32, 33 ,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64};

fd = open("/dev/tpm0",O_RDWR);

if(fd < 0){

printf("Error: Open() failed: (%04x)n ", fd);

return -1;

printf("sizeof(random_cmd): %dn", sizeof(random_cmd));

printf("data in random_cmd: ");

for(i = 0; i < sizeof(random_cmd); i++)

printf("%02x", random_cmd[i]);

printf("n");

res = write(fd, random_cmd, sizeof(random_cmd));

if(res != sizeof(random_cmd)){

printf("Error: write random command failed: (%04x)n ", res);

close(fd);

return -1;

buf_size = 256;

ret = read(fd, &buf, buf_size);

printf("ret of read random tpm0: %dn",ret);

printf("read tpm0 random data: ");

for(i = 0; i < ret; i++){

printf("%02x ",buf[i] );

printf("n");

buf_size = 256;//buf_size > 10

printf("sizeof(tpm_sha1start): %dn", sizeof(tpm_sha1start));

printf("data in tpm_sha1start: ");

for(i = 0; i < sizeof(tpm_sha1start); i++)

printf("%02x", tpm_sha1start[i]);

printf("n");

res =write(fd, tpm_sha1start, sizeof(tpm_sha1start));

if(res != sizeof(tpm_sha1start)){

printf("Error: write tpm_sha1start failed: (%04x)n ", res);

close(fd);

return -1;

buf_size = 256;

ret = read(fd, &buf, buf_size);

printf("ret of read tpm0 after tpm_sha1start : %dn",ret);

printf("read tpm0 tpm_sha1start data: ");

for(i = 0; i < ret; i++){

printf("%02x ",buf[i] );

printf("n");

buf_size = 256;//buf_size > 10

printf("sizeof(tpm_sha1complete): %dn", sizeof(tpm_sha1complete));

printf("data in tpm_sha1complete: ");

for(i = 0; i < sizeof(tpm_sha1complete); i++)

printf("%02x", tpm_sha1complete[i]);

printf("n");

res =write(fd, tpm_sha1complete, sizeof(tpm_sha1complete));

if(res != sizeof(tpm_sha1complete)){

printf("Error: write tpm_sha1complete failed: (%04x)n ", res);

close(fd);

return -1;

buf_size = 256;

ret = read(fd, &buf, buf_size);

printf("ret of read tpm0 after tpm_sha1complete : %dn",ret);

printf("read tpm0 data after tpm_sha1complete : ");

for(i = 0; i < ret; i++){

printf("%02x ",buf[i] );

printf("n");

close(fd);

return 0;

3.1.5 操作步骤 (1) 加载tpmd 模块: sudo mkdir /var/run/tpm sudo modprobe tpmd_dev tpmd deactivated sudo tpmd f d。 tpmd 模块加载成功会在 /dev 目录下多个 tpm0 文件。 (2) 启动tcsd服务: tcsd f e 。 (3) 代码Mytpm_test.c 用于产生一个随机数和哈希值,也可以验证 tpm_emulator 环境是否搭建成功。编译 Mytpm_test.c 文件并使用超级用户权限执行(应为此程序要读写字符设备文件 /dev/tpm0 ,所以得以超级用户身份执行): gcc Mytpm_test.c o test, sudo ./test 返回搜狐,查看更多

责任编辑: