TPMT-marshal.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. /* SPDX-License-Identifier: BSD-2-Clause */
  2. /***********************************************************************
  3. * Copyright (c) 2017-2018, Intel Corporation
  4. *
  5. * All rights reserved.
  6. ***********************************************************************/
  7. #ifdef HAVE_CONFIG_H
  8. #include <config.h>
  9. #endif
  10. #include <stdarg.h>
  11. #include <stddef.h>
  12. #include <setjmp.h>
  13. #include <cmocka.h>
  14. #include <stdio.h>
  15. #include "tss2_mu.h"
  16. #include "util/tss2_endian.h"
  17. /*
  18. * Success case
  19. */
  20. static void
  21. tpmt_marshal_success(void **state)
  22. {
  23. TPMT_TK_CREATION tkt = {0};
  24. TPMT_PUBLIC pub = {0};
  25. uint8_t buffer[sizeof(tkt) + sizeof(pub)] = { 0 };
  26. size_t buffer_size = sizeof(buffer);
  27. TPMT_TK_CREATION *ptr;
  28. TPMI_RH_HIERARCHY *ptr2;
  29. TPM2B_DIGEST *ptr3;
  30. TPMT_PUBLIC *ptr4;
  31. TPMU_PUBLIC_PARMS *ptr5;
  32. TSS2_RC rc;
  33. tkt.tag = 0xbeef;
  34. tkt.hierarchy = TPM2_RH_OWNER;
  35. tkt.digest.size = 4;
  36. tkt.digest.buffer[0] = 0xde;
  37. tkt.digest.buffer[1] = 0xad;
  38. tkt.digest.buffer[2] = 0xbe;
  39. tkt.digest.buffer[3] = 0xef;
  40. rc = Tss2_MU_TPMT_TK_CREATION_Marshal(&tkt, buffer, buffer_size, NULL);
  41. assert_int_equal (rc, TSS2_RC_SUCCESS);
  42. ptr = (TPMT_TK_CREATION *)buffer;
  43. ptr2 = (TPMI_RH_HIERARCHY *)(buffer + sizeof(tkt.tag));
  44. ptr3 = (TPM2B_DIGEST *)(buffer + sizeof(tkt.tag) + sizeof(tkt.hierarchy));
  45. assert_int_equal (ptr->tag, HOST_TO_BE_16(0xbeef));
  46. assert_int_equal (*ptr2, HOST_TO_BE_32(TPM2_RH_OWNER));
  47. assert_int_equal (ptr3->size, HOST_TO_BE_16(4));
  48. assert_int_equal (ptr3->buffer[0], 0xde);
  49. assert_int_equal (ptr3->buffer[1], 0xad);
  50. assert_int_equal (ptr3->buffer[2], 0xbe);
  51. assert_int_equal (ptr3->buffer[3], 0xef);
  52. pub.type = TPM2_ALG_RSA;
  53. pub.nameAlg = TPM2_ALG_SHA1;
  54. pub.parameters.symDetail.sym.algorithm = TPM2_ALG_NULL;
  55. pub.parameters.rsaDetail.scheme.scheme = TPM2_ALG_NULL;
  56. pub.parameters.rsaDetail.symmetric.algorithm = TPM2_ALG_AES;
  57. pub.parameters.rsaDetail.symmetric.keyBits.aes = 128;
  58. pub.parameters.rsaDetail.symmetric.mode.aes = TPM2_ALG_CBC;
  59. rc = Tss2_MU_TPMT_PUBLIC_Marshal(&pub, buffer, buffer_size, NULL);
  60. assert_int_equal (rc, TSS2_RC_SUCCESS);
  61. ptr4 = (TPMT_PUBLIC *)buffer;
  62. ptr5 = (TPMU_PUBLIC_PARMS *)(buffer + sizeof(TPMI_ALG_PUBLIC) + sizeof(TPMI_ALG_HASH) + sizeof(TPMA_OBJECT) + 2);
  63. assert_int_equal (ptr4->type, HOST_TO_BE_16(TPM2_ALG_RSA));
  64. assert_int_equal (ptr5->rsaDetail.symmetric.algorithm, HOST_TO_BE_16(TPM2_ALG_AES));
  65. assert_int_equal (ptr5->rsaDetail.symmetric.keyBits.aes, HOST_TO_BE_16(128));
  66. assert_int_equal (ptr5->rsaDetail.symmetric.mode.aes, HOST_TO_BE_16(TPM2_ALG_CBC));
  67. }
  68. /*
  69. * Success case with a valid offset
  70. */
  71. static void
  72. tpmt_marshal_success_offset(void **state)
  73. {
  74. TPMT_TK_CREATION tkt = {0};
  75. TPMT_PUBLIC_PARMS pub = {0};
  76. uint8_t buffer[sizeof(tkt) + sizeof(pub) + 10] = { 0 };
  77. size_t buffer_size = sizeof(buffer);
  78. TPMT_TK_CREATION *ptr;
  79. TPMI_RH_HIERARCHY *ptr2;
  80. TPM2B_DIGEST *ptr3;
  81. TPMT_PUBLIC_PARMS *ptr4;
  82. TPMS_KEYEDHASH_PARMS *ptr5;
  83. size_t offset = 10;
  84. TSS2_RC rc;
  85. tkt.tag = 0xbeef;
  86. tkt.hierarchy = TPM2_RH_OWNER;
  87. tkt.digest.size = 4;
  88. tkt.digest.buffer[0] = 0xde;
  89. tkt.digest.buffer[1] = 0xad;
  90. tkt.digest.buffer[2] = 0xbe;
  91. tkt.digest.buffer[3] = 0xef;
  92. rc = Tss2_MU_TPMT_TK_CREATION_Marshal(&tkt, buffer, buffer_size, &offset);
  93. assert_int_equal (rc, TSS2_RC_SUCCESS);
  94. ptr = (TPMT_TK_CREATION *)(buffer + 10);
  95. ptr2 = (TPMI_RH_HIERARCHY *)(buffer + 10 + sizeof(tkt.tag));
  96. ptr3 = (TPM2B_DIGEST *)(buffer + 10 + sizeof(tkt.tag) + sizeof(tkt.hierarchy));
  97. assert_int_equal (ptr->tag, HOST_TO_BE_16(0xbeef));
  98. assert_int_equal (*ptr2, HOST_TO_BE_32(TPM2_RH_OWNER));
  99. assert_int_equal (ptr3->size, HOST_TO_BE_16(4));
  100. assert_int_equal (ptr3->buffer[0], 0xde);
  101. assert_int_equal (ptr3->buffer[1], 0xad);
  102. assert_int_equal (ptr3->buffer[2], 0xbe);
  103. assert_int_equal (ptr3->buffer[3], 0xef);
  104. assert_int_equal (offset, 10 + 2 + 4 + 2 + 1 + 1 + 1 + 1);
  105. offset = 10;
  106. pub.type = TPM2_ALG_KEYEDHASH;
  107. pub.parameters.keyedHashDetail.scheme.scheme = TPM2_ALG_HMAC;
  108. pub.parameters.keyedHashDetail.scheme.details.hmac.hashAlg = TPM2_ALG_SHA256;
  109. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Marshal(&pub, buffer, buffer_size, &offset);
  110. assert_int_equal (rc, TSS2_RC_SUCCESS);
  111. ptr4 = (TPMT_PUBLIC_PARMS *)(buffer + 10);
  112. ptr5 = (TPMS_KEYEDHASH_PARMS *)(buffer + 10 + 2);
  113. assert_int_equal (ptr4->type, HOST_TO_BE_16(TPM2_ALG_KEYEDHASH));
  114. assert_int_equal (ptr5->scheme.scheme, HOST_TO_BE_16(TPM2_ALG_HMAC));
  115. assert_int_equal (ptr5->scheme.details.hmac.hashAlg, HOST_TO_BE_16(TPM2_ALG_SHA256));
  116. assert_int_equal (offset, 10 + 2 + 2 + 2);
  117. }
  118. /*
  119. * Success case with a null buffer
  120. */
  121. static void
  122. tpmt_marshal_buffer_null_with_offset(void **state)
  123. {
  124. TPMT_TK_CREATION tkt = {0};
  125. TPMT_PUBLIC_PARMS pub = {0};
  126. size_t buffer_size = sizeof(tkt) + sizeof(pub) + 10;
  127. size_t offset = 10;
  128. TSS2_RC rc;
  129. tkt.tag = 0xbeef;
  130. tkt.hierarchy = TPM2_RH_OWNER;
  131. tkt.digest.size = 4;
  132. tkt.digest.buffer[0] = 0xde;
  133. tkt.digest.buffer[1] = 0xad;
  134. tkt.digest.buffer[2] = 0xbe;
  135. tkt.digest.buffer[3] = 0xef;
  136. rc = Tss2_MU_TPMT_TK_CREATION_Marshal(&tkt, NULL, buffer_size, &offset);
  137. assert_int_equal (rc, TSS2_RC_SUCCESS);
  138. assert_int_equal (offset, 10 + 2 + 4 + 2 + 1 + 1 + 1 + 1);
  139. offset = 10;
  140. pub.type = TPM2_ALG_KEYEDHASH;
  141. pub.parameters.keyedHashDetail.scheme.scheme = TPM2_ALG_HMAC;
  142. pub.parameters.keyedHashDetail.scheme.details.hmac.hashAlg = TPM2_ALG_SHA256;
  143. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Marshal(&pub, NULL, buffer_size, &offset);
  144. assert_int_equal (rc, TSS2_RC_SUCCESS);
  145. assert_int_equal (offset, 10 + 2 + 2 + 2);
  146. }
  147. /*
  148. * Invalid case with a null buffer and a null offset
  149. */
  150. static void
  151. tpmt_marshal_buffer_null_offset_null(void **state)
  152. {
  153. TPMT_TK_CREATION tkt = {0};
  154. TPMT_PUBLIC_PARMS pub = {0};
  155. TSS2_RC rc;
  156. rc = Tss2_MU_TPMT_TK_CREATION_Marshal(&tkt, NULL, sizeof(tkt), NULL);
  157. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  158. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Marshal(&pub, NULL, sizeof(pub), NULL);
  159. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  160. }
  161. /*
  162. * Invalid case with not big enough buffer
  163. */
  164. static void
  165. tpmt_marshal_buffer_size_lt_data_nad_lt_offset(void **state)
  166. {
  167. TPMT_TK_CREATION tkt = {0};
  168. TPMT_PUBLIC_PARMS pub = {0};
  169. uint8_t buffer[sizeof(tkt) + sizeof(pub) + 10] = { 0 };
  170. size_t offset = 10;
  171. TSS2_RC rc;
  172. tkt.tag = 0xbeef;
  173. tkt.hierarchy = TPM2_RH_OWNER;
  174. tkt.digest.size = 4;
  175. tkt.digest.buffer[0] = 0xde;
  176. tkt.digest.buffer[1] = 0xad;
  177. tkt.digest.buffer[2] = 0xbe;
  178. tkt.digest.buffer[3] = 0xef;
  179. rc = Tss2_MU_TPMT_TK_CREATION_Marshal(&tkt, buffer, 10, &offset);
  180. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  181. assert_int_equal (offset, 10);
  182. pub.type = TPM2_ALG_KEYEDHASH;
  183. pub.parameters.keyedHashDetail.scheme.scheme = TPM2_ALG_HMAC;
  184. pub.parameters.keyedHashDetail.scheme.details.hmac.hashAlg = TPM2_ALG_SHA256;
  185. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Marshal(&pub, buffer, 8, &offset);
  186. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  187. assert_int_equal (offset, 10);
  188. }
  189. /*
  190. * Success case
  191. */
  192. static void
  193. tpmt_unmarshal_success(void **state)
  194. {
  195. TPMT_TK_CREATION tkt = {0};
  196. TPMT_PUBLIC_PARMS pub = {0};
  197. uint8_t buffer[sizeof(tkt) + sizeof(pub)] = { 0 };
  198. size_t buffer_size = sizeof(buffer);
  199. TPMT_TK_CREATION *ptr;
  200. TPMI_RH_HIERARCHY *ptr2;
  201. TPM2B_DIGEST *ptr3;
  202. TPMT_PUBLIC_PARMS *ptr4;
  203. TPMS_KEYEDHASH_PARMS *ptr5;
  204. size_t offset = 0;
  205. TSS2_RC rc;
  206. ptr = (TPMT_TK_CREATION *)(buffer);
  207. ptr2 = (TPMI_RH_HIERARCHY *)(buffer + sizeof(tkt.tag));
  208. ptr3 = (TPM2B_DIGEST *)(buffer + sizeof(tkt.tag) + sizeof(tkt.hierarchy));
  209. ptr->tag = HOST_TO_BE_16(0xbeef);
  210. *ptr2 = HOST_TO_BE_32(TPM2_RH_OWNER);
  211. ptr3->size = HOST_TO_BE_16(4);
  212. ptr3->buffer[0] = 0xde;
  213. ptr3->buffer[1] = 0xad;
  214. ptr3->buffer[2] = 0xbe;
  215. ptr3->buffer[3] = 0xef;
  216. rc = Tss2_MU_TPMT_TK_CREATION_Unmarshal(buffer, buffer_size, &offset, &tkt);
  217. assert_int_equal (rc, TSS2_RC_SUCCESS);
  218. assert_int_equal (tkt.tag, 0xbeef);
  219. assert_int_equal (tkt.hierarchy, TPM2_RH_OWNER);
  220. assert_int_equal (tkt.digest.size, 4);
  221. assert_int_equal (tkt.digest.buffer[0], 0xde);
  222. assert_int_equal (tkt.digest.buffer[1], 0xad);
  223. assert_int_equal (tkt.digest.buffer[2], 0xbe);
  224. assert_int_equal (tkt.digest.buffer[3], 0xef);
  225. assert_int_equal (offset, 2 + 4 + 2 + 1 + 1 + 1 + 1);
  226. offset = 0;
  227. ptr4 = (TPMT_PUBLIC_PARMS *)(buffer);
  228. ptr5 = (TPMS_KEYEDHASH_PARMS *)(buffer + 2);
  229. ptr4->type = HOST_TO_BE_16(TPM2_ALG_KEYEDHASH);
  230. ptr5->scheme.scheme = HOST_TO_BE_16(TPM2_ALG_HMAC);
  231. ptr5->scheme.details.hmac.hashAlg = HOST_TO_BE_16(TPM2_ALG_SHA256);
  232. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Unmarshal(buffer, buffer_size, &offset, &pub);
  233. assert_int_equal (rc, TSS2_RC_SUCCESS);
  234. assert_int_equal (pub.type, TPM2_ALG_KEYEDHASH);
  235. assert_int_equal (pub.parameters.keyedHashDetail.scheme.scheme, TPM2_ALG_HMAC);
  236. assert_int_equal (pub.parameters.keyedHashDetail.scheme.details.hmac.hashAlg, TPM2_ALG_SHA256);
  237. assert_int_equal (offset, 2 + 2 + 2);
  238. }
  239. /*
  240. * Invalid test case with buffer null and dest null
  241. */
  242. static void
  243. tpmt_unmarshal_dest_null_buff_null(void **state)
  244. {
  245. size_t offset = 1;
  246. TSS2_RC rc;
  247. rc = Tss2_MU_TPMT_TK_CREATION_Unmarshal(NULL, 120, &offset, NULL);
  248. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  249. assert_int_equal (offset, 1);
  250. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Unmarshal(NULL, 120, &offset, NULL);
  251. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  252. assert_int_equal (offset, 1);
  253. }
  254. /*
  255. * Invalid test case with offset null and dest null
  256. */
  257. static void
  258. tpmt_unmarshal_buffer_null_offset_null(void **state)
  259. {
  260. uint8_t buffer[sizeof(TPMT_TK_CREATION) + sizeof(TPMT_PUBLIC_PARMS)] = { 0 };
  261. size_t buffer_size = sizeof(buffer);
  262. TSS2_RC rc;
  263. rc = Tss2_MU_TPMT_TK_CREATION_Unmarshal(buffer, buffer_size, NULL, NULL);
  264. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  265. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Unmarshal(buffer, buffer_size, NULL, NULL);
  266. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  267. }
  268. /*
  269. * Test case ensures the offset is updated when dest is NULL
  270. * and offset is valid
  271. */
  272. static void
  273. tpmt_unmarshal_dest_null_offset_valid(void **state)
  274. {
  275. TPMT_TK_CREATION tkt;
  276. uint8_t buffer[sizeof(tkt) + sizeof(TPMT_PUBLIC_PARMS)] = { 0 };
  277. size_t buffer_size = sizeof(buffer);
  278. TPMT_TK_CREATION *ptr;
  279. TPMI_RH_HIERARCHY *ptr2;
  280. TPM2B_DIGEST *ptr3;
  281. TPMT_PUBLIC_PARMS *ptr4;
  282. TPMS_KEYEDHASH_PARMS *ptr5;
  283. size_t offset = 0;
  284. TSS2_RC rc;
  285. ptr = (TPMT_TK_CREATION *)(buffer);
  286. ptr2 = (TPMI_RH_HIERARCHY *)(buffer + sizeof(tkt.tag));
  287. ptr3 = (TPM2B_DIGEST *)(buffer + sizeof(tkt.tag) + sizeof(tkt.hierarchy));
  288. ptr->tag = HOST_TO_BE_16(0xbeef);
  289. *ptr2 = HOST_TO_BE_32(TPM2_RH_OWNER);
  290. ptr3->size = HOST_TO_BE_16(4);
  291. ptr3->buffer[0] = 0xde;
  292. ptr3->buffer[1] = 0xad;
  293. ptr3->buffer[2] = 0xbe;
  294. ptr3->buffer[3] = 0xef;
  295. rc = Tss2_MU_TPMT_TK_CREATION_Unmarshal(buffer, buffer_size, &offset, NULL);
  296. assert_int_equal (rc, TSS2_RC_SUCCESS);
  297. assert_int_equal (offset, 2 + 4 + 2 + 1 + 1 + 1 + 1);
  298. offset = 0;
  299. ptr4 = (TPMT_PUBLIC_PARMS *)(buffer);
  300. ptr5 = (TPMS_KEYEDHASH_PARMS *)(buffer + 2);
  301. ptr4->type = HOST_TO_BE_16(TPM2_ALG_KEYEDHASH);
  302. ptr5->scheme.scheme = HOST_TO_BE_16(TPM2_ALG_HMAC);
  303. ptr5->scheme.details.hmac.hashAlg = HOST_TO_BE_16(TPM2_ALG_SHA256);
  304. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Unmarshal(buffer, buffer_size, &offset, NULL);
  305. assert_int_equal (rc, TSS2_RC_SUCCESS);
  306. assert_int_equal (offset, 2 + 2 + 2);
  307. }
  308. /*
  309. * Invalid case with not big enough buffer. Make sure offest is untouched.
  310. */
  311. static void
  312. tpmt_unmarshal_buffer_size_lt_data_nad_lt_offset(void **state)
  313. {
  314. TPMT_TK_CREATION tkt;
  315. uint8_t buffer[sizeof(tkt) + sizeof(TPMT_PUBLIC_PARMS)] = { 0 };
  316. TPMT_TK_CREATION *ptr;
  317. TPMI_RH_HIERARCHY *ptr2;
  318. TPM2B_DIGEST *ptr3;
  319. TPMT_PUBLIC_PARMS *ptr4;
  320. TPMS_KEYEDHASH_PARMS *ptr5;
  321. size_t offset = 5;
  322. TSS2_RC rc;
  323. ptr = (TPMT_TK_CREATION *)(buffer);
  324. ptr2 = (TPMI_RH_HIERARCHY *)(buffer + sizeof(tkt.tag));
  325. ptr3 = (TPM2B_DIGEST *)(buffer + sizeof(tkt.tag) + sizeof(tkt.hierarchy));
  326. ptr->tag = HOST_TO_BE_16(0xbeef);
  327. *ptr2 = HOST_TO_BE_32(TPM2_RH_OWNER);
  328. ptr3->size = HOST_TO_BE_16(4);
  329. ptr3->buffer[0] = 0xde;
  330. ptr3->buffer[1] = 0xad;
  331. ptr3->buffer[2] = 0xbe;
  332. ptr3->buffer[3] = 0xef;
  333. rc = Tss2_MU_TPMT_TK_CREATION_Unmarshal(buffer, 15, &offset, NULL);
  334. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  335. assert_int_equal (offset, 5);
  336. offset = 5;
  337. ptr4 = (TPMT_PUBLIC_PARMS *)(buffer);
  338. ptr5 = (TPMS_KEYEDHASH_PARMS *)(buffer + 2);
  339. ptr4->type = HOST_TO_BE_16(TPM2_ALG_KEYEDHASH);
  340. ptr5->scheme.scheme = HOST_TO_BE_16(TPM2_ALG_HMAC);
  341. ptr5->scheme.details.hmac.hashAlg = HOST_TO_BE_16(TPM2_ALG_SHA256);
  342. rc = Tss2_MU_TPMT_PUBLIC_PARMS_Unmarshal(buffer, 6, &offset, NULL);
  343. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  344. assert_int_equal (offset, 5);
  345. }
  346. static void
  347. tpmt_marshal_unmarshal_sig_invalid_selector(void **state)
  348. {
  349. TPMT_SIGNATURE sig = {0};
  350. uint8_t buf[256] = {0};
  351. size_t size = 256, offset = 0;
  352. TPM2_ALG_ID invalid_id = HOST_TO_BE_16(0xbeef);
  353. TPM2_RC rc;
  354. sig.sigAlg = invalid_id;
  355. /* Marshal with invalid selector case */
  356. rc = Tss2_MU_TPMT_SIGNATURE_Marshal(&sig, buf, sizeof(sig), &offset);
  357. assert_int_equal (rc, TSS2_MU_RC_BAD_VALUE);
  358. assert_int_equal (offset, 0);
  359. /* Unarshal with invalid selector case */
  360. rc = Tss2_MU_TPMT_SIGNATURE_Unmarshal(buf, size, &offset, &sig);
  361. assert_int_equal (rc, TSS2_MU_RC_BAD_VALUE);
  362. assert_int_equal (offset, 0);
  363. }
  364. int main(void) {
  365. const struct CMUnitTest tests[] = {
  366. cmocka_unit_test (tpmt_marshal_success),
  367. cmocka_unit_test (tpmt_marshal_success_offset),
  368. cmocka_unit_test (tpmt_marshal_buffer_null_with_offset),
  369. cmocka_unit_test (tpmt_marshal_buffer_null_offset_null),
  370. cmocka_unit_test (tpmt_marshal_buffer_size_lt_data_nad_lt_offset),
  371. cmocka_unit_test (tpmt_marshal_unmarshal_sig_invalid_selector),
  372. cmocka_unit_test (tpmt_unmarshal_success),
  373. cmocka_unit_test (tpmt_unmarshal_dest_null_buff_null),
  374. cmocka_unit_test (tpmt_unmarshal_buffer_null_offset_null),
  375. cmocka_unit_test (tpmt_unmarshal_dest_null_offset_valid),
  376. cmocka_unit_test (tpmt_unmarshal_buffer_size_lt_data_nad_lt_offset),
  377. };
  378. return cmocka_run_group_tests(tests, NULL, NULL);
  379. }