Skip to content

Allow callers to omit handles from commands when RH_NULL #344

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 13, 2023

Conversation

chrisfenner
Copy link
Member

I observed that the both the following will fail:

tpm2StartAuthSession{
  SessionType: tpm2.TPMSETrial,
  AuthHash:    tpm2.TPMAlgSHA256,
  NonceCaller: tpm2.TPM2BNonce{
	  Buffer: make([]byte, 16),
  },
}.Execute(tpm)
tpm2.CreateLoaded{
  InPublic: someTemplate,
}.Execute(tpm)

with a message like

'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.

@chrisfenner chrisfenner requested review from alexmwu, jkl73 and a team as code owners September 13, 2023 21:11
@chrisfenner chrisfenner merged commit f397c27 into google:main Sep 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants