// SPDX-FileCopyrightText: 2025 Tillitis AB // SPDX-License-Identifier: BSD-2-Clause package main import ( "flag" "fmt" "os" "golang.org/x/crypto/blake2s" ) func usage() { fmt.Printf("Usage: %s -m filename [-c]\n", os.Args[0]) } func printCDigest(digest [blake2s.Size]byte, fileName string) { fmt.Printf("// BLAKE2s digest of %v\n", fileName) fmt.Printf("const uint8_t digest[32] = {\n") for _, n := range digest { fmt.Printf("0x%x, ", n) } fmt.Printf("\n}; \n") } func main() { var messageFile string var forC bool flag.StringVar(&messageFile, "m", "", "Specify file containing message.") flag.BoolVar(&forC, "c", false, "Print digest for inclusion in C program.") flag.Usage = usage flag.Parse() if messageFile == "" { usage() os.Exit(0) } message, err := os.ReadFile(messageFile) if err != nil { fmt.Printf("%v\n", err) os.Exit(1) } digest := blake2s.Sum256(message) if forC { printCDigest(digest, messageFile) } else { fmt.Printf("%x %s\n", digest, messageFile) } os.Exit(0) }