func GetDigest()

in pkg/signature/manifest.go [107:145]


func GetDigest(manifest Manifest, domain Domain) (digest [32]byte, yml []byte, err error) {
	var query *gojq.Query
	_, excludes, err := GetMetadataInformation(manifest, domain)
	if err != nil {
		return [32]byte{}, nil, err
	}

	renderedQuery := &bytes.Buffer{}
	err = GojqTemplate.Execute(renderedQuery, GojqParams{
		append(excludes, AlwaysExcluded...),
		domain,
	})
	if err != nil {
		return [32]byte{}, nil, err
	}
	query, err = gojq.Parse(renderedQuery.String())
	if err != nil {
		return [32]byte{}, nil, err
	}
	// gojq requires running on raw types, marshal and unmarshall to allow it.
	asjson, _ := json.Marshal(manifest)
	var unmarshalled interface{}
	_ = json.Unmarshal(asjson, &unmarshalled)
	jsonIt := query.Run(unmarshalled)
	filtered, remaining := jsonIt.Next()
	if remaining {
		second, rem := jsonIt.Next()
		if second != nil && !rem {
			return [32]byte{}, nil, errors.New("multiple result from the query should never happen")
		}
	}

	yml, err = yaml.Marshal(filtered)
	if err != nil {
		return [32]byte{}, nil, errors.New("manifest could not be marshaled to yaml")
	}
	digest = sha256.Sum256(yml)
	return digest, yml, err
}