#include "vtpmmgr.h"
#include "tcg.h"
+struct tpm_hardware_version hardware_version = {
+ .hw_version = TPM1_HARDWARE,
+};
+
+int parse_cmdline_hw(int argc, char** argv)
+{
+ int i;
+
+ for (i = 1; i < argc; ++i) {
+ if (!strcmp(argv[i], TPM2_EXTRA_OPT)) {
+ hardware_version.hw_version = TPM2_HARDWARE;
+ break;
+ }
+ }
+ return 0;
+}
+
+int hw_is_tpm2(void)
+{
+ return (hardware_version.hw_version == TPM2_HARDWARE) ? 1 : 0;
+}
void main_loop(void) {
tpmcmd_t* tpmcmd;
sleep(2);
vtpmloginfo(VTPM_LOG_VTPM, "Starting vTPM manager domain\n");
- /* Initialize the vtpm manager */
- if(vtpmmgr_init(argc, argv) != TPM_SUCCESS) {
- vtpmlogerror(VTPM_LOG_VTPM, "Unable to initialize vtpmmgr domain!\n");
- rc = -1;
- goto exit;
- }
+ /*Parse TPM hardware in extra command line*/
+ parse_cmdline_hw(argc, argv);
+
+ /* Initialize the vtpm manager */
+ if (hw_is_tpm2()) {
+ vtpmloginfo(VTPM_LOG_VTPM, "Hardware : --- TPM 2.0 ---\n");
+ if (vtpmmgr2_init(argc, argv) != TPM_SUCCESS) {
+ vtpmlogerror(VTPM_LOG_VTPM, "Unable to initialize vtpmmgr domain!\n");
+ rc = -1;
+ goto exit;
+ }
+ }else{
+ vtpmloginfo(VTPM_LOG_VTPM, "Hardware : --- TPM 1.x ---\n");
+ if (vtpmmgr_init(argc, argv) != TPM_SUCCESS) {
+ vtpmlogerror(VTPM_LOG_VTPM, "Unable to initialize vtpmmgr domain!\n");
+ rc = -1;
+ goto exit;
+ }
+ }
main_loop();
#include "vtpm_manager.h"
#include "tpm2_types.h"
+#define TPM2_EXTRA_OPT "tpm2=1"
#define RSA_KEY_SIZE 0x0800
#define RSA_CIPHER_SIZE (RSA_KEY_SIZE / 8)
+enum {
+ TPM1_HARDWARE = 1,
+ TPM2_HARDWARE,
+} tpm_version;
+
+struct tpm_hardware_version {
+ int hw_version;
+};
+
+extern struct tpm_hardware_version hardware_version;
+
struct vtpm_globals {
int tpm_fd;
TPM_AUTH_SESSION oiap; // OIAP session for storageKey
TPM_RC tpm2_take_ownership(void);
TPM_RESULT vtpmmgr2_create(void);
TPM_RESULT vtpmmgr2_init(int argc, char** argv);
+int parse_cmdline_hw(int argc, char** argv);
+int hw_is_tpm2(void);
#endif