tpm2-tss 4.1.3
TPM Software stack 2.0 TCG spec compliant implementation
tss2_fapi.h
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*******************************************************************************
3 * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG
4 * All rights reserved.
5 *******************************************************************************/
6#ifndef TSS2_FAPI_H
7#define TSS2_FAPI_H
8
9#include <stddef.h>
10#include <stdint.h>
11
12#include "tss2_tcti.h"
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/* Type definitions */
19
20typedef struct FAPI_CONTEXT FAPI_CONTEXT;
21
22
23/* Defines for blob type of Fapi_GetEsysBlob */
24
25#define FAPI_ESYSBLOB_CONTEXTLOAD 1
26#define FAPI_ESYSBLOB_DESERIALIZE 2
27
28/* Context functions */
29
30TSS2_RC Fapi_Initialize(
31 FAPI_CONTEXT **context,
32 char const *uri);
33
34TSS2_RC Fapi_Initialize_Async(
35 FAPI_CONTEXT **context,
36 char const *uri);
37
38TSS2_RC Fapi_Initialize_Finish(
39 FAPI_CONTEXT **context);
40
41void Fapi_Finalize(
42 FAPI_CONTEXT **context);
43
44TSS2_RC Fapi_GetTcti(
45 FAPI_CONTEXT *context,
46 TSS2_TCTI_CONTEXT **tcti);
47
48void Fapi_Free(
49 void *ptr);
50
51#if defined(__linux__) || defined(__unix__) || defined(__APPLE__) || defined (__QNXNTO__) || defined (__VXWORKS__)
52#if defined (__VXWORKS__)
53#include <sys/poll.h>
54#else
55#include <poll.h>
56#endif
57typedef struct pollfd FAPI_POLL_HANDLE;
58#elif defined(_WIN32)
59#include <windows.h>
60typedef HANDLE FAPI_POLL_HANDLE;
61#else
62typedef void FAPI_POLL_HANDLE;
63#ifndef FAPI_SUPPRESS_POLL_WARNINGS
64#pragma message "Info: Platform not supported for FAPI_POLL_HANDLES"
65#endif
66#endif
67
68TSS2_RC Fapi_GetPollHandles(
69 FAPI_CONTEXT *context,
70 FAPI_POLL_HANDLE **handles,
71 size_t *num_handles);
72
73TSS2_RC Fapi_GetInfo(
74 FAPI_CONTEXT *context,
75 char **info);
76
77TSS2_RC Fapi_GetInfo_Async(
78 FAPI_CONTEXT *context);
79
80TSS2_RC Fapi_GetInfo_Finish(
81 FAPI_CONTEXT *context,
82 char **info);
83
84/* General functions */
85
86TSS2_RC Fapi_Provision(
87 FAPI_CONTEXT *context,
88 char const *authValueEh,
89 char const *authValueSh,
90 char const *authValueLockout);
91
92TSS2_RC Fapi_Provision_Async(
93 FAPI_CONTEXT *context,
94 char const *authValueEh,
95 char const *authValueSh,
96 char const *authValueLockout);
97
98TSS2_RC Fapi_Provision_Finish(
99 FAPI_CONTEXT *context);
100
101TSS2_RC Fapi_GetPlatformCertificates(
102 FAPI_CONTEXT *context,
103 uint8_t **certificates,
104 size_t *certificatesSize);
105
106TSS2_RC Fapi_GetPlatformCertificates_Async(
107 FAPI_CONTEXT *context);
108
109TSS2_RC Fapi_GetPlatformCertificates_Finish(
110 FAPI_CONTEXT *context,
111 uint8_t **certificates,
112 size_t *certificatesSize);
113
114TSS2_RC Fapi_GetRandom(
115 FAPI_CONTEXT *context,
116 size_t numBytes,
117 uint8_t **data);
118
119TSS2_RC Fapi_GetRandom_Async(
120 FAPI_CONTEXT *context,
121 size_t numBytes);
122
123TSS2_RC Fapi_GetRandom_Finish(
124 FAPI_CONTEXT *context,
125 uint8_t **data);
126
127TSS2_RC Fapi_Import(
128 FAPI_CONTEXT *context,
129 char const *path,
130 char const *importData);
131
132TSS2_RC Fapi_Import_Async(
133 FAPI_CONTEXT *context,
134 char const *path,
135 char const *importData);
136
137TSS2_RC Fapi_Import_Finish(
138 FAPI_CONTEXT *context);
139
140TSS2_RC Fapi_List(
141 FAPI_CONTEXT *context,
142 char const *searchPath,
143 char **pathList);
144
145TSS2_RC Fapi_List_Async(
146 FAPI_CONTEXT *context,
147 char const *searchPath);
148
149TSS2_RC Fapi_List_Finish(
150 FAPI_CONTEXT *context,
151 char **pathList);
152
153TSS2_RC Fapi_Delete(
154 FAPI_CONTEXT *context,
155 char const *path);
156
157TSS2_RC Fapi_Delete_Async(
158 FAPI_CONTEXT *context,
159 char const *path);
160
161TSS2_RC Fapi_Delete_Finish(
162 FAPI_CONTEXT *context);
163
164TSS2_RC Fapi_GetEsysBlob(
165 FAPI_CONTEXT *context,
166 char const *path,
167 uint8_t *type,
168 uint8_t **data,
169 size_t *length);
170
171TSS2_RC Fapi_GetEsysBlob_Async(
172 FAPI_CONTEXT *context,
173 char const *path);
174
175TSS2_RC Fapi_GetEsysBlob_Finish(
176 FAPI_CONTEXT *context,
177 uint8_t *type,
178 uint8_t **data,
179 size_t *length);
180
181TSS2_RC Fapi_ChangeAuth(
182 FAPI_CONTEXT *context,
183 char const *entityPath,
184 char const *authValue);
185
186TSS2_RC Fapi_ChangeAuth_Async(
187 FAPI_CONTEXT *context,
188 char const *entityPath,
189 char const *authValue);
190
191TSS2_RC Fapi_ChangeAuth_Finish(
192 FAPI_CONTEXT *context);
193
194TSS2_RC Fapi_SetDescription(
195 FAPI_CONTEXT *context,
196 char const *path,
197 char const *description);
198
199TSS2_RC Fapi_SetDescription_Async(
200 FAPI_CONTEXT *context,
201 char const *path,
202 char const *description);
203
204TSS2_RC Fapi_SetDescription_Finish(
205 FAPI_CONTEXT *context);
206
207TSS2_RC Fapi_GetDescription(
208 FAPI_CONTEXT *context,
209 char const *path,
210 char **description);
211
212TSS2_RC Fapi_GetDescription_Async(
213 FAPI_CONTEXT *context,
214 char const *path);
215
216TSS2_RC Fapi_GetDescription_Finish(
217 FAPI_CONTEXT *context,
218 char **description);
219
220TSS2_RC Fapi_SetAppData(
221 FAPI_CONTEXT *context,
222 char const *path,
223 uint8_t const *appData,
224 size_t appDataSize);
225
226TSS2_RC Fapi_SetAppData_Async(
227 FAPI_CONTEXT *context,
228 char const *path,
229 uint8_t const *appData,
230 size_t appDataSize);
231
232TSS2_RC Fapi_SetAppData_Finish(
233 FAPI_CONTEXT *context);
234
235TSS2_RC Fapi_GetAppData(
236 FAPI_CONTEXT *context,
237 char const *path,
238 uint8_t **appData,
239 size_t *appDataSize);
240
241TSS2_RC Fapi_GetAppData_Async(
242 FAPI_CONTEXT *context,
243 char const *path);
244
245TSS2_RC Fapi_GetAppData_Finish(
246 FAPI_CONTEXT *context,
247 uint8_t **appData,
248 size_t *appDataSize);
249
250TSS2_RC Fapi_GetTpmBlobs(
251 FAPI_CONTEXT *context,
252 char const *path,
253 uint8_t **tpm2bPublic,
254 size_t *tpm2bPublicSize,
255 uint8_t **tpm2bPrivate,
256 size_t *tpm2bPrivateSize,
257 char **policy);
258
259TSS2_RC Fapi_GetTpmBlobs_Async(
260 FAPI_CONTEXT *context,
261 char const *path);
262
263TSS2_RC Fapi_GetTpmBlobs_Finish(
264 FAPI_CONTEXT *context,
265 uint8_t **tpm2bPublic,
266 size_t *tpm2bPublicSize,
267 uint8_t **tpm2bPrivate,
268 size_t *tpm2bPrivateSize,
269 char **policy);
270
271/* Key functions */
272
273TSS2_RC Fapi_CreateKey(
274 FAPI_CONTEXT *context,
275 char const *path,
276 char const *type,
277 char const *policyPath,
278 char const *authValue);
279
280TSS2_RC Fapi_CreateKey_Async(
281 FAPI_CONTEXT *context,
282 char const *path,
283 char const *type,
284 char const *policyPath,
285 char const *authValue);
286
287TSS2_RC Fapi_CreateKey_Finish(
288 FAPI_CONTEXT *context);
289
290TSS2_RC Fapi_Sign(
291 FAPI_CONTEXT *context,
292 char const *keyPath,
293 char const *padding,
294 uint8_t const *digest,
295 size_t digestSize,
296 uint8_t **signature,
297 size_t *signatureSize,
298 char **publicKey,
299 char **certificate);
300
301TSS2_RC Fapi_Sign_Async(
302 FAPI_CONTEXT *context,
303 char const *keyPath,
304 char const *padding,
305 uint8_t const *digest,
306 size_t digestSize);
307
308TSS2_RC Fapi_Sign_Finish(
309 FAPI_CONTEXT *context,
310 uint8_t **signature,
311 size_t *signatureSize,
312 char **publicKey,
313 char **certificate);
314
315TSS2_RC Fapi_VerifySignature(
316 FAPI_CONTEXT *context,
317 char const *keyPath,
318 uint8_t const *digest,
319 size_t digestSize,
320 uint8_t const *signature,
321 size_t signatureSize);
322
323TSS2_RC Fapi_VerifySignature_Async(
324 FAPI_CONTEXT *context,
325 char const *keyPath,
326 uint8_t const *digest,
327 size_t digestSize,
328 uint8_t const *signature,
329 size_t signatureSize);
330
331TSS2_RC Fapi_VerifySignature_Finish(
332 FAPI_CONTEXT *context);
333
334TSS2_RC Fapi_Encrypt(
335 FAPI_CONTEXT *context,
336 char const *keyPath,
337 uint8_t const *plainText,
338 size_t plainTextSize,
339 uint8_t **cipherText,
340 size_t *cipherTextSize);
341
342TSS2_RC Fapi_Encrypt_Async(
343 FAPI_CONTEXT *context,
344 char const *keyPath,
345 uint8_t const *plainText,
346 size_t plainTextSize);
347
348TSS2_RC Fapi_Encrypt_Finish(
349 FAPI_CONTEXT *context,
350 uint8_t **cipherText,
351 size_t *cipherTextSize );
352
353TSS2_RC Fapi_Decrypt(
354 FAPI_CONTEXT *context,
355 char const *keyPath,
356 uint8_t const *cipherText,
357 size_t cipherTextSize,
358 uint8_t **plainText,
359 size_t *plainTextSize);
360
361TSS2_RC Fapi_Decrypt_Async(
362 FAPI_CONTEXT *context,
363 char const *keyPath,
364 uint8_t const *cipherText,
365 size_t cipherTextSize);
366
367TSS2_RC Fapi_Decrypt_Finish(
368 FAPI_CONTEXT *context,
369 uint8_t **plainText,
370 size_t *plainTextSize);
371
372TSS2_RC Fapi_SetCertificate(
373 FAPI_CONTEXT *context,
374 char const *path,
375 char const *x509certData);
376
377TSS2_RC Fapi_SetCertificate_Async(
378 FAPI_CONTEXT *context,
379 char const *path,
380 char const *x509certData);
381
382TSS2_RC Fapi_SetCertificate_Finish(
383 FAPI_CONTEXT *context);
384
385TSS2_RC Fapi_GetCertificate(
386 FAPI_CONTEXT *context,
387 char const *path,
388 char **x509certData);
389
390TSS2_RC Fapi_GetCertificate_Async(
391 FAPI_CONTEXT *context,
392 char const *path);
393
394TSS2_RC Fapi_GetCertificate_Finish(
395 FAPI_CONTEXT *context,
396 char **x509certData);
397
398TSS2_RC Fapi_ExportKey(
399 FAPI_CONTEXT *context,
400 char const *pathOfKeyToDuplicate,
401 char const *pathToPublicKeyOfNewParent,
402 char **exportedData);
403
404TSS2_RC Fapi_ExportKey_Async(
405 FAPI_CONTEXT *context,
406 char const *pathOfKeyToDuplicate,
407 char const *pathToPublicKeyOfNewParent);
408
409TSS2_RC Fapi_ExportKey_Finish(
410 FAPI_CONTEXT *context,
411 char **exportedData);
412
413/* Seal functions */
414
415TSS2_RC Fapi_CreateSeal(
416 FAPI_CONTEXT *context,
417 char const *path,
418 char const *type,
419 size_t size,
420 char const *policyPath,
421 char const *authValue,
422 uint8_t const *data);
423
424TSS2_RC Fapi_CreateSeal_Async(
425 FAPI_CONTEXT *context,
426 char const *path,
427 char const *type,
428 size_t size,
429 char const *policyPath,
430 char const *authValue,
431 uint8_t const *data);
432
433TSS2_RC Fapi_CreateSeal_Finish(
434 FAPI_CONTEXT *context);
435
436TSS2_RC Fapi_Unseal(
437 FAPI_CONTEXT *context,
438 char const *path,
439 uint8_t **data,
440 size_t *size);
441
442TSS2_RC Fapi_Unseal_Async(
443 FAPI_CONTEXT *context,
444 char const *path);
445
446TSS2_RC Fapi_Unseal_Finish(
447 FAPI_CONTEXT *context,
448 uint8_t **data,
449 size_t *size);
450
451/* Policy functions */
452
453TSS2_RC Fapi_ExportPolicy(
454 FAPI_CONTEXT *context,
455 char const *path,
456 char **jsonPolicy);
457
458TSS2_RC Fapi_ExportPolicy_Async(
459 FAPI_CONTEXT *context,
460 char const *path);
461
462TSS2_RC Fapi_ExportPolicy_Finish(
463 FAPI_CONTEXT *context,
464 char **jsonPolicy);
465
466TSS2_RC Fapi_AuthorizePolicy(
467 FAPI_CONTEXT *context,
468 char const *policyPath,
469 char const *keyPath,
470 uint8_t const *policyRef,
471 size_t policyRefSize);
472
473TSS2_RC Fapi_AuthorizePolicy_Async(
474 FAPI_CONTEXT *context,
475 char const *policyPath,
476 char const *keyPath,
477 uint8_t const *policyRef,
478 size_t policyRefSize);
479
480TSS2_RC Fapi_AuthorizePolicy_Finish(
481 FAPI_CONTEXT *context);
482
483TSS2_RC Fapi_WriteAuthorizeNv(
484 FAPI_CONTEXT *context,
485 char const *nvPath,
486 char const *policyPath);
487
488TSS2_RC Fapi_WriteAuthorizeNv_Async(
489 FAPI_CONTEXT *context,
490 char const *nvPath,
491 char const *policyPath);
492
493TSS2_RC Fapi_WriteAuthorizeNv_Finish(
494 FAPI_CONTEXT *context);
495
496/* Attestation functions */
497
498TSS2_RC Fapi_PcrRead(
499 FAPI_CONTEXT *context,
500 uint32_t pcrIndex,
501 uint8_t **pcrValue,
502 size_t *pcrValueSize,
503 char **pcrLog);
504
505TSS2_RC Fapi_PcrRead_Async(
506 FAPI_CONTEXT *context,
507 uint32_t pcrIndex);
508
509TSS2_RC Fapi_PcrRead_Finish(
510 FAPI_CONTEXT *context,
511 uint8_t **pcrValue,
512 size_t *pcrValueSize,
513 char **pcrLog);
514
515TSS2_RC Fapi_PcrExtend(
516 FAPI_CONTEXT *context,
517 uint32_t pcr,
518 uint8_t const *data,
519 size_t dataSize,
520 char const *logData);
521
522TSS2_RC Fapi_PcrExtend_Async(
523 FAPI_CONTEXT *context,
524 uint32_t pcr,
525 uint8_t const *data,
526 size_t dataSize,
527 char const *logData);
528
529TSS2_RC Fapi_PcrExtend_Finish(
530 FAPI_CONTEXT *context);
531
532
533TSS2_RC Fapi_Quote(
534 FAPI_CONTEXT *context,
535 uint32_t *pcrList,
536 size_t pcrListSize,
537 char const *keyPath,
538 char const *quoteType,
539 uint8_t const *qualifyingData,
540 size_t qualifyingDataSize,
541 char **quoteInfo,
542 uint8_t **signature,
543 size_t *signatureSize,
544 char **pcrLog,
545 char **certificate);
546
547TSS2_RC Fapi_Quote_Async(
548 FAPI_CONTEXT *context,
549 uint32_t *pcrList,
550 size_t pcrListSize,
551 char const *keyPath,
552 char const *quoteType,
553 uint8_t const *qualifyingData,
554 size_t qualifyingDataSize);
555
556TSS2_RC Fapi_Quote_Finish(
557 FAPI_CONTEXT *context,
558 char **quoteInfo,
559 uint8_t **signature,
560 size_t *signatureSize,
561 char **pcrLog,
562 char **certificate);
563
564TSS2_RC Fapi_VerifyQuote(
565 FAPI_CONTEXT *context,
566 char const *publicKeyPath,
567 uint8_t const *qualifyingData,
568 size_t qualifyingDataSize,
569 char const *quoteInfo,
570 uint8_t const *signature,
571 size_t signatureSize,
572 char const *pcrLog);
573
574TSS2_RC Fapi_VerifyQuote_Async(
575 FAPI_CONTEXT *context,
576 char const *publicKeyPath,
577 uint8_t const *qualifyingData,
578 size_t qualifyingDataSize,
579 char const *quoteInfo,
580 uint8_t const *signature,
581 size_t signatureSize,
582 char const *pcrLog);
583
584TSS2_RC Fapi_VerifyQuote_Finish(
585 FAPI_CONTEXT *context);
586
587/* NV functions */
588
589TSS2_RC Fapi_CreateNv(
590 FAPI_CONTEXT *context,
591 char const *path,
592 char const *type,
593 size_t size,
594 char const *policyPath,
595 char const *authValue);
596
597TSS2_RC Fapi_CreateNv_Async(
598 FAPI_CONTEXT *context,
599 char const *path,
600 char const *type,
601 size_t size,
602 char const *policyPath,
603 char const *authValue);
604
605TSS2_RC Fapi_CreateNv_Finish(
606 FAPI_CONTEXT *context);
607
608TSS2_RC Fapi_NvRead(
609 FAPI_CONTEXT *context,
610 char const *path,
611 uint8_t **data,
612 size_t *size,
613 char **logData);
614
615TSS2_RC Fapi_NvRead_Async(
616 FAPI_CONTEXT *context,
617 char const *path);
618
619TSS2_RC Fapi_NvRead_Finish(
620 FAPI_CONTEXT *context,
621 uint8_t **data,
622 size_t *size,
623 char **logData);
624
625TSS2_RC Fapi_NvWrite(
626 FAPI_CONTEXT *context,
627 char const *path,
628 uint8_t const *data,
629 size_t size);
630
631TSS2_RC Fapi_NvWrite_Async(
632 FAPI_CONTEXT *context,
633 char const *path,
634 uint8_t const *data,
635 size_t size);
636
637TSS2_RC Fapi_NvWrite_Finish(
638 FAPI_CONTEXT *context);
639
640TSS2_RC Fapi_NvExtend(
641 FAPI_CONTEXT *context,
642 char const *path,
643 uint8_t const *data,
644 size_t size,
645 char const *logData);
646
647TSS2_RC Fapi_NvExtend_Async(
648 FAPI_CONTEXT *context,
649 char const *path,
650 uint8_t const *data,
651 size_t size,
652 char const *logData);
653
654TSS2_RC Fapi_NvExtend_Finish(
655 FAPI_CONTEXT *context);
656
657TSS2_RC Fapi_NvIncrement(
658 FAPI_CONTEXT *context,
659 char const *path);
660
661TSS2_RC Fapi_NvIncrement_Async(
662 FAPI_CONTEXT *context,
663 char const *path);
664
665TSS2_RC Fapi_NvIncrement_Finish(
666 FAPI_CONTEXT *context);
667
668TSS2_RC Fapi_NvSetBits(
669 FAPI_CONTEXT *context,
670 char const *path,
671 uint64_t bitmap);
672
673TSS2_RC Fapi_NvSetBits_Async(
674 FAPI_CONTEXT *context,
675 char const *path,
676 uint64_t bitmap);
677
678TSS2_RC Fapi_NvSetBits_Finish(
679 FAPI_CONTEXT *context);
680
681typedef TSS2_RC (*Fapi_CB_Auth)(
682 char const *objectPath,
683 char const *description,
684 char const **auth,
685 void *userData);
686
687TSS2_RC Fapi_SetAuthCB(
688 FAPI_CONTEXT *context,
689 Fapi_CB_Auth callback,
690 void *userData);
691
692typedef TSS2_RC (*Fapi_CB_Branch)(
693 char const *objectPath,
694 char const *description,
695 char const **branchNames,
696 size_t numBranches,
697 size_t *selectedBranch,
698 void *userData);
699
700TSS2_RC Fapi_SetBranchCB(
701 FAPI_CONTEXT *context,
702 Fapi_CB_Branch callback,
703 void *userData);
704
705typedef TSS2_RC (*Fapi_CB_Sign)(
706 char const *objectPath,
707 char const *description,
708 char const *publicKey,
709 char const *publicKeyHint,
710 uint32_t hashAlg,
711 uint8_t const *dataToSign,
712 size_t dataToSignSize,
713 uint8_t const **signature,
714 size_t *signatureSize,
715 void *userData);
716
717TSS2_RC Fapi_SetSignCB(
718 FAPI_CONTEXT *context,
719 Fapi_CB_Sign callback,
720 void *userData);
721
722typedef TSS2_RC (*Fapi_CB_PolicyAction)(
723 char const *objectPath,
724 char const *action,
725 void *userData);
726
727TSS2_RC Fapi_SetPolicyActionCB(
728 FAPI_CONTEXT *context,
729 Fapi_CB_PolicyAction callback,
730 void *userData);
731
732#ifdef __cplusplus
733}
734#endif
735
736#endif /* TSS2_FAPI_H */
Definition fapi_int.h:1164