test_tpm2_attr_util.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. /* SPDX-License-Identifier: BSD-3-Clause */
  2. #include <stdarg.h>
  3. #include <stdbool.h>
  4. #include <stdlib.h>
  5. #include <setjmp.h>
  6. #include <cmocka.h>
  7. #include "tpm2_attr_util.h"
  8. #define test_nv_strtoattr_get(set) \
  9. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_##set)
  10. #define nv_single_item_test(argstr, set) \
  11. static void test_tpm2_attr_util_nv_strtoattr_##set(void **state) { \
  12. \
  13. (void)state; \
  14. \
  15. TPMA_NV nvattrs = 0; \
  16. /* make mutable strings for strtok_r */ \
  17. char arg[] = argstr; \
  18. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs); \
  19. assert_true(res); \
  20. assert_true(nvattrs == set); \
  21. }
  22. nv_single_item_test("authread", TPMA_NV_AUTHREAD);
  23. nv_single_item_test("authwrite", TPMA_NV_AUTHWRITE);
  24. nv_single_item_test("clear_stclear", TPMA_NV_CLEAR_STCLEAR);
  25. nv_single_item_test("globallock", TPMA_NV_GLOBALLOCK);
  26. nv_single_item_test("no_da", TPMA_NV_NO_DA);
  27. nv_single_item_test("orderly", TPMA_NV_ORDERLY);
  28. nv_single_item_test("ownerread", TPMA_NV_OWNERREAD);
  29. nv_single_item_test("ownerwrite", TPMA_NV_OWNERWRITE);
  30. nv_single_item_test("platformcreate", TPMA_NV_PLATFORMCREATE);
  31. nv_single_item_test("policyread", TPMA_NV_POLICYREAD);
  32. nv_single_item_test("policywrite", TPMA_NV_POLICYWRITE);
  33. nv_single_item_test("policydelete", TPMA_NV_POLICY_DELETE);
  34. nv_single_item_test("ppread", TPMA_NV_PPREAD);
  35. nv_single_item_test("ppwrite", TPMA_NV_PPWRITE);
  36. nv_single_item_test("readlocked", TPMA_NV_READLOCKED);
  37. nv_single_item_test("read_stclear", TPMA_NV_READ_STCLEAR);
  38. nv_single_item_test("writeall", TPMA_NV_WRITEALL);
  39. nv_single_item_test("writedefine", TPMA_NV_WRITEDEFINE);
  40. nv_single_item_test("writelocked", TPMA_NV_WRITELOCKED);
  41. nv_single_item_test("write_stclear", TPMA_NV_WRITE_STCLEAR);
  42. nv_single_item_test("written", TPMA_NV_WRITTEN);
  43. static void test_tpm2_attr_util_nv_strtoattr_nt_good(void **state) {
  44. (void) state;
  45. TPMA_NV nvattrs = 0;
  46. char arg[] = "nt=0x1";
  47. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs);
  48. assert_true(res);
  49. assert_true((nvattrs & TPMA_NV_TPM2_NT_MASK) >> TPMA_NV_TPM2_NT_SHIFT ==
  50. 0x1);
  51. }
  52. static void test_tpm2_attr_util_nv_strtoattr_nt_bad(void **state) {
  53. (void) state;
  54. TPMA_NV nvattrs = 0;
  55. char arg[] = "nt=16";
  56. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs);
  57. assert_false(res);
  58. }
  59. static void test_tpm2_attr_util_nv_strtoattr_nt_malformed(void **state) {
  60. (void) state;
  61. TPMA_NV nvattrs = 0;
  62. char arg[] = "nt=";
  63. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs);
  64. assert_false(res);
  65. char arg1[] = "nt";
  66. res = tpm2_attr_util_nv_strtoattr(arg1, &nvattrs);
  67. assert_false(res);
  68. }
  69. static void test_tpm2_attr_util_nv_strtoattr_option_no_option(void **state) {
  70. (void) state;
  71. TPMA_NV nvattrs = 0;
  72. char arg[] = "authread=";
  73. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs);
  74. assert_false(res);
  75. char arg1[] = "authread=0x1";
  76. res = tpm2_attr_util_nv_strtoattr(arg1, &nvattrs);
  77. assert_false(res);
  78. }
  79. static void test_tpm2_attr_util_nv_strtoattr_multiple_good(void **state) {
  80. (void) state;
  81. TPMA_NV nvattrs = 0;
  82. char arg[] = "authread|authwrite|nt=0x4";
  83. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs);
  84. assert_true(res);
  85. assert_true((nvattrs & TPMA_NV_TPM2_NT_MASK) >> TPMA_NV_TPM2_NT_SHIFT ==
  86. 0x4);
  87. assert_true(nvattrs & TPMA_NV_AUTHREAD);
  88. assert_true(nvattrs & TPMA_NV_AUTHWRITE);
  89. }
  90. static void test_tpm2_attr_util_nv_strtoattr_token_unknown(void **state) {
  91. (void) state;
  92. TPMA_NV nvattrs = 0;
  93. char arg[] = "authread|authfoo|nt=0x4";
  94. bool res = tpm2_attr_util_nv_strtoattr(arg, &nvattrs);
  95. assert_false(res);
  96. char arg1[] = "foo";
  97. res = tpm2_attr_util_nv_strtoattr(arg1, &nvattrs);
  98. assert_false(res);
  99. char arg2[] = "foo=";
  100. res = tpm2_attr_util_nv_strtoattr(arg2, &nvattrs);
  101. assert_false(res);
  102. /* should be interpreted as the whole thing, no = */
  103. char arg3[] = "nt:0x4";
  104. res = tpm2_attr_util_nv_strtoattr(arg3, &nvattrs);
  105. assert_false(res);
  106. }
  107. #define test_nv_attrtostr(value, expected) \
  108. static void test_tpm2_nv_util_attrtostr_##value(void **state) { \
  109. \
  110. (void) state; \
  111. \
  112. TPMA_NV attrs = value; \
  113. char *str = tpm2_attr_util_nv_attrtostr(attrs); \
  114. assert_string_equal(str, expected); \
  115. \
  116. free(str); \
  117. }
  118. #define test_nv_attrtostr_get(value) \
  119. cmocka_unit_test(test_tpm2_nv_util_attrtostr_##value)
  120. test_nv_attrtostr(0, "<none>");
  121. test_nv_attrtostr(TPMA_NV_PPWRITE, "ppwrite")
  122. test_nv_attrtostr(TPMA_NV_OWNERWRITE, "ownerwrite")
  123. test_nv_attrtostr(TPMA_NV_AUTHWRITE, "authwrite")
  124. test_nv_attrtostr(TPMA_NV_POLICYWRITE, "policywrite")
  125. test_nv_attrtostr(TPMA_NV_POLICY_DELETE, "policydelete")
  126. test_nv_attrtostr(TPMA_NV_WRITELOCKED, "writelocked")
  127. test_nv_attrtostr(TPMA_NV_WRITEALL, "writeall")
  128. test_nv_attrtostr(TPMA_NV_WRITEDEFINE, "writedefine")
  129. test_nv_attrtostr(TPMA_NV_WRITE_STCLEAR, "write_stclear")
  130. test_nv_attrtostr(TPMA_NV_GLOBALLOCK, "globallock")
  131. test_nv_attrtostr(TPMA_NV_PPREAD, "ppread")
  132. test_nv_attrtostr(TPMA_NV_OWNERREAD, "ownerread")
  133. test_nv_attrtostr(TPMA_NV_AUTHREAD, "authread")
  134. test_nv_attrtostr(TPMA_NV_POLICYREAD, "policyread")
  135. test_nv_attrtostr(TPMA_NV_NO_DA, "no_da")
  136. test_nv_attrtostr(TPMA_NV_ORDERLY, "orderly")
  137. test_nv_attrtostr(TPMA_NV_CLEAR_STCLEAR, "clear_stclear")
  138. test_nv_attrtostr(TPMA_NV_READLOCKED, "readlocked")
  139. test_nv_attrtostr(TPMA_NV_WRITTEN, "written")
  140. test_nv_attrtostr(TPMA_NV_PLATFORMCREATE, "platformcreate")
  141. test_nv_attrtostr(TPMA_NV_READ_STCLEAR, "read_stclear")
  142. test_nv_attrtostr(0x100, "<reserved(8)>") //bit 8 - reserved
  143. test_nv_attrtostr(0x200, "<reserved(9)>") //bit 9 - reserved
  144. test_nv_attrtostr(0x100000, "<reserved(20)>") //bit 20 - reserved
  145. test_nv_attrtostr(0x200000, "<reserved(21)>") //bit 21 - reserved
  146. test_nv_attrtostr(0x400000, "<reserved(22)>") //bit 22 - reserved
  147. test_nv_attrtostr(0x800000, "<reserved(23)>") //bit 23- reserved
  148. test_nv_attrtostr(0x1000000, "<reserved(24)>") //bit 24- reserved
  149. test_nv_attrtostr(0x30, "nt=0x3") //bit 24- reserved
  150. test_nv_attrtostr(0x90, "nt=0x9") //bit 24- reserved
  151. #define NV_ALL_FIELDS \
  152. "ppwrite|ownerwrite|authwrite|policywrite|nt=0xF|<reserved(8)>" \
  153. "|<reserved(9)>|policydelete|writelocked|writeall|writedefine" \
  154. "|write_stclear|globallock|ppread|ownerread|authread|policyread" \
  155. "|<reserved(20)>|<reserved(21)>|<reserved(22)>|<reserved(23)>" \
  156. "|<reserved(24)>|no_da|orderly|clear_stclear|readlocked|written" \
  157. "|platformcreate|read_stclear"
  158. test_nv_attrtostr(0xFFFFFFFF, NV_ALL_FIELDS);
  159. #define test_nv_attrtostr_compound(id, value, expected) \
  160. static void test_tpm2_nv_util_attrtostr_##id(void **state) { \
  161. \
  162. (void) state; \
  163. \
  164. TPMA_NV attrs = value; \
  165. char *str = tpm2_attr_util_nv_attrtostr(attrs); \
  166. assert_string_equal(str, expected); \
  167. \
  168. free(str); \
  169. }
  170. test_nv_attrtostr_compound(stclear_ppwrite,
  171. TPMA_NV_WRITE_STCLEAR | TPMA_NV_PPWRITE, "ppwrite|write_stclear")
  172. test_nv_attrtostr_compound(stclear_ppwrite_0x30,
  173. TPMA_NV_WRITE_STCLEAR | TPMA_NV_PPWRITE | 0x30,
  174. "ppwrite|nt=0x3|write_stclear")
  175. test_nv_attrtostr_compound(platformcreate_ownerread_nt_0x90_0x20000,
  176. TPMA_NV_PLATFORMCREATE | TPMA_NV_AUTHWRITE | 0x90 | 0x200000,
  177. "authwrite|nt=0x9|<reserved(21)>|platformcreate")
  178. /*
  179. * TPMA_OBJECT Tests
  180. */
  181. #define obj_single_item_test(argstr, set) \
  182. static void test_tpm2_attr_util_nv_strtoattr_##set(void **state) { \
  183. \
  184. (void)state; \
  185. \
  186. TPMA_OBJECT objattrs = 0; \
  187. /* make mutable strings for strtok_r */ \
  188. char arg[] = argstr; \
  189. bool res = tpm2_attr_util_obj_strtoattr(arg, &objattrs); \
  190. assert_true(res); \
  191. assert_true(objattrs & set); \
  192. }
  193. #define test_obj_strtoattr_get(set) \
  194. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_##set)
  195. obj_single_item_test("fixedtpm", TPMA_OBJECT_FIXEDTPM);
  196. obj_single_item_test("stclear", TPMA_OBJECT_STCLEAR);
  197. obj_single_item_test("fixedparent", TPMA_OBJECT_FIXEDPARENT);
  198. obj_single_item_test("sensitivedataorigin", TPMA_OBJECT_SENSITIVEDATAORIGIN);
  199. obj_single_item_test("userwithauth", TPMA_OBJECT_USERWITHAUTH);
  200. obj_single_item_test("adminwithpolicy", TPMA_OBJECT_ADMINWITHPOLICY);
  201. obj_single_item_test("noda", TPMA_OBJECT_NODA);
  202. obj_single_item_test("encryptedduplication", TPMA_OBJECT_ENCRYPTEDDUPLICATION);
  203. obj_single_item_test("restricted", TPMA_OBJECT_RESTRICTED);
  204. obj_single_item_test("decrypt", TPMA_OBJECT_DECRYPT);
  205. obj_single_item_test("sign", TPMA_OBJECT_SIGN_ENCRYPT);
  206. #define OBJ_ALL_FIELDS \
  207. "<reserved(0)>|fixedtpm|stclear|<reserved(3)>|fixedparent" \
  208. "|sensitivedataorigin|userwithauth|adminwithpolicy|<reserved(8)>|" \
  209. "<reserved(9)>|noda|encryptedduplication|<reserved(12)>|" \
  210. "<reserved(13)>|<reserved(14)>|<reserved(15)>|restricted|decrypt|" \
  211. "sign|<reserved(19)>|<reserved(20)>|<reserved(21)>|<reserved(22)>|" \
  212. "<reserved(23)>|<reserved(24)>|<reserved(25)>|<reserved(26)>|" \
  213. "<reserved(27)>|<reserved(28)>|<reserved(29)>|<reserved(30)>|" \
  214. "<reserved(31)>"
  215. #define test_obj_attrtostr(value, expected) \
  216. static void test_tpm2_obj_util_attrtostr_##value(void **state) { \
  217. \
  218. (void) state; \
  219. \
  220. TPMA_OBJECT attrs = value; \
  221. char *str = tpm2_attr_util_obj_attrtostr(attrs); \
  222. assert_string_equal(str, expected); \
  223. \
  224. free(str); \
  225. }
  226. #define test_obj_attrtostr_get(value) \
  227. cmocka_unit_test(test_tpm2_obj_util_attrtostr_##value)
  228. test_obj_attrtostr(0xFFFFFFFF, OBJ_ALL_FIELDS);
  229. test_obj_attrtostr(TPMA_OBJECT_FIXEDTPM, "fixedtpm");
  230. test_obj_attrtostr(TPMA_OBJECT_STCLEAR, "stclear");
  231. test_obj_attrtostr(TPMA_OBJECT_FIXEDPARENT, "fixedparent");
  232. test_obj_attrtostr(TPMA_OBJECT_SENSITIVEDATAORIGIN, "sensitivedataorigin");
  233. test_obj_attrtostr(TPMA_OBJECT_USERWITHAUTH, "userwithauth");
  234. test_obj_attrtostr(TPMA_OBJECT_ADMINWITHPOLICY, "adminwithpolicy");
  235. test_obj_attrtostr(TPMA_OBJECT_NODA, "noda");
  236. test_obj_attrtostr(TPMA_OBJECT_ENCRYPTEDDUPLICATION, "encryptedduplication");
  237. test_obj_attrtostr(TPMA_OBJECT_RESTRICTED, "restricted");
  238. test_obj_attrtostr(TPMA_OBJECT_DECRYPT, "decrypt");
  239. test_obj_attrtostr(TPMA_OBJECT_SIGN_ENCRYPT, "sign");
  240. test_obj_attrtostr(TPMA_OBJECT_RESERVED1_MASK, "<reserved(0)>");
  241. test_obj_attrtostr(TPMA_OBJECT_RESERVED2_MASK, "<reserved(3)>");
  242. test_obj_attrtostr(TPMA_OBJECT_RESERVED3_MASK, "<reserved(8)>|<reserved(9)>");
  243. test_obj_attrtostr(TPMA_OBJECT_RESERVED4_MASK, "<reserved(12)>|<reserved(13)>|" \
  244. "<reserved(14)>|<reserved(15)>");
  245. test_obj_attrtostr(TPMA_OBJECT_RESERVED5_MASK, "<reserved(19)>|<reserved(20)>|" \
  246. "<reserved(21)>|<reserved(22)>|<reserved(23)>|<reserved(24)>|" \
  247. "<reserved(25)>|<reserved(26)>|<reserved(27)>|<reserved(28)>|" \
  248. "<reserved(29)>|<reserved(30)>|<reserved(31)>");
  249. static void test_tpm2_attr_util_obj_strtoattr_multiple_good(void **state) {
  250. (void) state;
  251. TPMA_OBJECT objattrs = 0;
  252. char arg[] = "sign|adminwithpolicy|noda";
  253. bool res = tpm2_attr_util_obj_strtoattr(arg, &objattrs);
  254. assert_true(res);
  255. assert_true(objattrs & TPMA_OBJECT_ADMINWITHPOLICY);
  256. assert_true(objattrs & TPMA_OBJECT_SIGN_ENCRYPT);
  257. assert_true(objattrs & TPMA_OBJECT_NODA);
  258. assert_int_equal(objattrs,
  259. TPMA_OBJECT_SIGN_ENCRYPT | TPMA_OBJECT_NODA
  260. | TPMA_OBJECT_ADMINWITHPOLICY);
  261. }
  262. static void test_tpm2_attr_util_obj_strtoattr_token_unknown(void **state) {
  263. (void) state;
  264. TPMA_OBJECT objattrs = 0;
  265. char arg[] = "fixedtpm|noda|unknown";
  266. bool res = tpm2_attr_util_obj_strtoattr(arg, &objattrs);
  267. assert_false(res);
  268. char arg1[] = "foo";
  269. res = tpm2_attr_util_obj_strtoattr(arg1, &objattrs);
  270. assert_false(res);
  271. }
  272. static void test_tpm2_attr_util_obj_from_optarg_good(void **state) {
  273. (void) state;
  274. TPMA_OBJECT objattrs = 0;
  275. bool res = tpm2_attr_util_obj_from_optarg("0x00000002", &objattrs);
  276. assert_true(res);
  277. assert_int_equal(0x02, objattrs);
  278. objattrs = 0;
  279. char buf[] = "fixedtpm";
  280. res = tpm2_attr_util_obj_from_optarg(buf, &objattrs);
  281. assert_true(res);
  282. assert_int_equal(TPMA_OBJECT_FIXEDTPM, objattrs);
  283. }
  284. /* link required symbol, but tpm2_tool.c declares it AND main, which
  285. * we have a main below for cmocka tests.
  286. */
  287. bool output_enabled = true;
  288. int main(int argc, char* argv[]) {
  289. (void) argc;
  290. (void) argv;
  291. const struct CMUnitTest tests[] = {
  292. /* TPMA_NV Tests */
  293. test_nv_strtoattr_get(TPMA_NV_AUTHREAD),
  294. test_nv_strtoattr_get(TPMA_NV_AUTHWRITE),
  295. test_nv_strtoattr_get(TPMA_NV_CLEAR_STCLEAR),
  296. test_nv_strtoattr_get(TPMA_NV_GLOBALLOCK),
  297. test_nv_strtoattr_get(TPMA_NV_NO_DA),
  298. test_nv_strtoattr_get(TPMA_NV_ORDERLY),
  299. test_nv_strtoattr_get(TPMA_NV_OWNERREAD),
  300. test_nv_strtoattr_get(TPMA_NV_OWNERWRITE),
  301. test_nv_strtoattr_get(TPMA_NV_PLATFORMCREATE),
  302. test_nv_strtoattr_get(TPMA_NV_POLICYREAD),
  303. test_nv_strtoattr_get(TPMA_NV_POLICYWRITE),
  304. test_nv_strtoattr_get(TPMA_NV_POLICY_DELETE),
  305. test_nv_strtoattr_get(TPMA_NV_PPREAD),
  306. test_nv_strtoattr_get(TPMA_NV_PPWRITE),
  307. test_nv_strtoattr_get(TPMA_NV_READLOCKED),
  308. test_nv_strtoattr_get(TPMA_NV_READ_STCLEAR),
  309. test_nv_strtoattr_get(TPMA_NV_WRITEALL),
  310. test_nv_strtoattr_get(TPMA_NV_WRITEDEFINE),
  311. test_nv_strtoattr_get(TPMA_NV_WRITELOCKED),
  312. test_nv_strtoattr_get(TPMA_NV_WRITE_STCLEAR),
  313. test_nv_strtoattr_get(TPMA_NV_WRITTEN),
  314. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_nt_good),
  315. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_nt_bad),
  316. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_nt_malformed),
  317. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_multiple_good),
  318. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_option_no_option),
  319. cmocka_unit_test(test_tpm2_attr_util_nv_strtoattr_token_unknown),
  320. test_nv_attrtostr_get(TPMA_NV_PPWRITE),
  321. test_nv_attrtostr_get(TPMA_NV_OWNERWRITE),
  322. test_nv_attrtostr_get(TPMA_NV_AUTHWRITE),
  323. test_nv_attrtostr_get(TPMA_NV_POLICYWRITE),
  324. test_nv_attrtostr_get(TPMA_NV_POLICY_DELETE),
  325. test_nv_attrtostr_get(TPMA_NV_WRITELOCKED),
  326. test_nv_attrtostr_get(TPMA_NV_WRITEALL),
  327. test_nv_attrtostr_get(TPMA_NV_WRITEDEFINE),
  328. test_nv_attrtostr_get(TPMA_NV_WRITE_STCLEAR),
  329. test_nv_attrtostr_get(TPMA_NV_GLOBALLOCK),
  330. test_nv_attrtostr_get(TPMA_NV_PPREAD),
  331. test_nv_attrtostr_get(TPMA_NV_OWNERREAD),
  332. test_nv_attrtostr_get(TPMA_NV_AUTHREAD),
  333. test_nv_attrtostr_get(TPMA_NV_POLICYREAD),
  334. test_nv_attrtostr_get(TPMA_NV_NO_DA),
  335. test_nv_attrtostr_get(TPMA_NV_ORDERLY),
  336. test_nv_attrtostr_get(TPMA_NV_CLEAR_STCLEAR),
  337. test_nv_attrtostr_get(TPMA_NV_READLOCKED),
  338. test_nv_attrtostr_get(TPMA_NV_WRITTEN),
  339. test_nv_attrtostr_get(TPMA_NV_PLATFORMCREATE),
  340. test_nv_attrtostr_get(TPMA_NV_READ_STCLEAR),
  341. test_nv_attrtostr_get(0),
  342. test_nv_attrtostr_get(0xFFFFFFFF),
  343. test_nv_attrtostr_get(0x100), // bit 8 - reserved
  344. test_nv_attrtostr_get(0x200), // bit 9 - reserved
  345. test_nv_attrtostr_get(0x100000), //bit 20 - reserved
  346. test_nv_attrtostr_get(0x200000), //bit 21 - reserved
  347. test_nv_attrtostr_get(0x400000), //bit 22 - reserved
  348. test_nv_attrtostr_get(0x800000), //bit 23- reserved
  349. test_nv_attrtostr_get(0x1000000), //bit 24- reserved
  350. test_nv_attrtostr_get(0x30), //nt=0x3
  351. test_nv_attrtostr_get(0x90), //nt=0x9
  352. test_nv_attrtostr_get(stclear_ppwrite),
  353. test_nv_attrtostr_get(stclear_ppwrite_0x30),
  354. test_nv_attrtostr_get(platformcreate_ownerread_nt_0x90_0x20000),
  355. /* TPMA_OBJECT Tests */
  356. /* From String to Attribute value */
  357. test_obj_strtoattr_get(TPMA_OBJECT_FIXEDTPM),
  358. test_obj_strtoattr_get(TPMA_OBJECT_STCLEAR),
  359. test_obj_strtoattr_get(TPMA_OBJECT_FIXEDPARENT),
  360. test_obj_strtoattr_get(TPMA_OBJECT_SENSITIVEDATAORIGIN),
  361. test_obj_strtoattr_get(TPMA_OBJECT_USERWITHAUTH),
  362. test_obj_strtoattr_get(TPMA_OBJECT_ADMINWITHPOLICY),
  363. test_obj_strtoattr_get(TPMA_OBJECT_NODA),
  364. test_obj_strtoattr_get(TPMA_OBJECT_ENCRYPTEDDUPLICATION),
  365. test_obj_strtoattr_get(TPMA_OBJECT_RESTRICTED),
  366. test_obj_strtoattr_get(TPMA_OBJECT_DECRYPT),
  367. test_obj_strtoattr_get(TPMA_OBJECT_ADMINWITHPOLICY),
  368. test_obj_strtoattr_get(TPMA_OBJECT_SIGN_ENCRYPT),
  369. /* From attribute to string value */
  370. test_obj_attrtostr_get(0xFFFFFFFF),
  371. test_obj_attrtostr_get(TPMA_OBJECT_FIXEDTPM),
  372. test_obj_attrtostr_get(TPMA_OBJECT_STCLEAR),
  373. test_obj_attrtostr_get(TPMA_OBJECT_FIXEDPARENT),
  374. test_obj_attrtostr_get(TPMA_OBJECT_SENSITIVEDATAORIGIN),
  375. test_obj_attrtostr_get(TPMA_OBJECT_USERWITHAUTH),
  376. test_obj_attrtostr_get(TPMA_OBJECT_ADMINWITHPOLICY),
  377. test_obj_attrtostr_get(TPMA_OBJECT_NODA),
  378. test_obj_attrtostr_get(TPMA_OBJECT_ENCRYPTEDDUPLICATION),
  379. test_obj_attrtostr_get(TPMA_OBJECT_RESTRICTED),
  380. test_obj_attrtostr_get(TPMA_OBJECT_DECRYPT),
  381. test_obj_attrtostr_get(TPMA_OBJECT_SIGN_ENCRYPT),
  382. test_obj_attrtostr_get(TPMA_OBJECT_RESERVED1_MASK),
  383. test_obj_attrtostr_get(TPMA_OBJECT_RESERVED2_MASK),
  384. test_obj_attrtostr_get(TPMA_OBJECT_RESERVED3_MASK),
  385. test_obj_attrtostr_get(TPMA_OBJECT_RESERVED4_MASK),
  386. test_obj_attrtostr_get(TPMA_OBJECT_RESERVED5_MASK),
  387. /* compound good */
  388. cmocka_unit_test(test_tpm2_attr_util_obj_strtoattr_multiple_good),
  389. /* negative tests */
  390. cmocka_unit_test(test_tpm2_attr_util_obj_strtoattr_token_unknown),
  391. /* test from an optarg */
  392. cmocka_unit_test(test_tpm2_attr_util_obj_from_optarg_good)
  393. };
  394. return cmocka_run_group_tests(tests, NULL, NULL);
  395. }