2009-11-10 4 views
1

다음 코드는 Mario Strasser의 TPM 에뮬레이터의 코드입니다. 사양은 다음과 같이 말합니다.이 TPM 에뮬레이터는 PCR 레지스터 확장을 위해 TPM 사양을 따릅니 까?

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; 
} 

답변

1

AFAIK입니다. 내 코멘트보기 Perform OR on two hash outputs of sha1sum

+0

솔직히 내부 해시 상태가 어떤 의미인지는 알지 못합니다. 그래서 기본적으로 내가 http://stackoverflow.com/questions/1706999/perform-or-on-two-hash-outputs-of-sha1sum에서하고 싶었던 것은 틀렸다. 가리키는 주셔서 감사합니다. – idazuwaika