tss2-dlopen-fapi.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. /* SPDX-License-Identifier: BSD-2-Clause */
  2. /*******************************************************************************
  3. * Copyright 2021, Fraunhofer SIT
  4. * All rights reserved.
  5. *******************************************************************************/
  6. /**
  7. * The purpose of this file is to copy it into your project and
  8. * include it during compilation if you don't want to link against
  9. * libtss2-fapi at compile time.
  10. * It will attempt to load libtss2-fapi.so during runtime.
  11. * It will either work similarly to directly linking to libtss2-fapi.so
  12. * at compile-time or return a NOT_IMPLEMENTED error.
  13. *
  14. * For new versions of this file, please check:
  15. * http://github.com/tpm2-software/tpm2-tss/tss2-dlopen
  16. */
  17. #include <dlfcn.h>
  18. #include <stdio.h>
  19. #include <tss2/tss2_fapi.h>
  20. #define str(s) xstr(s)
  21. #define xstr(s) #s
  22. #ifdef ENABLE_WARN
  23. #define WARN(str, ...) do { fprintf(stderr, "WARNING: " str "\n", ## __VA_ARGS__); } while (0)
  24. #else /* ENABLE_WARN */
  25. #define WARN(...) do { } while (0)
  26. #endif /* ENABLE_WARN */
  27. #define LIB "libtss2-fapi.so.1"
  28. static void *dlhandle = NULL;
  29. static TSS2_RC
  30. init_dlhandle(void)
  31. {
  32. if (dlhandle)
  33. return TSS2_RC_SUCCESS;
  34. dlhandle = dlopen(LIB, RTLD_NOW | RTLD_LOCAL);
  35. if (!dlhandle) {
  36. WARN("Library " LIB " not found: %s.", dlerror());
  37. return TSS2_FAPI_RC_NOT_IMPLEMENTED;
  38. }
  39. return TSS2_RC_SUCCESS;
  40. }
  41. TSS2_RC
  42. Fapi_Initialize(
  43. FAPI_CONTEXT **context,
  44. char const *uri)
  45. {
  46. if (init_dlhandle() != TSS2_RC_SUCCESS)
  47. return TSS2_FAPI_RC_NOT_IMPLEMENTED;
  48. static TSS2_RC (*sym) (FAPI_CONTEXT **context, char const *uri) = NULL;
  49. if (!sym)
  50. sym = dlsym(dlhandle, "Fapi_Initialize");
  51. if (!sym) {
  52. WARN("Function Fapi_Initialize not found.");
  53. return TSS2_FAPI_RC_NOT_IMPLEMENTED;
  54. }
  55. return sym(context, uri);
  56. }
  57. TSS2_RC
  58. Fapi_Initialize_Async(
  59. FAPI_CONTEXT **context,
  60. char const *uri)
  61. {
  62. if (init_dlhandle() != TSS2_RC_SUCCESS)
  63. return TSS2_FAPI_RC_NOT_IMPLEMENTED;
  64. static TSS2_RC (*sym) (FAPI_CONTEXT **context, char const *uri) = NULL;
  65. if (!sym)
  66. sym = dlsym(dlhandle, "Fapi_Initialize_Async");
  67. if (!sym) {
  68. WARN("Function Fapi_Initialize_Async not found.");
  69. return TSS2_FAPI_RC_NOT_IMPLEMENTED;
  70. }
  71. return sym(context, uri);
  72. }
  73. TSS2_RC Fapi_Initialize_Finish(
  74. FAPI_CONTEXT **context)
  75. {
  76. static TSS2_RC (*sym) (FAPI_CONTEXT **context) = NULL;
  77. if (!sym)
  78. sym = dlsym(dlhandle, "Fapi_Initialize_Finish");
  79. if (!sym) {
  80. WARN("Function Fapi_Initialize_Finish not found.");
  81. return TSS2_FAPI_RC_NOT_IMPLEMENTED;
  82. }
  83. return sym(context);
  84. }
  85. void
  86. Fapi_Finalize(FAPI_CONTEXT **ctx)
  87. {
  88. if (!ctx || !*ctx)
  89. return;
  90. static TSS2_RC (*sym) (FAPI_CONTEXT **ctx) = NULL;
  91. if (!sym)
  92. sym = dlsym(dlhandle, "Fapi_Finalize");
  93. if (!sym) {
  94. WARN("Function Fapi_Finalize not found.");
  95. return;
  96. }
  97. sym(ctx);
  98. }
  99. void
  100. Fapi_Free(void *__ptr)
  101. {
  102. if (!__ptr)
  103. return;
  104. static TSS2_RC (*sym) (void *__ptr) = NULL;
  105. if (!sym)
  106. sym = dlsym(dlhandle, "Fapi_Free");
  107. if (!sym) {
  108. WARN("Function Fapi_Free not found.");
  109. return;
  110. }
  111. sym(__ptr);
  112. }
  113. #define MAKE_FAPI_0(fun) \
  114. TSS2_RC fun (FAPI_CONTEXT *ctx) { \
  115. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx) = NULL; \
  116. if (!sym) \
  117. sym = dlsym(dlhandle, str(fun)); \
  118. if (!sym) { \
  119. WARN("Function " str(fun) " not found."); \
  120. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  121. } \
  122. return sym(ctx); \
  123. }
  124. #define MAKE_FAPI_1(fun, type1,parm1) \
  125. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1) { \
  126. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1) = NULL; \
  127. if (!sym) \
  128. sym = dlsym(dlhandle, str(fun)); \
  129. if (!sym) { \
  130. WARN("Function " str(fun) " not found."); \
  131. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  132. } \
  133. return sym(ctx, parm1); \
  134. }
  135. #define MAKE_FAPI_2(fun, type1,parm1, type2,parm2) \
  136. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2) { \
  137. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2) = NULL; \
  138. if (!sym) \
  139. sym = dlsym(dlhandle, str(fun)); \
  140. if (!sym) { \
  141. WARN("Function " str(fun) " not found."); \
  142. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  143. } \
  144. return sym(ctx, parm1, parm2); \
  145. }
  146. #define MAKE_FAPI_3(fun, type1,parm1, type2,parm2, type3,parm3) \
  147. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3) { \
  148. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2, type3) = NULL; \
  149. if (!sym) \
  150. sym = dlsym(dlhandle, str(fun)); \
  151. if (!sym) { \
  152. WARN("Function " str(fun) " not found."); \
  153. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  154. } \
  155. return sym(ctx, parm1, parm2, parm3); \
  156. }
  157. #define MAKE_FAPI_4(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4) \
  158. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4) { \
  159. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2, type3, type4) = NULL; \
  160. if (!sym) \
  161. sym = dlsym(dlhandle, str(fun)); \
  162. if (!sym) { \
  163. WARN("Function " str(fun) " not found."); \
  164. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  165. } \
  166. return sym(ctx, parm1, parm2, parm3, parm4); \
  167. }
  168. #define MAKE_FAPI_5(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  169. type5,parm5) \
  170. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  171. type5 parm5) { \
  172. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5) = NULL; \
  173. if (!sym) \
  174. sym = dlsym(dlhandle, str(fun)); \
  175. if (!sym) { \
  176. WARN("Function " str(fun) " not found."); \
  177. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  178. } \
  179. return sym(ctx, parm1, parm2, parm3, parm4, parm5); \
  180. }
  181. #define MAKE_FAPI_6(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  182. type5,parm5, type6,parm6) \
  183. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  184. type5 parm5, type6 parm6) { \
  185. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6) = NULL; \
  186. if (!sym) \
  187. sym = dlsym(dlhandle, str(fun)); \
  188. if (!sym) { \
  189. WARN("Function " str(fun) " not found."); \
  190. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  191. } \
  192. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6); \
  193. }
  194. #define MAKE_FAPI_7(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  195. type5,parm5, type6,parm6, type7,parm7) \
  196. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  197. type5 parm5, type6 parm6, type7 parm7) { \
  198. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7) = NULL; \
  199. if (!sym) \
  200. sym = dlsym(dlhandle, str(fun)); \
  201. if (!sym) { \
  202. WARN("Function " str(fun) " not found."); \
  203. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  204. } \
  205. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7); \
  206. }
  207. #define MAKE_FAPI_8(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  208. type5,parm5, type6,parm6, type7,parm7, type8,parm8) \
  209. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  210. type5 parm5, type6 parm6, type7 parm7, type8 parm8) { \
  211. static TSS2_RC (*sym) (FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7, type8) = NULL; \
  212. if (!sym) \
  213. sym = dlsym(dlhandle, str(fun)); \
  214. if (!sym) { \
  215. WARN("Function " str(fun) " not found."); \
  216. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  217. } \
  218. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8); \
  219. }
  220. #define MAKE_FAPI_9(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  221. type5,parm5, type6,parm6, type7,parm7, type8,parm8, \
  222. type9,parm9) \
  223. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  224. type5 parm5, type6 parm6, type7 parm7, type8 parm8, \
  225. type9 parm9) { \
  226. TSS2_RC (*sym)(FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7, type8, \
  227. type9) = NULL; \
  228. if (!sym) \
  229. sym = dlsym(dlhandle, str(fun)); \
  230. if (!sym) { \
  231. WARN("Function " str(fun) " not found."); \
  232. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  233. } \
  234. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, \
  235. parm9); \
  236. }
  237. #define MAKE_FAPI_10(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  238. type5,parm5, type6,parm6, type7,parm7, type8,parm8, \
  239. type9,parm9, type10,parm10) \
  240. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  241. type5 parm5, type6 parm6, type7 parm7, type8 parm8, \
  242. type9 parm9, type10 parm10) { \
  243. TSS2_RC (*sym)(FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7, type8, \
  244. type9, type10) = NULL; \
  245. if (!sym) \
  246. sym = dlsym(dlhandle, str(fun)); \
  247. if (!sym) { \
  248. WARN("Function " str(fun) " not found."); \
  249. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  250. } \
  251. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, \
  252. parm9, parm10); \
  253. }
  254. #define MAKE_FAPI_11(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  255. type5,parm5, type6,parm6, type7,parm7, type8,parm8, \
  256. type9,parm9, type10,parm10, type11,parm11) \
  257. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  258. type5 parm5, type6 parm6, type7 parm7, type8 parm8, \
  259. type9 parm9, type10 parm10, type11 parm11) { \
  260. TSS2_RC (*sym)(FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7, type8, \
  261. type9, type10, type11) = NULL; \
  262. if (!sym) \
  263. sym = dlsym(dlhandle, str(fun)); \
  264. if (!sym) { \
  265. WARN("Function " str(fun) " not found."); \
  266. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  267. } \
  268. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, \
  269. parm9, parm10, parm11); \
  270. }
  271. #define MAKE_FAPI_12(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  272. type5,parm5, type6,parm6, type7,parm7, type8,parm8, \
  273. type9,parm9, type10,parm10, type11,parm11, type12,parm12) \
  274. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  275. type5 parm5, type6 parm6, type7 parm7, type8 parm8, \
  276. type9 parm9, type10 parm10, type11 parm11, type12 parm12) { \
  277. TSS2_RC (*sym)(FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7, type8, \
  278. type9, type10, type11, type12) = NULL; \
  279. if (!sym) \
  280. sym = dlsym(dlhandle, str(fun)); \
  281. if (!sym) { \
  282. WARN("Function " str(fun) " not found."); \
  283. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  284. } \
  285. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, \
  286. parm9, parm10, parm11, parm12); \
  287. }
  288. #define MAKE_FAPI_13(fun, type1,parm1, type2,parm2, type3,parm3, type4,parm4, \
  289. type5,parm5, type6,parm6, type7,parm7, type8,parm8, \
  290. type9,parm9, type10,parm10, type11,parm11, type12,parm12, \
  291. type13,parm13) \
  292. TSS2_RC fun (FAPI_CONTEXT *ctx, type1 parm1, type2 parm2, type3 parm3, type4 parm4, \
  293. type5 parm5, type6 parm6, type7 parm7, type8 parm8, \
  294. type9 parm9, type10 parm10, type11 parm11, type12 parm12, \
  295. type13 parm13) { \
  296. TSS2_RC (*sym)(FAPI_CONTEXT *ctx, type1, type2, type3, type4, type5, type6, type7, type8, \
  297. type9, type10, type11, type12, type13) = NULL; \
  298. if (!sym) \
  299. sym = dlsym(dlhandle, str(fun)); \
  300. if (!sym) { \
  301. WARN("Function " str(fun) " not found."); \
  302. return TSS2_FAPI_RC_NOT_IMPLEMENTED; \
  303. } \
  304. return sym(ctx, parm1, parm2, parm3, parm4, parm5, parm6, parm7, parm8, \
  305. parm9, parm10, parm11, parm12, parm13); \
  306. }
  307. MAKE_FAPI_1(Fapi_GetTcti,
  308. TSS2_TCTI_CONTEXT **, tcti);
  309. MAKE_FAPI_2(Fapi_GetPollHandles,
  310. FAPI_POLL_HANDLE **, handles,
  311. size_t *, num_handles);
  312. MAKE_FAPI_1(Fapi_GetInfo,
  313. char **, info);
  314. MAKE_FAPI_0(Fapi_GetInfo_Async);
  315. MAKE_FAPI_1(Fapi_GetInfo_Finish,
  316. char **, info);
  317. MAKE_FAPI_3(Fapi_Provision,
  318. char const *, authValueEh,
  319. char const *, authValueSh,
  320. char const *, authValueLockout);
  321. MAKE_FAPI_3(Fapi_Provision_Async,
  322. char const *, authValueEh,
  323. char const *, authValueSh,
  324. char const *, authValueLockout);
  325. MAKE_FAPI_0(Fapi_Provision_Finish);
  326. MAKE_FAPI_2(Fapi_GetPlatformCertificates,
  327. uint8_t **, certificates,
  328. size_t *, certificatesSize);
  329. MAKE_FAPI_0(Fapi_GetPlatformCertificates_Async);
  330. MAKE_FAPI_2(Fapi_GetPlatformCertificates_Finish,
  331. uint8_t **, certificates,
  332. size_t *, certificatesSize);
  333. MAKE_FAPI_2(Fapi_GetRandom,
  334. size_t, numBytes,
  335. uint8_t **, data);
  336. MAKE_FAPI_1(Fapi_GetRandom_Async,
  337. size_t, numBytes);
  338. MAKE_FAPI_1(Fapi_GetRandom_Finish,
  339. uint8_t **, data);
  340. MAKE_FAPI_2(Fapi_Import,
  341. char const *, path,
  342. char const *, importData);
  343. MAKE_FAPI_2(Fapi_Import_Async,
  344. char const *, path,
  345. char const *, importData);
  346. MAKE_FAPI_0(Fapi_Import_Finish);
  347. MAKE_FAPI_2(Fapi_List,
  348. char const *, searchPath,
  349. char **, pathList);
  350. MAKE_FAPI_1(Fapi_List_Async,
  351. char const *, searchPath);
  352. MAKE_FAPI_1(Fapi_List_Finish,
  353. char **, pathList);
  354. MAKE_FAPI_1(Fapi_Delete,
  355. char const *, path);
  356. MAKE_FAPI_1(Fapi_Delete_Async,
  357. char const *, path);
  358. MAKE_FAPI_0(Fapi_Delete_Finish);
  359. MAKE_FAPI_4(Fapi_GetEsysBlob,
  360. char const *, path,
  361. uint8_t *, type,
  362. uint8_t **, data,
  363. size_t *, length);
  364. MAKE_FAPI_1(Fapi_GetEsysBlob_Async,
  365. char const *, path);
  366. MAKE_FAPI_3(Fapi_GetEsysBlob_Finish,
  367. uint8_t *, type,
  368. uint8_t **, data,
  369. size_t *, length);
  370. MAKE_FAPI_2(Fapi_ChangeAuth,
  371. char const *, entityPath,
  372. char const *, authValue);
  373. MAKE_FAPI_2(Fapi_ChangeAuth_Async,
  374. char const *, entityPath,
  375. char const *, authValue);
  376. MAKE_FAPI_0(Fapi_ChangeAuth_Finish);
  377. MAKE_FAPI_2(Fapi_SetDescription,
  378. char const *, path,
  379. char const *, description);
  380. MAKE_FAPI_2(Fapi_SetDescription_Async,
  381. char const *, path,
  382. char const *, description);
  383. MAKE_FAPI_0(Fapi_SetDescription_Finish);
  384. MAKE_FAPI_2(Fapi_GetDescription,
  385. char const *, path,
  386. char **, description);
  387. MAKE_FAPI_1(Fapi_GetDescription_Async,
  388. char const *, path);
  389. MAKE_FAPI_1(Fapi_GetDescription_Finish,
  390. char **, description);
  391. MAKE_FAPI_3(Fapi_SetAppData,
  392. char const *, path,
  393. uint8_t const *, appData,
  394. size_t, appDataSize);
  395. MAKE_FAPI_3(Fapi_SetAppData_Async,
  396. char const *, path,
  397. uint8_t const *, appData,
  398. size_t, appDataSize);
  399. MAKE_FAPI_0(Fapi_SetAppData_Finish);
  400. MAKE_FAPI_3(Fapi_GetAppData,
  401. char const *, path,
  402. uint8_t **, appData,
  403. size_t *, appDataSize);
  404. MAKE_FAPI_1(Fapi_GetAppData_Async,
  405. char const *, path);
  406. MAKE_FAPI_2(Fapi_GetAppData_Finish,
  407. uint8_t **, appData,
  408. size_t *, appDataSize);
  409. MAKE_FAPI_6(Fapi_GetTpmBlobs,
  410. char const *, path,
  411. uint8_t **, tpm2bPublic,
  412. size_t *, tpm2bPublicSize,
  413. uint8_t **, tpm2bPrivate,
  414. size_t *, tpm2bPrivateSize,
  415. char **, policy);
  416. MAKE_FAPI_1(Fapi_GetTpmBlobs_Async,
  417. char const *, path);
  418. MAKE_FAPI_5(Fapi_GetTpmBlobs_Finish,
  419. uint8_t **, tpm2bPublic,
  420. size_t *, tpm2bPublicSize,
  421. uint8_t **, tpm2bPrivate,
  422. size_t *, tpm2bPrivateSize,
  423. char **, policy);
  424. MAKE_FAPI_4(Fapi_CreateKey,
  425. char const *, path,
  426. char const *, type,
  427. char const *, policyPath,
  428. char const *, authValue);
  429. MAKE_FAPI_4(Fapi_CreateKey_Async,
  430. char const *, path,
  431. char const *, type,
  432. char const *, policyPath,
  433. char const *, authValue);
  434. MAKE_FAPI_0(Fapi_CreateKey_Finish);
  435. MAKE_FAPI_8(Fapi_Sign,
  436. char const *, keyPath,
  437. char const *, padding,
  438. uint8_t const *, digest,
  439. size_t, digestSize,
  440. uint8_t **, signature,
  441. size_t *, signatureSize,
  442. char **, publicKey,
  443. char **, certificate);
  444. MAKE_FAPI_4(Fapi_Sign_Async,
  445. char const *, keyPath,
  446. char const *, padding,
  447. uint8_t const *, digest,
  448. size_t, digestSize);
  449. MAKE_FAPI_4(Fapi_Sign_Finish,
  450. uint8_t **, signature,
  451. size_t *, signatureSize,
  452. char **, publicKey,
  453. char **, certificate);
  454. MAKE_FAPI_5(Fapi_VerifySignature,
  455. char const *, keyPath,
  456. uint8_t const *, digest,
  457. size_t, digestSize,
  458. uint8_t const *, signature,
  459. size_t, signatureSize);
  460. MAKE_FAPI_5(Fapi_VerifySignature_Async,
  461. char const *, keyPath,
  462. uint8_t const *, digest,
  463. size_t, digestSize,
  464. uint8_t const *, signature,
  465. size_t, signatureSize);
  466. MAKE_FAPI_0(Fapi_VerifySignature_Finish);
  467. MAKE_FAPI_5(Fapi_Encrypt,
  468. char const *, keyPath,
  469. uint8_t const *, plainText,
  470. size_t, plainTextSize,
  471. uint8_t **, cipherText,
  472. size_t *, cipherTextSize);
  473. MAKE_FAPI_3(Fapi_Encrypt_Async,
  474. char const *, keyPath,
  475. uint8_t const *, plainText,
  476. size_t, plainTextSize);
  477. MAKE_FAPI_2(Fapi_Encrypt_Finish,
  478. uint8_t **, cipherText,
  479. size_t *, cipherTextSize );
  480. MAKE_FAPI_5(Fapi_Decrypt,
  481. char const *, keyPath,
  482. uint8_t const *, cipherText,
  483. size_t, cipherTextSize,
  484. uint8_t **, plainText,
  485. size_t *, plainTextSize);
  486. MAKE_FAPI_3(Fapi_Decrypt_Async,
  487. char const *, keyPath,
  488. uint8_t const *, cipherText,
  489. size_t, cipherTextSize);
  490. MAKE_FAPI_2(Fapi_Decrypt_Finish,
  491. uint8_t **, plainText,
  492. size_t *, plainTextSize);
  493. MAKE_FAPI_2(Fapi_SetCertificate,
  494. char const *, path,
  495. char const *, x509certData);
  496. MAKE_FAPI_2(Fapi_SetCertificate_Async,
  497. char const *, path,
  498. char const *, x509certData);
  499. MAKE_FAPI_0(Fapi_SetCertificate_Finish);
  500. MAKE_FAPI_2(Fapi_GetCertificate,
  501. char const *, path,
  502. char **, x509certData);
  503. MAKE_FAPI_1(Fapi_GetCertificate_Async,
  504. char const *, path);
  505. MAKE_FAPI_1(Fapi_GetCertificate_Finish,
  506. char **, x509certData);
  507. MAKE_FAPI_3(Fapi_ExportKey,
  508. char const *, pathOfKeyToDuplicate,
  509. char const *, pathToPublicKeyOfNewParent,
  510. char **, exportedData);
  511. MAKE_FAPI_2(Fapi_ExportKey_Async,
  512. char const *, pathOfKeyToDuplicate,
  513. char const *, pathToPublicKeyOfNewParent);
  514. MAKE_FAPI_1(Fapi_ExportKey_Finish,
  515. char **, exportedData);
  516. MAKE_FAPI_6(Fapi_CreateSeal,
  517. char const *, path,
  518. char const *, type,
  519. size_t, size,
  520. char const *, policyPath,
  521. char const *, authValue,
  522. uint8_t const *, data);
  523. MAKE_FAPI_6(Fapi_CreateSeal_Async,
  524. char const *, path,
  525. char const *, type,
  526. size_t, size,
  527. char const *, policyPath,
  528. char const *, authValue,
  529. uint8_t const *, data);
  530. MAKE_FAPI_0(Fapi_CreateSeal_Finish);
  531. MAKE_FAPI_3(Fapi_Unseal,
  532. char const *, path,
  533. uint8_t **, data,
  534. size_t *, size);
  535. MAKE_FAPI_1(Fapi_Unseal_Async,
  536. char const *, path);
  537. MAKE_FAPI_2(Fapi_Unseal_Finish,
  538. uint8_t **, data,
  539. size_t *, size);
  540. MAKE_FAPI_2(Fapi_ExportPolicy,
  541. char const *, path,
  542. char **, jsonPolicy);
  543. MAKE_FAPI_1(Fapi_ExportPolicy_Async,
  544. char const *, path);
  545. MAKE_FAPI_1(Fapi_ExportPolicy_Finish,
  546. char **, jsonPolicy);
  547. MAKE_FAPI_4(Fapi_AuthorizePolicy,
  548. char const *, policyPath,
  549. char const *, keyPath,
  550. uint8_t const *, policyRef,
  551. size_t, policyRefSize);
  552. MAKE_FAPI_4(Fapi_AuthorizePolicy_Async,
  553. char const *, policyPath,
  554. char const *, keyPath,
  555. uint8_t const *, policyRef,
  556. size_t, policyRefSize);
  557. MAKE_FAPI_0(Fapi_AuthorizePolicy_Finish);
  558. MAKE_FAPI_2(Fapi_WriteAuthorizeNv,
  559. char const *, nvPath,
  560. char const *, policyPath);
  561. MAKE_FAPI_2(Fapi_WriteAuthorizeNv_Async,
  562. char const *, nvPath,
  563. char const *, policyPath);
  564. MAKE_FAPI_0(Fapi_WriteAuthorizeNv_Finish);
  565. MAKE_FAPI_4(Fapi_PcrRead,
  566. uint32_t, pcrIndex,
  567. uint8_t **, pcrValue,
  568. size_t *, pcrValueSize,
  569. char **, pcrLog);
  570. MAKE_FAPI_1(Fapi_PcrRead_Async,
  571. uint32_t, pcrIndex);
  572. MAKE_FAPI_3(Fapi_PcrRead_Finish,
  573. uint8_t **, pcrValue,
  574. size_t *, pcrValueSize,
  575. char **, pcrLog);
  576. MAKE_FAPI_4(Fapi_PcrExtend,
  577. uint32_t, pcr,
  578. uint8_t const *, data,
  579. size_t, dataSize,
  580. char const *, logData);
  581. MAKE_FAPI_4(Fapi_PcrExtend_Async,
  582. uint32_t, pcr,
  583. uint8_t const *, data,
  584. size_t, dataSize,
  585. char const *, logData);
  586. MAKE_FAPI_0(Fapi_PcrExtend_Finish);
  587. MAKE_FAPI_11(Fapi_Quote,
  588. uint32_t *, pcrList,
  589. size_t, pcrListSize,
  590. char const *, keyPath,
  591. char const *, quoteType,
  592. uint8_t const *, qualifyingData,
  593. size_t, qualifyingDataSize,
  594. char **, quoteInfo,
  595. uint8_t **, signature,
  596. size_t *, signatureSize,
  597. char **, pcrLog,
  598. char **, certificate);
  599. MAKE_FAPI_6(Fapi_Quote_Async,
  600. uint32_t *, pcrList,
  601. size_t, pcrListSize,
  602. char const *, keyPath,
  603. char const *, quoteType,
  604. uint8_t const *, qualifyingData,
  605. size_t, qualifyingDataSize);
  606. MAKE_FAPI_5(Fapi_Quote_Finish,
  607. char **, quoteInfo,
  608. uint8_t **, signature,
  609. size_t *, signatureSize,
  610. char **, pcrLog,
  611. char **, certificate);
  612. MAKE_FAPI_7(Fapi_VerifyQuote,
  613. char const *, publicKeyPath,
  614. uint8_t const *, qualifyingData,
  615. size_t, qualifyingDataSize,
  616. char const *, quoteInfo,
  617. uint8_t const *, signature,
  618. size_t, signatureSize,
  619. char const *, pcrLog);
  620. MAKE_FAPI_7(Fapi_VerifyQuote_Async,
  621. char const *, publicKeyPath,
  622. uint8_t const *, qualifyingData,
  623. size_t, qualifyingDataSize,
  624. char const *, quoteInfo,
  625. uint8_t const *, signature,
  626. size_t, signatureSize,
  627. char const *, pcrLog);
  628. MAKE_FAPI_0(Fapi_VerifyQuote_Finish);
  629. MAKE_FAPI_5(Fapi_CreateNv,
  630. char const *, path,
  631. char const *, type,
  632. size_t, size,
  633. char const *, policyPath,
  634. char const *, authValue);
  635. MAKE_FAPI_5(Fapi_CreateNv_Async,
  636. char const *, path,
  637. char const *, type,
  638. size_t, size,
  639. char const *, policyPath,
  640. char const *, authValue);
  641. MAKE_FAPI_0(Fapi_CreateNv_Finish);
  642. MAKE_FAPI_4(Fapi_NvRead,
  643. char const *, path,
  644. uint8_t **, data,
  645. size_t *, size,
  646. char **, logData);
  647. MAKE_FAPI_1(Fapi_NvRead_Async,
  648. char const *, path);
  649. MAKE_FAPI_3(Fapi_NvRead_Finish,
  650. uint8_t **, data,
  651. size_t *, size,
  652. char **, logData);
  653. MAKE_FAPI_3(Fapi_NvWrite,
  654. char const *, path,
  655. uint8_t const *, data,
  656. size_t, size);
  657. MAKE_FAPI_3(Fapi_NvWrite_Async,
  658. char const *, path,
  659. uint8_t const *, data,
  660. size_t, size);
  661. MAKE_FAPI_0(Fapi_NvWrite_Finish);
  662. MAKE_FAPI_4(Fapi_NvExtend,
  663. char const *, path,
  664. uint8_t const *, data,
  665. size_t, size,
  666. char const *, logData);
  667. MAKE_FAPI_4(Fapi_NvExtend_Async,
  668. char const *, path,
  669. uint8_t const *, data,
  670. size_t, size,
  671. char const *, logData);
  672. MAKE_FAPI_0(Fapi_NvExtend_Finish);
  673. MAKE_FAPI_1(Fapi_NvIncrement,
  674. char const *, path);
  675. MAKE_FAPI_1(Fapi_NvIncrement_Async,
  676. char const *, path);
  677. MAKE_FAPI_0(Fapi_NvIncrement_Finish);
  678. MAKE_FAPI_2(Fapi_NvSetBits,
  679. char const *, path,
  680. uint64_t, bitmap);
  681. MAKE_FAPI_2(Fapi_NvSetBits_Async,
  682. char const *, path,
  683. uint64_t, bitmap);
  684. MAKE_FAPI_0(Fapi_NvSetBits_Finish);
  685. MAKE_FAPI_2(Fapi_SetAuthCB,
  686. Fapi_CB_Auth, callback,
  687. void *, userData);
  688. MAKE_FAPI_2(Fapi_SetBranchCB,
  689. Fapi_CB_Branch, callback,
  690. void *, userData);
  691. MAKE_FAPI_2(Fapi_SetSignCB,
  692. Fapi_CB_Sign, callback,
  693. void *, userData);
  694. MAKE_FAPI_2(Fapi_SetPolicyActionCB,
  695. Fapi_CB_PolicyAction, callback,
  696. void *, userData);