func DetectInvalidSigTlvs()

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
}