Mailing List Archive

[VTPM_TOOLS] Updated vtpm for new release of the tpm_emulator.
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Node ID fbcb603288bb1447085df3932b37d98cd0cec423
# Parent b3b5f3ff2100d5a497583f2b2dbdce1399623dcf
[VTPM_TOOLS] Updated vtpm for new release of the tpm_emulator.
New emulator includes AIK, DAA, and Transport Sessions
Signed-off-by: Vinnie Scarlata <Vincent.r.scarlata@intel.com>
---
tools/vtpm/tpm_emulator-0.2b-x86_64.patch | 431 ------------------------------
tools/vtpm/Makefile | 14
tools/vtpm/Rules.mk | 1
tools/vtpm/tpm_emulator-0.3-x86_64.patch | 381 ++++++++++++++++++++++++++
tools/vtpm/vtpm.patch | 407 +++++++++++++++++++++-------
5 files changed, 696 insertions(+), 538 deletions(-)

diff -r b3b5f3ff2100 -r fbcb603288bb tools/vtpm/Makefile
--- a/tools/vtpm/Makefile Wed May 31 07:43:06 2006 +0100
+++ b/tools/vtpm/Makefile Wed May 31 07:45:20 2006 +0100
@@ -9,7 +9,7 @@ VTPM_DIR = vtpm
VTPM_DIR = vtpm

# Emulator tarball name
-TPM_EMULATOR_TARFILE = tpm_emulator-0.2b.tar.gz
+TPM_EMULATOR_TARFILE = tpm_emulator-0.3.tar.gz

GMP_HEADER = /usr/include/gmp.h

@@ -47,23 +47,23 @@ mrproper:

# Create vtpm and TPM emulator dirs
# apply patches for 1) used as dom0 tpm driver 2) used as vtpm device instance
-$(TPM_EMULATOR_DIR): $(TPM_EMULATOR_TARFILE) tpm_emulator.patch tpm_emulator-0.2b-x86_64.patch
+$(TPM_EMULATOR_DIR): $(TPM_EMULATOR_TARFILE) tpm_emulator.patch tpm_emulator-0.3-x86_64.patch
if [ "$(BUILD_EMULATOR)" = "y" ]; then \
tar -xzf $(TPM_EMULATOR_TARFILE); \
rm -rf $(TPM_EMULATOR_DIR); \
- mv tpm_emulator-0.2 $(TPM_EMULATOR_DIR); \
+ mv tpm_emulator-0.3 $(TPM_EMULATOR_DIR); \
cd $(TPM_EMULATOR_DIR); \
- patch -p1 < ../tpm_emulator-0.2b-x86_64.patch; \
+ patch -p1 < ../tpm_emulator-0.3-x86_64.patch; \
patch -p1 <../tpm_emulator.patch; \
fi

-$(VTPM_DIR): $(TPM_EMULATOR_TARFILE) tpm_emulator-0.2b-x86_64.patch vtpm.patch
+$(VTPM_DIR): $(TPM_EMULATOR_TARFILE) tpm_emulator-0.3-x86_64.patch vtpm.patch
tar -xzf $(TPM_EMULATOR_TARFILE);
rm -rf $(VTPM_DIR)
- mv tpm_emulator-0.2 $(VTPM_DIR);
+ mv tpm_emulator-0.3 $(VTPM_DIR);

cd $(VTPM_DIR); \
- patch -p1 < ../tpm_emulator-0.2b-x86_64.patch; \
+ patch -p1 < ../tpm_emulator-0.3-x86_64.patch; \
patch -p1 <../vtpm.patch

.PHONY: build_sub
diff -r b3b5f3ff2100 -r fbcb603288bb tools/vtpm/Rules.mk
--- a/tools/vtpm/Rules.mk Wed May 31 07:43:06 2006 +0100
+++ b/tools/vtpm/Rules.mk Wed May 31 07:45:20 2006 +0100
@@ -33,6 +33,7 @@ OBJS = $(patsubst %.c,%.o,$(SRCS))

-include $(DEP_FILES)

+# Emulator does not work on 64-bit systems, and may be broken on 32 right now
BUILD_EMULATOR = n

# Make sure these are just rules
diff -r b3b5f3ff2100 -r fbcb603288bb tools/vtpm/vtpm.patch
--- a/tools/vtpm/vtpm.patch Wed May 31 07:43:06 2006 +0100
+++ b/tools/vtpm/vtpm.patch Wed May 31 07:45:20 2006 +0100
@@ -1,23 +1,24 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-diff -uprN orig/tpm_emulator-0.2-x86_64/AUTHORS vtpm/AUTHORS
---- orig/tpm_emulator-0.2-x86_64/AUTHORS 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/AUTHORS 2006-05-17 09:31:11.000000000 -0700
-@@ -1 +1,2 @@
+diff -uprN orig/tpm_emulator-0.3-x86_64/AUTHORS vtpm/AUTHORS
+--- orig/tpm_emulator-0.3-x86_64/AUTHORS 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/AUTHORS 2006-05-30 12:23:26.000000000 -0700
+@@ -1,2 +1,3 @@
Mario Strasser <mast@gmx.net>
-+INTEL Corp <>
-diff -uprN orig/tpm_emulator-0.2-x86_64/ChangeLog vtpm/ChangeLog
---- orig/tpm_emulator-0.2-x86_64/ChangeLog 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/ChangeLog 2006-05-17 09:31:11.000000000 -0700
+ Heiko Stamer <stamer@gaos.org> [DAA]
++INTEL Corp <> [VTPM Extensions]
+diff -uprN orig/tpm_emulator-0.3-x86_64/ChangeLog vtpm/ChangeLog
+--- orig/tpm_emulator-0.3-x86_64/ChangeLog 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/ChangeLog 2006-05-30 12:23:26.000000000 -0700
@@ -1,3 +1,7 @@
+2005-08-16 Intel Corp
-+ Moved module out of kernel to run as a ring 3 app
-+ Modified save_to_file and load_from_file to call a xen backend driver to call a VTPM manager
-+
- 2005-08-15 Mario Strasser <mast@gmx.net>
- * all: some typos corrected
- * tpm_integrity.c: bug in TPM_Extend fixed
-diff -uprN orig/tpm_emulator-0.2-x86_64/crypto/gmp_kernel_wrapper.c vtpm/crypto/gmp_kernel_wrapper.c
---- orig/tpm_emulator-0.2-x86_64/crypto/gmp_kernel_wrapper.c 2006-05-17 09:34:13.000000000 -0700
-+++ vtpm/crypto/gmp_kernel_wrapper.c 2006-05-17 09:31:11.000000000 -0700
++ * Moved module out of kernel to run as a ring 3 app
++ * Modified save_to_file and load_from_file to call a xen backend driver to call a VTPM manager
++
+ 2005-12-24 Mario Strasser <mast@gmx.net>
+ * tpm_transport.c, tpm_marshalling.c, tpm_structures.h:
+ Transport session functionality added
+diff -uprN orig/tpm_emulator-0.3-x86_64/crypto/gmp_kernel_wrapper.c vtpm/crypto/gmp_kernel_wrapper.c
+--- orig/tpm_emulator-0.3-x86_64/crypto/gmp_kernel_wrapper.c 2006-05-30 12:28:02.000000000 -0700
++++ vtpm/crypto/gmp_kernel_wrapper.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,5 +1,6 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -77,9 +78,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
}
}

