1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /***********************************************************************
3*758e9fbaSOystein Eftevaag * Copyright (c) 2017-2018, Intel Corporation
4*758e9fbaSOystein Eftevaag *
5*758e9fbaSOystein Eftevaag * All rights reserved.
6*758e9fbaSOystein Eftevaag ***********************************************************************/
7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
8*758e9fbaSOystein Eftevaag #include <config.h>
9*758e9fbaSOystein Eftevaag #endif
10*758e9fbaSOystein Eftevaag
11*758e9fbaSOystein Eftevaag #include <inttypes.h>
12*758e9fbaSOystein Eftevaag #include <stdio.h>
13*758e9fbaSOystein Eftevaag #include <stdlib.h>
14*758e9fbaSOystein Eftevaag
15*758e9fbaSOystein Eftevaag #include "tss2_sys.h"
16*758e9fbaSOystein Eftevaag
17*758e9fbaSOystein Eftevaag #define LOGMODULE test
18*758e9fbaSOystein Eftevaag #include "util/log.h"
19*758e9fbaSOystein Eftevaag #include "test.h"
20*758e9fbaSOystein Eftevaag /*
21*758e9fbaSOystein Eftevaag * This is an incredibly simple test to create the most simple session
22*758e9fbaSOystein Eftevaag * (which ends up being a trial policy) and then just tear it down.
23*758e9fbaSOystein Eftevaag */
24*758e9fbaSOystein Eftevaag int
test_invoke(TSS2_SYS_CONTEXT * sapi_context)25*758e9fbaSOystein Eftevaag test_invoke (TSS2_SYS_CONTEXT *sapi_context)
26*758e9fbaSOystein Eftevaag {
27*758e9fbaSOystein Eftevaag TSS2_RC rc;
28*758e9fbaSOystein Eftevaag TPM2B_NONCE nonce_caller = {
29*758e9fbaSOystein Eftevaag .size = TPM2_SHA256_DIGEST_SIZE,
30*758e9fbaSOystein Eftevaag .buffer = {
31*758e9fbaSOystein Eftevaag 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef,
32*758e9fbaSOystein Eftevaag 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef,
33*758e9fbaSOystein Eftevaag 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef,
34*758e9fbaSOystein Eftevaag 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef
35*758e9fbaSOystein Eftevaag }
36*758e9fbaSOystein Eftevaag };
37*758e9fbaSOystein Eftevaag TPM2B_NONCE nonce_tpm = {
38*758e9fbaSOystein Eftevaag .size = TPM2_SHA256_DIGEST_SIZE,
39*758e9fbaSOystein Eftevaag .buffer = { 0 }
40*758e9fbaSOystein Eftevaag };
41*758e9fbaSOystein Eftevaag TPM2B_ENCRYPTED_SECRET encrypted_salt = { 0 };
42*758e9fbaSOystein Eftevaag TPMI_SH_AUTH_SESSION session_handle = 0;
43*758e9fbaSOystein Eftevaag TPMT_SYM_DEF symmetric = { .algorithm = TPM2_ALG_NULL };
44*758e9fbaSOystein Eftevaag
45*758e9fbaSOystein Eftevaag LOG_INFO("StartAuthSession for TPM2_SE_POLICY (policy session)");
46*758e9fbaSOystein Eftevaag rc = Tss2_Sys_StartAuthSession (sapi_context,
47*758e9fbaSOystein Eftevaag TPM2_RH_NULL, /* tpmKey */
48*758e9fbaSOystein Eftevaag TPM2_RH_NULL, /* bind */
49*758e9fbaSOystein Eftevaag 0, /* cmdAuthsArray */
50*758e9fbaSOystein Eftevaag &nonce_caller, /* nonceCaller */
51*758e9fbaSOystein Eftevaag &encrypted_salt, /* encryptedSalt */
52*758e9fbaSOystein Eftevaag TPM2_SE_POLICY, /* sessionType */
53*758e9fbaSOystein Eftevaag &symmetric, /* symmetric */
54*758e9fbaSOystein Eftevaag TPM2_ALG_SHA256, /* authHash */
55*758e9fbaSOystein Eftevaag &session_handle, /* sessionHandle */
56*758e9fbaSOystein Eftevaag &nonce_tpm, /* nonceTPM */
57*758e9fbaSOystein Eftevaag 0 /* rspAuthsArray */
58*758e9fbaSOystein Eftevaag );
59*758e9fbaSOystein Eftevaag if (rc != TSS2_RC_SUCCESS) {
60*758e9fbaSOystein Eftevaag LOG_ERROR("Tss2_Sys_StartAuthSession failed: 0x%" PRIx32, rc);
61*758e9fbaSOystein Eftevaag exit(1);
62*758e9fbaSOystein Eftevaag }
63*758e9fbaSOystein Eftevaag LOG_INFO("StartAuthSession for TPM2_SE_POLICY success! Session handle: "
64*758e9fbaSOystein Eftevaag "0x%" PRIx32, session_handle);
65*758e9fbaSOystein Eftevaag /*
66*758e9fbaSOystein Eftevaag * Clean out the session we've created. Would be nice if we didn't have
67*758e9fbaSOystein Eftevaag * to do this ...
68*758e9fbaSOystein Eftevaag */
69*758e9fbaSOystein Eftevaag rc = Tss2_Sys_FlushContext (sapi_context, session_handle);
70*758e9fbaSOystein Eftevaag if (rc != TSS2_RC_SUCCESS) {
71*758e9fbaSOystein Eftevaag LOG_ERROR("Tss2_Sys_FlushContext failed: 0x%" PRIx32, rc);
72*758e9fbaSOystein Eftevaag exit(1);
73*758e9fbaSOystein Eftevaag }
74*758e9fbaSOystein Eftevaag LOG_INFO("Flushed context for session handle: 0x%" PRIx32 " success!",
75*758e9fbaSOystein Eftevaag session_handle);
76*758e9fbaSOystein Eftevaag
77*758e9fbaSOystein Eftevaag return 0;
78*758e9fbaSOystein Eftevaag }
79