Use of TPM 2.0 private keys for signatures via tpm plugin
[strongswan.git] / src / libtpmtss / tpm_tss_quote_info.h
1 /*
2 * Copyright (C) 2016 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup tpm_tss_quote_info tpm_tss_quote_info
18 * @{ @ingroup libtpmtss
19 */
20
21 #ifndef TPM_TSS_QUOTE_INFO_H_
22 #define TPM_TSS_QUOTE_INFO_H_
23
24 #include <library.h>
25
26 #include <crypto/hashers/hasher.h>
27
28 typedef enum tpm_quote_mode_t tpm_quote_mode_t;
29 typedef struct tpm_tss_quote_info_t tpm_tss_quote_info_t;
30 typedef struct tpm_tss_pcr_composite_t tpm_tss_pcr_composite_t;
31
32 /**
33 * TPM Quote Modes
34 */
35 enum tpm_quote_mode_t {
36 TPM_QUOTE_NONE,
37 TPM_QUOTE,
38 TPM_QUOTE2,
39 TPM_QUOTE2_VERSION_INFO,
40 TPM_QUOTE_TPM2
41 };
42
43 struct tpm_tss_pcr_composite_t {
44
45 /**
46 * Bit map of selected PCRs
47 */
48 chunk_t pcr_select;
49
50 /**
51 * Array of selected PCRs
52 */
53 chunk_t pcr_composite;
54
55 };
56
57 /**
58 * TPM Quote Information needed to verify the Quote Signature
59 */
60 struct tpm_tss_quote_info_t {
61
62 /**
63 * Get TPM Quote Mode
64 *
65 * @return TPM Quote Mode
66 */
67 tpm_quote_mode_t (*get_quote_mode)(tpm_tss_quote_info_t *this);
68
69 /**
70 * Get PCR Composite digest algorithm
71 *
72 * @return PCR Composite digest algorithm
73 */
74 hash_algorithm_t (*get_pcr_digest_alg)(tpm_tss_quote_info_t *this);
75
76 /**
77 * Get PCR Composite digest
78 *
79 * @return PCR Composite digest
80 */
81 chunk_t (*get_pcr_digest)(tpm_tss_quote_info_t *this);
82
83 /**
84 * Get TPM Quote Info digest, the basis of the TPM Quote Singature
85 *
86 * @param nonce Derived from the Diffie-Hellman exchange
87 * @param composite PCR Composite as computed by IMV
88 * @param quoted Encoded TPM Quote
89 * @return TRUE if TPM Quote was successfully constructed
90 */
91 bool (*get_quote)(tpm_tss_quote_info_t *this, chunk_t nonce,
92 tpm_tss_pcr_composite_t *composite,
93 chunk_t *quoted);
94
95 /**
96 * Set TPM version info (needed for TPM 1.2)
97 *
98 * @param version_info TPM 1.2 version info
99 */
100 void (*set_version_info)(tpm_tss_quote_info_t *this, chunk_t version_info);
101
102 /**
103 * Get TPM 2.0 version info (needed for TPM 2.0)
104 *
105 * @return TPM 2.0 firmwareVersioin
106 */
107 chunk_t (*get_version_info)(tpm_tss_quote_info_t *this);
108
109 /**
110 * Set TPM 2.0 info parameters (needed for TPM 2.0)
111 *
112 * @param qualified_signer TPM 2.0 qualifiedSigner
113 * @param clock_info TPM 2.0 clockInfo
114 * @param pcr_select TPM 2.0 pcrSelect
115 */
116 void (*set_tpm2_info)(tpm_tss_quote_info_t *this, chunk_t qualified_signer,
117 chunk_t clock_info, chunk_t pcr_select);
118
119
120 /**
121 * Get TPM 2.0 info parameters (needed for TPM 2.0)
122 *
123 * @param qualified_signer TPM 2.0 qualifiedSigner
124 * @param clock_info TPM 2.0 clockInfo
125 * @param pcr_select TPM 2.0 pcrSelect
126 */
127 void (*get_tpm2_info)(tpm_tss_quote_info_t *this, chunk_t *qualified_signer,
128 chunk_t *clock_info, chunk_t *pcr_select);
129
130 /**
131 * Get reference to Quote Info object.
132 */
133 tpm_tss_quote_info_t* (*get_ref)(tpm_tss_quote_info_t *this);
134
135 /**
136 * Destroy a tpm_tss_quote_info_t.
137 */
138 void (*destroy)(tpm_tss_quote_info_t *this);
139 };
140
141 /**
142 * Create a tpm_tss_quote_info instance.
143 *
144 * @param quote_mode TPM Quote mode
145 * @param pcr_digest_alg PCR Composite digest algorithm
146 * @param pcr_digest PCR Composite digest
147 */
148 tpm_tss_quote_info_t *tpm_tss_quote_info_create(tpm_quote_mode_t quote_mode,
149 hash_algorithm_t pcr_digest_alg, chunk_t pcr_digest);
150
151 #endif /** TPM_TSS_QUOTE_INFO_H_ @}*/