From 3e7956ea260551e9cb84e20f8fc4250951ef16f0 Mon Sep 17 00:00:00 2001 From: Malte Poll <1780588+malt3@users.noreply.github.com> Date: Wed, 20 Dec 2023 12:03:47 +0100 Subject: [PATCH] parsesnp: add slog --- tools/parsesnp.go | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/tools/parsesnp.go b/tools/parsesnp.go index 122b2c48d5..ae0556010c 100644 --- a/tools/parsesnp.go +++ b/tools/parsesnp.go @@ -5,7 +5,7 @@ import ( "encoding/hex" "fmt" "io" - "log" + "log/slog" "os" "github.com/google/go-sev-guest/abi" @@ -45,13 +45,26 @@ type Report struct { } func main() { + if err := run(); err != nil { + os.Exit(1) + } +} + +func run() (retErr error) { + logger := slog.Default() + defer func() { + if retErr != nil { + logger.Error(retErr.Error()) + } + }() + data, err := io.ReadAll(os.Stdin) if err != nil { - log.Fatalf("failed to read input: %v", err) + return fmt.Errorf("failed to read input: %w", err) } data, err = hex.DecodeString(string(data)) if err != nil { - log.Fatalf("failed to decode input: %v", err) + return fmt.Errorf("failed to decode input: %w", err) } var r Report @@ -79,11 +92,11 @@ func main() { signerInfo, err := abi.ParseSignerInfo(binary.LittleEndian.Uint32(data[0x48:0x4C])) if err != nil { - log.Printf("failed to parse signer info: %v", err) + return fmt.Errorf("failed to parse signer info: %w", err) } r.SignerInfo = abi.ComposeSignerInfo(signerInfo) if err := mbz(data, 0x4C, 0x50); err != nil { - log.Printf("%v", err) + return err } fmt.Printf("SignerInfo: %v\n", r.SignerInfo) r.ReportData = clone(data[0x50:0x90]) @@ -102,7 +115,7 @@ func main() { fmt.Printf("ReportIdMa: %x\n", r.ReportIdMa) r.ReportedTcb = binary.LittleEndian.Uint64(data[0x180:0x188]) if err := mbz(data, 0x188, 0x1A0); err != nil { - fmt.Printf("%v", err) + return err } r.ChipId = clone(data[0x1A0:0x1E0]) @@ -116,7 +129,7 @@ func main() { r.CurrentMajor = uint32(data[0x1EA]) fmt.Printf("CurrentMajor: %d\n", r.CurrentMajor) if err := mbz(data, 0x1EB, 0x1EC); err != nil { - fmt.Printf("%v", err) + return err } r.CommittedBuild = uint32(data[0x1EC]) fmt.Printf("CommittedBuild: %d\n", r.CommittedBuild) @@ -125,20 +138,21 @@ func main() { r.CommittedMajor = uint32(data[0x1EE]) fmt.Printf("CommittedMajor: %d\n", r.CommittedMajor) if err := mbz(data, 0x1EF, 0x1F0); err != nil { - fmt.Printf("%v", err) + return err } r.LaunchTcb = binary.LittleEndian.Uint64(data[0x1F0:0x1F8]) if err := mbz(data, 0x1F8, signatureOffset); err != nil { - fmt.Printf("%v", err) + return err } if r.SignatureAlgo == abi.SignEcdsaP384Sha384 { if err := mbz(data, signatureOffset+abi.EcdsaP384Sha384SignatureSize, abi.ReportSize); err != nil { - fmt.Printf("%v", err) + return err } } r.Signature = clone(data[signatureOffset:abi.ReportSize]) fmt.Printf("Signature: %x\n", r.Signature) + return nil } func clone(b []byte) []byte {