TPMU-marshal.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  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 <string.h>
  13. #include <setjmp.h>
  14. #include <cmocka.h>
  15. #include <stdio.h>
  16. #include "tss2_mu.h"
  17. #include "util/tss2_endian.h"
  18. /*
  19. * Success case
  20. */
  21. static void
  22. tpmu_marshal_success(void **state)
  23. {
  24. TPMU_HA ha = {0};
  25. TPMU_SIGNATURE sig = {0};
  26. uint8_t buffer[sizeof(ha) + sizeof(sig)] = { 0 };
  27. size_t buffer_size = sizeof(buffer);
  28. TPMS_SIGNATURE_ECDSA *ptr;
  29. TPM2B_ECC_PARAMETER *ptr2;
  30. TSS2_RC rc;
  31. memset(ha.sha512, 'a', TPM2_SHA512_DIGEST_SIZE);
  32. rc = Tss2_MU_TPMU_HA_Marshal(&ha, TPM2_ALG_SHA512, buffer, buffer_size, NULL);
  33. assert_int_equal (rc, TSS2_RC_SUCCESS);
  34. assert_int_equal (memcmp(buffer, ha.sha512, TPM2_SHA512_DIGEST_SIZE), 0);
  35. sig.ecdsa.hash = TPM2_ALG_SHA1;
  36. sig.ecdsa.signatureR.size = 4;
  37. sig.ecdsa.signatureR.buffer[0] = 'a';
  38. sig.ecdsa.signatureR.buffer[1] = 'b';
  39. sig.ecdsa.signatureR.buffer[2] = 'c';
  40. sig.ecdsa.signatureR.buffer[3] = 'd';
  41. sig.ecdsa.signatureS.size = 4;
  42. sig.ecdsa.signatureS.buffer[0] = 'e';
  43. sig.ecdsa.signatureS.buffer[1] = 'd';
  44. sig.ecdsa.signatureS.buffer[2] = 'f';
  45. sig.ecdsa.signatureS.buffer[3] = 'g';
  46. rc = Tss2_MU_TPMU_SIGNATURE_Marshal(&sig, TPM2_ALG_ECDSA, buffer, buffer_size, NULL);
  47. assert_int_equal (rc, TSS2_RC_SUCCESS);
  48. ptr = (TPMS_SIGNATURE_ECDSA *) buffer;
  49. assert_int_equal (ptr->hash, HOST_TO_BE_16(TPM2_ALG_SHA1));
  50. assert_int_equal (ptr->signatureR.size, HOST_TO_BE_16(4));
  51. assert_int_equal (ptr->signatureR.buffer[0], 'a');
  52. assert_int_equal (ptr->signatureR.buffer[1], 'b');
  53. assert_int_equal (ptr->signatureR.buffer[2], 'c');
  54. assert_int_equal (ptr->signatureR.buffer[3], 'd');
  55. ptr2 = (TPM2B_ECC_PARAMETER *) (buffer + 8);
  56. assert_int_equal (ptr2->size, HOST_TO_BE_16(4));
  57. assert_int_equal (ptr2->buffer[0], 'e');
  58. assert_int_equal (ptr2->buffer[1], 'd');
  59. assert_int_equal (ptr2->buffer[2], 'f');
  60. assert_int_equal (ptr2->buffer[3], 'g');
  61. }
  62. /*
  63. * Success case with a valid offset
  64. */
  65. static void
  66. tpmu_marshal_success_offset(void **state)
  67. {
  68. TPMU_HA ha = {0};
  69. TPMU_SIGNATURE sig = {0};
  70. uint8_t buffer[sizeof(ha) + sizeof(sig) + 10] = { 0 };
  71. size_t buffer_size = sizeof(buffer);
  72. TPMS_SIGNATURE_ECDSA *ptr;
  73. TPM2B_ECC_PARAMETER *ptr2;
  74. size_t offset = 10;
  75. TSS2_RC rc;
  76. memset(ha.sha512, 'a', TPM2_SHA512_DIGEST_SIZE);
  77. rc = Tss2_MU_TPMU_HA_Marshal(&ha, TPM2_ALG_SHA512, buffer, buffer_size, &offset);
  78. assert_int_equal (rc, TSS2_RC_SUCCESS);
  79. assert_int_equal (memcmp(buffer + 10, ha.sha512, TPM2_SHA512_DIGEST_SIZE), 0);
  80. assert_int_equal (offset, 10 + TPM2_SHA512_DIGEST_SIZE);
  81. sig.ecdsa.hash = TPM2_ALG_SHA1;
  82. sig.ecdsa.signatureR.size = 4;
  83. sig.ecdsa.signatureR.buffer[0] = 'a';
  84. sig.ecdsa.signatureR.buffer[1] = 'b';
  85. sig.ecdsa.signatureR.buffer[2] = 'c';
  86. sig.ecdsa.signatureR.buffer[3] = 'd';
  87. sig.ecdsa.signatureS.size = 4;
  88. sig.ecdsa.signatureS.buffer[0] = 'e';
  89. sig.ecdsa.signatureS.buffer[1] = 'd';
  90. sig.ecdsa.signatureS.buffer[2] = 'f';
  91. sig.ecdsa.signatureS.buffer[3] = 'g';
  92. rc = Tss2_MU_TPMU_SIGNATURE_Marshal(&sig, TPM2_ALG_ECDSA, buffer, buffer_size, &offset);
  93. assert_int_equal (rc, TSS2_RC_SUCCESS);
  94. ptr = (TPMS_SIGNATURE_ECDSA *) (buffer + 10 + TPM2_SHA512_DIGEST_SIZE);
  95. assert_int_equal (ptr->hash, HOST_TO_BE_16(TPM2_ALG_SHA1));
  96. assert_int_equal (ptr->signatureR.size, HOST_TO_BE_16(4));
  97. assert_int_equal (ptr->signatureR.buffer[0], 'a');
  98. assert_int_equal (ptr->signatureR.buffer[1], 'b');
  99. assert_int_equal (ptr->signatureR.buffer[2], 'c');
  100. assert_int_equal (ptr->signatureR.buffer[3], 'd');
  101. ptr2 = (TPM2B_ECC_PARAMETER *) (buffer + 10 + TPM2_SHA512_DIGEST_SIZE + 8);
  102. assert_int_equal (ptr2->size, HOST_TO_BE_16(4));
  103. assert_int_equal (ptr2->buffer[0], 'e');
  104. assert_int_equal (ptr2->buffer[1], 'd');
  105. assert_int_equal (ptr2->buffer[2], 'f');
  106. assert_int_equal (ptr2->buffer[3], 'g');
  107. assert_int_equal (offset, 10 + TPM2_SHA512_DIGEST_SIZE + 2 + ((2 + 1 + 1 + 1 + 1) * 2));
  108. }
  109. /*
  110. * Success case with a null buffer
  111. */
  112. static void
  113. tpmu_marshal_buffer_null_with_offset(void **state)
  114. {
  115. TPMU_HA ha = {0};
  116. TPMU_SIGNATURE sig = {0};
  117. size_t buffer_size = sizeof(ha) + sizeof(sig) + 10;
  118. size_t offset = 10;
  119. TSS2_RC rc;
  120. memset(ha.sha512, 'a', TPM2_SHA512_DIGEST_SIZE);
  121. rc = Tss2_MU_TPMU_HA_Marshal(&ha, TPM2_ALG_SHA512, NULL, buffer_size, &offset);
  122. assert_int_equal (rc, TSS2_RC_SUCCESS);
  123. assert_int_equal (offset, 10 + TPM2_SHA512_DIGEST_SIZE);
  124. sig.ecdsa.hash = TPM2_ALG_SHA1;
  125. sig.ecdsa.signatureR.size = 4;
  126. sig.ecdsa.signatureR.buffer[0] = 'a';
  127. sig.ecdsa.signatureR.buffer[1] = 'b';
  128. sig.ecdsa.signatureR.buffer[2] = 'c';
  129. sig.ecdsa.signatureR.buffer[3] = 'd';
  130. sig.ecdsa.signatureS.size = 4;
  131. sig.ecdsa.signatureS.buffer[0] = 'e';
  132. sig.ecdsa.signatureS.buffer[1] = 'd';
  133. sig.ecdsa.signatureS.buffer[2] = 'f';
  134. sig.ecdsa.signatureS.buffer[3] = 'g';
  135. rc = Tss2_MU_TPMU_SIGNATURE_Marshal(&sig, TPM2_ALG_ECDSA, NULL, buffer_size, &offset);
  136. assert_int_equal (rc, TSS2_RC_SUCCESS);
  137. assert_int_equal (offset, 10 + TPM2_SHA512_DIGEST_SIZE + 2 + ((2 + 1 + 1 + 1 + 1) * 2));
  138. }
  139. /*
  140. * Invalid case with a null buffer and a null offset
  141. */
  142. static void
  143. tpmu_marshal_buffer_null_offset_null(void **state)
  144. {
  145. TPMU_HA ha = {0};
  146. TPMU_SIGNATURE sig = {0};
  147. TSS2_RC rc;
  148. rc = Tss2_MU_TPMU_HA_Marshal(&ha, TPM2_ALG_SHA512, NULL, sizeof(ha), NULL);
  149. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  150. rc = Tss2_MU_TPMU_SIGNATURE_Marshal(&sig, TPM2_ALG_ECDSA, NULL, sizeof(sig), NULL);
  151. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  152. }
  153. /*
  154. * Invalid case with not big enough buffer
  155. */
  156. static void
  157. tpmu_marshal_buffer_size_lt_data_nad_lt_offset(void **state)
  158. {
  159. TPMU_HA ha = {0};
  160. TPMU_SIGNATURE sig = {0};
  161. uint8_t buffer[sizeof(ha) + sizeof(sig) + 10] = { 0 };
  162. size_t offset = 10;
  163. TSS2_RC rc;
  164. memset(ha.sha512, 'a', TPM2_SHA512_DIGEST_SIZE);
  165. rc = Tss2_MU_TPMU_HA_Marshal(&ha, TPM2_ALG_SHA512, buffer, TPM2_SHA512_DIGEST_SIZE - 1, &offset);
  166. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  167. assert_int_equal (offset, 10);
  168. sig.ecdsa.hash = TPM2_ALG_SHA1;
  169. sig.ecdsa.signatureR.size = 4;
  170. sig.ecdsa.signatureR.buffer[0] = 'a';
  171. sig.ecdsa.signatureR.buffer[1] = 'b';
  172. sig.ecdsa.signatureR.buffer[2] = 'c';
  173. sig.ecdsa.signatureR.buffer[3] = 'd';
  174. sig.ecdsa.signatureS.size = 4;
  175. sig.ecdsa.signatureS.buffer[0] = 'e';
  176. sig.ecdsa.signatureS.buffer[1] = 'd';
  177. sig.ecdsa.signatureS.buffer[2] = 'f';
  178. sig.ecdsa.signatureS.buffer[3] = 'g';
  179. rc = Tss2_MU_TPMU_SIGNATURE_Marshal(&sig, TPM2_ALG_ECDSA, buffer, 12, &offset);
  180. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  181. assert_int_equal (offset, 10);
  182. }
  183. /*
  184. * Success case
  185. */
  186. static void
  187. tpmu_unmarshal_success(void **state)
  188. {
  189. TPMU_HA ha = {0};
  190. TPMU_SIGNATURE sig = {0};
  191. uint8_t buffer[sizeof(ha) + sizeof(sig)] = { 0 };
  192. size_t buffer_size = sizeof(buffer);
  193. TPMS_SIGNATURE_ECDSA *ptr;
  194. TPM2B_ECC_PARAMETER *ptr2;
  195. size_t offset = 0;
  196. TSS2_RC rc;
  197. memset(buffer, 'a', TPM2_SHA512_DIGEST_SIZE);
  198. rc = Tss2_MU_TPMU_HA_Unmarshal(buffer, buffer_size, &offset, TPM2_ALG_SHA512, &ha);
  199. assert_int_equal (rc, TSS2_RC_SUCCESS);
  200. assert_int_equal (offset, TPM2_SHA512_DIGEST_SIZE);
  201. assert_int_equal (memcmp(buffer, ha.sha512, TPM2_SHA512_DIGEST_SIZE), 0);
  202. offset = 0;
  203. ptr = (TPMS_SIGNATURE_ECDSA *) buffer;
  204. ptr2 = (TPM2B_ECC_PARAMETER *) (buffer + 8);
  205. ptr->hash = HOST_TO_BE_16(TPM2_ALG_SHA1);
  206. ptr->signatureR.size = HOST_TO_BE_16(4);
  207. ptr->signatureR.buffer[0] = 'a';
  208. ptr->signatureR.buffer[1] = 'b';
  209. ptr->signatureR.buffer[2] = 'c';
  210. ptr->signatureR.buffer[3] = 'd';
  211. ptr2->size = HOST_TO_BE_16(4);
  212. ptr2->buffer[0] = 'e';
  213. ptr2->buffer[1] = 'd';
  214. ptr2->buffer[2] = 'f';
  215. ptr2->buffer[3] = 'g';
  216. rc = Tss2_MU_TPMU_SIGNATURE_Unmarshal(buffer, buffer_size, &offset, TPM2_ALG_ECDSA, &sig);
  217. assert_int_equal (rc, TSS2_RC_SUCCESS);
  218. assert_int_equal (offset, 14);
  219. assert_int_equal (sig.ecdsa.hash, TPM2_ALG_SHA1);
  220. assert_int_equal (sig.ecdsa.signatureR.size, 4);
  221. assert_int_equal (sig.ecdsa.signatureR.buffer[0], 'a');
  222. assert_int_equal (sig.ecdsa.signatureR.buffer[1], 'b');
  223. assert_int_equal (sig.ecdsa.signatureR.buffer[2], 'c');
  224. assert_int_equal (sig.ecdsa.signatureR.buffer[3], 'd');
  225. assert_int_equal (sig.ecdsa.signatureS.size, 4);
  226. assert_int_equal (sig.ecdsa.signatureS.buffer[0], 'e');
  227. assert_int_equal (sig.ecdsa.signatureS.buffer[1], 'd');
  228. assert_int_equal (sig.ecdsa.signatureS.buffer[2], 'f');
  229. assert_int_equal (sig.ecdsa.signatureS.buffer[3], 'g');
  230. }
  231. /*
  232. * Invalid test case with buffer null and dest null
  233. */
  234. static void
  235. tpmu_unmarshal_dest_null_buff_null(void **state)
  236. {
  237. size_t offset = 1;
  238. TSS2_RC rc;
  239. rc = Tss2_MU_TPMU_HA_Unmarshal(NULL, TPM2_SHA512_DIGEST_SIZE, &offset, TPM2_ALG_SHA512, NULL);
  240. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  241. assert_int_equal (offset, 1);
  242. rc = Tss2_MU_TPMU_SIGNATURE_Unmarshal(NULL, 32, &offset, TPM2_ALG_ECDSA, NULL);
  243. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  244. assert_int_equal (offset, 1);
  245. }
  246. /*
  247. * Invalid test case with offset null and dest null
  248. */
  249. static void
  250. tpmu_unmarshal_buffer_null_offset_null(void **state)
  251. {
  252. uint8_t buffer[sizeof(TPMU_HA) + sizeof(TPMU_SIGNATURE)] = { 0 };
  253. size_t buffer_size = sizeof(buffer);
  254. TSS2_RC rc;
  255. rc = Tss2_MU_TPMU_HA_Unmarshal(buffer, buffer_size, NULL, TPM2_ALG_SHA512, NULL);
  256. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  257. rc = Tss2_MU_TPMU_SIGNATURE_Unmarshal(buffer, buffer_size, NULL, TPM2_ALG_ECDSA, NULL);
  258. assert_int_equal (rc, TSS2_MU_RC_BAD_REFERENCE);
  259. }
  260. /*
  261. * Test case ensures the offset is updated when dest is NULL
  262. * and offset is valid
  263. */
  264. static void
  265. tpmu_unmarshal_dest_null_offset_valid(void **state)
  266. {
  267. uint8_t buffer[sizeof(TPMU_HA) + sizeof(TPMU_SIGNATURE)] = { 0 };
  268. size_t buffer_size = sizeof(buffer);
  269. TPMS_SIGNATURE_ECDSA *ptr;
  270. TPM2B_ECC_PARAMETER *ptr2;
  271. size_t offset = 0;
  272. TSS2_RC rc;
  273. memset(buffer, 'a', TPM2_SHA512_DIGEST_SIZE);
  274. rc = Tss2_MU_TPMU_HA_Unmarshal(buffer, buffer_size, &offset, TPM2_ALG_SHA512, NULL);
  275. assert_int_equal (rc, TSS2_RC_SUCCESS);
  276. assert_int_equal (offset, TPM2_SHA512_DIGEST_SIZE);
  277. offset = 0;
  278. ptr = (TPMS_SIGNATURE_ECDSA *) buffer;
  279. ptr2 = (TPM2B_ECC_PARAMETER *) (buffer + 8);
  280. ptr->hash = HOST_TO_BE_16(TPM2_ALG_SHA1);
  281. ptr->signatureR.size = HOST_TO_BE_16(4);
  282. ptr->signatureR.buffer[0] = 'a';
  283. ptr->signatureR.buffer[1] = 'b';
  284. ptr->signatureR.buffer[2] = 'c';
  285. ptr->signatureR.buffer[3] = 'd';
  286. ptr2->size = HOST_TO_BE_16(4);
  287. ptr2->buffer[0] = 'e';
  288. ptr2->buffer[1] = 'd';
  289. ptr2->buffer[2] = 'f';
  290. ptr2->buffer[3] = 'g';
  291. rc = Tss2_MU_TPMU_SIGNATURE_Unmarshal(buffer, buffer_size, &offset, TPM2_ALG_ECDSA, NULL);
  292. assert_int_equal (rc, TSS2_RC_SUCCESS);
  293. assert_int_equal (offset, 14);
  294. }
  295. /*
  296. * Invalid case with not big enough buffer. Make sure offest is untouched.
  297. */
  298. static void
  299. tpmu_unmarshal_buffer_size_lt_data_nad_lt_offset(void **state)
  300. {
  301. TPMU_HA ha = {0};
  302. TPMU_SIGNATURE sig = {0};
  303. uint8_t buffer[sizeof(ha) + sizeof(sig)] = { 0 };
  304. TPMS_SIGNATURE_ECDSA *ptr;
  305. TPM2B_ECC_PARAMETER *ptr2;
  306. size_t offset = 5;
  307. TSS2_RC rc;
  308. memset(buffer, 'a', TPM2_SHA512_DIGEST_SIZE);
  309. rc = Tss2_MU_TPMU_HA_Unmarshal(buffer, TPM2_SHA512_DIGEST_SIZE - 1, &offset, TPM2_ALG_SHA512, &ha);
  310. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  311. assert_int_equal (offset, 5);
  312. ptr = (TPMS_SIGNATURE_ECDSA *) buffer;
  313. ptr2 = (TPM2B_ECC_PARAMETER *) (buffer + 8);
  314. ptr->hash = HOST_TO_BE_16(TPM2_ALG_SHA1);
  315. ptr->signatureR.size = HOST_TO_BE_16(4);
  316. ptr->signatureR.buffer[0] = 'a';
  317. ptr->signatureR.buffer[1] = 'b';
  318. ptr->signatureR.buffer[2] = 'c';
  319. ptr->signatureR.buffer[3] = 'd';
  320. ptr2->size = HOST_TO_BE_16(4);
  321. ptr2->buffer[0] = 'e';
  322. ptr2->buffer[1] = 'd';
  323. ptr2->buffer[2] = 'f';
  324. ptr2->buffer[3] = 'g';
  325. rc = Tss2_MU_TPMU_SIGNATURE_Unmarshal(buffer, 14, &offset, TPM2_ALG_ECDSA, &sig);
  326. assert_int_equal (rc, TSS2_MU_RC_INSUFFICIENT_BUFFER);
  327. assert_int_equal (offset, 5);
  328. }
  329. static void
  330. tpmu_name_marshal(void **state)
  331. {
  332. TPMU_NAME name = {0};
  333. TPMT_HA ha = {0};
  334. uint8_t buf[256] = {0};
  335. TPM2_HANDLE hdl = TPM2_RH_PW;
  336. TPM2_HANDLE hdl_expected = HOST_TO_BE_32(TPM2_RH_PW);
  337. TPM2_ALG_ID id_expected = HOST_TO_BE_16(TPM2_ALG_SHA1);
  338. size_t size = sizeof(hdl), offset = 0;
  339. const char digest[] = {0xa, 0xb, 0xc, 0xd, 0xe, 0xf, 0x01, 0x02,
  340. 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
  341. 0x10, 0x11, 0x12, 0x13, 0x14};
  342. TPM2_RC rc;
  343. /* Handle case */
  344. size = sizeof(hdl);
  345. name.handle = hdl;
  346. rc = Tss2_MU_TPMU_NAME_Marshal(&name, size, buf, sizeof(hdl), &offset);
  347. assert_int_equal (rc, TSS2_RC_SUCCESS);
  348. assert_int_equal (offset, sizeof(hdl));
  349. assert_memory_equal ((void *) buf, &hdl_expected, sizeof(hdl));
  350. /* Digest case */
  351. offset = 0;
  352. size = sizeof(TPM2_ALG_ID) + TPM2_SHA1_DIGEST_SIZE;
  353. ha.hashAlg = TPM2_ALG_SHA1;
  354. memcpy(&ha.digest, digest, TPM2_SHA1_DIGEST_SIZE);
  355. memcpy(&name.digest, &ha, sizeof(ha));
  356. rc = Tss2_MU_TPMU_NAME_Marshal(&name, size, buf, TPM2_SHA1_DIGEST_SIZE + 2, &offset);
  357. assert_int_equal (rc, TSS2_RC_SUCCESS);
  358. assert_int_equal (offset, TPM2_SHA1_DIGEST_SIZE + 2);
  359. assert_memory_equal (buf, &id_expected, sizeof(TPM2_ALG_ID));
  360. assert_memory_equal (buf + 2, digest, TPM2_SHA1_DIGEST_SIZE);
  361. }
  362. int main(void) {
  363. const struct CMUnitTest tests[] = {
  364. cmocka_unit_test (tpmu_marshal_success),
  365. cmocka_unit_test (tpmu_marshal_success_offset),
  366. cmocka_unit_test (tpmu_marshal_buffer_null_with_offset),
  367. cmocka_unit_test (tpmu_marshal_buffer_null_offset_null),
  368. cmocka_unit_test (tpmu_marshal_buffer_size_lt_data_nad_lt_offset),
  369. cmocka_unit_test (tpmu_unmarshal_success),
  370. cmocka_unit_test (tpmu_unmarshal_dest_null_buff_null),
  371. cmocka_unit_test (tpmu_unmarshal_buffer_null_offset_null),
  372. cmocka_unit_test (tpmu_unmarshal_dest_null_offset_valid),
  373. cmocka_unit_test (tpmu_unmarshal_buffer_size_lt_data_nad_lt_offset),
  374. cmocka_unit_test (tpmu_name_marshal),
  375. };
  376. return cmocka_run_group_tests(tests, NULL, NULL);
  377. }