diff options
| author | 2026-03-10 13:30:48 +0800 | |
|---|---|---|
| committer | 2026-03-10 13:30:48 +0800 | |
| commit | 73e602a5c2c766caba59948e91c11122653705ec (patch) | |
| tree | 57951a4275dd90c2b3953e5b4bf3c9a7bd09b84a /format/commitgraph/read/hash.go | |
| parent | *: Move sideband64k and pktline to protocol/ (diff) | |
| signature | No signature | |
commitgraph: Move out of format/
Diffstat (limited to 'format/commitgraph/read/hash.go')
| -rw-r--r-- | format/commitgraph/read/hash.go | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/format/commitgraph/read/hash.go b/format/commitgraph/read/hash.go deleted file mode 100644 index e9543eac..00000000 --- a/format/commitgraph/read/hash.go +++ /dev/null @@ -1,79 +0,0 @@ -package read - -import ( - "bytes" - "fmt" - "io" - - "codeberg.org/lindenii/furgit/objectid" -) - -// HashVersion returns the commit-graph hash version. -func (reader *Reader) HashVersion() uint8 { - return reader.hashVersion -} - -func validateChainBaseHashes(algo objectid.Algorithm, chain []string, idx int, graph *layer) error { - if idx == 0 { - if len(graph.chunkBaseGraphs) != 0 { - return &MalformedError{Path: graph.path, Reason: "unexpected BASE chunk in first graph"} - } - - return nil - } - - hashSize := algo.Size() - - expectedLen := idx * hashSize - if len(graph.chunkBaseGraphs) != expectedLen { - return &MalformedError{ - Path: graph.path, - Reason: fmt.Sprintf("BASE chunk length %d does not match expected %d", len(graph.chunkBaseGraphs), expectedLen), - } - } - - for i := range idx { - start := i * hashSize - end := start + hashSize - - baseHash, err := objectid.FromBytes(algo, graph.chunkBaseGraphs[start:end]) - if err != nil { - return err - } - - if baseHash.String() != chain[i] { - return &MalformedError{ - Path: graph.path, - Reason: fmt.Sprintf("BASE chunk mismatch at index %d", i), - } - } - } - - return nil -} - -func verifyTrailerHash(data []byte, algo objectid.Algorithm, path string) error { - hashSize := algo.Size() - if len(data) < hashSize { - return &MalformedError{Path: path, Reason: "file too short for trailer"} - } - - hashImpl, err := algo.New() - if err != nil { - return err - } - - _, err = io.Copy(hashImpl, bytes.NewReader(data[:len(data)-hashSize])) - if err != nil { - return err - } - - got := hashImpl.Sum(nil) - - want := data[len(data)-hashSize:] - if !bytes.Equal(got, want) { - return &MalformedError{Path: path, Reason: "trailer hash mismatch"} - } - - return nil -} |
