in iimg/iimg.go [51:84]
func DetectInvalidSigTlvs(img image.Image) error {
var errStrs []string
addErr := func(format string, args ...interface{}) {
s := fmt.Sprintf(format, args...)
errStrs = append(errStrs, s)
}
prevIsHash := false
for i, tlv := range img.Tlvs {
curIsHash := tlv.Header.Type == image.IMAGE_TLV_KEYHASH
curIsSig := image.ImageTlvTypeIsSig(tlv.Header.Type)
isLast := i == len(img.Tlvs)-1
if prevIsHash && !curIsSig {
prevTlv := img.Tlvs[i-1]
addErr("TLV%d (%s) not immediately followed by signature TLV",
i-1, image.ImageTlvTypeName(prevTlv.Header.Type))
} else if curIsHash && isLast {
addErr("TLV%d (%s) not immediately followed by signature TLV",
i, image.ImageTlvTypeName(tlv.Header.Type))
} else if !prevIsHash && curIsSig {
addErr("TLV%d (%s) not immediately preceded by key hash TLV",
i, image.ImageTlvTypeName(tlv.Header.Type))
}
prevIsHash = curIsHash
}
if len(errStrs) > 0 {
return errors.New(strings.Join(errStrs, "\n"))
}
return nil
}