diff options
Diffstat (limited to 'tests/tpm_lite/readonly.c')
-rw-r--r-- | tests/tpm_lite/readonly.c | 134 |
1 files changed, 70 insertions, 64 deletions
diff --git a/tests/tpm_lite/readonly.c b/tests/tpm_lite/readonly.c index 97b90917..c3940e12 100644 --- a/tests/tpm_lite/readonly.c +++ b/tests/tpm_lite/readonly.c @@ -34,76 +34,82 @@ * of making this FUBAR). */ void InitializeSpaces(void) { - uint32_t zero = 0; - uint32_t perm = TPM_NV_PER_WRITE_STCLEAR | TPM_NV_PER_PPWRITE; - - printf("Initializing spaces\n"); - TlclSetNvLocked(); /* useful only the first time */ - - TlclDefineSpace(INDEX0, perm, 4); - TlclWrite(INDEX0, (uint8_t *) &zero, 4); - TlclDefineSpace(INDEX1, perm, 4); - TlclWrite(INDEX1, (uint8_t *) &zero, 4); - TlclDefineSpace(INDEX2, perm, 4); - TlclWrite(INDEX2, (uint8_t *) &zero, 4); - TlclDefineSpace(INDEX3, perm, 4); - TlclWrite(INDEX3, (uint8_t *) &zero, 4); - - perm = TPM_NV_PER_READ_STCLEAR | TPM_NV_PER_WRITE_STCLEAR | - TPM_NV_PER_PPWRITE; - TlclDefineSpace(INDEX_INITIALIZED, perm, 1); + uint32_t zero = 0; + uint32_t perm = TPM_NV_PER_WRITE_STCLEAR | TPM_NV_PER_PPWRITE; + + printf("Initializing spaces\n"); + TlclSetNvLocked(); /* useful only the first time */ + + TlclDefineSpace(INDEX0, perm, 4); + TlclWrite(INDEX0, (uint8_t *) &zero, 4); + TlclDefineSpace(INDEX1, perm, 4); + TlclWrite(INDEX1, (uint8_t *) &zero, 4); + TlclDefineSpace(INDEX2, perm, 4); + TlclWrite(INDEX2, (uint8_t *) &zero, 4); + TlclDefineSpace(INDEX3, perm, 4); + TlclWrite(INDEX3, (uint8_t *) &zero, 4); + + perm = (TPM_NV_PER_READ_STCLEAR | TPM_NV_PER_WRITE_STCLEAR | + TPM_NV_PER_PPWRITE); + TlclDefineSpace(INDEX_INITIALIZED, perm, 1); } void EnterRecoveryMode(void) { - printf("entering recovery mode"); - exit(0); + printf("entering recovery mode"); + exit(0); } int main(int argc, char** argv) { - uint8_t c; - uint32_t index_0, index_1, index_2, index_3; - - TlclLibInit(); - - TlclStartup(); - TlclSelfTestFull(); - - TlclAssertPhysicalPresence(); - - /* Checks if initialization has completed by trying to read-lock a space - * that's created at the end of initialization. - */ - if (TlclRead(INDEX_INITIALIZED, &c, 0) == TPM_E_BADINDEX) { - /* The initialization did not complete. - */ - InitializeSpaces(); - } - - /* Checks if spaces are OK or messed up. - */ - if (TlclRead(INDEX0, (uint8_t*) &index_0, sizeof(index_0)) != TPM_SUCCESS || - TlclRead(INDEX1, (uint8_t*) &index_1, sizeof(index_1)) != TPM_SUCCESS || - TlclRead(INDEX2, (uint8_t*) &index_2, sizeof(index_2)) != TPM_SUCCESS || - TlclRead(INDEX3, (uint8_t*) &index_3, sizeof(index_3)) != TPM_SUCCESS) { - EnterRecoveryMode(); - } - - /* Writes space, and locks it. Then attempts to write again. I really wish - * I could use the imperative. - */ - index_0 += 1; - if (TlclWrite(INDEX0, (uint8_t*) &index_0, sizeof(index_0) != TPM_SUCCESS)) { - error("could not write index 0\n"); - } - TlclWriteLock(INDEX0); - if (TlclWrite(INDEX0, (uint8_t*) &index_0, sizeof(index_0)) == TPM_SUCCESS) { - error("index 0 is not locked\n"); - } - - /* Done for now. - */ - printf("TEST SUCCEEDED\n"); - exit(0); + uint8_t c; + uint32_t index_0, index_1, index_2, index_3; + + TlclLibInit(); + + TlclStartup(); + TlclSelfTestFull(); + + TlclAssertPhysicalPresence(); + + /* Checks if initialization has completed by trying to read-lock a space + * that's created at the end of initialization. + */ + if (TlclRead(INDEX_INITIALIZED, &c, 0) == TPM_E_BADINDEX) { + /* The initialization did not complete. + */ + InitializeSpaces(); + } + + /* Checks if spaces are OK or messed up. + */ + if (TlclRead(INDEX0, (uint8_t*) &index_0, + sizeof(index_0)) != TPM_SUCCESS || + TlclRead(INDEX1, (uint8_t*) &index_1, + sizeof(index_1)) != TPM_SUCCESS || + TlclRead(INDEX2, (uint8_t*) &index_2, + sizeof(index_2)) != TPM_SUCCESS || + TlclRead(INDEX3, (uint8_t*) &index_3, + sizeof(index_3)) != TPM_SUCCESS) { + EnterRecoveryMode(); + } + + /* Writes space, and locks it. Then attempts to write again. I really wish + * I could use the imperative. + */ + index_0 += 1; + if (TlclWrite(INDEX0, (uint8_t*) &index_0, + sizeof(index_0) != TPM_SUCCESS)) { + error("could not write index 0\n"); + } + TlclWriteLock(INDEX0); + if (TlclWrite(INDEX0, (uint8_t*) &index_0, + sizeof(index_0)) == TPM_SUCCESS) { + error("index 0 is not locked\n"); + } + + /* Done for now. + */ + printf("TEST SUCCEEDED\n"); + exit(0); } |