tool_rc.c 773 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /* SPDX-License-Identifier: BSD-3-Clause */
  2. #include <stdbool.h>
  3. #include <tss2/tss2_tpm2_types.h>
  4. #include "tool_rc.h"
  5. #define UNFMT1(x) (x - TPM2_RC_FMT1)
  6. static inline UINT16 tpm2_rc_fmt1_error_get(TPM2_RC rc) {
  7. return (rc & 0x3F);
  8. }
  9. static inline UINT8 tss2_rc_layer_format_get(TSS2_RC rc) {
  10. return ((rc & (1 << 7)) >> 7);
  11. }
  12. static tool_rc flatten_fmt1(TSS2_RC rc) {
  13. UINT8 errnum = tpm2_rc_fmt1_error_get(rc);
  14. switch (errnum) {
  15. case UNFMT1(TPM2_RC_AUTH_FAIL):
  16. return tool_rc_auth_error;
  17. default:
  18. return tool_rc_general_error;
  19. }
  20. }
  21. tool_rc tool_rc_from_tpm(TSS2_RC rc) {
  22. bool is_fmt_1 = tss2_rc_layer_format_get(rc);
  23. if (is_fmt_1) {
  24. return flatten_fmt1(rc);
  25. }
  26. return tool_rc_general_error;
  27. }