libtpmtss: Support of Intel TABRMD interface

This commit is contained in:
Andreas Steffen
2017-07-12 17:07:34 +02:00
parent 991703007a
commit eab650d62f
2 changed files with 93 additions and 17 deletions
+13 -3
View File
@@ -998,9 +998,19 @@ if test x$tss_trousers = xtrue; then
fi
if test x$tss_tss2 = xtrue; then
PKG_CHECK_MODULES(tss2, [tcti-socket], [AC_DEFINE([TSS_TSS2], [], [use TSS 2.0 libraries])])
AC_SUBST(tss2_CFLAGS)
AC_SUBST(tss2_LIBS)
PKG_CHECK_MODULES(tss2_tabrmd, [tcti-tabrmd],
[tss2_tabrmd=true; AC_DEFINE([TSS2_TCTI_TABRMD], [], [use TCTI Access Broker and Resource Mamager])],
[tss2_tabrmd=false])
PKG_CHECK_MODULES(tss2_socket, [tcti-socket],
[tss2_socket=true; AC_DEFINE([TSS2_TCTI_SOCKET], [], [use TCTI Sockets])],
[tss2_socket=false])
if test x$tss2_tabrmd = xtrue -o x$tss2_socket = xtrue; then
AC_DEFINE([TSS_TSS2], [], [use TSS 2.0 libraries])
AC_SUBST(tss2_CFLAGS, "$tss2_tabrmd_CFLAGS $tss2_socket_CFLAGS")
AC_SUBST(tss2_LIBS, "$tss2_tabrmd_LIBS $tss2_socket_LIBS")
else
AC_MSG_FAILURE([no TSS2 TCTI library detected])
fi
fi
if test x$imc_swima = xtrue -o $imv_swima = xtrue -o x$imv_swid = xtrue; then
+80 -14
View File
@@ -23,8 +23,18 @@
#include <bio/bio_reader.h>
#include <tpm20.h>
#ifdef TSS2_TCTI_TABRMD
#include <tcti/tcti-tabrmd.h>
#endif /* TSS2_TCTI_TABRMD */
#ifdef TSS2_TCTI_SOCKET
#include <tcti_socket.h>
#define TCTI_SOCKET_DEFAULT_ADDRESS "127.0.0.1"
#define TCTI_SOCKET_DEFAULT_PORT 2323
#endif /* TSS2_TCTI_SOCKET */
#define LABEL "TPM 2.0 -"
typedef struct private_tpm_tss_tss2_t private_tpm_tss_tss2_t;
@@ -209,23 +219,52 @@ static bool get_algs_capability(private_tpm_tss_tss2_t *this)
}
/**
* Initialize TSS context
* Initialize TSS2 TCTI TABRMD context
*/
static bool initialize_context(private_tpm_tss_tss2_t *this)
static bool initialize_tcti_tabrmd_context(private_tpm_tss_tss2_t *this)
{
#ifdef TSS2_TCTI_TABRMD
size_t tcti_context_size;
uint32_t sys_context_size;
uint32_t rval;
TCTI_SOCKET_CONF rm_if_config = { DEFAULT_HOSTNAME,
DEFAULT_RESMGR_TPM_PORT
};
/* determine size of tcti context */
rval = tss2_tcti_tabrmd_init(NULL, &tcti_context_size);
if (rval != TSS2_RC_SUCCESS)
{
DBG1(DBG_PTS, "%s could not get tcti_context size: 0x%06x",
LABEL, rval);
return FALSE;
}
TSS2_ABI_VERSION abi_version = { TSSWG_INTEROP,
TSS_SAPI_FIRST_FAMILY,
TSS_SAPI_FIRST_LEVEL,
TSS_SAPI_FIRST_VERSION
};
/* allocate memory for tcti context */
this->tcti_context = (TSS2_TCTI_CONTEXT*)malloc(tcti_context_size);
/* initialize tcti context */
rval = tss2_tcti_tabrmd_init(this->tcti_context, &tcti_context_size);
if (rval != TSS2_RC_SUCCESS)
{
DBG1(DBG_PTS, "%s could not get tcti_context: 0x%06x "
"via tabrmd interface", LABEL, rval);
return FALSE;
}
return TRUE;
#else /* TSS2_TCTI_TABRMD */
return FALSE;
#endif /* TSS2_TCTI_TABRMD */
}
/**
* Initialize TSS2 TCTI Socket context
*/
static bool initialize_tcti_socket_context(private_tpm_tss_tss2_t *this)
{
#ifdef TSS2_TCTI_SOCKET
size_t tcti_context_size;
uint32_t rval;
TCTI_SOCKET_CONF rm_if_config = { TCTI_SOCKET_DEFAULT_ADDRESS,
TCTI_SOCKET_DEFAULT_PORT
};
/* determine size of tcti context */
rval = InitSocketTcti(NULL, &tcti_context_size, &rm_if_config, 0);
@@ -244,10 +283,29 @@ static bool initialize_context(private_tpm_tss_tss2_t *this)
&rm_if_config, 0);
if (rval != TSS2_RC_SUCCESS)
{
DBG1(DBG_PTS, "%s could not get tcti_context: 0x%06x",
LABEL, rval);
DBG1(DBG_PTS, "%s could not get tcti_context: 0x%06x "
"via socket interface", LABEL, rval);
return FALSE;
}
return TRUE;
#else /* TSS2_TCTI_SOCKET */
return FALSE;
#endif /* TSS2_TCTI_SOCKET */
}
/**
* Initialize TSS2 Sys context
*/
static bool initialize_sys_context(private_tpm_tss_tss2_t *this)
{
uint32_t sys_context_size;
uint32_t rval;
TSS2_ABI_VERSION abi_version = { TSSWG_INTEROP,
TSS_SAPI_FIRST_FAMILY,
TSS_SAPI_FIRST_LEVEL,
TSS_SAPI_FIRST_VERSION
};
/* determine size of sys context */
sys_context_size = Tss2_Sys_GetContextSize(0);
@@ -885,7 +943,15 @@ tpm_tss_t *tpm_tss_tss2_create()
},
);
available = initialize_context(this);
available = initialize_tcti_tabrmd_context(this);
if (!available)
{
available = initialize_tcti_socket_context(this);
}
if (available)
{
available = initialize_sys_context(this);
}
DBG1(DBG_PTS, "TPM 2.0 via TSS2 %savailable", available ? "" : "not ");
if (!available)