sys-hierarchy-change-auth.int.c 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  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 <stdlib.h>
  11. #include "tss2_sys.h"
  12. #include "inttypes.h"
  13. #define LOGMODULE test
  14. #include "util/log.h"
  15. #include "sys-util.h"
  16. #include "test.h"
  17. /*
  18. * Test auth value changes for Owner Auth
  19. */
  20. int
  21. test_owner_auth (TSS2_SYS_CONTEXT *sys_context)
  22. {
  23. UINT32 rval;
  24. TPM2B_AUTH newAuth;
  25. TPM2B_AUTH resetAuth;
  26. int i;
  27. TSS2L_SYS_AUTH_COMMAND sessionsData = {
  28. .count = 1,
  29. .auths = {{.sessionHandle = TPM2_RH_PW,
  30. .sessionAttributes = 0x00,
  31. .nonce={.size=0},
  32. .hmac={.size=0}}}};
  33. LOG_INFO("HIERARCHY_CHANGE_AUTH TESTS:" );
  34. newAuth.size = 0;
  35. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0);
  36. if (rval != TPM2_RC_SUCCESS) {
  37. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  38. exit(1);
  39. }
  40. /* Init new auth */
  41. newAuth.size = 20;
  42. for( i = 0; i < newAuth.size; i++ )
  43. newAuth.buffer[i] = i;
  44. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  45. if (rval != TPM2_RC_SUCCESS) {
  46. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  47. exit(1);
  48. }
  49. /* Create hmac session */
  50. sessionsData.auths[0].hmac = newAuth;
  51. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  52. if (rval != TPM2_RC_SUCCESS) {
  53. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  54. exit(1);
  55. }
  56. /* Provide current auth value in SessionData hmac field */
  57. sessionsData.auths[0].hmac = newAuth;
  58. /* change auth value to different value */
  59. newAuth.buffer[0] = 3;
  60. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  61. if (rval != TPM2_RC_SUCCESS) {
  62. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  63. exit(1);
  64. }
  65. /* Provide current auth value in SessionData hmac field */
  66. sessionsData.auths[0].hmac = newAuth;
  67. /* change auth value to different value */
  68. newAuth.buffer[0] = 4;
  69. /* backup auth value to restore to empty buffer after test */
  70. resetAuth = newAuth;
  71. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  72. if (rval != TPM2_RC_SUCCESS) {
  73. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  74. exit(1);
  75. }
  76. /* Set new auth to zero */
  77. newAuth.size = 0;
  78. /* Assert that without setting current auth value the command fails */
  79. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  80. if (rval != (TPM2_RC_1 + TPM2_RC_S + TPM2_RC_BAD_AUTH)) {
  81. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  82. exit(1);
  83. }
  84. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  85. if (rval != (TPM2_RC_1 + TPM2_RC_S + TPM2_RC_BAD_AUTH)) {
  86. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  87. exit(1);
  88. }
  89. /* test return value for empty hierarchy */
  90. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, 0, &sessionsData, &newAuth, 0 );
  91. if (rval != (TPM2_RC_1 + TPM2_RC_VALUE)) {
  92. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  93. exit(1);
  94. }
  95. /* Set auth to zero again with valid session */
  96. sessionsData.auths[0].hmac = resetAuth;
  97. /* change auth value to different value */
  98. newAuth.size = 0;
  99. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_OWNER, &sessionsData, &newAuth, 0 );
  100. if (rval != TPM2_RC_SUCCESS) {
  101. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  102. exit(1);
  103. }
  104. return 0;
  105. }
  106. /*
  107. * Test auth value changes for Platform Auth
  108. */
  109. int
  110. test_platform_auth (TSS2_SYS_CONTEXT *sys_context)
  111. {
  112. UINT32 rval;
  113. TPM2B_AUTH newAuth;
  114. TPM2B_AUTH resetAuth;
  115. int i;
  116. TSS2L_SYS_AUTH_COMMAND sessionsData = {
  117. .count = 1,
  118. .auths = {{.sessionHandle = TPM2_RH_PW,
  119. .sessionAttributes = 0x00,
  120. .nonce={.size=0},
  121. .hmac={.size=0}}}};
  122. LOG_INFO("HIERARCHY_CHANGE_AUTH TESTS:" );
  123. newAuth.size = 0;
  124. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0);
  125. if (rval != TPM2_RC_SUCCESS) {
  126. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  127. exit(1);
  128. }
  129. /* Init new auth */
  130. newAuth.size = 20;
  131. for( i = 0; i < newAuth.size; i++ )
  132. newAuth.buffer[i] = i;
  133. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  134. if (rval != TPM2_RC_SUCCESS) {
  135. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  136. exit(1);
  137. }
  138. /* Create hmac session */
  139. sessionsData.auths[0].hmac = newAuth;
  140. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  141. if (rval != TPM2_RC_SUCCESS) {
  142. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  143. exit(1);
  144. }
  145. /* Provide current auth value in SessionData hmac field */
  146. sessionsData.auths[0].hmac = newAuth;
  147. /* change auth value to different value */
  148. newAuth.buffer[0] = 3;
  149. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  150. if (rval != TPM2_RC_SUCCESS) {
  151. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  152. exit(1);
  153. }
  154. /* Provide current auth value in SessionData hmac field */
  155. sessionsData.auths[0].hmac = newAuth;
  156. /* change auth value to different value */
  157. newAuth.buffer[0] = 4;
  158. /* backup auth value to restore to empty buffer after test */
  159. resetAuth = newAuth;
  160. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  161. if (rval != TPM2_RC_SUCCESS) {
  162. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  163. exit(1);
  164. }
  165. /* Set new auth to zero */
  166. newAuth.size = 0;
  167. /* Assert that without setting current auth value the command fails */
  168. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  169. if (rval != (TPM2_RC_1 + TPM2_RC_S + TPM2_RC_BAD_AUTH)) {
  170. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  171. exit(1);
  172. }
  173. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  174. if (rval != (TPM2_RC_1 + TPM2_RC_S + TPM2_RC_BAD_AUTH)) {
  175. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  176. exit(1);
  177. }
  178. /* test return value for empty hierarchy */
  179. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, 0, &sessionsData, &newAuth, 0 );
  180. if (rval != (TPM2_RC_1 + TPM2_RC_VALUE)) {
  181. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  182. exit(1);
  183. }
  184. /* Set auth to zero again with valid session */
  185. sessionsData.auths[0].hmac = resetAuth;
  186. /* change auth value to different value */
  187. newAuth.size = 0;
  188. rval = Tss2_Sys_HierarchyChangeAuth( sys_context, TPM2_RH_PLATFORM, &sessionsData, &newAuth, 0 );
  189. if (rval != TPM2_RC_SUCCESS) {
  190. LOG_ERROR("HierarchyChangeAuth FAILED! Response Code : 0x%x", rval);
  191. exit(1);
  192. }
  193. return 0;
  194. }
  195. int
  196. test_invoke (TSS2_SYS_CONTEXT *sys_context)
  197. {
  198. test_platform_auth (sys_context);
  199. test_owner_auth (sys_context);
  200. return 0;
  201. }