// and "intersect" subcommands.
import (
- "crypto/md5"
"fmt"
+ "hash/fnv"
"internal/coverage"
"internal/coverage/calloc"
"internal/coverage/cmerge"
// part of a merge operation, specifically a merge with the
// "-pcombine" flag.
func (mm *metaMerge) emitMeta(outdir string, pcombine bool) [16]byte {
- fh := md5.New()
+ fh := fnv.New128a()
+ fhSum := fnv.New128a()
blobs := [][]byte{}
tlen := uint64(unsafe.Sizeof(coverage.MetaFileHeader{}))
for _, p := range mm.pkgs {
} else {
blob = p.mdblob
}
- ph := md5.Sum(blob)
+ fhSum.Reset()
+ fhSum.Write(blob)
+ ph := fhSum.Sum(nil)
blobs = append(blobs, blob)
if _, err := fh.Write(ph[:]); err != nil {
panic(fmt.Sprintf("internal error: md5 sum failed: %v", err))
< internal/trace/traceviewer;
# Coverage.
- FMT, crypto/md5, encoding/binary, regexp, sort, text/tabwriter,
+ FMT, hash/fnv, encoding/binary, regexp, sort, text/tabwriter,
internal/coverage, internal/coverage/uleb128
< internal/coverage/cmerge,
internal/coverage/pods,
package cfile
import (
- "crypto/md5"
"fmt"
+ "hash/fnv"
"internal/coverage"
"internal/coverage/encodecounter"
"internal/coverage/encodemeta"
}
}
- h := md5.New()
+ h := fnv.New128a()
tlen := uint64(unsafe.Sizeof(coverage.MetaFileHeader{}))
for _, entry := range ml {
if _, err := h.Write(entry.Hash[:]); err != nil {
import (
"bufio"
- "crypto/md5"
"encoding/binary"
"fmt"
+ "hash/fnv"
"internal/coverage"
"internal/coverage/slicereader"
"internal/coverage/stringtab"
func (r *CoverageMetaFileReader) GetPackageDecoder(pkIdx uint32, payloadbuf []byte) (*CoverageMetaDataDecoder, []byte, error) {
pp, err := r.GetPackagePayload(pkIdx, payloadbuf)
if r.debug {
+ h := fnv.New128a()
+ h.Write(pp)
fmt.Fprintf(os.Stderr, "=-= pkidx=%d payload length is %d hash=%s\n",
- pkIdx, len(pp), fmt.Sprintf("%x", md5.Sum(pp)))
+ pkIdx, len(pp), fmt.Sprintf("%x", h.Sum(nil)))
}
if err != nil {
return nil, nil, err
import (
"bytes"
- "crypto/md5"
"encoding/binary"
"fmt"
"hash"
+ "hash/fnv"
"internal/coverage"
"internal/coverage/stringtab"
"internal/coverage/uleb128"
}
x := &CoverageMetaDataBuilder{
tmp: make([]byte, 0, 256),
- h: md5.New(),
+ h: fnv.New128a(),
}
x.stab.InitWriter()
x.stab.Lookup("")
// HashFuncDesc computes an md5 sum of a coverage.FuncDesc and returns
// a digest for it.
func HashFuncDesc(f *coverage.FuncDesc) [16]byte {
- h := md5.New()
+ h := fnv.New128a()
tmp := make([]byte, 0, 32)
hashFuncDesc(h, f, tmp)
var r [16]byte
import (
"bufio"
- "crypto/md5"
"encoding/binary"
"fmt"
+ "hash/fnv"
"internal/coverage"
"internal/coverage/stringtab"
"io"
// Now emit blobs themselves.
for k, blob := range blobs {
if m.debug {
- fmt.Fprintf(os.Stderr, "=+= writing blob %d len %d at off=%d hash %s\n", k, len(blob), off2, fmt.Sprintf("%x", md5.Sum(blob)))
+ h := fnv.New128a()
+ h.Write(blob)
+ fmt.Fprintf(os.Stderr, "=+= writing blob %d len %d at off=%d hash %s\n", k, len(blob), off2, fmt.Sprintf("%x", h.Sum(nil)))
}
if _, err = m.w.Write(blob); err != nil {
return fmt.Errorf("error writing %s: %v", m.mfname, err)
package pods_test
import (
- "crypto/md5"
"fmt"
+ "hash/fnv"
"internal/coverage"
"internal/coverage/pods"
"os"
}
mkmeta := func(dir string, tag string) string {
- hash := md5.Sum([]byte(tag))
+ h := fnv.New128a()
+ h.Write([]byte(tag))
+ hash := h.Sum(nil)
fn := fmt.Sprintf("%s.%x", coverage.MetaFilePref, hash)
return mkfile(dir, fn)
}
mkcounter := func(dir string, tag string, nt int, pid int) string {
- hash := md5.Sum([]byte(tag))
+ h := fnv.New128a()
+ h.Write([]byte(tag))
+ hash := h.Sum(nil)
fn := fmt.Sprintf(coverage.CounterFileTempl, coverage.CounterFilePref, hash, pid, nt)
return mkfile(dir, fn)
}
}
expected := []string{
- `o1/covmeta.ae7be26cdaa742ca148068d5ac90eaca [
-o1/covcounters.ae7be26cdaa742ca148068d5ac90eaca.40.2 o:0
-o1/covcounters.ae7be26cdaa742ca148068d5ac90eaca.41.2 o:0
-o1/covcounters.ae7be26cdaa742ca148068d5ac90eaca.42.1 o:0
-o2/covcounters.ae7be26cdaa742ca148068d5ac90eaca.35.11 o:1
+ `o1/covmeta.0880952782ab1be95aa0733055a4d06b [
+o1/covcounters.0880952782ab1be95aa0733055a4d06b.40.2 o:0
+o1/covcounters.0880952782ab1be95aa0733055a4d06b.41.2 o:0
+o1/covcounters.0880952782ab1be95aa0733055a4d06b.42.1 o:0
+o2/covcounters.0880952782ab1be95aa0733055a4d06b.35.11 o:1
]`,
- `o2/covmeta.aaf2f89992379705dac844c0a2a1d45f [
-o2/covcounters.aaf2f89992379705dac844c0a2a1d45f.36.3 o:1
-o2/covcounters.aaf2f89992379705dac844c0a2a1d45f.37.2 o:1
-o2/covcounters.aaf2f89992379705dac844c0a2a1d45f.38.1 o:1
+ `o2/covmeta.0880952783ab1be95aa0733055a4d1a6 [
+o2/covcounters.0880952783ab1be95aa0733055a4d1a6.36.3 o:1
+o2/covcounters.0880952783ab1be95aa0733055a4d1a6.37.2 o:1
+o2/covcounters.0880952783ab1be95aa0733055a4d1a6.38.1 o:1
]`,
}
for k, exp := range expected {