Coverage Report

Created: 2026-08-13 06:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/tpm2-tss/src/tss2-sys/api/Tss2_Sys_StartAuthSession.c
Line
Count
Source
1
/* SPDX-License-Identifier: BSD-2-Clause */
2
/***********************************************************************;
3
 * Copyright (c) 2015 - 2017, Intel Corporation
4
 * All rights reserved.
5
 ***********************************************************************/
6
7
#ifdef HAVE_CONFIG_H
8
#include "config.h" // IWYU pragma: keep
9
#endif
10
11
#include "sysapi_util.h"     // for _TSS2_SYS_CONTEXT_BLOB, syscontext_cast
12
#include "tss2_common.h"     // for TSS2_RC, TSS2_SYS_RC_BAD_REFERENCE, TSS...
13
#include "tss2_mu.h"         // for Tss2_MU_UINT16_Marshal, Tss2_MU_UINT32_...
14
#include "tss2_sys.h"        // for TSS2_SYS_CONTEXT, TSS2L_SYS_AUTH_COMMAND
15
#include "tss2_tpm2_types.h" // for TPM2B_NONCE, TPM2B_ENCRYPTED_SECRET
16
17
TSS2_RC
18
Tss2_Sys_StartAuthSession_Prepare(TSS2_SYS_CONTEXT             *sysContext,
19
                                  TPMI_DH_OBJECT                tpmKey,
20
                                  TPMI_DH_ENTITY                bind,
21
                                  const TPM2B_NONCE            *nonceCaller,
22
                                  const TPM2B_ENCRYPTED_SECRET *encryptedSalt,
23
                                  TPM2_SE                       sessionType,
24
                                  const TPMT_SYM_DEF           *symmetric,
25
0
                                  TPMI_ALG_HASH                 authHash) {
26
0
    TSS2_SYS_CONTEXT_BLOB *ctx = syscontext_cast(sysContext);
27
0
    TSS2_RC                rval;
28
29
0
    if (!ctx || !symmetric)
30
0
        return TSS2_SYS_RC_BAD_REFERENCE;
31
32
0
    if (IsAlgorithmWeak(authHash, 0))
33
0
        return TSS2_SYS_RC_BAD_VALUE;
34
35
0
    rval = CommonPreparePrologue(ctx, TPM2_CC_StartAuthSession);
36
0
    if (rval)
37
0
        return rval;
38
39
0
    rval = Tss2_MU_UINT32_Marshal(tpmKey, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
40
0
    if (rval)
41
0
        return rval;
42
43
0
    rval = Tss2_MU_UINT32_Marshal(bind, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
44
0
    if (rval)
45
0
        return rval;
46
47
0
    if (!nonceCaller) {
48
0
        ctx->decryptNull = 1;
49
50
0
        rval = Tss2_MU_UINT16_Marshal(0, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
51
0
    } else {
52
53
0
        rval = Tss2_MU_TPM2B_NONCE_Marshal(nonceCaller, ctx->cmdBuffer, ctx->maxCmdSize,
54
0
                                           &ctx->nextData);
55
0
    }
56
57
0
    if (rval)
58
0
        return rval;
59
60
0
    if (!encryptedSalt) {
61
0
        rval = Tss2_MU_UINT16_Marshal(0, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
62
63
0
    } else {
64
65
0
        rval = Tss2_MU_TPM2B_ENCRYPTED_SECRET_Marshal(encryptedSalt, ctx->cmdBuffer,
66
0
                                                      ctx->maxCmdSize, &ctx->nextData);
67
0
    }
68
69
0
    if (rval)
70
0
        return rval;
71
72
0
    rval = Tss2_MU_UINT8_Marshal(sessionType, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
73
0
    if (rval)
74
0
        return rval;
75
76
0
    rval = Tss2_MU_TPMT_SYM_DEF_Marshal(symmetric, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
77
0
    if (rval)
78
0
        return rval;
79
80
0
    rval = Tss2_MU_UINT16_Marshal(authHash, ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData);
81
0
    if (rval)
82
0
        return rval;
83
84
0
    ctx->decryptAllowed = 1;
85
0
    ctx->encryptAllowed = 1;
86
0
    ctx->authAllowed = 1;
87
88
0
    return CommonPrepareEpilogue(ctx);
89
0
}
90
91
TSS2_RC
92
Tss2_Sys_StartAuthSession_Complete(TSS2_SYS_CONTEXT     *sysContext,
93
                                   TPMI_SH_AUTH_SESSION *sessionHandle,
94
0
                                   TPM2B_NONCE          *nonceTPM) {
95
0
    TSS2_SYS_CONTEXT_BLOB *ctx = syscontext_cast(sysContext);
96
0
    TSS2_RC                rval;
97
98
0
    if (!ctx)
99
0
        return TSS2_SYS_RC_BAD_REFERENCE;
100
101
0
    rval = Tss2_MU_UINT32_Unmarshal(ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData, sessionHandle);
102
0
    if (rval)
103
0
        return rval;
104
105
0
    rval = CommonComplete(ctx);
106
0
    if (rval)
107
0
        return rval;
108
109
0
    return Tss2_MU_TPM2B_NONCE_Unmarshal(ctx->cmdBuffer, ctx->maxCmdSize, &ctx->nextData, nonceTPM);
110
0
}
111
112
TSS2_RC
113
Tss2_Sys_StartAuthSession(TSS2_SYS_CONTEXT             *sysContext,
114
                          TPMI_DH_OBJECT                tpmKey,
115
                          TPMI_DH_ENTITY                bind,
116
                          TSS2L_SYS_AUTH_COMMAND const *cmdAuthsArray,
117
                          const TPM2B_NONCE            *nonceCaller,
118
                          const TPM2B_ENCRYPTED_SECRET *encryptedSalt,
119
                          TPM2_SE                       sessionType,
120
                          const TPMT_SYM_DEF           *symmetric,
121
                          TPMI_ALG_HASH                 authHash,
122
                          TPMI_SH_AUTH_SESSION         *sessionHandle,
123
                          TPM2B_NONCE                  *nonceTPM,
124
0
                          TSS2L_SYS_AUTH_RESPONSE      *rspAuthsArray) {
125
0
    TSS2_SYS_CONTEXT_BLOB *ctx = syscontext_cast(sysContext);
126
0
    TSS2_RC                rval;
127
128
0
    if (!symmetric)
129
0
        return TSS2_SYS_RC_BAD_REFERENCE;
130
131
0
    rval = Tss2_Sys_StartAuthSession_Prepare(sysContext, tpmKey, bind, nonceCaller, encryptedSalt,
132
0
                                             sessionType, symmetric, authHash);
133
0
    if (rval)
134
0
        return rval;
135
136
0
    rval = CommonOneCall(ctx, cmdAuthsArray, rspAuthsArray);
137
0
    if (rval)
138
0
        return rval;
139
140
0
    return Tss2_Sys_StartAuthSession_Complete(sysContext, sessionHandle, nonceTPM);
141
0
}