本文整理汇总了C++中LOAD32函数的典型用法代码示例。如果您正苦于以下问题:C++ LOAD32函数的具体用法?C++ LOAD32怎么用?C++ LOAD32使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LOAD32函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: osap
/*
* Create an object specific authorisation protocol (OSAP) session
*/
static int osap(struct tpm_buf *tb, struct osapsess *s,
const unsigned char *key, uint16_t type, uint32_t handle)
{
unsigned char enonce[TPM_NONCE_SIZE];
unsigned char ononce[TPM_NONCE_SIZE];
int ret;
ret = tpm_get_random(TPM_ANY_NUM, ononce, TPM_NONCE_SIZE);
if (ret != TPM_NONCE_SIZE)
return ret;
INIT_BUF(tb);
store16(tb, TPM_TAG_RQU_COMMAND);
store32(tb, TPM_OSAP_SIZE);
store32(tb, TPM_ORD_OSAP);
store16(tb, type);
store32(tb, handle);
storebytes(tb, ononce, TPM_NONCE_SIZE);
ret = trusted_tpm_send(TPM_ANY_NUM, tb->data, MAX_BUF_SIZE);
if (ret < 0)
return ret;
s->handle = LOAD32(tb->data, TPM_DATA_OFFSET);
memcpy(s->enonce, &(tb->data[TPM_DATA_OFFSET + sizeof(uint32_t)]),
TPM_NONCE_SIZE);
memcpy(enonce, &(tb->data[TPM_DATA_OFFSET + sizeof(uint32_t) +
TPM_NONCE_SIZE]), TPM_NONCE_SIZE);
return TSS_rawhmac(s->secret, key, SHA1_DIGEST_SIZE, TPM_NONCE_SIZE,
enonce, TPM_NONCE_SIZE, ononce, 0, 0);
}
开发者ID:7799,项目名称:linux,代码行数:34,代码来源:trusted.c
示例2: TPM_ReadStartupEffects
uint32_t TPM_ReadStartupEffects(const unsigned char *buffer,
TPM_STARTUP_EFFECTS * se)
{
uint32_t offset = 0;
*se = LOAD32(buffer, offset);
offset += 4;
return offset;
}
开发者ID:cmjonze,项目名称:rpm5_tarballs,代码行数:8,代码来源:serialize.c
示例3: TPM_ReceiveSocket
static uint32_t TPM_ReceiveSocket(int sock_fd, struct tpm_buffer *tb)
{
uint32_t rc = 0;
uint32_t paramSize = 0;
uint32_t addsize = 0;
unsigned char *buffer = tb->buffer;
if (TPM_LowLevel_Use_VTPM())
addsize = sizeof(uint32_t);
/* read the tag and paramSize */
if (rc == 0) {
rc = TPM_ReceiveBytes(sock_fd, buffer,
addsize + TPM_U16_SIZE + TPM_U32_SIZE);
}
/* extract the paramSize */
if (rc == 0) {
paramSize = LOAD32(buffer, addsize + TPM_PARAMSIZE_OFFSET);
if (paramSize > TPM_MAX_BUFF_SIZE) {
printf
("TPM_ReceiveSocket: ERROR: paramSize %u greater than %u\n",
paramSize, TPM_MAX_BUFF_SIZE);
rc = ERR_BAD_RESP;
}
}
/* read the rest of the packet */
if (rc == 0) {
rc = TPM_ReceiveBytes(sock_fd,
buffer + addsize + TPM_U16_SIZE +
TPM_U32_SIZE,
paramSize - (TPM_U16_SIZE + TPM_U32_SIZE));
}
/* read the TPM return code from the packet */
if (rc == 0) {
showBuff(buffer, "TPM_ReceiveSocket: From TPM");
rc = LOAD32(buffer, addsize + TPM_RETURN_OFFSET);
tb->used = addsize + paramSize;
}
return rc;
}
开发者ID:cmjonze,项目名称:rpm5_tarballs,代码行数:40,代码来源:tpmutil_sock.c
示例4: TPM_ReceiveCharDev
static uint32_t
TPM_ReceiveCharDev(int sock_fd, struct tpm_buffer *tb)
{
uint32_t rc = 0;
uint32_t paramSize = 0;
unsigned char *buffer = tb->buffer;
#ifndef USE_PARTIAL_READ
/* read the whole packet */
if (rc == 0) {
int nread;
nread = read(sock_fd, tb->buffer, tb->size);
if (nread < 0) {
rc = ERR_IO;
} else {
tb->used = nread;
}
}
#endif
#ifdef USE_PARTIAL_READ
/* read the tag and paramSize */
if (rc == 0) {
rc = TPM_ReceiveBytes(sock_fd, buffer, TPM_U16_SIZE + TPM_U32_SIZE);
}
#endif
/* extract the paramSize */
if (rc == 0) {
paramSize = LOAD32(buffer, TPM_PARAMSIZE_OFFSET);
if (paramSize > TPM_MAX_BUFF_SIZE) {
printf("TPM_ReceiveCharDev: paramSize %u greater than %u\n",
paramSize, TPM_MAX_BUFF_SIZE);
rc = ERR_BAD_RESP;
}
}
#ifdef USE_PARTIAL_READ
/* read the rest of the packet */
if (rc == 0) {
rc = TPM_ReceiveBytes(sock_fd,
buffer + TPM_U16_SIZE + TPM_U32_SIZE,
paramSize - (TPM_U16_SIZE + TPM_U32_SIZE));
}
#endif
/* read the TPM return code from the packet */
if (rc == 0) {
showBuff(buffer, "TPM_ReceiveCharDev: From TPM");
tb->used = paramSize;
tpm_buffer_load32(tb, TPM_RETURN_OFFSET, &rc);
}
return rc;
}
开发者ID:osresearch,项目名称:tpmtotp,代码行数:51,代码来源:tpmutil_tty.c
示例5: TPM_ReadCounterValue
uint32_t TPM_ReadCounterValue(const unsigned char *buffer,
TPM_COUNTER_VALUE * counter)
{
uint32_t offset = 0;
counter->tag = LOAD16(buffer, offset);
offset += TPM_U16_SIZE;
if (counter->tag != TPM_TAG_COUNTER_VALUE)
return ERR_STRUCTURE;
memcpy(&counter->label[0], &buffer[offset], sizeof(counter->label));
offset += sizeof(counter->label);
counter->counter = LOAD32(buffer, offset);
return 0;
}
开发者ID:cmjonze,项目名称:rpm5_tarballs,代码行数:14,代码来源:serialize.c
示例6: oiap
/*
* Create an object independent authorisation protocol (oiap) session
*/
static int oiap(struct tpm_buf *tb, uint32_t *handle, unsigned char *nonce)
{
int ret;
INIT_BUF(tb);
store16(tb, TPM_TAG_RQU_COMMAND);
store32(tb, TPM_OIAP_SIZE);
store32(tb, TPM_ORD_OIAP);
ret = trusted_tpm_send(TPM_ANY_NUM, tb->data, MAX_BUF_SIZE);
if (ret < 0)
return ret;
*handle = LOAD32(tb->data, TPM_DATA_OFFSET);
memcpy(nonce, &tb->data[TPM_DATA_OFFSET + sizeof(uint32_t)],
TPM_NONCE_SIZE);
return 0;
}
开发者ID:a2hojsjsjs,项目名称:linux,代码行数:20,代码来源:trusted.c
示例7: main
int main(int argc, char *argv[])
{
int ret = 0;
uint32_t handle;
int listsize;
int offset;
int i; /* argc iterator */
TPM_setlog(0); /* turn off verbose output */
for (i=1 ; i<argc ; i++) {
if (!strcmp(argv[i], "-h")) {
printUsage();
}
else if (!strcmp(argv[i], "-v")) {
TPM_setlog(1);
}
else {
printf("\n%s is not a valid option\n", argv[i]);
printUsage();
}
}
STACK_TPM_BUFFER(response);
if (ret == 0) {
ret = TPM_GetCapability(0x0000007,NULL,&response);
if (ret != 0)
{
printf("Error %s from TPM_GetCapability\n",TPM_GetErrMsg(ret));
exit(1);
}
listsize = LOAD16(response.buffer,0);
offset = 2;
for (i = 0; i < listsize; ++i)
{
handle = LOAD32(response.buffer,offset);
printf("Key handle %02d %08x\n",i,handle);
offset += 4;
}
}
exit(0);
}
开发者ID:P1119r1m,项目名称:opentpm,代码行数:40,代码来源:listkeys.c
示例8: TPM_ReadMSAFile
uint32_t TPM_ReadMSAFile(const char * filename, TPM_MSA_COMPOSITE * msaList)
{
uint32_t ret;
unsigned char * buffer = NULL;
uint32_t buffersize = 0;
ret = TPM_ReadFile(filename, &buffer, &buffersize);
if ( (ret & ERR_MASK) != 0 ) {
return ret;
}
msaList->MSAlist = LOAD32(buffer, 0);
if (msaList->MSAlist * TPM_HASH_SIZE + 4 == buffersize) {
msaList->migAuthDigest = malloc( msaList->MSAlist * TPM_HASH_SIZE );
if (NULL == msaList->migAuthDigest) {
return ERR_MEM_ERR;
}
memcpy(msaList->migAuthDigest,
buffer+sizeof(uint32_t),
msaList->MSAlist * TPM_HASH_SIZE);
} else {
return ERR_BAD_FILE;
}
return 0;
}
开发者ID:liuersong,项目名称:828-ibmswtpm-fork,代码行数:23,代码来源:serialize.c
示例9: eval_2OPI_Int
//.........这里部分代码省略.........
case 0x15: /* LOADU8 */
{
#ifdef DEBUG
strncpy(Name, "LOADU8", 19);
#elif TRACE
record_trace("LOADU8");
#endif
LOADU8(vm, c);
break;
}
case 0x16: /* LOAD16 */
{
#ifdef DEBUG
strncpy(Name, "LOAD16", 19);
#elif TRACE
record_trace("LOAD16");
#endif
LOAD16(vm, c);
break;
}
case 0x17: /* LOADU16 */
{
#ifdef DEBUG
strncpy(Name, "LOADU16", 19);
#elif TRACE
record_trace("LOADU16");
#endif
LOADU16(vm, c);
break;
}
case 0x18: /* LOAD32 */
{
#ifdef DEBUG
strncpy(Name, "LOAD32", 19);
#elif TRACE
record_trace("LOAD32");
#endif
LOAD32(vm, c);
break;
}
case 0x19: /* LOADU32 */
{
#ifdef DEBUG
strncpy(Name, "LOADU32", 19);
#elif TRACE
record_trace("LOADU32");
#endif
LOADU32(vm, c);
break;
}
case 0x1F: /* CMPUI */
{
#ifdef DEBUG
strncpy(Name, "CMPUI", 19);
#elif TRACE
record_trace("CMPUI");
#endif
CMPUI(vm, c);
break;
}
开发者ID:oriansj,项目名称:stage0,代码行数:67,代码来源:vm_decode.c
示例10: tpm_sign
/*
* Sign a blob provided by userspace (that has had the hash function applied)
* using a specific key handle. The handle is assumed to have been previously
* loaded by e.g. LoadKey2.
*
* Note that the key signature scheme of the used key should be set to
* TPM_SS_RSASSAPKCS1v15_DER. This allows the hashed input to be of any size
* up to key_length_in_bytes - 11 and not be limited to size 20 like the
* TPM_SS_RSASSAPKCS1v15_SHA1 signature scheme.
*/
static int tpm_sign(struct tpm_buf *tb,
uint32_t keyhandle, unsigned char *keyauth,
const unsigned char *blob, uint32_t bloblen,
void *out, uint32_t outlen)
{
unsigned char nonceodd[TPM_NONCE_SIZE];
unsigned char enonce[TPM_NONCE_SIZE];
unsigned char authdata[SHA1_DIGEST_SIZE];
uint32_t authhandle = 0;
unsigned char cont = 0;
uint32_t ordinal;
uint32_t datalen;
int ret;
ordinal = htonl(TPM_ORD_SIGN);
datalen = htonl(bloblen);
/* session for loading the key */
ret = oiap(tb, &authhandle, enonce);
if (ret < 0) {
pr_info("oiap failed (%d)\n", ret);
return ret;
}
/* generate odd nonce */
ret = tpm_get_random(NULL, nonceodd, TPM_NONCE_SIZE);
if (ret < 0) {
pr_info("tpm_get_random failed (%d)\n", ret);
return ret;
}
/* calculate authorization HMAC value */
ret = TSS_authhmac(authdata, keyauth, SHA1_DIGEST_SIZE, enonce,
nonceodd, cont, sizeof(uint32_t), &ordinal,
sizeof(uint32_t), &datalen,
bloblen, blob, 0, 0);
if (ret < 0)
return ret;
/* build the request buffer */
INIT_BUF(tb);
store16(tb, TPM_TAG_RQU_AUTH1_COMMAND);
store32(tb, TPM_SIGN_SIZE + bloblen);
store32(tb, TPM_ORD_SIGN);
store32(tb, keyhandle);
store32(tb, bloblen);
storebytes(tb, blob, bloblen);
store32(tb, authhandle);
storebytes(tb, nonceodd, TPM_NONCE_SIZE);
store8(tb, cont);
storebytes(tb, authdata, SHA1_DIGEST_SIZE);
ret = trusted_tpm_send(tb->data, MAX_BUF_SIZE);
if (ret < 0) {
pr_info("authhmac failed (%d)\n", ret);
return ret;
}
datalen = LOAD32(tb->data, TPM_DATA_OFFSET);
ret = TSS_checkhmac1(tb->data, ordinal, nonceodd,
keyauth, SHA1_DIGEST_SIZE,
sizeof(uint32_t), TPM_DATA_OFFSET,
datalen, TPM_DATA_OFFSET + sizeof(uint32_t),
0, 0);
if (ret < 0) {
pr_info("TSS_checkhmac1 failed (%d)\n", ret);
return ret;
}
memcpy(out, tb->data + TPM_DATA_OFFSET + sizeof(uint32_t),
min(datalen, outlen));
return datalen;
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:85,代码来源:asym_tpm.c
示例11: main
//.........这里部分代码省略.........
TSS_sha1(buffer,
resp.used+TPM_NONCE_SIZE,
sighash);
free(buffer);
ret = RSA_verify(NID_sha1,
sighash,TPM_HASH_SIZE,
signature,signaturelen,
rsa);
if (1 != ret) {
printf("Error: Signature verification failed.\n");
exit(-1);
}
}
if (0 == resp.used) {
printf("Empty response.\n");
} else {
if (-1 == (int)scap) {
printf("Result for capability 0x%x is : ",cap);
} else {
printf("Result for capability 0x%x, subcapability 0x%x is : ",cap,scap);
}
if (TYPE_BOOL == matrx[index].result_size) {
if (resp.buffer[0] == 0) {
printf("FALSE\n");
} else {
printf("TRUE\n");
}
} else
if (TYPE_UINT32 == matrx[index].result_size) {
uint32_t rsp;
rsp = LOAD32(resp.buffer,0);
printf("0x%08X = %d\n",rsp,rsp);
} else
if (TYPE_UINT32_ARRAY == matrx[index].result_size) {
int i = 0;
printf("\n");
while (i+3 < (int)resp.used) {
uint32_t rsp = LOAD32(resp.buffer,i);
i+=4;
if (TPM_CAP_NV_LIST == cap) {
/* don't zero extend, grep needs the exact value for test suite */
printf("%d. Index : %d = 0x%x.\n",
i/4,
rsp,
rsp);
} else
if (TPM_CAP_KEY_HANDLE == cap) {
printf("%d. keyhandle : %d.\n",
i/4,
rsp);
} else {
printf("%d. item : %d.\n",
i/4,
rsp);
}
}
} else
if (TYPE_STRUCTURE == matrx[index].result_size) {
switch(cap) {
case TPM_CAP_FLAG:
{
if (scap == TPM_CAP_FLAG_PERMANENT) {
TPM_PERMANENT_FLAGS pf;
开发者ID:Jnig,项目名称:tpm-luks,代码行数:67,代码来源:getcapability.c
示例12: tpm_seal
/*
* Have the TPM seal(encrypt) the trusted key, possibly based on
* Platform Configuration Registers (PCRs). AUTH1 for sealing key.
*/
static int tpm_seal(struct tpm_buf *tb, uint16_t keytype,
uint32_t keyhandle, const unsigned char *keyauth,
const unsigned char *data, uint32_t datalen,
unsigned char *blob, uint32_t *bloblen,
const unsigned char *blobauth,
const unsigned char *pcrinfo, uint32_t pcrinfosize)
{
struct osapsess sess;
struct tpm_digests *td;
unsigned char cont;
uint32_t ordinal;
uint32_t pcrsize;
uint32_t datsize;
int sealinfosize;
int encdatasize;
int storedsize;
int ret;
int i;
/* alloc some work space for all the hashes */
td = kmalloc(sizeof *td, GFP_KERNEL);
if (!td)
return -ENOMEM;
/* get session for sealing key */
ret = osap(tb, &sess, keyauth, keytype, keyhandle);
if (ret < 0)
goto out;
dump_sess(&sess);
/* calculate encrypted authorization value */
memcpy(td->xorwork, sess.secret, SHA1_DIGEST_SIZE);
memcpy(td->xorwork + SHA1_DIGEST_SIZE, sess.enonce, SHA1_DIGEST_SIZE);
ret = TSS_sha1(td->xorwork, SHA1_DIGEST_SIZE * 2, td->xorhash);
if (ret < 0)
goto out;
ret = tpm_get_random(TPM_ANY_NUM, td->nonceodd, TPM_NONCE_SIZE);
if (ret != TPM_NONCE_SIZE)
goto out;
ordinal = htonl(TPM_ORD_SEAL);
datsize = htonl(datalen);
pcrsize = htonl(pcrinfosize);
cont = 0;
/* encrypt data authorization key */
for (i = 0; i < SHA1_DIGEST_SIZE; ++i)
td->encauth[i] = td->xorhash[i] ^ blobauth[i];
/* calculate authorization HMAC value */
if (pcrinfosize == 0) {
/* no pcr info specified */
ret = TSS_authhmac(td->pubauth, sess.secret, SHA1_DIGEST_SIZE,
sess.enonce, td->nonceodd, cont,
sizeof(uint32_t), &ordinal, SHA1_DIGEST_SIZE,
td->encauth, sizeof(uint32_t), &pcrsize,
sizeof(uint32_t), &datsize, datalen, data, 0,
0);
} else {
/* pcr info specified */
ret = TSS_authhmac(td->pubauth, sess.secret, SHA1_DIGEST_SIZE,
sess.enonce, td->nonceodd, cont,
sizeof(uint32_t), &ordinal, SHA1_DIGEST_SIZE,
td->encauth, sizeof(uint32_t), &pcrsize,
pcrinfosize, pcrinfo, sizeof(uint32_t),
&datsize, datalen, data, 0, 0);
}
if (ret < 0)
goto out;
/* build and send the TPM request packet */
INIT_BUF(tb);
store16(tb, TPM_TAG_RQU_AUTH1_COMMAND);
store32(tb, TPM_SEAL_SIZE + pcrinfosize + datalen);
store32(tb, TPM_ORD_SEAL);
store32(tb, keyhandle);
storebytes(tb, td->encauth, SHA1_DIGEST_SIZE);
store32(tb, pcrinfosize);
storebytes(tb, pcrinfo, pcrinfosize);
store32(tb, datalen);
storebytes(tb, data, datalen);
store32(tb, sess.handle);
storebytes(tb, td->nonceodd, TPM_NONCE_SIZE);
store8(tb, cont);
storebytes(tb, td->pubauth, SHA1_DIGEST_SIZE);
ret = trusted_tpm_send(TPM_ANY_NUM, tb->data, MAX_BUF_SIZE);
if (ret < 0)
goto out;
/* calculate the size of the returned Blob */
sealinfosize = LOAD32(tb->data, TPM_DATA_OFFSET + sizeof(uint32_t));
encdatasize = LOAD32(tb->data, TPM_DATA_OFFSET + sizeof(uint32_t) +
sizeof(uint32_t) + sealinfosize);
storedsize = sizeof(uint32_t) + sizeof(uint32_t) + sealinfosize +
sizeof(uint32_t) + encdatasize;
//.........这里部分代码省略.........
开发者ID:a2hojsjsjs,项目名称:linux,代码行数:101,代码来源:trusted.c
示例13: tpm_unseal
/*
* use the AUTH2_COMMAND form of unseal, to authorize both key and blob
*/
static int tpm_unseal(struct tpm_buf *tb,
uint32_t keyhandle, const unsigned char *keyauth,
const unsigned char *blob, int bloblen,
const unsigned char *blobauth,
unsigned char *data, unsigned int *datalen)
{
unsigned char nonceodd[TPM_NONCE_SIZE];
unsigned char enonce1[TPM_NONCE_SIZE];
unsigned char enonce2[TPM_NONCE_SIZE];
unsigned char authdata1[SHA1_DIGEST_SIZE];
unsigned char authdata2[SHA1_DIGEST_SIZE];
uint32_t authhandle1 = 0;
uint32_t authhandle2 = 0;
unsigned char cont = 0;
uint32_t ordinal;
uint32_t keyhndl;
int ret;
/* sessions for unsealing key and data */
ret = oiap(tb, &authhandle1, enonce1);
if (ret < 0) {
pr_info("trusted_key: oiap failed (%d)\n", ret);
return ret;
}
ret = oiap(tb, &authhandle2, enonce2);
if (ret < 0) {
pr_info("trusted_key: oiap failed (%d)\n", ret);
return ret;
}
ordinal = htonl(TPM_ORD_UNSEAL);
keyhndl = htonl(SRKHANDLE);
ret = tpm_get_random(TPM_ANY_NUM, nonceodd, TPM_NONCE_SIZE);
if (ret != TPM_NONCE_SIZE) {
pr_info("trusted_key: tpm_get_random failed (%d)\n", ret);
return ret;
}
ret = TSS_authhmac(authdata1, keyauth, TPM_NONCE_SIZE,
enonce1, nonceodd, cont, sizeof(uint32_t),
&ordinal, bloblen, blob, 0, 0);
if (ret < 0)
return ret;
ret = TSS_authhmac(authdata2, blobauth, TPM_NONCE_SIZE,
enonce2, nonceodd, cont, sizeof(uint32_t),
&ordinal, bloblen, blob, 0, 0);
if (ret < 0)
return ret;
/* build and send TPM request packet */
INIT_BUF(tb);
store16(tb, TPM_TAG_RQU_AUTH2_COMMAND);
store32(tb, TPM_UNSEAL_SIZE + bloblen);
store32(tb, TPM_ORD_UNSEAL);
store32(tb, keyhandle);
storebytes(tb, blob, bloblen);
store32(tb, authhandle1);
storebytes(tb, nonceodd, TPM_NONCE_SIZE);
store8(tb, cont);
storebytes(tb, authdata1, SHA1_DIGEST_SIZE);
store32(tb, authhandle2);
storebytes(tb, nonceodd, TPM_NONCE_SIZE);
store8(tb, cont);
storebytes(tb, authdata2, SHA1_DIGEST_SIZE);
ret = trusted_tpm_send(TPM_ANY_NUM, tb->data, MAX_BUF_SIZE);
if (ret < 0) {
pr_info("trusted_key: authhmac failed (%d)\n", ret);
return ret;
}
*datalen = LOAD32(tb->data, TPM_DATA_OFFSET);
ret = TSS_checkhmac2(tb->data, ordinal, nonceodd,
keyauth, SHA1_DIGEST_SIZE,
blobauth, SHA1_DIGEST_SIZE,
sizeof(uint32_t), TPM_DATA_OFFSET,
*datalen, TPM_DATA_OFFSET + sizeof(uint32_t), 0,
0);
if (ret < 0) {
pr_info("trusted_key: TSS_checkhmac2 failed (%d)\n", ret);
return ret;
}
memcpy(data, tb->data + TPM_DATA_OFFSET + sizeof(uint32_t), *datalen);
return 0;
}
开发者ID:a2hojsjsjs,项目名称:linux,代码行数:87,代码来源:trusted.c
示例14: TSS_checkhmac2
/*
* verify the AUTH2_COMMAND (unseal) result from TPM
*/
static int TSS_checkhmac2(unsigned char *buffer,
const uint32_t command,
const unsigned char *ononce,
const unsigned char *key1,
unsigned int keylen1,
const unsigned char *key2,
unsigned int keylen2, ...)
{
uint32_t bufsize;
uint16_t tag;
uint32_t ordinal;
uint32_t result;
unsigned char *enonce1;
unsigned char *continueflag1;
unsigned char *authdata1;
unsigned char *enonce2;
unsigned char *continueflag2;
unsigned char *authdata2;
unsigned char testhmac1[SHA1_DIGEST_SIZE];
unsigned char testhmac2[SHA1_DIGEST_SIZE];
unsigned char paramdigest[SHA1_DIGEST_SIZE];
struct sdesc *sdesc;
unsigned int dlen;
unsigned int dpos;
va_list argp;
int ret;
bufsize = LOAD32(buffer, TPM_SIZE_OFFSET);
tag = LOAD16(buffer, 0);
ordinal = command;
result = LOAD32N(buffer, TPM_RETURN_OFFSET);
if (tag == TPM_TAG_RSP_COMMAND)
return 0;
if (tag != TPM_TAG_RSP_AUTH2_COMMAND)
return -EINVAL;
authdata1 = buffer + bufsize - (SHA1_DIGEST_SIZE + 1
+ SHA1_DIGEST_SIZE + SHA1_DIGEST_SIZE);
authdata2 = buffer + bufsize - (SHA1_DIGEST_SIZE);
continueflag1 = authdata1 - 1;
continueflag2 = authdata2 - 1;
enonce1 = continueflag1 - TPM_NONCE_SIZE;
enonce2 = continueflag2 - TPM_NONCE_SIZE;
sdesc = init_sdesc(hashalg);
if (IS_ERR(sdesc)) {
pr_info("trusted_key: can't alloc %s\n", hash_alg);
return PTR_ERR(sdesc);
}
ret = crypto_shash_init(&sdesc->shash);
if (ret < 0)
goto out;
ret = crypto_shash_update(&sdesc->shash, (const u8 *)&result,
sizeof result);
if (ret < 0)
goto out;
ret = crypto_shash_update(&sdesc->shash, (const u8 *)&ordinal,
sizeof ordinal);
if (ret < 0)
goto out;
va_start(argp, keylen2);
for (;;) {
dlen = va_arg(argp, unsigned int);
if (dlen == 0)
break;
dpos = va_arg(argp, unsigned int);
ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen);
if (ret < 0)
break;
}
va_end(argp);
if (!ret)
ret = crypto_shash_final(&sdesc->shash, paramdigest);
if (ret < 0)
goto out;
ret = TSS_rawhmac(testhmac1, key1, keylen1, SHA1_DIGEST_SIZE,
paramdigest, TPM_NONCE_SIZE, enonce1,
TPM_NONCE_SIZE, ononce, 1, continueflag1, 0, 0);
if (ret < 0)
goto out;
if (memcmp(testhmac1, authdata1, SHA1_DIGEST_SIZE)) {
ret = -EINVAL;
goto out;
}
ret = TSS_rawhmac(testhmac2, key2, keylen2, SHA1_DIGEST_SIZE,
paramdigest, TPM_NONCE_SIZE, enonce2,
TPM_NONCE_SIZE, ononce, 1, continueflag2, 0, 0);
if (ret < 0)
goto out;
if (memcmp(testhmac2, authdata2, SHA1_DIGEST_SIZE))
ret = -EINVAL;
out:
kfree(sdesc);
return ret;
}
开发者ID:a2hojsjsjs,项目名称:linux,代码行数:100,代码来源:trusted.c
示例15: tpm_loadkey2
/*
* Load a TPM key from the blob provided by userspace
*/
static int tpm_loadkey2(struct tpm_buf *tb,
uint32_t keyhandle, unsigned char *keyauth,
const unsigned char *keyblob, int keybloblen,
uint32_t *newhandle)
{
unsigned char nonceodd[TPM_NONCE_SIZE];
unsigned char enonce[TPM_NONCE_SIZE];
unsigned char authdata[SHA1_DIGEST_SIZE];
uint32_t authhandle = 0;
unsigned char cont = 0;
uint32_t ordinal;
int ret;
ordinal = htonl(TPM_ORD_LOADKEY2);
/* session for loading the key */
ret = oiap(tb, &authhandle, enonce);
if (ret < 0) {
pr_info("oiap failed (%d)\n", ret);
return ret;
}
/* generate odd nonce */
ret = tpm_get_random(NULL, nonceodd, TPM_NONCE_SIZE);
if (ret < 0) {
pr_info("tpm_get_random failed (%d)\n", ret);
return ret;
}
/* calculate authorization HMAC value */
ret = TSS_authhmac(authdata, keyauth, SHA1_DIGEST_SIZE, enonce,
nonceodd, cont, sizeof(uint32_t), &ordinal,
keybloblen, keyblob, 0, 0);
if (ret < 0)
return ret;
/* build the request buffer */
INIT_BUF(tb);
store16(tb, TPM_TAG_RQU_AUTH1_COMMAND);
store32(tb, TPM_LOADKEY2_SIZE + keybloblen);
store32(tb, TPM_ORD_LOADKEY2);
store32(tb, keyhandle);
storebytes(tb, keyblob, keybloblen);
store32(tb, authhandle);
storebytes(tb, nonceodd, TPM_NONCE_SIZE);
store8(tb, cont);
storebytes(tb, authdata, SHA1_DIGEST_SIZE);
ret = trusted_tpm_send(tb->data, MAX_BUF_SIZE);
if (ret < 0) {
pr_info("authhmac failed (%d)\n", ret);
return ret;
}
ret = TSS_checkhmac1(tb->data, ordinal, nonceodd, keyauth,
SHA1_DIGEST_SIZE, 0, 0);
if (ret < 0) {
pr_info("TSS_checkhmac1 failed (%d)\n", ret);
return ret;
}
*newhandle = LOAD32(tb->data, TPM_DATA_OFFSET);
return 0;
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:67,代码来源:asym_tpm.c
示例16: TPM_CreateMigrationBlob
//.........这里部分代码省略.........
if (ret != 0) {
TSS_OIAPclose(authhandle1);
TSS_OIAPclose(authhandle2);
return ret;
}
/* build the request buffer */
ret = TSS_buildbuff(create_mig_fmt, tpmdata,
ordinal,
keyhndl,
migscheme,
migblen, migblob,
k.privkeylen, k.encprivkey,
authhandle1,
TPM_NONCE_SIZE, nonceodd,
c,
TPM_HASH_SIZE, authdata1,
authhandle2,
TPM_NONCE_SIZE, nonceodd,
c, TPM_HASH_SIZE, authdata2);
if ((ret & ERR_MASK) != 0) {
TSS_OIAPclose(authhandle1);
TSS_OIAPclose(authhandle2);
return ret;
}
/* transmit buffer to the TPM device and read the reply */
ret = TPM_Transmit(tpmdata, "CreateMigrationBlob");
if (ret != 0) {
TSS_OIAPclose(authhandle1);
TSS_OIAPclose(authhandle2);
return ret;
}
/* validate HMAC in response */
size1 = LOAD32(tpmdata, TPM_DATA_OFFSET);
size2 =
LOAD32(tpmdata,
TPM_DATA_OFFSET + TPM_U32_SIZE + size1);
if (size1 != 0) {
ret = TSS_checkhmac2(tpmdata, ordinal, nonceodd,
keyauth, TPM_HASH_SIZE,
migauth, TPM_HASH_SIZE,
TPM_U32_SIZE, TPM_DATA_OFFSET,
size1,
TPM_DATA_OFFSET +
TPM_U32_SIZE, TPM_U32_SIZE,
TPM_DATA_OFFSET +
TPM_U32_SIZE + size1, size2,
TPM_DATA_OFFSET +
TPM_U32_SIZE + size1 +
TPM_U32_SIZE, 0, 0);
} else {
ret = TSS_checkhmac2(tpmdata, ordinal, nonceodd,
keyauth, TPM_HASH_SIZE,
migauth, TPM_HASH_SIZE,
TPM_U32_SIZE, TPM_DATA_OFFSET,
TPM_U32_SIZE,
TPM_DATA_OFFSET +
TPM_U32_SIZE, size2,
TPM_DATA_OFFSET +
TPM_U32_SIZE + TPM_U32_SIZE,
0, 0);
}
TSS_OIAPclose(authhandle1);
TSS_OIAPclose(authhandle2);
if (ret != 0)
return ret;
开发者ID:3van,项目名称:tpmtotp,代码行数:67,代码来源:migrate.c
示例17: TPM_ConvertMigrationBlob
uint32_t TPM_ConvertMigrationBlob(unsigned int keyhandle,
unsigned char *keyauth,
unsigned char *rndblob,
unsigned int rndblen,
unsigned char *keyblob,
unsigned int keyblen,
unsigned char *encblob,
unsigned int *encblen)
{
unsigned char convert_mig_fmt[] = "00 c2 T l l @ @ l % o %";
uint32_t ret;
unsigned char tpmdata[TPM_MAX_BUFF_SIZE];
unsigned char nonceodd[TPM_NONCE_SIZE];
unsigned char evennonce[TPM_NONCE_SIZE];
unsigned char pubauth[TPM_HASH_SIZE];
unsigned char c;
uint32_t ordinal;
uint32_t authhandle;
uint32_t keyhndl;
uint32_t rndsize;
uint32_t datsize;
int size;
/* check input arguments */
if (keyauth == NULL || rndblob == NULL || keyblob == NULL
|| encblob == NULL || encblen == NULL)
return ERR_NULL_ARG;
/* generate odd nonce */
TSS_gennonce(nonceodd);
/* Open OIAP Session */
ret = TSS_OIAPopen(&authhandle, evennonce);
if (ret != 0)
return ret;
/* move Network byte order data to variables for hmac calculation */
ordinal = htonl(0x2A);
keyhndl = htonl(keyhandle);
rndsize = htonl(rndblen);
datsize = htonl(keyblen);
c = 0;
/* calculate authorization HMAC value */
ret =
TSS_authhmac(pubauth, keyauth, TPM_HASH_SIZE, evennonce,
nonceodd, c, TPM_U32_SIZE, &ordinal, TPM_U32_SIZE,
&datsize, keyblen, keyblob, TPM_U32_SIZE,
&rndsize, rndblen, rndblob, 0, 0);
if (ret != 0) {
TSS_OIAPclose(authhandle);
return ret;
}
/* build the request buffer */
ret = TSS_buildbuff(convert_mig_fmt, tpmdata,
ordinal,
keyhndl,
keyblen, keyblob,
rndblen, rndblob,
authhandle,
TPM_NONCE_SIZE, nonceodd,
c, TPM_HASH_SIZE, pubauth);
if ((ret & ERR_MASK) != 0) {
TSS_OIAPclose(authhandle);
return ret;
}
/* transmit the request buffer to the TPM device and read the reply */
ret = TPM_Transmit(tpmdata, "ConvertMigrationBlob");
if (ret != 0) {
TSS_OIAPclose(authhandle);
return ret;
}
TSS_OIAPclose(authhandle);
size = LOAD32(tpmdata, TPM_DATA_OFFSET);
ret =
TSS_checkhmac1(tpmdata, ordinal, nonceodd, keyauth,
TPM_HASH_SIZE, TPM_U32_SIZE, TPM_DATA_OFFSET,
size, TPM_DATA_OFFSET + TPM_U32_SIZE, 0, 0);
if (ret != 0)
return ret;
memcpy(encblob, tpmdata + TPM_DATA_OFFSET + TPM_U32_SIZE, size);
*encblen = size;
return 0;
}
开发者ID:3van,项目名称:tpmtotp,代码行数:80,代码来源:migrate.c
示例18: main
int main(int argc, char *argv[])
{
int ret;
unsigned char familyTable[256];
uint32_t familyTableSize = sizeof(familyTable);
unsigned char delegateTable[256];
uint32_t delegateTableSize = sizeof(delegateTable);
uint32_t i = 0;
(void)argv;
(void)argc;
TPM_setlog(0);
ret = TPM_Delegate_ReadTable(familyTable, &familyTableSize,
delegateTable, &delegateTableSize);
if (0 != ret) {
printf("Delegate_ReadTable returned error '%s' (%d).\n",
TPM_GetErrMsg(ret),
ret);
} else {
STACK_TPM_BUFFER( buffer )
i = 0;
SET_TPM_BUFFER( &buffer, familyTable, familyTableSize)
while (i < familyTableSize) {
TPM_FAMILY_TABLE_ENTRY fte;
ret = TPM_ReadFamilyTableEntry(&buffer, i, &fte);
if (0 == (ret & ERR_MASK) && ret > 0) {
printf("Family Table Entry:\n"
"familyLabel : %d\n"
"familyID : "OUT_FORMAT("%d","%d")"\n"
"verificationCount : "OUT_FORMAT("%d","%d")"\n"
"flags : "OUT_FORMAT("0x%x","0x%x")"\n\n",
fte.familyLabel,
fte.familyID,
fte.verificationCount,
fte.flags);
} else {
printf("Error %s from TPM_ReadFamilyTableEntry.\n",
TPM_GetErrMsg(ret));
return ret;
}
i += ret;
}
SET_TPM_BUFFER( &buffer, delegateTable, delegateTableSize);
i = 0;
while (i < delegateTableSize) {
TPM_DELEGATE_PUBLIC dtp;
TPM_DELEGATE_INDEX didx = LOAD32(buffer.buffer, i);
i += 4;
ret = TPM_ReadDelegatePublic(&buffer, i, &dtp);
if (0 == (ret & ERR_MASK) && ret > 0) {
printf("\n\nDelegate Table Entry:\n"
"index : "OUT_FORMAT("%d","%d")"\n"
"rowLabel : %d\n"
"permissions : "OUT_FORMAT("0x%08x, 0x%08x","0x%08x, 0x%08x")"\n"
"familyID : "OUT_FORMAT("%d","%d")"\n"
"verificationCount : "OUT_FORMAT("%d","%d")"\n",
didx,
dtp.rowLabel,
dtp.permissions.per1, dtp.permissions.per2,
dtp.familyID,
dtp.verificationCount);
} else {
printf("Error %s from TPM_ReadDelegatePublic.\n",
TPM_GetErrMsg(ret));
exit(ret);
}
i += ret;
}
printf("\n");
ret = 0;
}
exit(ret);
}
开发者ID:liuersong,项目名称:828-ibmswtpm-fork,代码行数:78,代码来源:delegatereadtable.c
示例19: main
int main(int argc, char * argv[]) {
uint32_t ret = 0;
int i = 0;
int verbose = FALSE;
uint32_t migkeyhandle = 0;
char * filename = NULL;
unsigned char * buffer = NULL;
unsigned char keypasshash[TPM_HASH_SIZE];
char * keypass = NULL;
uint16_t migscheme = TPM_MS_MIGRATE;
unsigned char * keyhashptr = NULL;
i = 1;
TPM_setlog(0);
while (i < argc) {
if (!strcmp("-if",argv[i])) {
i++;
if (i < argc) {
filename = argv[i];
} else {
printf("Missing mandatory parameter for -if.\n");
usage();
}
}
else if (!strcmp("-hp",argv[i])) {
i++;
if (i < argc) {
sscanf(argv[i],"%x",&migkeyhandle);
} else {
printf("Missing mandatory parameter for -hp.\n");
usage();
}
}
else if (!strcmp("-pwdp",argv[i])) {
i++;
if (i < argc) {
keypass = argv[i];
} else {
printf("Missing mandatory parameter for -pwdp.\n");
usage();
}
}
else if (!strcmp("-rewrap",argv[i])) {
migscheme = TPM_MS_REWRAP;
}
else if (!strcmp("-v",argv[i])) {
verbose = TRUE;
TPM_setlog(1);
}
else if (!strcmp("-h",argv[i])) {
usage();
}
else {
printf("\n%s is not a valid option\n", argv[i]);
usage();
}
i++;
}
if (0 == migkeyhandle ||
NULL == filename) {
printf("Missing mandatory parameter.\n");
usage();
}
if (NULL != keypass) {
TSS_sha1(keypass,strlen(keypass),keypasshash);
keyhashptr = keypasshash;
} else {
keyhashptr = NULL;
}
buffer = readFile(filename);
if (NULL != buffer) {
int offset = 0;
unsigned char * encblob = NULL;
uint32_t encsize = 0;
unsigned char * rndblob = NULL;
uint32_t rndsize = 0;
uint32_t keysize = 0;
unsigned char * keyblob = NULL;
unsigned char * outblob = NULL;
uint32_t outblen;
keydata newkey;
STACK_TPM_BUFFER( tb );
rndsize = LOAD32(buffer,offset); offset += 4;
rndblob = &buffer[offset]; offset += rndsize;
encsize = LOAD32(buffer,offset); offset += 4;
encblob = &buffer[offset]; offset += encsize;
keysize = LOAD32(buffer,offset); offset += 4;
keyblob = &buffer[offset]; offset += keysize;
SET_TPM_BUFFER(&tb, keyblob, keysize);
TSS_KeyExtract(&tb, 0,&newkey);
outblob = malloc(encsize);
if (NULL == outblob) {
//.........这里部分代码省略.........
开发者ID:P1119r1m,项目名称:opentpm,代码行数:101,代码来源:loadmigrationblob.c
示例20: main
//.........这里部分代码省略.........
-1 == (int)migrationkeyhandle) {
printf("Missing or wrong parameter.\n");
usage();
exit(-1);
}
if (NULL != migrationKeyPassword) {
TSS_sha1(migrationKeyPassword,
strlen(migrationKeyPassword),
migrationkeyUsageAuth);
passptr = migrationkeyUsageAuth;
}
/*
* load the key to be migrated from a file.
*/
ret = 0;
buffer = readFile(filename, &bufferSize);
if (NULL != buffer) {
unsigned int offset = 0;
unsigned char * encblob = NULL;
uint32_t encsize = 0;
unsigned char * rndblob = NULL;
uint32_t rndsize = 0;
uint32_t keysize = 0;
unsigned char * keyblob = NULL;
keydata tobemigkey;
STACK_TPM_BUFFER(tb)
rndsize = LOAD32(buffer,offset);
offset += 4;
if (offset > bufferSize) {
printf("Bad input file. Exiting.\n");
return -1;
}
rndblob = &buffer[offset];
offset += rndsize;
if (offset > bufferSize) {
printf("Bad input file. Exiting.\n");
return -1;
}
encsize = LOAD32(buffer,offset);
offset += 4;
if (offset > bufferSize) {
printf("Bad input file. Exiting.\n");
return -1;
}
encblob = &buffer[offset];
offset += encsize;
if (offset > bufferSize) {
printf("Bad input file. Exiting.\n");
return -1;
}
keysize = LOAD32(buffer,offset);
offset += 4;
if (offset > bufferSize) {
printf("Bad input file. Exiting.\n");
return -1;
}
keyblob = &buffer[offset];
offset += keysize;
开发者ID:meloscheng,项目名称:opentpm,代码行数:66,代码来源:migratekey.c
注:本文中的LOAD32函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论