Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1513)

Unified Diff: mtm/mtm_capability.c

Issue 660204: Upgrade to tpm-emulator version 0.7. (Closed)
Patch Set: Created 10 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mtm/CMakeLists.txt ('k') | mtm/mtm_cmd_handler.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mtm/mtm_capability.c
diff --git a/mtm/mtm_capability.c b/mtm/mtm_capability.c
new file mode 100644
index 0000000000000000000000000000000000000000..af7c90f772d70c7b36c1e37c888851ba0c46b67d
--- /dev/null
+++ b/mtm/mtm_capability.c
@@ -0,0 +1,140 @@
+/* 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_structures.h"
+#include "mtm_marshalling.h"
+#include "mtm_data.h"
+#include "tpm/tpm_data.h"
+#include "tpm/tpm_commands.h"
+
+static inline TPM_RESULT return_UINT32(UINT32 *respSize, BYTE **resp, UINT32 value)
+{
+ UINT32 len = *respSize = 4;
+ BYTE *ptr = *resp = tpm_malloc(*respSize);
+ if (ptr == NULL || tpm_marshal_UINT32(&ptr, &len, value)) {
+ tpm_free(*resp);
+ return TPM_FAIL;
+ }
+ return TPM_SUCCESS;
+}
+
+static inline TPM_RESULT return_BOOL(UINT32 *respSize, BYTE **resp, BOOL value)
+{
+ UINT32 len = *respSize = 1;
+ BYTE *ptr = *resp = tpm_malloc(*respSize);
+ if (ptr == NULL || tpm_marshal_BOOL(&ptr, &len, value)) {
+ tpm_free(*resp);
+ return TPM_FAIL;
+ }
+ return TPM_SUCCESS;
+}
+
+#define return_BYTE return_BOOL
+
+static TPM_RESULT cap_ord(UINT32 subCapSize, BYTE *subCap,
+ UINT32 *respSize, BYTE **resp)
+{
+ TPM_COMMAND_CODE ord;
+ if (tpm_unmarshal_TPM_COMMAND_CODE(&subCap, &subCapSize, &ord))
+ return TPM_BAD_MODE;
+ switch (ord) {
+ case MTM_ORD_InstallRIM:
+ case MTM_ORD_LoadVerificationKey:
+ case MTM_ORD_LoadVerificationRootKeyDisable:
+ case MTM_ORD_VerifyRIMCert:
+ case MTM_ORD_VerifyRIMCertAndExtend:
+ case MTM_ORD_IncrementBootstrapCounter:
+ case MTM_ORD_SetVerifiedPCRSelection:
+ return return_BOOL(respSize, resp, TRUE);
+ default:
+ return return_BOOL(respSize, resp, FALSE);
+ }
+}
+
+static TPM_RESULT cap_mtm_permanent_data(UINT32 subCapSize, BYTE *subCap,
+ UINT32 *respSize, BYTE **resp)
+{
+ UINT32 subCapVal, len;
+ BYTE* ptr;
+
+/* unmarshal subCap */
+ if (tpm_unmarshal_UINT32(&subCap, &subCapSize, &subCapVal) != 0)
+ return TPM_BAD_PARAMETER;
+ switch (subCapVal) {
+
+ case 1:
+ return TPM_FAIL;
+ break;
+
+ case 2:
+ *respSize = len = sizeof_TPM_PCR_SELECTION(mtmData.permanent.data.verifiedPCRs);
+ *resp = ptr = tpm_malloc(*respSize);
+ if (*resp == NULL
+ || tpm_marshal_TPM_PCR_SELECTION(&ptr, &len, &mtmData.permanent.data.verifiedPCRs)) {
+ tpm_free(*resp);
+ return TPM_FAIL;
+ }
+
+ case 3:
+ return return_UINT32(respSize, resp,
+ tpmData.permanent.data.counters[MTM_COUNTER_SELECT_BOOTSTRAP].counter);
+
+ case 4:
+ return return_UINT32(respSize, resp, mtmData.permanent.data.counterRimProtectId);
+
+ case 5:
+ return return_UINT32(respSize, resp, mtmData.permanent.data.counterStorageProtectId);
+
+ case 6:
+ return return_BYTE(respSize, resp, mtmData.permanent.data.specMajor);
+
+ case 7:
+ return return_BYTE(respSize, resp, mtmData.permanent.data.specMinor);
+
+ case 8:
+ return return_BYTE(respSize, resp, mtmData.permanent.data.loadVerificationKeyMethods);
+
+ default:
+ return TPM_BAD_PARAMETER;
+
+ }
+ return TPM_SUCCESS;
+}
+
+TPM_RESULT MTM_GetCapability(TPM_CAPABILITY_AREA capArea, UINT32 subCapSize,
+ BYTE *subCap, UINT32 *respSize, BYTE **resp)
+{
+ info("MTM_GetCapability()");
+ switch (capArea) {
+
+ case TPM_CAP_ORD:
+ debug("[MTM_CAP_ORD]");
+ TPM_RESULT res = cap_ord(subCapSize, subCap, respSize, resp);
+ if (res == TPM_SUCCESS && resp[0] == FALSE) {
+ res = TPM_GetCapability(capArea, subCapSize, subCap, respSize, resp);
+ }
+ return res;
+
+ case TPM_CAP_MTM_PERMANENT_DATA:
+ debug("[TPM_CAP_MTM_PERMANENT_DATA]");
+ return cap_mtm_permanent_data(subCapSize, subCap, respSize, resp);
+
+ default:
+ return TPM_GetCapability(capArea, subCapSize, subCap, respSize, resp);
+
+ }
+}
+
« no previous file with comments | « mtm/CMakeLists.txt ('k') | mtm/mtm_cmd_handler.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698