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
+}
--
⑨