Соответствует ли этот эмулятор 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;
}

person idazuwaika    schedule 10.11.2009    source источник


Ответы (1)


АФАИК, да. См. мой комментарий в Выполните ИЛИ на двух хеш-выходах sha1sum

person laalto    schedule 10.11.2009
comment
честно говоря, я не знаю, что означает внутреннее состояние хеша. Итак, в основном то, что я хотел сделать в stackoverflow.com/questions/1706999/ был неверным. Спасибо за указание - person idazuwaika; 10.11.2009