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