Index: mtm/mtm_data.c |
diff --git a/mtm/mtm_data.c b/mtm/mtm_data.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4449da01f5f4ff7846d02ed267f202aa95fc176c |
--- /dev/null |
+++ b/mtm/mtm_data.c |
@@ -0,0 +1,62 @@ |
+/* Software-based Mobile Trusted Module (MTM) Emulator |
+ * Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net> |
+ * |
+ * This module is free software; you can redistribute it and/or modify |
+ * it under the terms of the GNU General Public License as published |
+ * by the Free Software Foundation; either version 2 of the License, |
+ * or (at your option) any later version. |
+ * |
+ * This module is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ * GNU General Public License for more details. |
+ * |
+ * $Id$ |
+ */ |
+ |
+#include "mtm_data.h" |
+#include "tpm/tpm_data.h" |
+ |
+MTM_DATA mtmData; |
+ |
+static void set_counter(unsigned int num, const char *label) |
+{ |
+ TPM_COUNTER_VALUE *counter = &tpmData.permanent.data.counters[num]; |
+ counter->valid = TRUE; |
+ counter->tag = TPM_TAG_COUNTER_VALUE; |
+ memcpy(counter->label, label, sizeof(counter->label)); |
+ counter->counter = 1; |
+ memset(counter->usageAuth, 0, sizeof(TPM_SECRET)); |
+} |
+ |
+void mtm_init_data(void) |
+{ |
+ int i; |
+ info("initializing MTM data to default values"); |
+ /* reset all data to NULL, FALSE or 0 */ |
+ memset(&mtmData, 0, sizeof(mtmData)); |
+ mtmData.permanent.data.tag = MTM_TAG_PERMANENT_DATA; |
+ /* set specification version */ |
+ mtmData.permanent.data.specMajor = 0x01; |
+ mtmData.permanent.data.specMinor = 0x00; |
+ /* define verified PCRs */ |
+ mtmData.permanent.data.verifiedPCRs.sizeOfSelect = TPM_NUM_PCR / 8; |
+ for (i = 0; i < TPM_NUM_PCR / 8; i++) { |
+ mtmData.permanent.data.verifiedPCRs.pcrSelect[i] = 0x00; |
+ } |
+ /* map MTM counters to TPM counters */ |
+ set_counter(MTM_COUNTER_SELECT_BOOTSTRAP, "MTM1"); |
+ set_counter(MTM_COUNTER_SELECT_RIMPROTECT, "MTM2"); |
+ set_counter(MTM_COUNTER_SELECT_STORAGEPROTECT, "MTM3"); |
+ /* the field integrityCheckRootData is filled when the first verification key is loaded */ |
+ memset(mtmData.permanent.data.integrityCheckRootData, 0xff, |
+ sizeof(mtmData.permanent.data.integrityCheckRootData)); |
+ /* set internal verification key */ |
+ memcpy(mtmData.permanent.data.internalVerificationKey, |
+ "\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" |
+ "\x00\x00\x00\x77", sizeof(TPM_SECRET)); |
+ /* init flags */ |
+ mtmData.stany.flags.tag = MTM_TAG_STANY_FLAGS; |
+ mtmData.stany.flags.loadVerificationRootKeyEnabled = TRUE; |
+} |
+ |