Kees Cook | 41282f1 | 2012-08-01 15:32:11 -0700 | [diff] [blame] | 1 | /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 2 | * Use of this source code is governed by a BSD-style license that can be |
| 3 | * found in the LICENSE file. |
| 4 | */ |
| 5 | |
Joel Kitching | 0b3ce46 | 2019-06-14 14:52:41 +0800 | [diff] [blame] | 6 | #include "2sysincludes.h" |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 7 | #include "tlcl.h" |
| 8 | #include "tlcl_internal.h" |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 9 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 10 | uint32_t TlclLibInit(void) |
| 11 | { |
Joel Kitching | 28eeded | 2020-07-06 13:58:11 +0800 | [diff] [blame] | 12 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 13 | } |
| 14 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 15 | uint32_t TlclLibClose(void) |
| 16 | { |
| 17 | return TPM_SUCCESS; |
Duncan Laurie | ee32751 | 2013-01-11 10:32:29 -0800 | [diff] [blame] | 18 | } |
| 19 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 20 | uint32_t TlclStartup(void) |
| 21 | { |
| 22 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 23 | } |
| 24 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 25 | uint32_t TlclSaveState(void) |
| 26 | { |
| 27 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 28 | } |
| 29 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 30 | uint32_t TlclResume(void) |
| 31 | { |
| 32 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 33 | } |
| 34 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 35 | uint32_t TlclSelfTestFull(void) |
| 36 | { |
| 37 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 38 | } |
| 39 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 40 | uint32_t TlclContinueSelfTest(void) |
| 41 | { |
| 42 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 43 | } |
| 44 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 45 | uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) |
| 46 | { |
| 47 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 48 | } |
| 49 | |
Joel Kitching | 33655b3 | 2019-08-29 14:43:34 +0800 | [diff] [blame] | 50 | uint32_t TlclDefineSpaceEx(const uint8_t* owner_auth, uint32_t owner_auth_size, |
| 51 | uint32_t index, uint32_t perm, uint32_t size, |
| 52 | const void* auth_policy, uint32_t auth_policy_size) |
| 53 | { |
| 54 | return TPM_SUCCESS; |
| 55 | } |
| 56 | |
| 57 | #ifdef CHROMEOS_ENVIRONMENT |
| 58 | |
Joel Kitching | 595108c | 2019-08-23 19:12:35 +0800 | [diff] [blame] | 59 | uint32_t TlclUndefineSpace(uint32_t index) |
| 60 | { |
| 61 | return TPM_SUCCESS; |
| 62 | } |
| 63 | |
Joel Kitching | 33655b3 | 2019-08-29 14:43:34 +0800 | [diff] [blame] | 64 | #endif /* CHROMEOS_ENVIRONMENT */ |
| 65 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 66 | uint32_t TlclWrite(uint32_t index, const void* data, uint32_t length) |
| 67 | { |
| 68 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 69 | } |
| 70 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 71 | uint32_t TlclRead(uint32_t index, void* data, uint32_t length) |
| 72 | { |
Randall Spangler | 664096b | 2016-10-13 16:16:41 -0700 | [diff] [blame] | 73 | memset(data, '\0', length); |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 74 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 75 | } |
| 76 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 77 | uint32_t TlclPCRRead(uint32_t index, void* data, uint32_t length) |
| 78 | { |
Randall Spangler | 664096b | 2016-10-13 16:16:41 -0700 | [diff] [blame] | 79 | memset(data, '\0', length); |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 80 | return TPM_SUCCESS; |
Kees Cook | 41282f1 | 2012-08-01 15:32:11 -0700 | [diff] [blame] | 81 | } |
| 82 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 83 | uint32_t TlclWriteLock(uint32_t index) |
| 84 | { |
| 85 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 86 | } |
| 87 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 88 | uint32_t TlclReadLock(uint32_t index) |
| 89 | { |
| 90 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 91 | } |
| 92 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 93 | uint32_t TlclAssertPhysicalPresence(void) |
| 94 | { |
| 95 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 96 | } |
| 97 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 98 | uint32_t TlclPhysicalPresenceCMDEnable(void) |
| 99 | { |
| 100 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 101 | } |
| 102 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 103 | uint32_t TlclFinalizePhysicalPresence(void) |
| 104 | { |
| 105 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 106 | } |
| 107 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 108 | uint32_t TlclAssertPhysicalPresenceResult(void) |
| 109 | { |
| 110 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 111 | } |
| 112 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 113 | uint32_t TlclLockPhysicalPresence(void) |
| 114 | { |
| 115 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 116 | } |
| 117 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 118 | uint32_t TlclSetNvLocked(void) |
| 119 | { |
| 120 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 121 | } |
| 122 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 123 | int TlclIsOwned(void) |
| 124 | { |
| 125 | return 0; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 126 | } |
| 127 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 128 | uint32_t TlclForceClear(void) |
| 129 | { |
| 130 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 131 | } |
| 132 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 133 | uint32_t TlclSetEnable(void) |
| 134 | { |
| 135 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 136 | } |
| 137 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 138 | uint32_t TlclClearEnable(void) |
| 139 | { |
| 140 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 141 | } |
| 142 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 143 | uint32_t TlclSetDeactivated(uint8_t flag) |
| 144 | { |
| 145 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 146 | } |
| 147 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 148 | uint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS* pflags) |
| 149 | { |
Randall Spangler | 664096b | 2016-10-13 16:16:41 -0700 | [diff] [blame] | 150 | memset(pflags, '\0', sizeof(*pflags)); |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 151 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 152 | } |
| 153 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 154 | uint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS* vflags) |
| 155 | { |
Randall Spangler | 664096b | 2016-10-13 16:16:41 -0700 | [diff] [blame] | 156 | memset(vflags, '\0', sizeof(*vflags)); |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 157 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 158 | } |
| 159 | |
| 160 | uint32_t TlclGetFlags(uint8_t* disable, |
Joel Kitching | 9ad8a41 | 2018-08-02 16:21:17 +0800 | [diff] [blame] | 161 | uint8_t* deactivated, |
| 162 | uint8_t *nvlocked) |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 163 | { |
| 164 | *disable = 0; |
| 165 | *deactivated = 0; |
| 166 | *nvlocked = 0; |
| 167 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 168 | } |
| 169 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 170 | uint32_t TlclSetGlobalLock(void) |
| 171 | { |
| 172 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 173 | } |
| 174 | |
| 175 | uint32_t TlclExtend(int pcr_num, const uint8_t* in_digest, |
Joel Kitching | 9ad8a41 | 2018-08-02 16:21:17 +0800 | [diff] [blame] | 176 | uint8_t* out_digest) |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 177 | { |
Randall Spangler | 664096b | 2016-10-13 16:16:41 -0700 | [diff] [blame] | 178 | memcpy(out_digest, in_digest, kPcrDigestLength); |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 179 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 180 | } |
| 181 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 182 | uint32_t TlclGetPermissions(uint32_t index, uint32_t* permissions) |
| 183 | { |
| 184 | *permissions = 0; |
| 185 | return TPM_SUCCESS; |
Che-Liang Chiou | 8511f78 | 2011-04-22 16:01:38 +0800 | [diff] [blame] | 186 | } |
Kees Cook | 41282f1 | 2012-08-01 15:32:11 -0700 | [diff] [blame] | 187 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 188 | uint32_t TlclGetOwnership(uint8_t* owned) |
| 189 | { |
| 190 | *owned = 0; |
| 191 | return TPM_SUCCESS; |
Kees Cook | 41282f1 | 2012-08-01 15:32:11 -0700 | [diff] [blame] | 192 | } |
| 193 | |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 194 | uint32_t TlclGetRandom(uint8_t* data, uint32_t length, uint32_t *size) |
| 195 | { |
| 196 | *size = length; |
| 197 | /* http://dilbert.com/strips/comic/2001-10-25/ */ |
Randall Spangler | 664096b | 2016-10-13 16:16:41 -0700 | [diff] [blame] | 198 | memset(data, '\x9', *size); |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 199 | return TPM_SUCCESS; |
Kees Cook | 41282f1 | 2012-08-01 15:32:11 -0700 | [diff] [blame] | 200 | } |
Duncan Laurie | 416bdc6 | 2013-05-06 15:13:10 -0700 | [diff] [blame] | 201 | |
Andrey Pronin | 3b80572 | 2017-10-06 20:01:53 -0700 | [diff] [blame] | 202 | uint32_t TlclGetVersion(uint32_t* vendor, uint64_t* firmware_version, |
Joel Kitching | 9ad8a41 | 2018-08-02 16:21:17 +0800 | [diff] [blame] | 203 | uint8_t* vendor_specific_buf, |
| 204 | size_t* vendor_specific_buf_size) |
Mattias Nissler | 2a7e9b8 | 2017-07-10 13:46:20 +0200 | [diff] [blame] | 205 | { |
| 206 | *vendor = 0x4e4f4e45; |
| 207 | *firmware_version = 0x1; |
Andrey Pronin | 3b80572 | 2017-10-06 20:01:53 -0700 | [diff] [blame] | 208 | if (vendor_specific_buf_size) { |
| 209 | *vendor_specific_buf_size = 0; |
| 210 | } |
Mattias Nissler | 2a7e9b8 | 2017-07-10 13:46:20 +0200 | [diff] [blame] | 211 | return TPM_SUCCESS; |
| 212 | } |
| 213 | |
Duncan Laurie | 416bdc6 | 2013-05-06 15:13:10 -0700 | [diff] [blame] | 214 | int TlclPacketSize(const uint8_t* packet) |
| 215 | { |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 216 | uint32_t size; |
| 217 | FromTpmUint32(packet + sizeof(uint16_t), &size); |
| 218 | return (int) size; |
Duncan Laurie | 416bdc6 | 2013-05-06 15:13:10 -0700 | [diff] [blame] | 219 | } |
| 220 | |
| 221 | uint32_t TlclSendReceive(const uint8_t* request, uint8_t* response, |
Joel Kitching | 9ad8a41 | 2018-08-02 16:21:17 +0800 | [diff] [blame] | 222 | int max_length) |
Duncan Laurie | 416bdc6 | 2013-05-06 15:13:10 -0700 | [diff] [blame] | 223 | { |
Randall Spangler | fb26715 | 2016-10-11 15:28:16 -0700 | [diff] [blame] | 224 | return TPM_SUCCESS; |
Duncan Laurie | 416bdc6 | 2013-05-06 15:13:10 -0700 | [diff] [blame] | 225 | } |
Mattias Nissler | b2b3970 | 2017-07-07 10:26:43 +0200 | [diff] [blame] | 226 | |
| 227 | uint32_t TlclIFXFieldUpgradeInfo(TPM_IFX_FIELDUPGRADEINFO* info) |
| 228 | { |
| 229 | memset(info, 0, sizeof(*info)); |
| 230 | return TPM_SUCCESS; |
| 231 | } |