1
以下代碼來自Mario Strasser的TPM仿真器。細則中指出,此TPM仿真器是否遵循TPM規範來擴展PCR寄存器?
PCR := SHA1(PCR || data)
讀「拼接PCR的原值與數據,散列連接字符串和散列存儲在PCR」。這不是PCR := PCR BITWISE-OR SHA1(data)
也不PCR := SHA1(PCR BITWISE-OR data)
TPM_RESULT TPM_Extend(TPM_PCRINDEX pcrNum, TPM_DIGEST *inDigest,
TPM_PCRVALUE *outDigest)
{
tpm_sha1_ctx_t ctx;
info("TPM_Extend()");
if (pcrNum >= TPM_NUM_PCR) return TPM_BADINDEX;
if (!(PCR_ATTRIB[pcrNum].pcrExtendLocal & (1 << LOCALITY))) return TPM_BAD_LOCALITY;
/* compute new PCR value as SHA-1(old PCR value || inDigest) */
tpm_sha1_init(&ctx);
tpm_sha1_update(&ctx, PCR_VALUE[pcrNum].digest, sizeof(PCR_VALUE[pcrNum].digest));
tpm_sha1_update(&ctx, inDigest->digest, sizeof(inDigest->digest));
tpm_sha1_final(&ctx, PCR_VALUE[pcrNum].digest);
/* set output digest */
if (tpmData.permanent.flags.disable) {
memset(outDigest->digest, 0, sizeof(*outDigest->digest));
} else {
memcpy(outDigest, &PCR_VALUE[pcrNum], sizeof(TPM_PCRVALUE));
}
return TPM_SUCCESS;
}
老實說,我不知道什麼是內部散列狀態。所以基本上我想在http://stackoverflow.com/questions/1706999/perform-or-on-two-hash-outputs-of-sha1sum中做的是不正確的。感謝您指點 – idazuwaika 2009-11-10 11:55:45