aboutsummaryrefslogtreecommitdiff
package signed

import "lindenii.org/go/furgit/object/id"

// signatureHeaderNames maps each object format
// to the commit and tag signature header name
// that carries its signature,
// such as "gpgsig" for SHA-1
// and "gpgsig-sha256" for SHA-256.
//
//nolint:gochecknoglobals
var signatureHeaderNames = map[id.ObjectFormat]string{
	id.ObjectFormatSHA1:   "gpgsig",
	id.ObjectFormatSHA256: "gpgsig-sha256",
}

//nolint:gochecknoglobals
var objectFormatBySignatureHeaderName = map[string]id.ObjectFormat{}

func init() { //nolint:gochecknoinits
	for objectFormat, name := range signatureHeaderNames {
		objectFormatBySignatureHeaderName[name] = objectFormat
	}
}

// SignatureHeaderName returns the signature header name for objectFormat,
// such as "gpgsig" for SHA-1
// or "gpgsig-sha256" for SHA-256.
func SignatureHeaderName(objectFormat id.ObjectFormat) (string, bool) {
	name, ok := signatureHeaderNames[objectFormat]

	return name, ok
}

// ParseSignatureHeaderName parses one canonical signature header name
// such as "gpgsig" or "gpgsig-sha256"
// into its object format.
func ParseSignatureHeaderName(name string) (id.ObjectFormat, bool) {
	objectFormat, ok := objectFormatBySignatureHeaderName[name]

	return objectFormat, ok
}