文档章节

读取PCR值

 宋小八
发布于 2017/09/29 18:16
字数 522
阅读 54
收藏 0

#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))  
void printMenu();

int main(int argc, char **argv)
{
    TSS_HCONTEXT          hContext;
    TSS_HTPM                   hTPM;
    TSS_HPCRS                 hPcrs;
    TSS_HENCDATA         hEncData;
    TSS_HENCDATA         hRetrieveData;
    TSS_RESULT               result;
    TSS_HKEY                   hSRK = 0;
    TSS_HPOLICY            hSRKPolicy = 0;
    TSS_UUID                  SRK_UUID = TSS_UUID_SRK;

    BYTE                           wks[20];
    BYTE                           *pubKey;
    UINT32                       pubKeySize;
    BYTE                           *rgbPcrValue;
    UINT32                      ulPcrLen;
    BYTE                           *encData;
    UINT32                      encDataSize;
    BYTE                           *outstring;
    UINT32                      outlength;
    FILE                            *fout, *fin;
    int                               i;

    UINT32                      j;
    BYTE                          valueToExtend[250];
    int                              count = 0;
    int                             pcrToExtend = 0;

    FILE                         *fpt;
    memset(wks, 0, 20);
    memset(valueToExtend, 0, 250);

    //Pick the TPM you are talking to.   
    //In this case, it is the system TPM(indicated with NULL)  
    result = Tspi_Context_Create(&hContext);
    Debug("Create Context", result);

    //result = Tspi_Context_Connect(hContext, sm-Junyi-M580);  
    result = Tspi_Context_Connect(hContext, NULL);
    Debug("Context Connect", result);

    //Get the TPM handle  
    result = Tspi_Context_GetTpmObject(hContext, &hTPM);
    Debug("Get TPM Handle", result);

    //Get the SRK handle  
    result = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK);
    Debug("Get the SRK handle", result);

    //Get the SRK policy  
    result = Tspi_GetPolicyObject(hSRK, TSS_POLICY_USAGE, &hSRKPolicy);
    Debug("Get the SRK policy", result);

    //Then set the SRK policy to be the well known secret  
    result = Tspi_Policy_SetSecret(hSRKPolicy, TSS_SECRET_MODE_SHA1, 20, wks);

printf("ssss");
    //输出所有PCR寄存器内的值  
    /*********************/
    fpt= fopen("731pcr.txt","w");
    ftruncate(fpt,0);
    if(fpt==NULL)

         printf("文件读取失败\n");
    for (j = 0; j < 24; j++)
    {
        result = Tspi_TPM_PcrRead(hTPM, j, &ulPcrLen, &rgbPcrValue);
        printf("PCR %02d ", j);
        fprintf(fpt,"PCR %02d ",j);
        for (i = 0; i < 19; i++)
        {
            printf("%02x", *(rgbPcrValue + i));
            fprintf(fpt," %02x",  *(rgbPcrValue + i));
        }
        printf("\n");
        fprintf(fpt,"\n");
    }
    fclose(fpt);
    /*********************/

    //Display each command line argument.  
    printf("\n Command line arguments:\n");
    for (count = 0; count <argc; count++)
        printf("argv[%d] : %s\n", count, argv[count]);

    //Examine command line arguments.  
    if (argc >= 3)
    {
        if (strcmp(argv[1],"-p") == 0)
        {
            pcrToExtend = atoi(argv[2]);
            if (pcrToExtend < 0 || pcrToExtend > 23)
            {
                printMenu();
                return 0;
            }
        }

        if (argc == 5)
        {
            if (strcmp(argv[3], "-v") == 0)
                memcpy(valueToExtend, argv[4], strlen(argv[4]));

         }
        else    //Use default value.  
        {
            memcpy(valueToExtend, "abcdefghijklmnopqrst", 20);
        }
    }
    else
    {
        printMenu();
        return 0;
    }

    //Extend the value  
    result = Tspi_TPM_PcrExtend(hTPM, pcrToExtend, 20, (BYTE *)valueToExtend, NULL, &ulPcrLen, &rgbPcrValue);
    Debug("Extended the PCR", result);

    //输出所有PCR寄存器内的值  
    /*********************/
    for (j = 0; j < 24; j++)
    {
        result = Tspi_TPM_PcrRead(hTPM, j, &ulPcrLen, &rgbPcrValue);
        printf("PCR %02d ", j);
        for (i = 0; i < 19; i++)
            printf("%02x", *(rgbPcrValue + i));
        printf("\n");
    }
    /*********************/


    //Clean up  
    Tspi_Context_FreeMemory(hContext, NULL);
    Tspi_Context_Close(hContext);

    return 0;
}

