github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/core/utils/versions.go (about) 1 package utils 2 3 import ( 4 "crypto" 5 "errors" 6 "strconv" 7 "strings" 8 ) 9 10 func parse(version string) ([3]int, error) { 11 nbs := strings.Split(version, ".") 12 var full [3]int 13 if len(nbs) > 3 { 14 return full, errors.New("version invalide") 15 } 16 for index, s := range nbs { 17 nb, err := strconv.Atoi(strings.TrimSpace(s)) 18 if err != nil { 19 return full, err 20 } 21 full[index] = nb 22 } 23 return full, nil 24 } 25 26 // IsNewer renvoie true si v2 est strictement 27 // plus récente que v1. 28 // Renvoie false si le format est invalide. 29 func IsNewer(v1, v2 string) bool { 30 parsed1, err := parse(v1) 31 if err != nil { 32 return false 33 } 34 parsed2, err := parse(v2) 35 if err != nil { 36 return false 37 } 38 return parsed1[0] < parsed2[0] || 39 (parsed1[0] == parsed2[0] && parsed1[1] < parsed2[1]) || 40 (parsed1[0] == parsed2[0] && parsed1[1] == parsed2[1] && parsed1[2] < parsed2[2]) 41 } 42 43 func HashBytes(data []byte) ([]byte, error) { 44 hash := crypto.SHA256.New() 45 if _, err := hash.Write(data); err != nil { 46 return nil, err 47 } 48 return hash.Sum([]byte{}), nil 49 }