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 fi
if test x$tss_tss2 = xtrue; then if test x$tss_tss2 = xtrue; then
PKG_CHECK_MODULES(tss2, [tcti-socket], [AC_DEFINE([TSS_TSS2], [], [use TSS 2.0 libraries])]) PKG_CHECK_MODULES(tss2_tabrmd, [tcti-tabrmd],
AC_SUBST(tss2_CFLAGS) [tss2_tabrmd=true; AC_DEFINE([TSS2_TCTI_TABRMD], [], [use TCTI Access Broker and Resource Mamager])],
AC_SUBST(tss2_LIBS) [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 fi
if test x$imc_swima = xtrue -o $imv_swima = xtrue -o x$imv_swid = xtrue; then 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 <bio/bio_reader.h>
#include <tpm20.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> #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 -" #define LABEL "TPM 2.0 -"
typedef struct private_tpm_tss_tss2_t private_tpm_tss_tss2_t; 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; size_t tcti_context_size;
uint32_t sys_context_size;
uint32_t rval; uint32_t rval;
TCTI_SOCKET_CONF rm_if_config = { DEFAULT_HOSTNAME, /* determine size of tcti context */
DEFAULT_RESMGR_TPM_PORT 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, /* allocate memory for tcti context */
TSS_SAPI_FIRST_FAMILY, this->tcti_context = (TSS2_TCTI_CONTEXT*)malloc(tcti_context_size);
TSS_SAPI_FIRST_LEVEL,
TSS_SAPI_FIRST_VERSION /* 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 */ /* determine size of tcti context */
rval = InitSocketTcti(NULL, &tcti_context_size, &rm_if_config, 0); 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); &rm_if_config, 0);
if (rval != TSS2_RC_SUCCESS) if (rval != TSS2_RC_SUCCESS)
{ {
DBG1(DBG_PTS, "%s could not get tcti_context: 0x%06x", DBG1(DBG_PTS, "%s could not get tcti_context: 0x%06x "
LABEL, rval); "via socket interface", LABEL, rval);
return FALSE; 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 */ /* determine size of sys context */
sys_context_size = Tss2_Sys_GetContextSize(0); 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 "); DBG1(DBG_PTS, "TPM 2.0 via TSS2 %savailable", available ? "" : "not ");
if (!available) if (!available)