From ef2ec2ce85169f7f907810518237aaa2a2c6bb9e Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Sun, 15 Aug 2021 20:00:08 +0200 Subject: [PATCH] WIP: pkg/tpm/structures: fix TPM 2.0 digests marshalling - AHA!! Signed-off-by: Daniel Maslowski --- pkg/tpm/structures.go | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/pkg/tpm/structures.go b/pkg/tpm/structures.go index 7d0ca14..eebd733 100644 --- a/pkg/tpm/structures.go +++ b/pkg/tpm/structures.go @@ -86,34 +86,12 @@ type THA struct { digest IHA } -func (t *THA) MarshalJSON() ([]byte, error) { - m := make(map[string]string) - m["algorithm"] = HashAlgoToName[t.hashAlg] - m["digest"] = string(t.digest.hash) - return json.Marshal(m) -} - // LDigestValues is a TPM2 structure type LDigestValues struct { count uint32 digests []THA } -func (d *LDigestValues) MarshalJSON() ([]byte, error) { - return json.Marshal(d.digests) - /* - var m []string - for _, digest := range d.digests { - j, err := json.Marshal(digest) - if err != nil { - return nil, err - } - m = append(m, string(j)) - } - return json.Marshal(m) - */ -} - // TcgEfiSpecIDEventAlgorithmSize is a TPM2 structure type TcgEfiSpecIDEventAlgorithmSize struct { algorithID uint16 @@ -160,11 +138,14 @@ type MDigest struct { digest string `json:"digest"` } -type JSONThis interface { - String() string - MDigest() MDigest +func (md *MDigest) MarshalJSON() ([]byte, error) { + m := make(map[string]string) + m["algorithm"] = md.algorithm + m["digest"] = md.digest + return json.Marshal(m) } +// This could be a ton nicer, probably func (e *TcgPcrEvent2) MarshalJSON() ([]byte, error) { m := make(map[string]json.RawMessage) // this works @@ -186,10 +167,9 @@ func (e *TcgPcrEvent2) MarshalJSON() ([]byte, error) { d := &e.digests.digests[i] ds = append(ds, MDigest{ algorithm: HashAlgoToName[d.hashAlg], - digest: string(d.digest.hash), + digest: fmt.Sprintf("%x", d.digest.hash), }) } - // this is left with empty objects, i.e., [{}, {}] - wat? dsj, err := json.Marshal(ds) if err != nil { return nil, err