79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/safing/jess/filesig"
|
|
)
|
|
|
|
func formatSignatures(filename, signame string, fds []*filesig.FileData) string {
|
|
b := &strings.Builder{}
|
|
|
|
switch len(fds) {
|
|
case 0:
|
|
case 1:
|
|
formatSignature(b, fds[0])
|
|
case 2:
|
|
for _, fd := range fds {
|
|
fmt.Fprintf(b, "%d Signatures:\n\n\n", len(fds))
|
|
formatSignature(b, fd)
|
|
b.WriteString("\n\n")
|
|
}
|
|
}
|
|
|
|
if filename != "" || signame != "" {
|
|
b.WriteString("\n")
|
|
fmt.Fprintf(b, "File: %s\n", filename)
|
|
fmt.Fprintf(b, "Sig: %s\n", signame)
|
|
}
|
|
|
|
return b.String()
|
|
}
|
|
|
|
func formatSignature(b *strings.Builder, fd *filesig.FileData) {
|
|
if fd.VerificationError() == nil {
|
|
b.WriteString("Verification: OK\n")
|
|
} else {
|
|
fmt.Fprintf(b, "Verification FAILED: %s\n", fd.VerificationError())
|
|
}
|
|
|
|
if letter := fd.Signature(); letter != nil {
|
|
b.WriteString("\n")
|
|
for _, sig := range letter.Signatures {
|
|
signet, err := trustStore.GetSignet(sig.ID, true)
|
|
if err == nil {
|
|
fmt.Fprintf(b, "Signed By: %s (%s)\n", signet.Info.Name, sig.ID)
|
|
} else {
|
|
fmt.Fprintf(b, "Signed By: %s\n", sig.ID)
|
|
}
|
|
}
|
|
}
|
|
|
|
if fileHash := fd.FileHash(); fileHash != nil {
|
|
b.WriteString("\n")
|
|
fmt.Fprintf(b, "Hash Alg: %s\n", fileHash.Algorithm())
|
|
fmt.Fprintf(b, "Hash Sum: %s\n", hex.EncodeToString(fileHash.Sum()))
|
|
}
|
|
|
|
if len(fd.MetaData) > 0 {
|
|
b.WriteString("\nMetadata:\n")
|
|
|
|
sortedMetaData := make([][]string, 0, len(fd.MetaData))
|
|
for k, v := range fd.MetaData {
|
|
sortedMetaData = append(sortedMetaData, []string{k, v})
|
|
}
|
|
sort.Sort(sortByMetaDataKey(sortedMetaData))
|
|
for _, entry := range sortedMetaData {
|
|
fmt.Fprintf(b, " %s: %s\n", entry[0], entry[1])
|
|
}
|
|
}
|
|
}
|
|
|
|
type sortByMetaDataKey [][]string
|
|
|
|
func (a sortByMetaDataKey) Len() int { return len(a) }
|
|
func (a sortByMetaDataKey) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|
func (a sortByMetaDataKey) Less(i, j int) bool { return a[i][0] < a[j][0] }
|