TPM_RESULT TPM_Sbuffer_Load(TPM_STORE_BUFFER *sbuffer, unsigned char **stream, uint32_t *stream_size) { TPM_RESULT rc = 0; uint32_t length; /* get the length of the stream to be loaded */ if (rc == 0) { rc = TPM_Load32(&length, stream, stream_size); } /* check stream_size */ if (rc == 0) { if (*stream_size < length) { printf("TPM_Sbuffer_Load: Error, stream_size %u less than %u\n", *stream_size, length); rc = TPM_BAD_PARAM_SIZE; } } if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, *stream, length); *stream += length; *stream_size -= length; } return rc; }
TPM_RESULT TPM_Sbuffer_Test(void) { TPM_RESULT rc = 0; TPM_STORE_BUFFER sbuffer; size_t total_count; unsigned char count; unsigned char data[256]; /* dummy data */ printf(" TPM_Sbuffer_Test:\n"); TPM_Sbuffer_Init(&sbuffer); total_count = 0; while ((total_count != TPM_ALLOC_MAX) && rc == 0) { if (rc == 0) { rc = TPM_Random(&count, 1); } if (rc == 0) { printf(" TPM_Sbuffer_Test: count %u\n", count); /* last time through */ if (total_count + count > TPM_ALLOC_MAX) { count = TPM_ALLOC_MAX - total_count; } rc = TPM_Sbuffer_Append(&sbuffer,data, count); } if (rc == 0) { total_count += count; } printf(" TPM_Sbuffer_Test: total_count %lu\n", (unsigned long)total_count); } TPM_Sbuffer_Delete(&sbuffer); return rc; }
TPM_RESULT TPM_Sbuffer_Append8(TPM_STORE_BUFFER *sbuffer, uint8_t data) { TPM_RESULT rc = 0; rc = TPM_Sbuffer_Append(sbuffer, (const unsigned char *)(&data), sizeof(uint8_t)); return rc; }
TPM_RESULT TPM_Sbuffer_Append32(TPM_STORE_BUFFER *sbuffer, uint32_t data) { TPM_RESULT rc = 0; uint32_t ndata = htonl(data); rc = TPM_Sbuffer_Append(sbuffer, (const unsigned char *)(&ndata), sizeof(uint32_t)); return rc; }
TPM_RESULT TPM_Nonce_Store(TPM_STORE_BUFFER *sbuffer, const TPM_NONCE tpm_nonce) { TPM_RESULT rc = 0; printf(" TPM_Nonce_Store:\n"); rc = TPM_Sbuffer_Append(sbuffer, tpm_nonce, TPM_NONCE_SIZE); return rc; }
TPM_RESULT TPM_Digest_Store(TPM_STORE_BUFFER *sbuffer, const TPM_DIGEST tpm_digest) { TPM_RESULT rc = 0; printf(" TPM_Digest_Store:\n"); rc = TPM_Sbuffer_Append(sbuffer, tpm_digest, TPM_DIGEST_SIZE); return rc; }
TPM_RESULT TPM_Sbuffer_AppendSBuffer(TPM_STORE_BUFFER *destSbuffer, TPM_STORE_BUFFER *srcSbuffer) { TPM_RESULT rc = 0; const unsigned char *buffer; uint32_t length; if (rc == 0) { TPM_Sbuffer_Get(srcSbuffer, &buffer, &length); rc = TPM_Sbuffer_Append(destSbuffer, buffer, length); } return rc; }
TPM_RESULT TPM_PermanentFlags_StoreBytes(TPM_STORE_BUFFER *sbuffer, const TPM_PERMANENT_FLAGS *tpm_permanent_flags) { TPM_RESULT rc = 0; printf(" TPM_PermanentFlags_StoreBytes:\n"); /* store tag */ if (rc == 0) { rc = TPM_Sbuffer_Append16(sbuffer, TPM_TAG_PERMANENT_FLAGS); } /* store disable */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->disable), sizeof(BYTE)); } /* store ownership */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->ownership), sizeof(BYTE)); } /* store deactivated */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->deactivated), sizeof(BYTE)); } /* store readPubek */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->readPubek), sizeof(BYTE)); } /* store disableOwnerClear */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->disableOwnerClear), sizeof(BYTE)); } /* store allowMaintenance */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->allowMaintenance), sizeof(BYTE)); } /* store physicalPresenceLifetimeLock */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->physicalPresenceLifetimeLock), sizeof(BYTE)); } /* store physicalPresenceHWEnable */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->physicalPresenceHWEnable), sizeof(BYTE)); } /* store physicalPresenceCMDEnable */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->physicalPresenceCMDEnable), sizeof(BYTE)); } /* store CEKPUsed */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->CEKPUsed), sizeof(BYTE)); } /* store TPMpost */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->TPMpost), sizeof(BYTE)); } /* store TPMpostLock */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->TPMpostLock), sizeof(BYTE)); } /* store FIPS */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->FIPS), sizeof(BYTE)); } /* store operator */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->tpmOperator), sizeof(BYTE)); } /* store enableRevokeEK */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->enableRevokeEK), sizeof(BYTE)); } /* store nvLocked */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->nvLocked), sizeof(BYTE)); } /* store readSRKPub */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->readSRKPub), sizeof(BYTE)); } /* store tpmEstablished */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->tpmEstablished), sizeof(BYTE)); } /* store maintenanceDone */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->maintenanceDone), sizeof(BYTE)); } #if (TPM_REVISION >= 103) /* added for rev 103 */ /* store disableFullDALogicInfo */ if (rc == 0) { rc = TPM_Sbuffer_Append(sbuffer, &(tpm_permanent_flags->disableFullDALogicInfo), sizeof(BYTE)); } #endif return rc; }