test_tpm2_eventlog_yaml.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /* SPDX-License-Identifier: BSD-3-Clause */
  2. #include <stdbool.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <setjmp.h>
  6. #include <cmocka.h>
  7. #include <tss2/tss2_tpm2_types.h>
  8. #include "tpm2_eventlog_yaml.h"
  9. #define TCG_DIGEST2_SHA1_SIZE (sizeof(TCG_DIGEST2) + TPM2_SHA_DIGEST_SIZE)
  10. #define def_eventtype_to_string(ev) \
  11. static void eventtype_to_string_##ev(void **state){ \
  12. (void)state; \
  13. assert_string_equal(eventtype_to_string(ev), #ev); \
  14. }
  15. def_eventtype_to_string(EV_PREBOOT_CERT)
  16. def_eventtype_to_string(EV_POST_CODE)
  17. def_eventtype_to_string(EV_UNUSED)
  18. def_eventtype_to_string(EV_NO_ACTION)
  19. def_eventtype_to_string(EV_SEPARATOR)
  20. def_eventtype_to_string(EV_ACTION)
  21. def_eventtype_to_string(EV_EVENT_TAG)
  22. def_eventtype_to_string(EV_S_CRTM_CONTENTS)
  23. def_eventtype_to_string(EV_S_CRTM_VERSION)
  24. def_eventtype_to_string(EV_CPU_MICROCODE)
  25. def_eventtype_to_string(EV_PLATFORM_CONFIG_FLAGS)
  26. def_eventtype_to_string(EV_TABLE_OF_DEVICES)
  27. def_eventtype_to_string(EV_COMPACT_HASH)
  28. def_eventtype_to_string(EV_IPL)
  29. def_eventtype_to_string(EV_IPL_PARTITION_DATA)
  30. def_eventtype_to_string(EV_NONHOST_CODE)
  31. def_eventtype_to_string(EV_NONHOST_CONFIG)
  32. def_eventtype_to_string(EV_NONHOST_INFO)
  33. def_eventtype_to_string(EV_OMIT_BOOT_DEVICE_EVENTS)
  34. def_eventtype_to_string(EV_EFI_VARIABLE_DRIVER_CONFIG)
  35. def_eventtype_to_string(EV_EFI_VARIABLE_BOOT)
  36. def_eventtype_to_string(EV_EFI_BOOT_SERVICES_APPLICATION)
  37. def_eventtype_to_string(EV_EFI_BOOT_SERVICES_DRIVER)
  38. def_eventtype_to_string(EV_EFI_RUNTIME_SERVICES_DRIVER)
  39. def_eventtype_to_string(EV_EFI_GPT_EVENT)
  40. def_eventtype_to_string(EV_EFI_ACTION)
  41. def_eventtype_to_string(EV_EFI_PLATFORM_FIRMWARE_BLOB)
  42. def_eventtype_to_string(EV_EFI_HANDOFF_TABLES)
  43. def_eventtype_to_string(EV_EFI_VARIABLE_AUTHORITY)
  44. static void eventtype_to_string_default(void **state) {
  45. (void)state;
  46. assert_string_equal(eventtype_to_string(666), "Unknown event type");
  47. }
  48. static void test_yaml_digest2_callback(void **state) {
  49. (void)state;
  50. uint8_t buf [TCG_DIGEST2_SHA1_SIZE];
  51. TCG_DIGEST2 *digest = (TCG_DIGEST2*)buf;
  52. size_t count = 0;
  53. digest->AlgorithmId = TPM2_ALG_SHA1;
  54. assert_true(yaml_digest2_callback(digest, TPM2_SHA1_DIGEST_SIZE, &count));
  55. }
  56. static void test_yaml_event2data_version1(void **state) {
  57. (void)state;
  58. uint8_t buf [sizeof(TCG_EVENT2) + 6];
  59. TCG_EVENT2 *event = (TCG_EVENT2*)buf;
  60. event->EventSize = 6;
  61. assert_true(yaml_event2data(event, EV_PREBOOT_CERT, 1));
  62. }
  63. static void test_yaml_event2data_version2(void **state) {
  64. (void)state;
  65. uint8_t buf [sizeof(TCG_EVENT2) + 6];
  66. TCG_EVENT2 *event = (TCG_EVENT2*)buf;
  67. event->EventSize = 6;
  68. assert_true(yaml_event2data(event, EV_PREBOOT_CERT, 2));
  69. }
  70. static void test_yaml_event2hdr_callback(void **state){
  71. (void)state;
  72. uint8_t buf [sizeof(TCG_EVENT_HEADER2) + TCG_DIGEST2_SHA1_SIZE + sizeof(TCG_EVENT2) + 2] = { 0, };
  73. TCG_EVENT_HEADER2 *eventhdr = (TCG_EVENT_HEADER2*)buf;
  74. TCG_DIGEST2 *digest = (TCG_DIGEST2*)(eventhdr->Digests);
  75. TCG_EVENT2 *event = (TCG_EVENT2*)(buf + sizeof(*eventhdr) + TCG_DIGEST2_SHA1_SIZE);
  76. size_t count = 0;
  77. eventhdr->DigestCount = 1;
  78. digest->AlgorithmId = TPM2_ALG_SHA1;
  79. digest->Digest[0] = 0xef;
  80. event->EventSize = 2;
  81. assert_true(yaml_event2hdr_callback(eventhdr, sizeof(buf), &count));
  82. }
  83. static void test_yaml_event2hdr_callback_nulldata(void **state){
  84. (void)state;
  85. assert_false(yaml_event2hdr_callback(NULL, 0, NULL));
  86. }
  87. static void test_yaml_eventlog(void **state){
  88. (void)state;
  89. assert_false(yaml_eventlog(NULL, 0, 1));
  90. }
  91. int main(void) {
  92. const struct CMUnitTest tests[] = {
  93. cmocka_unit_test(eventtype_to_string_EV_PREBOOT_CERT),
  94. cmocka_unit_test(eventtype_to_string_EV_POST_CODE),
  95. cmocka_unit_test(eventtype_to_string_EV_UNUSED),
  96. cmocka_unit_test(eventtype_to_string_EV_NO_ACTION),
  97. cmocka_unit_test(eventtype_to_string_EV_SEPARATOR),
  98. cmocka_unit_test(eventtype_to_string_EV_ACTION),
  99. cmocka_unit_test(eventtype_to_string_EV_EVENT_TAG),
  100. cmocka_unit_test(eventtype_to_string_EV_S_CRTM_CONTENTS),
  101. cmocka_unit_test(eventtype_to_string_EV_S_CRTM_VERSION),
  102. cmocka_unit_test(eventtype_to_string_EV_CPU_MICROCODE),
  103. cmocka_unit_test(eventtype_to_string_EV_PLATFORM_CONFIG_FLAGS),
  104. cmocka_unit_test(eventtype_to_string_EV_TABLE_OF_DEVICES),
  105. cmocka_unit_test(eventtype_to_string_EV_COMPACT_HASH),
  106. cmocka_unit_test(eventtype_to_string_EV_IPL),
  107. cmocka_unit_test(eventtype_to_string_EV_IPL_PARTITION_DATA),
  108. cmocka_unit_test(eventtype_to_string_EV_NONHOST_CODE),
  109. cmocka_unit_test(eventtype_to_string_EV_NONHOST_CONFIG),
  110. cmocka_unit_test(eventtype_to_string_EV_NONHOST_INFO),
  111. cmocka_unit_test(eventtype_to_string_EV_OMIT_BOOT_DEVICE_EVENTS),
  112. cmocka_unit_test(eventtype_to_string_EV_EFI_VARIABLE_DRIVER_CONFIG),
  113. cmocka_unit_test(eventtype_to_string_EV_EFI_VARIABLE_BOOT),
  114. cmocka_unit_test(eventtype_to_string_EV_EFI_BOOT_SERVICES_APPLICATION),
  115. cmocka_unit_test(eventtype_to_string_EV_EFI_BOOT_SERVICES_DRIVER),
  116. cmocka_unit_test(eventtype_to_string_EV_EFI_RUNTIME_SERVICES_DRIVER),
  117. cmocka_unit_test(eventtype_to_string_EV_EFI_GPT_EVENT),
  118. cmocka_unit_test(eventtype_to_string_EV_EFI_ACTION),
  119. cmocka_unit_test(eventtype_to_string_EV_EFI_PLATFORM_FIRMWARE_BLOB),
  120. cmocka_unit_test(eventtype_to_string_EV_EFI_HANDOFF_TABLES),
  121. cmocka_unit_test(eventtype_to_string_EV_EFI_VARIABLE_AUTHORITY),
  122. cmocka_unit_test(eventtype_to_string_default),
  123. cmocka_unit_test(test_yaml_event2hdr_callback),
  124. cmocka_unit_test(test_yaml_event2hdr_callback_nulldata),
  125. cmocka_unit_test(test_yaml_digest2_callback),
  126. cmocka_unit_test(test_yaml_event2data_version1),
  127. cmocka_unit_test(test_yaml_event2data_version2),
  128. cmocka_unit_test(test_yaml_eventlog),
  129. };
  130. return cmocka_run_group_tests(tests, NULL, NULL);
  131. }