}
hasher := hasherNew()
hasherSHA256 := sha256.New()
+ hasherBLAKE2b256 := blake2b256New()
dst, err := TempFile(dirPath)
if err != nil {
log.Println("error", r.RemoteAddr, "pypi", filename, err)
if hashAlgo != HashAlgoSHA256 {
wrs = append(wrs, hasherSHA256)
}
+ if hashAlgo != HashAlgoBLAKE2b256 {
+ wrs = append(wrs, hasherBLAKE2b256)
+ }
wr := io.MultiWriter(wrs...)
if _, err = io.Copy(wr, resp.Body); err != nil {
os.Remove(dst.Name())
http.Error(w, err.Error(), http.StatusInternalServerError)
return false
}
- if hashAlgo != HashAlgoSHA256 {
- hashAlgo = HashAlgoSHA256
- digest = hasherSHA256.Sum(nil)
- for _, algo := range KnownHashAlgos[1:] {
- os.Remove(path + "." + algo)
- }
+
+ var digestSHA256 []byte
+ var digestBLAKE2b256 []byte
+ if hashAlgo == HashAlgoSHA256 {
+ digestSHA256 = hasher.Sum(nil)
+ } else {
+ digestSHA256 = hasherSHA256.Sum(nil)
+ }
+ if hashAlgo == HashAlgoBLAKE2b256 {
+ digestBLAKE2b256 = hasher.Sum(nil)
+ } else {
+ digestBLAKE2b256 = hasherBLAKE2b256.Sum(nil)
+ }
+ if err = WriteFileSync(
+ dirPath, path+"."+HashAlgoSHA256,
+ digestSHA256, mtime,
+ ); err != nil {
+ log.Println(
+ "error", r.RemoteAddr, "pypi",
+ path+"."+HashAlgoSHA256, err,
+ )
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return false
+ }
+ if err = WriteFileSync(
+ dirPath, path+"."+HashAlgoBLAKE2b256,
+ digestBLAKE2b256, mtime,
+ ); err != nil {
+ log.Println(
+ "error", r.RemoteAddr, "pypi",
+ path+"."+HashAlgoBLAKE2b256, err,
+ )
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return false
+ }
+ for _, algo := range KnownHashAlgos[2:] {
+ os.Remove(path + "." + algo)
}
+ digest = nil
}
if mtimeExists {
stat, err := os.Stat(path)
}
GPGSigSkip:
+ if digest == nil {
+ continue
+ }
path = path + "." + hashAlgo
stat, err := os.Stat(path)
if err == nil &&