-diff -uprN orig/tpm_emulator-0.2-x86_64/crypto/rsa.c vtpm/crypto/rsa.c
---- orig/tpm_emulator-0.2-x86_64/crypto/rsa.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/crypto/rsa.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/crypto/rsa.c vtpm/crypto/rsa.c
+--- orig/tpm_emulator-0.3-x86_64/crypto/rsa.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/crypto/rsa.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,5 +1,6 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -87,7 +88,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
*
* This module is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
-@@ -363,7 +364,7 @@ static int encode_message(int type, uint
+@@ -381,7 +382,7 @@ static int encode_message(int type, uint
msg[0] = 0x00;
get_random_bytes(&msg[1], SHA1_DIGEST_LENGTH);
sha1_init(&ctx);
@@ -96,7 +97,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
sha1_final(&ctx, &msg[1 + SHA1_DIGEST_LENGTH]);
memset(&msg[1 + 2 * SHA1_DIGEST_LENGTH], 0x00,
msg_len - data_len - 2 * SHA1_DIGEST_LENGTH - 2);
-@@ -411,7 +412,7 @@ static int decode_message(int type, uint
+@@ -429,7 +430,7 @@ static int decode_message(int type, uint
mask_generation(&msg[1], SHA1_DIGEST_LENGTH,
&msg[1 + SHA1_DIGEST_LENGTH], msg_len - SHA1_DIGEST_LENGTH - 1);
sha1_init(&ctx);
@@ -105,10 +106,10 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
sha1_final(&ctx, &msg[1]);
if (memcmp(&msg[1], &msg[1 + SHA1_DIGEST_LENGTH],
SHA1_DIGEST_LENGTH) != 0) return -1;
-diff -uprN orig/tpm_emulator-0.2-x86_64/linux_module.c vtpm/linux_module.c
---- orig/tpm_emulator-0.2-x86_64/linux_module.c 2006-05-17 09:34:13.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/linux_module.c vtpm/linux_module.c
+--- orig/tpm_emulator-0.3-x86_64/linux_module.c 2006-05-30 12:28:02.000000000 -0700
+++ vtpm/linux_module.c 1969-12-31 16:00:00.000000000 -0800
-@@ -1,163 +0,0 @@
+@@ -1,194 +0,0 @@
-/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
- * Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
- *
@@ -122,7 +123,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
-- * $Id: linux_module.c 19 2005-05-18 08:29:37Z mast $
+- * $Id: linux_module.c 76 2006-01-02 22:17:58Z hstamer $
- */
-
-#include <linux/module.h>
@@ -140,11 +141,11 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-
-/* module startup parameters */
-char *startup = "save";
--MODULE_PARM(startup, "s");
+-module_param(startup, charp, 0444);
-MODULE_PARM_DESC(startup, " Sets the startup mode of the TPM. "
- "Possible values are 'clear', 'save' (default) and 'deactivated.");
--char *storage_file = "/var/tpm/tpm_emulator-1.2.0.1";
--MODULE_PARM(storage_file, "s");
+-char *storage_file = "/var/tpm/tpm_emulator-1.2.0.2";
+-module_param(storage_file, charp, 0644);
-MODULE_PARM_DESC(storage_file, " Sets the persistent-data storage "
- "file of the TPM.");
-
@@ -172,6 +173,12 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-{
- debug("%s()", __FUNCTION__);
- clear_bit(STATE_IS_OPEN, (void*)&module_state);
+- down(&tpm_mutex);
+- if (tpm_response.data != NULL) {
+- kfree(tpm_response.data);
+- tpm_response.data = NULL;
+- }
+- up(&tpm_mutex);
- return 0;
-}
-
@@ -183,6 +190,10 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
- count = min(count, (size_t)tpm_response.size - (size_t)*ppos);
- count -= copy_to_user(buf, &tpm_response.data[*ppos], count);
- *ppos += count;
+- if ((size_t)tpm_response.size == (size_t)*ppos) {
+- kfree(tpm_response.data);
+- tpm_response.data = NULL;
+- }
- } else {
- count = 0;
- }
@@ -205,9 +216,29 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
- return count;
-}
-
+-#define TPMIOC_CANCEL _IO('T', 0x00)
+-#define TPMIOC_TRANSMIT _IO('T', 0x01)
+-
-static int tpm_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
-{
-- debug("%s(%d, %ld)", __FUNCTION__, cmd, arg);
+- debug("%s(%d, %p)", __FUNCTION__, cmd, (char*)arg);
+- if (cmd == TPMIOC_TRANSMIT) {
+- uint32_t count = ntohl(*(uint32_t*)(arg + 2));
+- down(&tpm_mutex);
+- if (tpm_response.data != NULL) kfree(tpm_response.data);
+- if (tpm_handle_command((char*)arg, count, &tpm_response.data,
+- &tpm_response.size) == 0) {
+- tpm_response.size -= copy_to_user((char*)arg, tpm_response.data,
+- tpm_response.size);
+- kfree(tpm_response.data);
+- tpm_response.data = NULL;
+- } else {
+- tpm_response.size = 0;
+- tpm_response.data = NULL;
+- }
+- up(&tpm_mutex);
+- return tpm_response.size;
+- }
- return -1;
-}
-
@@ -240,7 +271,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
- /* initialize TPM emulator */
- if (!strcmp(startup, "clear")) {
- tpm_emulator_init(1);
-- } else if (!strcmp(startup, "save")) {
+- } else if (!strcmp(startup, "save")) {
- tpm_emulator_init(2);
- } else if (!strcmp(startup, "deactivated")) {
- tpm_emulator_init(3);
@@ -257,6 +288,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-{
- tpm_emulator_shutdown();
- misc_deregister(&tpm_dev);
+- if (tpm_response.data != NULL) kfree(tpm_response.data);
-}
-
-module_init(init_tpm_module);
@@ -264,7 +296,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-
-uint64_t tpm_get_ticks(void)
-{
-- static struct timespec old_time = {0, 0};
+- static struct timespec old_time = {0, 0};
- struct timespec new_time = current_kernel_time();
- uint64_t ticks = (uint64_t)(old_time.tv_sec - new_time.tv_sec) * 1000000
- + (old_time.tv_nsec - new_time.tv_nsec) / 1000;
@@ -272,9 +304,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
- return (ticks > 0) ? ticks : 1;
-}
-
-diff -uprN orig/tpm_emulator-0.2-x86_64/linux_module.h vtpm/linux_module.h
---- orig/tpm_emulator-0.2-x86_64/linux_module.h 2006-05-17 09:34:13.000000000 -0700
-+++ vtpm/linux_module.h 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/linux_module.h vtpm/linux_module.h
+--- orig/tpm_emulator-0.3-x86_64/linux_module.h 2006-05-30 12:28:02.000000000 -0700
++++ vtpm/linux_module.h 2006-05-30 12:23:26.000000000 -0700
@@ -1,5 +1,6 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -374,15 +406,15 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
#define BE16_TO_CPU(x) __be16_to_cpu(x)
#define LE16_TO_CPU(x) __le16_to_cpu(x)

-diff -uprN orig/tpm_emulator-0.2-x86_64/Makefile vtpm/Makefile
---- orig/tpm_emulator-0.2-x86_64/Makefile 2006-05-17 09:34:13.000000000 -0700
-+++ vtpm/Makefile 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/Makefile vtpm/Makefile
+--- orig/tpm_emulator-0.3-x86_64/Makefile 2006-05-30 12:28:02.000000000 -0700
++++ vtpm/Makefile 2006-05-30 12:23:26.000000000 -0700
@@ -1,22 +1,31 @@
# Software-Based Trusted Platform Module (TPM) Emulator for Linux
# Copyright (C) 2004 Mario Strasser <mast@gmx.net>
-+# Copyright (C) 2005 INTEL Corp.
++# Copyright (C) 2006 INTEL Corp.
#
- # $Id: Makefile 10 2005-04-26 20:59:50Z mast $
+ # $Id: Makefile 69 2005-12-13 12:55:52Z mast $

-# kernel settings
-KERNEL_RELEASE := $(shell uname -r)
@@ -394,11 +426,11 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-MODULE_NAME := tpm_emulator
+BIN := vtpmd
VERSION_MAJOR := 0
- VERSION_MINOR := 2
+ VERSION_MINOR := 3
VERSION_BUILD := $(shell date +"%s")

-# enable/disable DEBUG messages
--EXTRA_CFLAGS += -DDEBUG -g
+-EXTRA_CFLAGS += -Wall -DDEBUG -g
+# Installation program and options
+INSTALL = install
+INSTALL_PROG = $(INSTALL) -m0755
@@ -468,10 +500,10 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/

$(src)/crypto/libgmp.a:
test -f $(src)/crypto/libgmp.a || ln -s $(GMP_LIB) $(src)/crypto/libgmp.a
-diff -uprN orig/tpm_emulator-0.2-x86_64/README vtpm/README
---- orig/tpm_emulator-0.2-x86_64/README 2006-05-17 09:34:13.000000000 -0700
-+++ vtpm/README 2006-05-17 09:31:11.000000000 -0700
-@@ -13,7 +13,8 @@ $Id: README 8 2005-01-25 21:11:45Z jmoli
+diff -uprN orig/tpm_emulator-0.3-x86_64/README vtpm/README
+--- orig/tpm_emulator-0.3-x86_64/README 2006-05-30 12:28:02.000000000 -0700
++++ vtpm/README 2006-05-30 12:23:26.000000000 -0700
+@@ -13,7 +13,8 @@ $Id: README 78 2006-01-07 10:45:39Z mast
Copyright
--------------------------------------------------------------------------
Copyright (C) 2004 Mario Strasser <mast@gmx.net> and Swiss Federal
@@ -481,9 +513,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_audit.c vtpm/tpm/tpm_audit.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_audit.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_audit.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_audit.c vtpm/tpm/tpm_audit.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_audit.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_audit.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -546,9 +578,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
return TPM_SUCCESS;
}
-
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_authorization.c vtpm/tpm/tpm_authorization.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_authorization.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_authorization.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_authorization.c vtpm/tpm/tpm_authorization.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_authorization.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_authorization.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -557,7 +589,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
*
* This module is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
-@@ -268,7 +269,7 @@ TPM_RESULT tpm_verify_auth(TPM_AUTH *aut
+@@ -279,7 +280,7 @@ TPM_RESULT tpm_verify_auth(TPM_AUTH *aut
{
hmac_ctx_t ctx;
TPM_SESSION_DATA *session;
@@ -565,16 +597,10 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
+ UINT32 auth_handle = CPU_TO_BE32(auth->authHandle);

info("tpm_verify_auth(%08x)", auth->authHandle);
- /* get dedicated authorization session */
-@@ -316,5 +317,3 @@ void tpm_decrypt_auth_secret(TPM_ENCAUTH
- for (i = 0; i < sizeof(TPM_SECRET); i++)
- plainAuth[i] ^= encAuth[i];
- }
--
--
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_capability.c vtpm/tpm/tpm_capability.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_capability.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_capability.c 2006-05-17 09:31:11.000000000 -0700
+ /* get dedicated authorization or transport session */
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_capability.c vtpm/tpm/tpm_capability.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_capability.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_capability.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -583,7 +609,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
*
* This module is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
-@@ -398,7 +399,7 @@ TPM_RESULT TPM_GetCapability(TPM_CAPABIL
+@@ -406,7 +407,7 @@ TPM_RESULT TPM_GetCapability(TPM_CAPABIL

case TPM_CAP_KEY_HANDLE:
debug("[TPM_CAP_KEY_HANDLE]");
@@ -592,14 +618,14 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
return cap_handle(4, (BYTE*)&subCapSize, respSize, resp);

case TPM_CAP_CHECK_LOADED:
-@@ -472,4 +473,3 @@ TPM_RESULT TPM_GetCapability(TPM_CAPABIL
+@@ -480,4 +481,3 @@ TPM_RESULT TPM_GetCapability(TPM_CAPABIL
return TPM_BAD_MODE;
}
}
-
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_cmd_handler.c vtpm/tpm/tpm_cmd_handler.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_cmd_handler.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_cmd_handler.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_cmd_handler.c vtpm/tpm/tpm_cmd_handler.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_cmd_handler.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_cmd_handler.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -608,17 +634,17 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
*
* This module is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
-@@ -26,7 +27,7 @@ static void tpm_compute_in_param_digest(
+@@ -73,7 +74,7 @@ void tpm_compute_in_param_digest(TPM_REQ
{
sha1_ctx_t sha1;
- UINT32 offset;
+ UINT32 offset = tpm_get_param_offset(req->ordinal);
- UINT32 ord = cpu_to_be32(req->ordinal);
+ UINT32 ord = CPU_TO_BE32(req->ordinal);

- /* skip all key-handles at the beginning */
- switch (req->ordinal) {
-@@ -82,8 +83,8 @@ static void tpm_compute_in_param_digest(
- static void tpm_compute_out_param_digest(TPM_COMMAND_CODE ordinal, TPM_RESPONSE *rsp)
+ /* compute SHA1 hash */
+ if (offset <= req->paramSize) {
+@@ -89,8 +90,8 @@ void tpm_compute_in_param_digest(TPM_REQ
+ void tpm_compute_out_param_digest(TPM_COMMAND_CODE ordinal, TPM_RESPONSE *rsp)
{
sha1_ctx_t sha1;
- UINT32 res = cpu_to_be32(rsp->result);
@@ -628,7 +654,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/

/* compute SHA1 hash */
sha1_init(&sha1);
-@@ -3081,7 +3082,7 @@ static void tpm_setup_rsp_auth(TPM_COMMA
+@@ -3123,7 +3124,7 @@ static void tpm_setup_rsp_auth(TPM_COMMA
hmac_update(&hmac, rsp->auth2->digest, sizeof(rsp->auth2->digest));
#if 0
if (tpm_get_auth(rsp->auth2->authHandle)->type == TPM_ST_OIAP) {
@@ -637,7 +663,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
hmac_update(&hmac, (BYTE*)&handle, 4);
}
#endif
-@@ -3096,7 +3097,7 @@ static void tpm_setup_rsp_auth(TPM_COMMA
+@@ -3138,7 +3139,7 @@ static void tpm_setup_rsp_auth(TPM_COMMA
hmac_update(&hmac, rsp->auth1->digest, sizeof(rsp->auth1->digest));
#if 0
if (tpm_get_auth(rsp->auth1->authHandle)->type == TPM_ST_OIAP) {
@@ -646,25 +672,20 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
hmac_update(&hmac, (BYTE*)&handle, 4);
}
#endif
-@@ -3179,7 +3180,9 @@ extern const char *tpm_error_to_string(T
- static void tpm_execute_command(TPM_REQUEST *req, TPM_RESPONSE *rsp)
+@@ -3221,7 +3222,9 @@ extern const char *tpm_error_to_string(T
+ void tpm_execute_command(TPM_REQUEST *req, TPM_RESPONSE *rsp)
{
TPM_RESULT res;
-
+
-+ req->tag = (BYTE) req->tag; // VIN HACK!!!
++ req->tag = (BYTE) req->tag; // FIXME: Why is this here
+
/* setup authorisation as well as response tag and size */
memset(rsp, 0, sizeof(*rsp));
switch (req->tag) {
-@@ -3878,4 +3881,3 @@ int tpm_handle_command(const uint8_t *in
- tpm_free(rsp.param);
- return 0;
- }
--
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_crypto.c vtpm/tpm/tpm_crypto.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_crypto.c 2006-05-17 09:34:13.000000000 -0700
-+++ vtpm/tpm/tpm_crypto.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_crypto.c vtpm/tpm/tpm_crypto.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_crypto.c 2006-05-30 12:28:02.000000000 -0700
++++ vtpm/tpm/tpm_crypto.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -683,13 +704,170 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
if (rsa_sign(&key->key, RSA_SSA_PKCS1_SHA1,
buf, areaToSignSize + 30, *sig)) {
@@ -383,4 +384,3 @@ TPM_RESULT TPM_CertifyKey2(TPM_KEY_HANDL
- }
+ }
return TPM_SUCCESS;
}
-
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_data.c vtpm/tpm/tpm_data.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_data.c 2006-05-17 09:34:13.000000000 -0700
-+++ vtpm/tpm/tpm_data.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_daa.c vtpm/tpm/tpm_daa.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_daa.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_daa.c 2006-05-30 12:23:26.000000000 -0700
+@@ -700,14 +700,14 @@ info("tested until here");
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -787,14 +787,14 @@ info("tested until here");
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -1440,14 +1440,14 @@ info("tested until here");
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -1660,14 +1660,14 @@ info("tested until here");
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -1740,14 +1740,14 @@ info("tested until here");
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -2828,14 +2828,14 @@ TPM_RESULT TPM_DAA_Sign(TPM_HANDLE handl
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -3050,7 +3050,7 @@ TPM_RESULT TPM_DAA_Sign(TPM_HANDLE handl
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_session.DAA_digest,
+ sizeof(session->DAA_session.DAA_digest));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_update(&sha1, inputData1, inputSize1);
+ sha1_final(&sha1, (BYTE*) &session->DAA_session.DAA_digest);
+ }
+@@ -3078,7 +3078,7 @@ TPM_RESULT TPM_DAA_Sign(TPM_HANDLE handl
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_session.DAA_digest,
+ sizeof(session->DAA_session.DAA_digest));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ rsa_export_modulus(&aikData->key, scratch, &size);
+ sha1_update(&sha1, scratch, size);
+ sha1_final(&sha1, (BYTE*) &session->DAA_session.DAA_digest);
+@@ -3134,14 +3134,14 @@ TPM_RESULT TPM_DAA_Sign(TPM_HANDLE handl
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+@@ -3213,14 +3213,14 @@ TPM_RESULT TPM_DAA_Sign(TPM_HANDLE handl
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x00", 1);
++ sha1_update(&sha1, (BYTE *) "\x00", 1);
+ sha1_final(&sha1, scratch);
+ sha1_init(&sha1);
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_rekey,
+ sizeof(session->DAA_tpmSpecific.DAA_rekey));
+ sha1_update(&sha1, (BYTE*) &session->DAA_tpmSpecific.DAA_count,
+ sizeof(session->DAA_tpmSpecific.DAA_count));
+- sha1_update(&sha1, "\x01", 1);
++ sha1_update(&sha1, (BYTE *) "\x01", 1);
+ sha1_final(&sha1, scratch + SHA1_DIGEST_LENGTH);
+ mpz_init(f), mpz_init(q);
+ mpz_import(f, 2 * SHA1_DIGEST_LENGTH, 1, 1, 0, 0, scratch);
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_data.c vtpm/tpm/tpm_data.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_data.c 2006-05-30 12:28:02.000000000 -0700
++++ vtpm/tpm/tpm_data.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -698,8 +876,8 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
*
* This module is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
-@@ -15,9 +16,15 @@
- * $Id: tpm_data.c 9 2005-04-26 18:15:31Z mast $
+@@ -15,10 +16,15 @@
+ * $Id: tpm_data.c 36 2005-10-26 20:31:19Z hstamer $
*/

+#include <sys/types.h>
@@ -710,11 +888,12 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
#include "tpm_emulator.h"
#include "tpm_structures.h"
#include "tpm_marshalling.h"
+-#include "linux_module.h"
+#include "vtpm_manager.h"

TPM_DATA tpmData;

-@@ -28,6 +35,7 @@ BOOL tpm_get_physical_presence(void)
+@@ -39,6 +45,7 @@ static inline void init_pcr_attr(int pcr

void tpm_init_data(void)
{
@@ -722,7 +901,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
/* endorsement key */
uint8_t ek_n[] = "\xa8\xdb\xa9\x42\xa8\xf3\xb8\x06\x85\x90\x76\x93\xad\xf7"
"\x74\xec\x3f\xd3\x3d\x9d\xe8\x2e\xff\x15\xed\x0e\xce\x5f\x93"
-@@ -66,6 +74,8 @@ void tpm_init_data(void)
+@@ -77,6 +84,8 @@ void tpm_init_data(void)
"\xd1\xc0\x8b\x5b\xa2\x2e\xa7\x15\xca\x50\x75\x10\x48\x9c\x2b"
"\x18\xb9\x67\x8f\x5d\x64\xc3\x28\x9f\x2f\x16\x2f\x08\xda\x47"
"\xec\x86\x43\x0c\x80\x99\x07\x34\x0f";
@@ -731,18 +910,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
int i;
/* reset all data to NULL, FALSE or 0 */
memset(&tpmData, 0, sizeof(tpmData));
-@@ -85,6 +95,10 @@ void tpm_init_data(void)
- tpmData.permanent.data.version.revMinor = VERSION_MINOR;
- /* setup PCR attributes */
- for (i = 0; i < TPM_NUM_PCR; i++) {
-+ int j;
-+ for (j=0; j < TPM_NUM_LOCALITY; j++) {
-+ tpmData.permanent.data.pcrAttrib[i].pcrExtendLocal[j] = TRUE;
-+ }
- tpmData.permanent.data.pcrAttrib[i].pcrReset = TRUE;
- }
- /* set tick type */
-@@ -115,49 +129,235 @@ void tpm_release_data(void)
+@@ -150,49 +159,235 @@ void tpm_release_data(void)

#ifdef TPM_STORE_TO_FILE

@@ -1009,7 +1177,7 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
}

#else
-@@ -232,7 +432,6 @@ int tpm_restore_permanent_data(void)
+@@ -267,7 +462,6 @@ int tpm_restore_permanent_data(void)

int tpm_erase_permanent_data(void)
{
@@ -1018,9 +1186,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
return res;
}
-
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_deprecated.c vtpm/tpm/tpm_deprecated.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_deprecated.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_deprecated.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_deprecated.c vtpm/tpm/tpm_deprecated.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_deprecated.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_deprecated.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -1047,9 +1215,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
authContextSize, &contextBlob);
if (res != TPM_SUCCESS) return res;
len = *authContextSize;
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_emulator.h vtpm/tpm/tpm_emulator.h
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_emulator.h 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_emulator.h 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_emulator.h vtpm/tpm/tpm_emulator.h
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_emulator.h 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_emulator.h 2006-05-30 12:23:26.000000000 -0700
@@ -1,5 +1,6 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -1064,12 +1232,12 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
-#undef TPM_GENERATE_EK
+//#undef TPM_GENERATE_EK
+#define TPM_GENERATE_EK
-
- /**
- * tpm_emulator_init - initialises and starts the TPM emulator
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_integrity.c vtpm/tpm/tpm_integrity.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_integrity.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_integrity.c 2006-05-17 09:31:11.000000000 -0700
+ #undef TPM_GENERATE_SEED_DAA
+
+ #define TPM_MANUFACTURER 0x4554485A /* 'ETHZ' */
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_integrity.c vtpm/tpm/tpm_integrity.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_integrity.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_integrity.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -1083,9 +1251,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
return TPM_SUCCESS;
}
-
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_structures.h vtpm/tpm/tpm_structures.h
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_structures.h 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_structures.h 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_structures.h vtpm/tpm/tpm_structures.h
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_structures.h 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_structures.h 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -1103,9 +1271,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
#include "crypto/rsa.h"

/*
-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_testing.c vtpm/tpm/tpm_testing.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_testing.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_testing.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_testing.c vtpm/tpm/tpm_testing.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_testing.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_testing.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -1221,9 +1389,9 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
rsa_private_key_t priv_key;
rsa_public_key_t pub_key;

-diff -uprN orig/tpm_emulator-0.2-x86_64/tpm/tpm_ticks.c vtpm/tpm/tpm_ticks.c
---- orig/tpm_emulator-0.2-x86_64/tpm/tpm_ticks.c 2005-08-15 00:58:57.000000000 -0700
-+++ vtpm/tpm/tpm_ticks.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_ticks.c vtpm/tpm/tpm_ticks.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_ticks.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_ticks.c 2006-05-30 12:23:26.000000000 -0700
@@ -1,6 +1,7 @@
/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
* Copyright (C) 2004 Mario Strasser <mast@gmx.net>,
@@ -1306,9 +1474,69 @@ diff -uprN orig/tpm_emulator-0.2-x86_64/
}


-diff -uprN orig/tpm_emulator-0.2-x86_64/tpmd.c vtpm/tpmd.c
---- orig/tpm_emulator-0.2-x86_64/tpmd.c 1969-12-31 16:00:00.000000000 -0800
-+++ vtpm/tpmd.c 2006-05-17 09:31:11.000000000 -0700
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpm/tpm_transport.c vtpm/tpm/tpm_transport.c
+--- orig/tpm_emulator-0.3-x86_64/tpm/tpm_transport.c 2006-01-10 04:21:45.000000000 -0800
++++ vtpm/tpm/tpm_transport.c 2006-05-30 12:23:26.000000000 -0700
+@@ -59,7 +59,7 @@ static int decrypt_transport_auth(TPM_KE
+ static void transport_log_in(TPM_COMMAND_CODE ordinal, BYTE parameters[20],
+ BYTE pubKeyHash[20], TPM_DIGEST *transDigest)
+ {
+- UINT32 tag = cpu_to_be32(TPM_TAG_TRANSPORT_LOG_IN);
++ UINT32 tag = CPU_TO_BE32(TPM_TAG_TRANSPORT_LOG_IN);
+ BYTE *ptr, buf[sizeof_TPM_TRANSPORT_LOG_IN(x)];
+ UINT32 len = sizeof(buf);
+ sha1_ctx_t sha1;
+@@ -76,7 +76,7 @@ static void transport_log_in(TPM_COMMAND
+ static void transport_log_out(TPM_CURRENT_TICKS *currentTicks, BYTE parameters[20],
+ TPM_MODIFIER_INDICATOR locality, TPM_DIGEST *transDigest)
+ {
+- UINT32 tag = cpu_to_be32(TPM_TAG_TRANSPORT_LOG_OUT);
++ UINT32 tag = CPU_TO_BE32(TPM_TAG_TRANSPORT_LOG_OUT);
+ BYTE *ptr, buf[sizeof_TPM_TRANSPORT_LOG_OUT(x)];
+ UINT32 len = sizeof(buf);
+ sha1_ctx_t sha1;
+@@ -191,7 +191,7 @@ static void decrypt_wrapped_command(BYTE
+ sha1_update(&sha1, auth->nonceOdd.nonce, sizeof(auth->nonceOdd.nonce));
+ sha1_update(&sha1, "in", 2);
+ sha1_update(&sha1, secret, sizeof(TPM_SECRET));
+- j = cpu_to_be32(i);
++ j = CPU_TO_BE32(i);
+ sha1_update(&sha1, (BYTE*)&j, 4);
+ sha1_final(&sha1, mask);
+ for (j = 0; j < sizeof(mask) && buf_len > 0; j++) {
+@@ -213,7 +213,7 @@ static void encrypt_wrapped_command(BYTE
+ sha1_update(&sha1, auth->nonceOdd.nonce, sizeof(auth->nonceOdd.nonce));
+ sha1_update(&sha1, "out", 3);
+ sha1_update(&sha1, secret, sizeof(TPM_SECRET));
+- j = cpu_to_be32(i);
++ j = CPU_TO_BE32(i);
+ sha1_update(&sha1, (BYTE*)&j, 4);
+ sha1_final(&sha1, mask);
+ for (j = 0; j < sizeof(mask) && buf_len > 0; j++) {
+@@ -253,9 +253,9 @@ TPM_RESULT TPM_ExecuteTransport(UINT32 i
+ /* verify authorization */
+ tpm_compute_in_param_digest(&req);
+ sha1_init(&sha1);
+- res = cpu_to_be32(TPM_ORD_ExecuteTransport);
++ res = CPU_TO_BE32(TPM_ORD_ExecuteTransport);
+ sha1_update(&sha1, (BYTE*)&res, 4);
+- res = cpu_to_be32(inWrappedCmdSize);
++ res = CPU_TO_BE32(inWrappedCmdSize);
+ sha1_update(&sha1, (BYTE*)&res, 4);
+ sha1_update(&sha1, req.auth1.digest, sizeof(req.auth1.digest));
+ sha1_final(&sha1, auth1->digest);
+@@ -357,7 +357,7 @@ TPM_RESULT TPM_ReleaseTransportSigned(TP
+ /* setup a TPM_SIGN_INFO structure */
+ memcpy(&buf[0], "\x05\x00TRAN", 6);
+ memcpy(&buf[6], antiReplay->nonce, 20);
+- *(UINT32*)&buf[26] = cpu_to_be32(20);
++ *(UINT32*)&buf[26] = CPU_TO_BE32(20);
+ memcpy(&buf[30], session->transInternal.transDigest.digest, 20);
+ /* sign info structure */
+ res = tpm_sign(key, auth1, TRUE, buf, sizeof(buf), signature, signSize);
+diff -uprN orig/tpm_emulator-0.3-x86_64/tpmd.c vtpm/tpmd.c
+--- orig/tpm_emulator-0.3-x86_64/tpmd.c 1969-12-31 16:00:00.000000000 -0800
++++ vtpm/tpmd.c 2006-05-30 12:23:26.000000000 -0700
@@ -0,0 +1,207 @@
+/* Software-Based Trusted Platform Module (TPM) Emulator for Linux
+ * Copyright (C) 2005 INTEL Corp
diff -r b3b5f3ff2100 -r fbcb603288bb tools/vtpm/tpm_emulator-0.3-x86_64.patch
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/vtpm/tpm_emulator-0.3-x86_64.patch Wed May 31 07:45:20 2006 +0100
@@ -0,0 +1,484 @@
+diff -uprN tpm_emulator-0.3/crypto/gmp_kernel_wrapper.c tpm_emulator-0.3-x86_64/crypto/gmp_kernel_wrapper.c
+--- tpm_emulator-0.3/crypto/gmp_kernel_wrapper.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/crypto/gmp_kernel_wrapper.c 2006-05-26 11:26:02.000000000 -0700
+@@ -79,7 +79,7 @@ void __attribute__ ((regparm(0))) *kerne
+ {
+ void *ret = (void*)kmalloc(size, GFP_KERNEL);
+ if (!ret) panic(KERN_CRIT TPM_MODULE_NAME
+- "GMP: cannot allocate memory (size=%u)\n", size);
++ "GMP: cannot allocate memory (size=%Zu)\n", size);
+ return ret;
+ }
+
+@@ -88,7 +88,7 @@ void __attribute__ ((regparm(0))) *kerne
+ {
+ void *ret = (void*)kmalloc(new_size, GFP_KERNEL);
+ if (!ret) panic(KERN_CRIT TPM_MODULE_NAME "GMP: Cannot reallocate memory "
+- "(old_size=%u new_size=%u)\n", old_size, new_size);
++ "(old_size=%Zu new_size=%Zu)\n", old_size, new_size);
+ memcpy(ret, oldptr, old_size);
+ kfree(oldptr);
+ return ret;
+diff -uprN tpm_emulator-0.3/linux_module.c tpm_emulator-0.3-x86_64/linux_module.c
+--- tpm_emulator-0.3/linux_module.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/linux_module.c 2006-05-26 11:26:02.000000000 -0700
+@@ -72,7 +72,7 @@ static int tpm_release(struct inode *ino
+
+ static ssize_t tpm_read(struct file *file, char *buf, size_t count, loff_t *ppos)
+ {
+- debug("%s(%d)", __FUNCTION__, count);
++ debug("%s(%Zu)", __FUNCTION__, count);
+ down(&tpm_mutex);
+ if (tpm_response.data != NULL) {
+ count = min(count, (size_t)tpm_response.size - (size_t)*ppos);
+@@ -91,7 +91,7 @@ static ssize_t tpm_read(struct file *fil
+
+ static ssize_t tpm_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
+ {
+- debug("%s(%d)", __FUNCTION__, count);
++ debug("%s(%Zu)", __FUNCTION__, count);
+ down(&tpm_mutex);
+ *ppos = 0;
+ if (tpm_response.data != NULL) kfree(tpm_response.data);
+diff -uprN tpm_emulator-0.3/linux_module.h tpm_emulator-0.3-x86_64/linux_module.h
+--- tpm_emulator-0.3/linux_module.h 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/linux_module.h 2006-05-26 11:26:02.000000000 -0700
+@@ -28,8 +28,10 @@
+
+ /* module settings */
+
++#ifndef STR
+ #define STR(s) __STR__(s)
+ #define __STR__(s) #s
++#endif
+ #include "tpm_version.h"
+
+ #define TPM_DEVICE_MINOR 224
+diff -uprN tpm_emulator-0.3/Makefile tpm_emulator-0.3-x86_64/Makefile
+--- tpm_emulator-0.3/Makefile 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/Makefile 2006-05-26 11:26:02.000000000 -0700
+@@ -7,6 +7,7 @@
+ KERNEL_RELEASE := $(shell uname -r)
+ KERNEL_BUILD := /lib/modules/$(KERNEL_RELEASE)/build
+ MOD_SUBDIR := misc
++COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/)
+
+ # module settings
+ MODULE_NAME := tpm_emulator
+@@ -17,8 +18,14 @@ VERSION_BUILD := $(shell date +"%s")
+ # enable/disable DEBUG messages
+ EXTRA_CFLAGS += -Wall -DDEBUG -g
+
++ifeq ($(COMPILE_ARCH),x86_64)
++LIBDIR = lib64
++else
++LIBDIR = lib
++endif
++
+ # GNU MP configuration
+-GMP_LIB := /usr/lib/libgmp.a
++GMP_LIB := /usr/$(LIBDIR)/libgmp.a
+ GMP_HEADER := /usr/include/gmp.h
+
+ # sources and objects
+diff -uprN tpm_emulator-0.3/README tpm_emulator-0.3-x86_64/README
+--- tpm_emulator-0.3/README 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/README 2006-05-26 11:26:02.000000000 -0700
+@@ -43,6 +43,12 @@ Example:
+ GMP_LIB := /usr/lib/libgmp.a
+ GMP_HEADER := /usr/include/gmp.h
+
++GNU MP Library on 64 bit Systems
++--------------------------------------------------------------------------
++Some 64-bit kernels have problems with importing the user-space gmp
++library (/usr/lib*/libgmp.a) into kernel space. These kernels will require
++that the gmp library be recompiled for kernel space with -mcmodel=kernel.
++
+ Installation
+ --------------------------------------------------------------------------
+ The compilation and installation process uses the build environment for
+diff -uprN tpm_emulator-0.3/tpm/tpm_credentials.c tpm_emulator-0.3-x86_64/tpm/tpm_credentials.c
+--- tpm_emulator-0.3/tpm/tpm_credentials.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/tpm/tpm_credentials.c 2006-05-26 11:26:02.000000000 -0700
+@@ -47,16 +47,16 @@ int tpm_compute_pubkey_checksum(TPM_NONC
+
+ TPM_RESULT tpm_get_pubek(TPM_PUBKEY *pubEndorsementKey)
+ {
+- UINT32 key_length;
++ size_t key_length;
+ if (!tpmData.permanent.data.endorsementKey.size) return TPM_NO_ENDORSEMENT;
+ /* setup TPM_PUBKEY structure */
+- key_length = tpmData.permanent.data.endorsementKey.size;
+- pubEndorsementKey->pubKey.keyLength = key_length >> 3;
++ pubEndorsementKey->pubKey.keyLength = tpmData.permanent.data.endorsementKey.size >> 3;
+ pubEndorsementKey->pubKey.key = tpm_malloc(pubEndorsementKey->pubKey.keyLength);
+ if (pubEndorsementKey->pubKey.key == NULL) return TPM_FAIL;
+ rsa_export_modulus(&tpmData.permanent.data.endorsementKey,
+- pubEndorsementKey->pubKey.key,
+- &pubEndorsementKey->pubKey.keyLength);
++ pubEndorsementKey->pubKey.key,
++ &key_length);
++ pubEndorsementKey->pubKey.keyLength = key_length;
+ pubEndorsementKey->algorithmParms.algorithmID = TPM_ALG_RSA;
+ pubEndorsementKey->algorithmParms.encScheme = TPM_ES_RSAESOAEP_SHA1_MGF1;
+ pubEndorsementKey->algorithmParms.sigScheme = TPM_SS_NONE;
+@@ -175,6 +175,7 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_
+ {
+ TPM_RESULT res;
+ TPM_KEY_DATA *srk = &tpmData.permanent.data.srk;
++ size_t key_length;
+ info("TPM_OwnerReadInternalPub()");
+ /* verify authorization */
+ res = tpm_verify_auth(auth1, tpmData.permanent.data.ownerAuth, TPM_KH_OWNER);
+@@ -186,7 +187,8 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_
+ publicPortion->pubKey.key = tpm_malloc(publicPortion->pubKey.keyLength);
+ if (publicPortion->pubKey.key == NULL) return TPM_FAIL;
+ rsa_export_modulus(&srk->key, publicPortion->pubKey.key,
+- &publicPortion->pubKey.keyLength);
++ &key_length);
++ publicPortion->pubKey.keyLength = key_length;
+ publicPortion->algorithmParms.algorithmID = TPM_ALG_RSA;
+ publicPortion->algorithmParms.encScheme = srk->encScheme;
+ publicPortion->algorithmParms.sigScheme = srk->sigScheme;
+diff -uprN tpm_emulator-0.3/tpm/tpm_crypto.c tpm_emulator-0.3-x86_64/tpm/tpm_crypto.c
+--- tpm_emulator-0.3/tpm/tpm_crypto.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/tpm/tpm_crypto.c 2006-05-26 11:26:02.000000000 -0700
+@@ -182,7 +182,8 @@ TPM_RESULT TPM_CertifyKey(TPM_KEY_HANDLE
+ TPM_KEY_DATA *cert, *key;
+ sha1_ctx_t sha1_ctx;
+ BYTE *buf, *p;
+- UINT32 length;
++ UINT32 length32;
++ size_t length;
+ info("TPM_CertifyKey()");
+ /* get keys */
+ cert = tpm_get_key(certHandle);
+@@ -264,14 +265,15 @@ TPM_RESULT TPM_CertifyKey(TPM_KEY_HANDLE
+ /* compute the digest of the CERTIFY_INFO[2] structure and sign it */
+ length = sizeof_TPM_CERTIFY_INFO((*certifyInfo));
+ p = buf = tpm_malloc(length);
++ length32=(UINT32) length;
+ if (buf == NULL
+- || tpm_marshal_TPM_CERTIFY_INFO(&p, &length, certifyInfo)) {
++ || tpm_marshal_TPM_CERTIFY_INFO(&p, &length32, certifyInfo)) {
+ free_TPM_KEY_PARMS(certifyInfo->algorithmParms);
+ return TPM_FAIL;
+ }
+ length = sizeof_TPM_CERTIFY_INFO((*certifyInfo));
+ sha1_init(&sha1_ctx);
+- sha1_update(&sha1_ctx, buf, length);
++ sha1_update(&sha1_ctx, buf, (size_t) length);
+ sha1_final(&sha1_ctx, buf);
+ res = tpm_sign(cert, auth1, FALSE, buf, SHA1_DIGEST_LENGTH, outData, outDataSize);
+ tpm_free(buf);
+@@ -292,7 +294,8 @@ TPM_RESULT TPM_CertifyKey2(TPM_KEY_HANDL
+ TPM_KEY_DATA *cert, *key;
+ sha1_ctx_t sha1_ctx;
+ BYTE *buf, *p;
+- UINT32 length;
++ size_t length;
++ UINT32 length32;
+ info("TPM_CertifyKey2()");
+ /* get keys */
+ cert = tpm_get_key(certHandle);
+@@ -362,8 +365,9 @@ TPM_RESULT TPM_CertifyKey2(TPM_KEY_HANDL
+ /* compute the digest of the CERTIFY_INFO[2] structure and sign it */
+ length = sizeof_TPM_CERTIFY_INFO((*certifyInfo));
+ p = buf = tpm_malloc(length);
++ length32 = (UINT32) length;
+ if (buf == NULL
+- || tpm_marshal_TPM_CERTIFY_INFO(&p, &length, certifyInfo)) {
++ || tpm_marshal_TPM_CERTIFY_INFO(&p, &length32, certifyInfo)) {
+ free_TPM_KEY_PARMS(certifyInfo->algorithmParms);
+ return TPM_FAIL;
+ }
+diff -uprN tpm_emulator-0.3/tpm/tpm_data.c tpm_emulator-0.3-x86_64/tpm/tpm_data.c
+--- tpm_emulator-0.3/tpm/tpm_data.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/tpm/tpm_data.c 2006-05-26 11:26:02.000000000 -0700
+@@ -214,7 +214,7 @@ static int read_from_file(uint8_t **data
+ int tpm_store_permanent_data(void)
+ {
+ uint8_t *buf, *ptr;
+- size_t buf_length, len;
++ UINT32 buf_length, len;
+
+ /* marshal data */
+ buf_length = len = sizeof_TPM_STCLEAR_FLAGS(tpmData.stclear.flags)
+@@ -242,13 +242,14 @@ int tpm_store_permanent_data(void)
+ int tpm_restore_permanent_data(void)
+ {
+ uint8_t *buf, *ptr;
+- size_t buf_length, len;
++ size_t buf_length;
++ UINT32 len;
+ TPM_VERSION ver;
+
+ /* read data */
+ if (read_from_file(&buf, &buf_length)) return -1;
+ ptr = buf;
+- len = buf_length;
++ len = (uint32_t) buf_length;
+ /* unmarshal data */
+ if (tpm_unmarshal_TPM_VERSION(&ptr, &len, &ver)
+ || memcmp(&ver, &tpmData.permanent.data.version, sizeof(TPM_VERSION))
+diff -uprN tpm_emulator-0.3/tpm/tpm_marshalling.c tpm_emulator-0.3-x86_64/tpm/tpm_marshalling.c
+--- tpm_emulator-0.3/tpm/tpm_marshalling.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/tpm/tpm_marshalling.c 2006-05-26 11:26:02.000000000 -0700
+@@ -1212,7 +1212,7 @@ int tpm_unmarshal_TPM_STANY_FLAGS(BYTE *
+
+ int tpm_marshal_RSA(BYTE **ptr, UINT32 *length, rsa_private_key_t *v)
+ {
+- UINT32 m_len, e_len, q_len;
++ size_t m_len, e_len, q_len;
+ if (*length < sizeof_RSA((*v))) return -1;
+ if (v->size > 0) {
+ rsa_export_modulus(v, &(*ptr)[6], &m_len);
+diff -uprN tpm_emulator-0.3/tpm/tpm_owner.c tpm_emulator-0.3-x86_64/tpm/tpm_owner.c
+--- tpm_emulator-0.3/tpm/tpm_owner.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/tpm/tpm_owner.c 2006-05-26 11:26:02.000000000 -0700
+@@ -108,7 +108,7 @@ TPM_RESULT TPM_TakeOwnership(TPM_PROTOCO
+ TPM_RESULT res;
+ rsa_private_key_t *ek = &tpmData.permanent.data.endorsementKey;
+ TPM_KEY_DATA *srk = &tpmData.permanent.data.srk;
+- UINT32 buf_size = ek->size >> 3;
++ size_t buf_size = ek->size >> 3, key_length;
+ BYTE buf[buf_size];
+
+ info("TPM_TakeOwnership()");
+@@ -172,7 +172,8 @@ TPM_RESULT TPM_TakeOwnership(TPM_PROTOCO
+ return TPM_FAIL;
+ }
+ rsa_export_modulus(&srk->key, srkPub->pubKey.key,
+- &srkPub->pubKey.keyLength);
++ &key_length);
++ srkPub->pubKey.keyLength = (UINT32) key_length;
+ /* setup tpmProof and set state to owned */
+ tpm_get_random_bytes(tpmData.permanent.data.tpmProof.nonce,
+ sizeof(tpmData.permanent.data.tpmProof.nonce));
+diff -uprN tpm_emulator-0.3/tpm/tpm_storage.c tpm_emulator-0.3-x86_64/tpm/tpm_storage.c
+--- tpm_emulator-0.3/tpm/tpm_storage.c 2006-01-10 04:21:45.000000000 -0800
++++ tpm_emulator-0.3-x86_64/tpm/tpm_storage.c 2006-05-26 14:33:18.000000000 -0700
+@@ -58,6 +58,7 @@ int encrypt_sealed_data(TPM_KEY_DATA *ke
+ BYTE *enc, UINT32 *enc_size)
+ {
+ UINT32 len;
++ size_t enc_size32 = *enc_size;
+ BYTE *buf, *ptr;
+ rsa_public_key_t pub_key;
+ int scheme;
+@@ -72,7 +73,7 @@ int encrypt_sealed_data(TPM_KEY_DATA *ke
+ if (buf == NULL
+ || tpm_marshal_TPM_SEALED_DATA(&ptr, &len, seal)
+ || rsa_encrypt(&pub_key, scheme, buf, sizeof_TPM_SEALED_DATA((*seal)),
+- enc, enc_size)) {
++ enc, &enc_size32)) {
+ tpm_free(buf);
+ rsa_release_public_key(&pub_key);
+ return -1;
+@@ -85,7 +86,8 @@ int encrypt_sealed_data(TPM_KEY_DATA *ke
+ int decrypt_sealed_data(TPM_KEY_DATA *key, BYTE *enc, UINT32 enc_size,
+ TPM_SEALED_DATA *seal, BYTE **buf)
+ {
+- UINT32 len;
++ size_t len;
++ UINT32 len32;
+ BYTE *ptr;
+ int scheme;
+ switch (key->encScheme) {
+@@ -96,8 +98,12 @@ int decrypt_sealed_data(TPM_KEY_DATA *ke
+ len = enc_size;
+ *buf = ptr = tpm_malloc(len);
+ if (*buf == NULL
+- || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len)
+- || tpm_unmarshal_TPM_SEALED_DATA(&ptr, &len, seal)) {
++ || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len) ){
++ tpm_free(*buf);
++ return -1;
++ }
++ len32 = len;
++ if (tpm_unmarshal_TPM_SEALED_DATA(&ptr, &len32, seal)) {
+ tpm_free(*buf);
+ return -1;
+ }
+@@ -237,11 +243,12 @@ TPM_RESULT TPM_Unseal(TPM_KEY_HANDLE par
+
+ TPM_RESULT TPM_UnBind(TPM_KEY_HANDLE keyHandle, UINT32 inDataSize,
+ BYTE *inData, TPM_AUTH *auth1,
+- UINT32 *outDataSize, BYTE **outData)
++ UINT32 *outDataSize32, BYTE **outData)
+ {
+ TPM_RESULT res;
+ TPM_KEY_DATA *key;
+ int scheme;
++ size_t outDataSize;
+ info("TPM_UnBind()");
+ /* get key */
+ key = tpm_get_key(keyHandle);
+@@ -258,8 +265,8 @@ TPM_RESULT TPM_UnBind(TPM_KEY_HANDLE key
+ /* the size of the input data muss be greater than zero */
+ if (inDataSize == 0) return TPM_BAD_PARAMETER;
+ /* decrypt data */
+- *outDataSize = inDataSize;
+- *outData = tpm_malloc(*outDataSize);
++ outDataSize = inDataSize;
++ *outData = tpm_malloc(outDataSize);
+ if (*outData == NULL) return TPM_FAIL;
+ switch (key->encScheme) {
+ case TPM_ES_RSAESOAEP_SHA1_MGF1: scheme = RSA_ES_OAEP_SHA1; break;
+@@ -267,20 +274,21 @@ TPM_RESULT TPM_UnBind(TPM_KEY_HANDLE key
+ default: tpm_free(*outData); return TPM_DECRYPT_ERROR;
+ }
+ if (rsa_decrypt(&key->key, scheme, inData, inDataSize,
+- *outData, outDataSize)) {
++ *outData, &outDataSize)) {
+ tpm_free(*outData);
+ return TPM_DECRYPT_ERROR;
+ }
+ /* verify data if it is of type TPM_BOUND_DATA */
+ if (key->encScheme == TPM_ES_RSAESOAEP_SHA1_MGF1
+ || key->keyUsage != TPM_KEY_LEGACY) {
+- if (*outDataSize < 5 || memcmp(*outData, "\x01\x01\00\x00\x02", 5) != 0) {
++ if (outDataSize < 5 || memcmp(*outData, "\x01\x01\00\x00\x02", 5) != 0) {
+ tpm_free(*outData);
+ return TPM_DECRYPT_ERROR;
+ }
+- *outDataSize -= 5;
+- memmove(*outData, &(*outData)[5], *outDataSize);
++ outDataSize -= 5;
++ memmove(*outData, &(*outData)[5], outDataSize);
+ }
++ *outDataSize32 = (UINT32) outDataSize;
+ return TPM_SUCCESS;
+ }
+
+@@ -311,12 +319,13 @@ static int verify_key_digest(TPM_KEY *ke
+ }
+
+ int encrypt_private_key(TPM_KEY_DATA *key, TPM_STORE_ASYMKEY *store,
+- BYTE *enc, UINT32 *enc_size)
++ BYTE *enc, UINT32 *enc_size32)
+ {
+ UINT32 len;
+ BYTE *buf, *ptr;
+ rsa_public_key_t pub_key;
+ int scheme;
++ size_t enc_size;
+ switch (key->encScheme) {
+ case TPM_ES_RSAESOAEP_SHA1_MGF1: scheme = RSA_ES_OAEP_SHA1; break;
+ case TPM_ES_RSAESPKCSv15: scheme = RSA_ES_PKCSV15; break;
+@@ -328,11 +337,12 @@ int encrypt_private_key(TPM_KEY_DATA *ke
+ if (buf == NULL
+ || tpm_marshal_TPM_STORE_ASYMKEY(&ptr, &len, store)
+ || rsa_encrypt(&pub_key, scheme, buf, sizeof_TPM_STORE_ASYMKEY((*store)),
+- enc, enc_size)) {
++ enc, &enc_size)) {
+ tpm_free(buf);
+ rsa_release_public_key(&pub_key);
+ return -1;
+ }
++ *enc_size32 = (UINT32) enc_size;
+ tpm_free(buf);
+ rsa_release_public_key(&pub_key);
+ return 0;
+@@ -341,7 +351,8 @@ int encrypt_private_key(TPM_KEY_DATA *ke
+ int decrypt_private_key(TPM_KEY_DATA *key, BYTE *enc, UINT32 enc_size,
+ TPM_STORE_ASYMKEY *store, BYTE **buf)
+ {
+- UINT32 len;
++ UINT32 len32;
++ size_t len;
+ BYTE *ptr;
+ int scheme;
+ switch (key->encScheme) {
+@@ -352,8 +363,12 @@ int decrypt_private_key(TPM_KEY_DATA *ke
+ len = enc_size;
+ *buf = ptr = tpm_malloc(len);
+ if (*buf == NULL
+- || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len)
+- || tpm_unmarshal_TPM_STORE_ASYMKEY(&ptr, &len, store)) {
++ || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len) ) {
++ tpm_free(*buf);
++ return -1;
++ }
++ len32 = (UINT32) len;
++ if (tpm_unmarshal_TPM_STORE_ASYMKEY(&ptr, &len32, store)) {
+ tpm_free(*buf);
+ return -1;
+ }
+@@ -371,7 +386,7 @@ TPM_RESULT TPM_CreateWrapKey(TPM_KEY_HAN
+ TPM_SESSION_DATA *session;
+ TPM_STORE_ASYMKEY store;
+ rsa_private_key_t rsa;
+- UINT32 key_length;
++ size_t key_length;
+
+ info("TPM_CreateWrapKey()");
+ /* get parent key */
+@@ -428,11 +443,11 @@ TPM_RESULT TPM_CreateWrapKey(TPM_KEY_HAN
+ }
+ if (compute_key_digest(wrappedKey, &store.pubDataDigest)) return TPM_FAIL;
+ /* generate key and store it */
+- key_length = keyInfo->algorithmParms.parms.rsa.keyLength;
+- if (rsa_generate_key(&rsa, key_length)) return TPM_FAIL;
+- wrappedKey->pubKey.keyLength = key_length >> 3;
++ if (rsa_generate_key(&rsa, keyInfo->algorithmParms.parms.rsa.keyLength))
++ return TPM_FAIL;
++ wrappedKey->pubKey.keyLength = keyInfo->algorithmParms.parms.rsa.keyLength >> 3;
+ wrappedKey->pubKey.key = tpm_malloc(wrappedKey->pubKey.keyLength);
+- store.privKey.keyLength = key_length >> 4;
++ store.privKey.keyLength = keyInfo->algorithmParms.parms.rsa.keyLength >> 4;
+ store.privKey.key = tpm_malloc(store.privKey.keyLength);
+ wrappedKey->encDataSize = parent->key.size >> 3;
+ wrappedKey->encData = tpm_malloc(wrappedKey->encDataSize);
+@@ -444,9 +459,11 @@ TPM_RESULT TPM_CreateWrapKey(TPM_KEY_HAN
+ tpm_free(wrappedKey->encData);
+ return TPM_FAIL;
+ }
+- rsa_export_modulus(&rsa, wrappedKey->pubKey.key,
+- &wrappedKey->pubKey.keyLength);
+- rsa_export_prime1(&rsa, store.privKey.key, &store.privKey.keyLength);
++ rsa_export_modulus(&rsa, wrappedKey->pubKey.key,
++ &key_length);
++ wrappedKey->pubKey.keyLength = (UINT32) key_length;
++ rsa_export_prime1(&rsa, store.privKey.key, &key_length);
++ store.privKey.keyLength = (UINT32) key_length;
+ rsa_release_private_key(&rsa);
+ /* encrypt private key data */
+ if (encrypt_private_key(parent, &store, wrappedKey->encData,
+@@ -567,6 +584,7 @@ TPM_RESULT TPM_LoadKey2(TPM_KEY_HANDLE p
+
+ int tpm_setup_key_parms(TPM_KEY_DATA *key, TPM_KEY_PARMS *parms)
+ {
++ size_t key_length;
+ parms->algorithmID = TPM_ALG_RSA;
+ parms->encScheme = key->encScheme;
+ parms->sigScheme = key->sigScheme;
+@@ -576,7 +594,8 @@ int tpm_setup_key_parms(TPM_KEY_DATA *ke
+ parms->parms.rsa.exponent = tpm_malloc(parms->parms.rsa.exponentSize);
+ if (parms->parms.rsa.exponent == NULL) return -1;
+ rsa_export_exponent(&key->key, parms->parms.rsa.exponent,
+- &parms->parms.rsa.exponentSize);
++ &key_length);
++ parms->parms.rsa.exponentSize = (UINT32) key_length;
+ parms->parmSize = 12 + parms->parms.rsa.exponentSize;
+ return 0;
+ }
+@@ -587,6 +606,7 @@ TPM_RESULT TPM_GetPubKey(TPM_KEY_HANDLE
+ TPM_RESULT res;
+ TPM_KEY_DATA *key;
+ TPM_DIGEST digest;
++ size_t key_length;
+ info("TPM_GetPubKey()");
+ /* get key */
+ if (keyHandle == TPM_KH_SRK) return TPM_BAD_PARAMETER;
+@@ -614,8 +634,8 @@ TPM_RESULT TPM_GetPubKey(TPM_KEY_HANDLE
+ pubKey->pubKey.keyLength = key->key.size >> 3;
+ pubKey->pubKey.key = tpm_malloc(pubKey->pubKey.keyLength);
+ if (pubKey->pubKey.key == NULL) return TPM_FAIL;
+- rsa_export_modulus(&key->key, pubKey->pubKey.key,
+- &pubKey->pubKey.keyLength);
++ rsa_export_modulus(&key->key, pubKey->pubKey.key, &key_length);
++ pubKey->pubKey.keyLength = (UINT32) key_length;
+ if (tpm_setup_key_parms(key, &pubKey->algorithmParms) != 0) {
+ tpm_free(pubKey->pubKey.key);
+ return TPM_FAIL;
diff -r b3b5f3ff2100 -r fbcb603288bb tools/vtpm/tpm_emulator-0.2b-x86_64.patch
--- a/tools/vtpm/tpm_emulator-0.2b-x86_64.patch Wed May 31 07:43:06 2006 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,499 +0,0 @@
-diff -uprN tpm_emulator-0.2/crypto/gmp_kernel_wrapper.c tpm_emulator-0.2-x86_64/crypto/gmp_kernel_wrapper.c
---- tpm_emulator-0.2/crypto/gmp_kernel_wrapper.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/crypto/gmp_kernel_wrapper.c 2005-09-19 14:10:29.000000000 -0700
-@@ -79,7 +79,7 @@ void __attribute__ ((regparm(0))) *kerne
- {
- void *ret = (void*)kmalloc(size, GFP_KERNEL);
- if (!ret) panic(KERN_CRIT TPM_MODULE_NAME
-- "GMP: cannot allocate memory (size=%u)\n", size);
-+ "GMP: cannot allocate memory (size=%Zu)\n", size);
- return ret;
- }
-
-@@ -88,7 +88,7 @@ void __attribute__ ((regparm(0))) *kerne
- {
- void *ret = (void*)kmalloc(new_size, GFP_KERNEL);
- if (!ret) panic(KERN_CRIT TPM_MODULE_NAME "GMP: Cannot reallocate memory "
-- "(old_size=%u new_size=%u)\n", old_size, new_size);
-+ "(old_size=%Zu new_size=%Zu)\n", old_size, new_size);
- memcpy(ret, oldptr, old_size);
- kfree(oldptr);
- return ret;
-diff -uprN tpm_emulator-0.2/linux_module.c tpm_emulator-0.2-x86_64/linux_module.c
---- tpm_emulator-0.2/linux_module.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/linux_module.c 2005-09-19 14:10:29.000000000 -0700
-@@ -66,7 +66,7 @@ static int tpm_release(struct inode *ino
-
- static ssize_t tpm_read(struct file *file, char *buf, size_t count, loff_t *ppos)
- {
-- debug("%s(%d)", __FUNCTION__, count);
-+ debug("%s(%Zu)", __FUNCTION__, count);
- down(&tpm_mutex);
- if (tpm_response.data != NULL) {
- count = min(count, (size_t)tpm_response.size - (size_t)*ppos);
-@@ -81,7 +81,7 @@ static ssize_t tpm_read(struct file *fil
-
- static ssize_t tpm_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
- {
-- debug("%s(%d)", __FUNCTION__, count);
-+ debug("%s(%Zu)", __FUNCTION__, count);
- down(&tpm_mutex);
- *ppos = 0;
- if (tpm_response.data != NULL) kfree(tpm_response.data);
-diff -uprN tpm_emulator-0.2/linux_module.h tpm_emulator-0.2-x86_64/linux_module.h
---- tpm_emulator-0.2/linux_module.h 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/linux_module.h 2005-09-19 14:10:29.000000000 -0700
-@@ -28,8 +28,10 @@
-
- /* module settings */
-
-+#ifndef STR
- #define STR(s) __STR__(s)
- #define __STR__(s) #s
-+#endif
- #include "tpm_version.h"
-
- #define TPM_DEVICE_MINOR 224
-diff -uprN tpm_emulator-0.2/Makefile tpm_emulator-0.2-x86_64/Makefile
---- tpm_emulator-0.2/Makefile 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/Makefile 2005-09-19 14:10:29.000000000 -0700
-@@ -7,6 +7,7 @@
- KERNEL_RELEASE := $(shell uname -r)
- KERNEL_BUILD := /lib/modules/$(KERNEL_RELEASE)/build
- MOD_SUBDIR := misc
-+COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/)
-
- # module settings
- MODULE_NAME := tpm_emulator
-@@ -17,8 +18,14 @@ VERSION_BUILD := $(shell date +"%s")
- # enable/disable DEBUG messages
- EXTRA_CFLAGS += -DDEBUG -g
-
-+ifeq ($(COMPILE_ARCH),x86_64)
-+LIBDIR = lib64
-+else
-+LIBDIR = lib
-+endif
-+
- # GNU MP configuration
--GMP_LIB := /usr/lib/libgmp.a
-+GMP_LIB := /usr/$(LIBDIR)/libgmp.a
- GMP_HEADER := /usr/include/gmp.h
-
- # sources and objects
-diff -uprN tpm_emulator-0.2/README tpm_emulator-0.2-x86_64/README
---- tpm_emulator-0.2/README 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/README 2005-09-19 14:21:43.000000000 -0700
-@@ -45,6 +45,12 @@ Example:
- GMP_LIB := /usr/lib/libgmp.a
- GMP_HEADER := /usr/include/gmp.h
-
-+GNU MP Library on 64 bit Systems
-+--------------------------------------------------------------------------
-+Some 64-bit kernels have problems with importing the user-space gmp
-+library (/usr/lib*/libgmp.a) into kernel space. These kernels will require
-+that the gmp library be recompiled for kernel space with -mcmodel=kernel.
-+
- Installation
- --------------------------------------------------------------------------
- The compilation and installation process uses the build environment for
-diff -uprN tpm_emulator-0.2/tpm/tpm_credentials.c tpm_emulator-0.2-x86_64/tpm/tpm_credentials.c
---- tpm_emulator-0.2/tpm/tpm_credentials.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm/tpm_credentials.c 2005-09-19 14:10:29.000000000 -0700
-@@ -47,16 +47,16 @@ int tpm_compute_pubkey_checksum(TPM_NONC
-
- TPM_RESULT tpm_get_pubek(TPM_PUBKEY *pubEndorsementKey)
- {
-- UINT32 key_length;
-+ size_t key_length;
- if (!tpmData.permanent.data.endorsementKey.size) return TPM_NO_ENDORSEMENT;
- /* setup TPM_PUBKEY structure */
-- key_length = tpmData.permanent.data.endorsementKey.size;
-- pubEndorsementKey->pubKey.keyLength = key_length >> 3;
-+ pubEndorsementKey->pubKey.keyLength = tpmData.permanent.data.endorsementKey.size >> 3;
- pubEndorsementKey->pubKey.key = tpm_malloc(pubEndorsementKey->pubKey.keyLength);
- if (pubEndorsementKey->pubKey.key == NULL) return TPM_FAIL;
- rsa_export_modulus(&tpmData.permanent.data.endorsementKey,
-- pubEndorsementKey->pubKey.key,
-- &pubEndorsementKey->pubKey.keyLength);
-+ pubEndorsementKey->pubKey.key,
-+ &key_length);
-+ pubEndorsementKey->pubKey.keyLength = key_length;
- pubEndorsementKey->algorithmParms.algorithmID = TPM_ALG_RSA;
- pubEndorsementKey->algorithmParms.encScheme = TPM_ES_RSAESOAEP_SHA1_MGF1;
- pubEndorsementKey->algorithmParms.sigScheme = TPM_SS_NONE;
-@@ -169,6 +169,7 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_
- {
- TPM_RESULT res;
- TPM_KEY_DATA *srk = &tpmData.permanent.data.srk;
-+ size_t key_length;
- info("TPM_OwnerReadInternalPub()");
- /* verify authorization */
- res = tpm_verify_auth(auth1, tpmData.permanent.data.ownerAuth, TPM_KH_OWNER);
-@@ -180,7 +181,8 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_
- publicPortion->pubKey.key = tpm_malloc(publicPortion->pubKey.keyLength);
- if (publicPortion->pubKey.key == NULL) return TPM_FAIL;
- rsa_export_modulus(&srk->key, publicPortion->pubKey.key,
-- &publicPortion->pubKey.keyLength);
-+ &key_length);
-+ publicPortion->pubKey.keyLength = key_length;
- publicPortion->algorithmParms.algorithmID = TPM_ALG_RSA;
- publicPortion->algorithmParms.encScheme = srk->encScheme;
- publicPortion->algorithmParms.sigScheme = srk->sigScheme;
-diff -uprN tpm_emulator-0.2/tpm/tpm_crypto.c tpm_emulator-0.2-x86_64/tpm/tpm_crypto.c
---- tpm_emulator-0.2/tpm/tpm_crypto.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm/tpm_crypto.c 2005-09-19 14:10:29.000000000 -0700
-@@ -182,7 +182,8 @@ TPM_RESULT TPM_CertifyKey(TPM_KEY_HANDLE
- TPM_KEY_DATA *cert, *key;
- sha1_ctx_t sha1_ctx;
- BYTE *buf, *p;
-- UINT32 length;
-+ UINT32 length32;
-+ size_t length;
- info("TPM_CertifyKey()");
- /* get keys */
- cert = tpm_get_key(certHandle);
-@@ -264,14 +265,15 @@ TPM_RESULT TPM_CertifyKey(TPM_KEY_HANDLE
- /* compute the digest of the CERTIFY_INFO[2] structure and sign it */
- length = sizeof_TPM_CERTIFY_INFO((*certifyInfo));
- p = buf = tpm_malloc(length);
-+ length32=(UINT32) length;
- if (buf == NULL
-- || tpm_marshal_TPM_CERTIFY_INFO(&p, &length, certifyInfo)) {
-+ || tpm_marshal_TPM_CERTIFY_INFO(&p, &length32, certifyInfo)) {
- free_TPM_KEY_PARMS(certifyInfo->algorithmParms);
- return TPM_FAIL;
- }
- length = sizeof_TPM_CERTIFY_INFO((*certifyInfo));
- sha1_init(&sha1_ctx);
-- sha1_update(&sha1_ctx, buf, length);
-+ sha1_update(&sha1_ctx, buf, (size_t) length);
- sha1_final(&sha1_ctx, buf);
- res = tpm_sign(cert, auth1, FALSE, buf, SHA1_DIGEST_LENGTH, outData, outDataSize);
- tpm_free(buf);
-@@ -292,7 +294,8 @@ TPM_RESULT TPM_CertifyKey2(TPM_KEY_HANDL
- TPM_KEY_DATA *cert, *key;
- sha1_ctx_t sha1_ctx;
- BYTE *buf, *p;
-- UINT32 length;
-+ size_t length;
-+ UINT32 length32;
- info("TPM_CertifyKey2()");
- /* get keys */
- cert = tpm_get_key(certHandle);
-@@ -362,8 +365,9 @@ TPM_RESULT TPM_CertifyKey2(TPM_KEY_HANDL
- /* compute the digest of the CERTIFY_INFO[2] structure and sign it */
- length = sizeof_TPM_CERTIFY_INFO((*certifyInfo));
- p = buf = tpm_malloc(length);
-+ length32 = (UINT32) length;
- if (buf == NULL
-- || tpm_marshal_TPM_CERTIFY_INFO(&p, &length, certifyInfo)) {
-+ || tpm_marshal_TPM_CERTIFY_INFO(&p, &length32, certifyInfo)) {
- free_TPM_KEY_PARMS(certifyInfo->algorithmParms);
- return TPM_FAIL;
- }
-diff -uprN tpm_emulator-0.2/tpm/tpm_data.c tpm_emulator-0.2-x86_64/tpm/tpm_data.c
---- tpm_emulator-0.2/tpm/tpm_data.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm/tpm_data.c 2005-09-19 14:10:29.000000000 -0700
-@@ -179,7 +179,7 @@ static int read_from_file(uint8_t **data
- int tpm_store_permanent_data(void)
- {
- uint8_t *buf, *ptr;
-- size_t buf_length, len;
-+ UINT32 buf_length, len;
-
- /* marshal data */
- buf_length = len = sizeof_TPM_STCLEAR_FLAGS(tpmData.stclear.flags)
-@@ -207,13 +207,14 @@ int tpm_store_permanent_data(void)
- int tpm_restore_permanent_data(void)
- {
- uint8_t *buf, *ptr;
-- size_t buf_length, len;
-+ size_t buf_length;
-+ UINT32 len;
- TPM_VERSION ver;
-
- /* read data */
- if (read_from_file(&buf, &buf_length)) return -1;
- ptr = buf;
-- len = buf_length;
-+ len = (uint32_t) buf_length;
- /* unmarshal data */
- if (tpm_unmarshal_TPM_VERSION(&ptr, &len, &ver)
- || memcmp(&ver, &tpmData.permanent.data.version, sizeof(TPM_VERSION))
-diff -uprN tpm_emulator-0.2/tpm/tpm_marshalling.c tpm_emulator-0.2-x86_64/tpm/tpm_marshalling.c
---- tpm_emulator-0.2/tpm/tpm_marshalling.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm/tpm_marshalling.c 2005-09-19 14:10:29.000000000 -0700
-@@ -981,7 +981,7 @@ int tpm_unmarshal_TPM_STANY_FLAGS(BYTE *
-
- int tpm_marshal_RSA(BYTE **ptr, UINT32 *length, rsa_private_key_t *v)
- {
-- UINT32 m_len, e_len, q_len;
-+ size_t m_len, e_len, q_len;
- if (*length < sizeof_RSA((*v))) return -1;
- if (v->size > 0) {
- rsa_export_modulus(v, &(*ptr)[6], &m_len);
-diff -uprN tpm_emulator-0.2/tpm/tpm_owner.c tpm_emulator-0.2-x86_64/tpm/tpm_owner.c
---- tpm_emulator-0.2/tpm/tpm_owner.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm/tpm_owner.c 2005-09-19 14:10:29.000000000 -0700
-@@ -108,7 +108,7 @@ TPM_RESULT TPM_TakeOwnership(TPM_PROTOCO
- TPM_RESULT res;
- rsa_private_key_t *ek = &tpmData.permanent.data.endorsementKey;
- TPM_KEY_DATA *srk = &tpmData.permanent.data.srk;
-- UINT32 buf_size = ek->size >> 3;
-+ size_t buf_size = ek->size >> 3, key_length;
- BYTE buf[buf_size];
-
- info("TPM_TakeOwnership()");
-@@ -172,7 +172,8 @@ TPM_RESULT TPM_TakeOwnership(TPM_PROTOCO
- return TPM_FAIL;
- }
- rsa_export_modulus(&srk->key, srkPub->pubKey.key,
-- &srkPub->pubKey.keyLength);
-+ &key_length);
-+ srkPub->pubKey.keyLength = (UINT32) key_length;
- /* setup tpmProof and set state to owned */
- tpm_get_random_bytes(tpmData.permanent.data.tpmProof.nonce,
- sizeof(tpmData.permanent.data.tpmProof.nonce));
-diff -uprN tpm_emulator-0.2/tpm/tpm_storage.c tpm_emulator-0.2-x86_64/tpm/tpm_storage.c
---- tpm_emulator-0.2/tpm/tpm_storage.c 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm/tpm_storage.c 2005-09-19 14:10:29.000000000 -0700
-@@ -58,6 +58,7 @@ int encrypt_sealed_data(TPM_KEY_DATA *ke
- BYTE *enc, UINT32 *enc_size)
- {
- UINT32 len;
-+ size_t enc_size32 = *enc_size;
- BYTE *buf, *ptr;
- rsa_public_key_t pub_key;
- int scheme;
-@@ -72,7 +73,7 @@ int encrypt_sealed_data(TPM_KEY_DATA *ke
- if (buf == NULL
- || tpm_marshal_TPM_SEALED_DATA(&ptr, &len, seal)
- || rsa_encrypt(&pub_key, scheme, buf, sizeof_TPM_SEALED_DATA((*seal)),
-- enc, enc_size)) {
-+ enc, &enc_size32)) {
- tpm_free(buf);
- rsa_release_public_key(&pub_key);
- return -1;
-@@ -85,7 +86,8 @@ int encrypt_sealed_data(TPM_KEY_DATA *ke
- int decrypt_sealed_data(TPM_KEY_DATA *key, BYTE *enc, UINT32 enc_size,
- TPM_SEALED_DATA *seal, BYTE **buf)
- {
-- UINT32 len;
-+ size_t len;
-+ UINT32 len32;
- BYTE *ptr;
- int scheme;
- switch (key->encScheme) {
-@@ -96,8 +98,12 @@ int decrypt_sealed_data(TPM_KEY_DATA *ke
- len = enc_size;
- *buf = ptr = tpm_malloc(len);
- if (*buf == NULL
-- || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len)
-- || tpm_unmarshal_TPM_SEALED_DATA(&ptr, &len, seal)) {
-+ || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len) ){
-+ tpm_free(*buf);
-+ return -1;
-+ }
-+ len32 = len;
-+ if (tpm_unmarshal_TPM_SEALED_DATA(&ptr, &len32, seal)) {
- tpm_free(*buf);
- return -1;
- }
-@@ -237,11 +243,12 @@ TPM_RESULT TPM_Unseal(TPM_KEY_HANDLE par
-
- TPM_RESULT TPM_UnBind(TPM_KEY_HANDLE keyHandle, UINT32 inDataSize,
- BYTE *inData, TPM_AUTH *auth1,
-- UINT32 *outDataSize, BYTE **outData)
-+ UINT32 *outDataSize32, BYTE **outData)
- {
- TPM_RESULT res;
- TPM_KEY_DATA *key;
- int scheme;
-+ size_t outDataSize;
- info("TPM_UnBind()");
- /* get key */
- key = tpm_get_key(keyHandle);
-@@ -258,8 +265,8 @@ TPM_RESULT TPM_UnBind(TPM_KEY_HANDLE key
- /* the size of the input data muss be greater than zero */
- if (inDataSize == 0) return TPM_BAD_PARAMETER;
- /* decrypt data */
-- *outDataSize = inDataSize;
-- *outData = tpm_malloc(*outDataSize);
-+ outDataSize = inDataSize;
-+ *outData = tpm_malloc(outDataSize);
- if (*outData == NULL) return TPM_FAIL;
- switch (key->encScheme) {
- case TPM_ES_RSAESOAEP_SHA1_MGF1: scheme = RSA_ES_OAEP_SHA1; break;
-@@ -267,20 +274,21 @@ TPM_RESULT TPM_UnBind(TPM_KEY_HANDLE key
- default: tpm_free(*outData); return TPM_DECRYPT_ERROR;
- }
- if (rsa_decrypt(&key->key, scheme, inData, inDataSize,
-- *outData, outDataSize)) {
-+ *outData, &outDataSize) ) {
- tpm_free(*outData);
- return TPM_DECRYPT_ERROR;
- }
- /* verify data if it is of type TPM_BOUND_DATA */
- if (key->encScheme == TPM_ES_RSAESOAEP_SHA1_MGF1
- || key->keyUsage != TPM_KEY_LEGACY) {
-- if (*outDataSize < 5 || memcmp(*outData, "\x01\x01\00\x00\x02", 5) != 0) {
-+ if (outDataSize < 5 || memcmp(*outData, "\x01\x01\00\x00\x02", 5) != 0) {
- tpm_free(*outData);
- return TPM_DECRYPT_ERROR;
- }
-- *outDataSize -= 5;
-- memmove(*outData, &(*outData)[5], *outDataSize);
-- }
-+ outDataSize -= 5;
-+ memmove(*outData, &(*outData)[5], outDataSize);
-+ }
-+ *outDataSize32 = (UINT32) outDataSize;
- return TPM_SUCCESS;
- }
-
-@@ -311,12 +319,13 @@ static int verify_key_digest(TPM_KEY *ke
- }
-
- int encrypt_private_key(TPM_KEY_DATA *key, TPM_STORE_ASYMKEY *store,
-- BYTE *enc, UINT32 *enc_size)
-+ BYTE *enc, UINT32 *enc_size32)
- {
- UINT32 len;
- BYTE *buf, *ptr;
- rsa_public_key_t pub_key;
- int scheme;
-+ size_t enc_size;
- switch (key->encScheme) {
- case TPM_ES_RSAESOAEP_SHA1_MGF1: scheme = RSA_ES_OAEP_SHA1; break;
- case TPM_ES_RSAESPKCSv15: scheme = RSA_ES_PKCSV15; break;
-@@ -328,11 +337,12 @@ int encrypt_private_key(TPM_KEY_DATA *ke
- if (buf == NULL
- || tpm_marshal_TPM_STORE_ASYMKEY(&ptr, &len, store)
- || rsa_encrypt(&pub_key, scheme, buf, sizeof_TPM_STORE_ASYMKEY((*store)),
-- enc, enc_size)) {
-+ enc, &enc_size)) {
- tpm_free(buf);
- rsa_release_public_key(&pub_key);
- return -1;
- }
-+ *enc_size32 = (UINT32) enc_size;
- tpm_free(buf);
- rsa_release_public_key(&pub_key);
- return 0;
-@@ -341,7 +351,8 @@ int encrypt_private_key(TPM_KEY_DATA *ke
- int decrypt_private_key(TPM_KEY_DATA *key, BYTE *enc, UINT32 enc_size,
- TPM_STORE_ASYMKEY *store, BYTE **buf)
- {
-- UINT32 len;
-+ UINT32 len32;
-+ size_t len;
- BYTE *ptr;
- int scheme;
- switch (key->encScheme) {
-@@ -352,11 +363,16 @@ int decrypt_private_key(TPM_KEY_DATA *ke
- len = enc_size;
- *buf = ptr = tpm_malloc(len);
- if (*buf == NULL
-- || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len)
-- || tpm_unmarshal_TPM_STORE_ASYMKEY(&ptr, &len, store)) {
-+ || rsa_decrypt(&key->key, scheme, enc, enc_size, *buf, &len) ) {
-+ tpm_free(*buf);
-+ return -1;
-+ }
-+ len32 = (UINT32) len;
-+ if (tpm_unmarshal_TPM_STORE_ASYMKEY(&ptr, &len32, store)) {
- tpm_free(*buf);
- return -1;
- }
-+
- return 0;
- }
-
-@@ -371,7 +387,7 @@ TPM_RESULT TPM_CreateWrapKey(TPM_KEY_HAN
- TPM_SESSION_DATA *session;
- TPM_STORE_ASYMKEY store;
- rsa_private_key_t rsa;
-- UINT32 key_length;
-+ size_t key_length;
-
- info("TPM_CreateWrapKey()");
- /* get parent key */
-@@ -428,11 +444,11 @@ TPM_RESULT TPM_CreateWrapKey(TPM_KEY_HAN
- }
- if (compute_key_digest(wrappedKey, &store.pubDataDigest)) return TPM_FAIL;
- /* generate key and store it */
-- key_length = keyInfo->algorithmParms.parms.rsa.keyLength;
-- if (rsa_generate_key(&rsa, key_length)) return TPM_FAIL;
-- wrappedKey->pubKey.keyLength = key_length >> 3;
-+ if (rsa_generate_key(&rsa, keyInfo->algorithmParms.parms.rsa.keyLength))
-+ return TPM_FAIL;
-+ wrappedKey->pubKey.keyLength = keyInfo->algorithmParms.parms.rsa.keyLength >> 3;
- wrappedKey->pubKey.key = tpm_malloc(wrappedKey->pubKey.keyLength);
-- store.privKey.keyLength = key_length >> 4;
-+ store.privKey.keyLength = keyInfo->algorithmParms.parms.rsa.keyLength >> 4;
- store.privKey.key = tpm_malloc(store.privKey.keyLength);
- wrappedKey->encDataSize = parent->key.size >> 3;
- wrappedKey->encData = tpm_malloc(wrappedKey->encDataSize);
-@@ -444,9 +460,11 @@ TPM_RESULT TPM_CreateWrapKey(TPM_KEY_HAN
- tpm_free(wrappedKey->encData);
- return TPM_FAIL;
- }
-- rsa_export_modulus(&rsa, wrappedKey->pubKey.key,
-- &wrappedKey->pubKey.keyLength);
-- rsa_export_prime1(&rsa, store.privKey.key, &store.privKey.keyLength);
-+ rsa_export_modulus(&rsa, wrappedKey->pubKey.key,
-+ &key_length);
-+ wrappedKey->pubKey.keyLength = (UINT32) key_length;
-+ rsa_export_prime1(&rsa, store.privKey.key, &key_length);
-+ store.privKey.keyLength = (UINT32) key_length;
- rsa_release_private_key(&rsa);
- /* encrypt private key data */
- if (encrypt_private_key(parent, &store, wrappedKey->encData,
-@@ -560,6 +578,7 @@ TPM_RESULT TPM_LoadKey(TPM_KEY_HANDLE pa
-
- int tpm_setup_key_parms(TPM_KEY_DATA *key, TPM_KEY_PARMS *parms)
- {
-+ size_t key_length;
- parms->algorithmID = TPM_ALG_RSA;
- parms->encScheme = key->encScheme;
- parms->sigScheme = key->sigScheme;
-@@ -569,7 +588,8 @@ int tpm_setup_key_parms(TPM_KEY_DATA *ke
- parms->parms.rsa.exponent = tpm_malloc(parms->parms.rsa.exponentSize);
- if (parms->parms.rsa.exponent == NULL) return -1;
- rsa_export_exponent(&key->key, parms->parms.rsa.exponent,
-- &parms->parms.rsa.exponentSize);
-+ &key_length);
-+ parms->parms.rsa.exponentSize = (UINT32) key_length;
- parms->parmSize = 12 + parms->parms.rsa.exponentSize;
- return 0;
- }
-@@ -580,6 +600,7 @@ TPM_RESULT TPM_GetPubKey(TPM_KEY_HANDLE
- TPM_RESULT res;
- TPM_KEY_DATA *key;
- TPM_DIGEST digest;
-+ size_t key_length;
- info("TPM_GetPubKey()");
- /* get key */
- if (keyHandle == TPM_KH_SRK) return TPM_BAD_PARAMETER;
-@@ -607,8 +628,8 @@ TPM_RESULT TPM_GetPubKey(TPM_KEY_HANDLE
- pubKey->pubKey.keyLength = key->key.size >> 3;
- pubKey->pubKey.key = tpm_malloc(pubKey->pubKey.keyLength);
- if (pubKey->pubKey.key == NULL) return TPM_FAIL;
-- rsa_export_modulus(&key->key, pubKey->pubKey.key,
-- &pubKey->pubKey.keyLength);
-+ rsa_export_modulus(&key->key, pubKey->pubKey.key, &key_length);
-+ pubKey->pubKey.keyLength = (UINT32) key_length;
- if (tpm_setup_key_parms(key, &pubKey->algorithmParms) != 0) {
- tpm_free(pubKey->pubKey.key);
- return TPM_FAIL;
-diff -uprN tpm_emulator-0.2/tpm_version.h tpm_emulator-0.2-x86_64/tpm_version.h
---- tpm_emulator-0.2/tpm_version.h 2005-08-15 00:58:57.000000000 -0700
-+++ tpm_emulator-0.2-x86_64/tpm_version.h 1969-12-31 16:00:00.000000000 -0800
-@@ -1,6 +0,0 @@
--#ifndef _TPM_VERSION_H_
--#define _TPM_VERSION_H_
--#define VERSION_MAJOR 0
--#define VERSION_MINOR 2
--#define VERSION_BUILD 1123950310
--#endif /* _TPM_VERSION_H_ */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@lists.xensource.com
http://lists.xensource.com/xen-changelog