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  }