1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  */
5 
6 #ifndef TPM_LITE_TLCL_INTERNAL_H_
7 #define TPM_LITE_TLCL_INTERNAL_H_
8 
9 /*
10  * These numbers derive from adding the sizes of command fields as shown in the
11  * TPM commands manual.
12  */
13 #define kTpmRequestHeaderLength 10
14 #define kTpmResponseHeaderLength 10
15 #define kTpmReadInfoLength 12
16 #define kEncAuthLength 20
17 #define kPcrDigestLength 20
18 
19 
20 /*
21  * Conversion functions.  ToTpmTYPE puts a value of type TYPE into a TPM
22  * command buffer.  FromTpmTYPE gets a value of type TYPE from a TPM command
23  * buffer into a variable.
24  */
25 __attribute__((unused))
ToTpmUint32(uint8_t * buffer,uint32_t x)26 static inline void ToTpmUint32(uint8_t *buffer, uint32_t x) {
27   buffer[0] = (uint8_t)(x >> 24);
28   buffer[1] = (uint8_t)((x >> 16) & 0xff);
29   buffer[2] = (uint8_t)((x >> 8) & 0xff);
30   buffer[3] = (uint8_t)(x & 0xff);
31 }
32 
33 /*
34  * See comment for above function.
35  */
36 __attribute__((unused))
FromTpmUint32(const uint8_t * buffer,uint32_t * x)37 static inline void FromTpmUint32(const uint8_t *buffer, uint32_t *x) {
38   *x = ((buffer[0] << 24) |
39         (buffer[1] << 16) |
40         (buffer[2] << 8) |
41         buffer[3]);
42 }
43 
44 /*
45  * See comment for above function.
46  */
47 __attribute__((unused))
ToTpmUint16(uint8_t * buffer,uint16_t x)48 static inline void ToTpmUint16(uint8_t *buffer, uint16_t x) {
49   buffer[0] = (uint8_t)(x >> 8);
50   buffer[1] = (uint8_t)(x & 0xff);
51 }
52 
53 /*
54  * See comment for above function.
55  */
56 __attribute__((unused))
FromTpmUint16(const uint8_t * buffer,uint16_t * x)57 static inline void FromTpmUint16(const uint8_t *buffer, uint16_t *x) {
58   *x = (buffer[0] << 8) | buffer[1];
59 }
60 
61 #endif  /* TPM_LITE_TLCL_INTERNAL_H_ */
62