| OLD | NEW |
| 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
| 3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
| 4 */ | 4 */ |
| 5 | 5 |
| 6 /* A lightweight TPM command library. | 6 /* A lightweight TPM command library. |
| 7 * | 7 * |
| 8 * The general idea is that TPM commands are array of bytes whose fields are | 8 * The general idea is that TPM commands are array of bytes whose fields are |
| 9 * mostly compile-time constant. The goal is to build much of the commands at | 9 * mostly compile-time constant. The goal is to build much of the commands at |
| 10 * compile time (or build time) and change some of the fields at run time as | 10 * compile time (or build time) and change some of the fields at run time as |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 #endif /* FIRMWARE */ | 32 #endif /* FIRMWARE */ |
| 33 | 33 |
| 34 #include "structures.h" | 34 #include "structures.h" |
| 35 #include "tlcl_internal.h" | 35 #include "tlcl_internal.h" |
| 36 #include "version.h" | 36 #include "version.h" |
| 37 | 37 |
| 38 #if USE_TPM_EMULATOR | 38 #if USE_TPM_EMULATOR |
| 39 #include "tpmemu.h" | 39 #include "tpmemu.h" |
| 40 #endif | 40 #endif |
| 41 | 41 |
| 42 #define TPM_DEVICE_PATH "/dev/tpm0" |
| 43 |
| 42 /* The file descriptor for the TPM device. | 44 /* The file descriptor for the TPM device. |
| 43 */ | 45 */ |
| 44 int tpm_fd = -1; | 46 int tpm_fd = -1; |
| 45 | 47 |
| 46 /* Log level. 0 is quietest. Be verbose by default. | 48 /* Log level. 0 is quietest. Be verbose by default. |
| 47 */ | 49 */ |
| 48 int tlcl_log_level = 1; | 50 int tlcl_log_level = 1; |
| 49 | 51 |
| 50 /* Print |n| bytes from array |a|, with newlines. | 52 /* Print |n| bytes from array |a|, with newlines. |
| 51 */ | 53 */ |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 } | 226 } |
| 225 | 227 |
| 226 void TlclSetLogLevel(int level) { | 228 void TlclSetLogLevel(int level) { |
| 227 tlcl_log_level = level; | 229 tlcl_log_level = level; |
| 228 } | 230 } |
| 229 | 231 |
| 230 void TlclLibInit(void) { | 232 void TlclLibInit(void) { |
| 231 #if USE_TPM_EMULATOR | 233 #if USE_TPM_EMULATOR |
| 232 tpmemu_init(); | 234 tpmemu_init(); |
| 233 #else | 235 #else |
| 234 #if !FIRMWARE | 236 TlclOpenDevice(); |
| 235 tpm_fd = open("/dev/tpm0", O_RDWR); | |
| 236 if (tpm_fd < 0) { | |
| 237 error("cannot open TPM device: %s\n", strerror(errno)); | |
| 238 } | |
| 239 #endif /* !FIRMWARE */ | |
| 240 #endif /* USE_TPM_EMULATOR */ | 237 #endif /* USE_TPM_EMULATOR */ |
| 241 } | 238 } |
| 242 | 239 |
| 240 void TlclCloseDevice(void) { |
| 241 #if !FIRMWARE |
| 242 close(tpm_fd); |
| 243 tpm_fd = -1; |
| 244 #endif /* !FIRMWARE */ |
| 245 } |
| 246 |
| 247 void TlclOpenDevice(void) { |
| 248 #if !FIRMWARE |
| 249 tpm_fd = open(TPM_DEVICE_PATH, O_RDWR); |
| 250 if (tpm_fd < 0) { |
| 251 error("cannot open TPM device %s: %s\n", TPM_DEVICE_PATH, strerror(errno)); |
| 252 } |
| 253 #endif /* !FIRMWARE */ |
| 254 } |
| 255 |
| 243 uint32_t TlclStartup(void) { | 256 uint32_t TlclStartup(void) { |
| 244 return Send(tpm_startup_cmd.buffer); | 257 return Send(tpm_startup_cmd.buffer); |
| 245 } | 258 } |
| 246 | 259 |
| 247 uint32_t TlclSelftestfull(void) { | 260 uint32_t TlclSelftestfull(void) { |
| 248 return Send(tpm_selftestfull_cmd.buffer); | 261 return Send(tpm_selftestfull_cmd.buffer); |
| 249 } | 262 } |
| 250 | 263 |
| 251 uint32_t TlclContinueSelfTest(void) { | 264 uint32_t TlclContinueSelfTest(void) { |
| 252 return Send(tpm_continueselftest_cmd.buffer); | 265 return Send(tpm_continueselftest_cmd.buffer); |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 ToTpmUint32(tpm_getpermissions_cmd.index, index); | 404 ToTpmUint32(tpm_getpermissions_cmd.index, index); |
| 392 SendReceive(tpm_getpermissions_cmd.buffer, response, sizeof(response)); | 405 SendReceive(tpm_getpermissions_cmd.buffer, response, sizeof(response)); |
| 393 result = TpmReturnCode(response); | 406 result = TpmReturnCode(response); |
| 394 if (result != TPM_SUCCESS) { | 407 if (result != TPM_SUCCESS) { |
| 395 return result; | 408 return result; |
| 396 } | 409 } |
| 397 nvdata = response + kTpmResponseHeaderLength + sizeof(size); | 410 nvdata = response + kTpmResponseHeaderLength + sizeof(size); |
| 398 FromTpmUint32(nvdata + kNvDataPublicPermissionsOffset, permissions); | 411 FromTpmUint32(nvdata + kNvDataPublicPermissionsOffset, permissions); |
| 399 return result; | 412 return result; |
| 400 } | 413 } |
| OLD | NEW |