'handle'-tagged member of 'tpm2.StartAuthSession' was of type 'tpm2.handle', which does not satisfy handle
because their handle tagged values of type tpm2.handle, while marked nullable, were failing type assertions to handle during the reflection based marshalling.
Investigating this led me to learn that type assertions on nil-valued interface-typed variables (such as handle-typed TPM command struct fields) will fail due to the design of the language.
To improve the usability of go-tpm and allow callers to leave out handles in commands when NULL is desired, this change adds logic to treat any nil-valued interface-typed command variable (when annotated with gotpm:handle) as TPM_RH_NULL. This allows us to remove the nullable annotation from those fields, which makes sense. It's an interface, the user can always (try to) pass nil, and this should always mean TPM_RH_NULL.
I observed that the both the following will fail:
with a message like
because their
handle
tagged values of typetpm2.handle
, while markednullable
, were failing type assertions tohandle
during the reflection based marshalling.Investigating this led me to learn that type assertions on nil-valued interface-typed variables (such as
handle
-typed TPM command struct fields) will fail due to the design of the language.To improve the usability of go-tpm and allow callers to leave out handles in commands when NULL is desired, this change adds logic to treat any nil-valued interface-typed command variable (when annotated with
gotpm:handle
) asTPM_RH_NULL
. This allows us to remove thenullable
annotation from those fields, which makes sense. It's an interface, the user can always (try to) pass nil, and this should always meanTPM_RH_NULL
.