From 5ea9543f13b71465be7677c5b227583a821195d9 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 25 Sep 2021 23:32:36 +0300 Subject: [PATCH] Save BLAKE2b-256 checksum during download --- refresh.go | 51 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/refresh.go b/refresh.go index 092bd01..67efe57 100644 --- a/refresh.go +++ b/refresh.go @@ -378,6 +378,7 @@ func refreshDir( } hasher := hasherNew() hasherSHA256 := sha256.New() + hasherBLAKE2b256 := blake2b256New() dst, err := TempFile(dirPath) if err != nil { log.Println("error", r.RemoteAddr, "pypi", filename, err) @@ -389,6 +390,9 @@ func refreshDir( 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()) @@ -439,13 +443,45 @@ func refreshDir( 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) @@ -498,6 +534,9 @@ func refreshDir( } GPGSigSkip: + if digest == nil { + continue + } path = path + "." + hashAlgo stat, err := os.Stat(path) if err == nil && -- 2.44.0