void printMenu()
{
    printf("\nChangePCRn Help Menu:\n");
    printf("\t -p PCR regiter to extend(0-23)\n");
    printf("\t -v Value to be extended into PCR(abc...)\n");
    printf("\t Note: -v argument is optional and a default value will be used if no value is provided\n");
    printf("\t Example: ChangePCRn -p 10 -v abcdef\n");
}

编译:gcc  readpcr.c -o read -ltspi

           ./read

运行时需开启TPM模拟器和tcs:      tpmd    -f  -d

                                                             tcsd    -e   -f

 

 

© 著作权归作者所有

粉丝 2
博文 19
码字总数 37798
作品 0
成都
私信 提问
PCR的物理意义

1.PCR 仅仅在实时播出流中才有意义(即前端编码器实时编码或视频服务器实时播出,后端机顶盒实时接收的情况),对DVD机这类从文件中取TS流的设备PCR毫无意义。 2.前端编码器工作原理:编码器...

sunrc
2014/06/11
0
0
hls之m3u8、ts流格式详解

HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。 1、M3U8文件 用文本方式对媒体文件进行...

souldepth
2016/04/27
20.3K
1
COM组件开发实践(三)

前面两篇文章分别介绍了MFC ActiveX应用程序和使用ATL开发ActiveX的简单实例,但还有两个问题需要解决: 1)标记ActiveX控件为安全的控件 2)对控件进行数字签名。本文将结合这两点进行简单的...

嗯哼9925
2017/12/30
0
0
了解Hibernate的FlushMode.NEVER模式

一、案件背景: 图片来自于电影《天生杀人狂》 Hibernate并没有为巨型数据集合提供良好的帮助,这也许是开发者认为这样没有太大必要,反而增加Hibernate框架复杂性的缘故吧。于是“极大数据量...

JavaGG
2010/03/24
759
0
hive分区导致FAILED: Hive Internal Error: java.lang.NullPointerException(null)

写了一条hive sql ,其中条件中存在 dt>=20150101 and dt<=20150228 这样的条件,原来执行没问题,今天就抛出 FAILED: Hive Internal Error: java.lang.NullPointerException(null) java.lan......

长征2号
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

灰度控制,比较两个版本

/** * 比较version1和version2的版本大小 * @param version1 * @param version2 * @param splitStr * @return * 返回version1-比较结果-version2 */public static CompareRe...

春哥大魔王的博客
14分钟前
3
0
JAVA CAS单点登录之一:搭建CAS服务器

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dba10g.blog.51cto.com/764602/1753086 前言 这一段时间,心血来潮研究了...

彬彬公子
14分钟前
4
0
Jsoup analysis THML

Jsoup是一款HTML解析器,通过它可以解析获取到URL、HTML等中的某些内容, 它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 依赖: org.jsoup jsou...

东方神祇
15分钟前
4
0
Spring Boot 2 实战:根据条件来自动配置不同逻辑的Bean

1. 前言 我们经常会有根据条件来加载不同的接口。比如你查询目录下文件列表, Windows 下你会用 CMD 的 dir 命令,而 Linux 下你会使用 ls 命令。 熟悉 Spring Boot 自动配置的也知道 Spring...

码农小胖哥
18分钟前
4
0
PCB设计-Allegro软件入门系列-焊盘的构成和用途(1)

Allegro软件入门最难的就是焊盘制作,而一个贴片焊盘都至少包括一个顶层如Top、钢网层pastemask_top、阻焊层(也就是人们常说的开窗层)sodermask_top,而一个插件焊盘就比贴片多了一个中间层和...

demyar
22分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部