shithub: furgit

Download patch

ref: 256d945a109f8d6bf6a13d0e9a93545b64680ba8
parent: 65242328262d4a4ad611951deeef7b2d721cc05d
author: Runxi Yu <runxiyu@umich.edu>
date: Sun Mar 29 12:07:21 EDT 2026

object/id: Add support for signature headers

--- a/object/id/algorithm_details.go
+++ b/object/id/algorithm_details.go
@@ -3,12 +3,13 @@
 import "hash"
 
 type algorithmDetails struct {
-	name       string
-	size       int
-	packHashID uint32
-	sum        func([]byte) ObjectID
-	new        func() hash.Hash
-	emptyTree  ObjectID
+	name                string
+	size                int
+	packHashID          uint32
+	signatureHeaderName string
+	sum                 func([]byte) ObjectID
+	new                 func() hash.Hash
+	emptyTree           ObjectID
 }
 
 func (algo Algorithm) info() algorithmDetails {
--- /dev/null
+++ b/object/id/algorithm_signatureheadername.go
@@ -1,0 +1,6 @@
+package objectid
+
+// SignatureHeaderName returns the signature header name for this algorithm.
+func (algo Algorithm) SignatureHeaderName() string {
+	return algo.info().signatureHeaderName
+}
--- a/object/id/algorithm_tables.go
+++ b/object/id/algorithm_tables.go
@@ -9,9 +9,10 @@
 var algorithmTable = [...]algorithmDetails{
 	AlgorithmUnknown: {},
 	AlgorithmSHA1: {
-		name:       "sha1",
-		size:       sha1.Size,
-		packHashID: 1,
+		name:                "sha1",
+		size:                sha1.Size,
+		packHashID:          1,
+		signatureHeaderName: "gpgsig",
 		sum: func(data []byte) ObjectID {
 			sum := sha1.Sum(data) //#nosec G401
 
@@ -24,9 +25,10 @@
 		new: sha1.New,
 	},
 	AlgorithmSHA256: {
-		name:       "sha256",
-		size:       sha256.Size,
-		packHashID: 2,
+		name:                "sha256",
+		size:                sha256.Size,
+		packHashID:          2,
+		signatureHeaderName: "gpgsig-sha256",
 		sum: func(data []byte) ObjectID {
 			sum := sha256.Sum256(data)
 
@@ -44,6 +46,8 @@
 	//nolint:gochecknoglobals
 	algorithmByName = map[string]Algorithm{}
 	//nolint:gochecknoglobals
+	algorithmBySignatureHeaderName = map[string]Algorithm{}
+	//nolint:gochecknoglobals
 	supportedAlgorithms []Algorithm
 )
 
@@ -58,6 +62,9 @@
 
 		info.emptyTree = info.sum(emptyTreeInput)
 		algorithmByName[info.name] = algo
+		if info.signatureHeaderName != "" {
+			algorithmBySignatureHeaderName[info.signatureHeaderName] = algo
+		}
 		supportedAlgorithms = append(supportedAlgorithms, algo)
 	}
 }
--- /dev/null
+++ b/object/id/signatureheadername_parse.go
@@ -1,0 +1,9 @@
+package objectid
+
+// ParseSignatureHeaderName parses one canonical signature header name such as
+// "gpgsig" or "gpgsig-sha256".
+func ParseSignatureHeaderName(s string) (Algorithm, bool) {
+	algo, ok := algorithmBySignatureHeaderName[s]
+
+	return algo, ok
+}
--