github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/functions/guid.go (about)

     1  package functions
     2  
     3  import (
     4  	"crypto/sha256"
     5  	"strings"
     6  
     7  	"github.com/google/uuid"
     8  )
     9  
    10  func Guid(args ...interface{}) interface{} {
    11  
    12  	if len(args) == 0 {
    13  		return ""
    14  	}
    15  
    16  	hashParts := make([]string, len(args))
    17  	for i, str := range args {
    18  		hashParts[i] = str.(string)
    19  	}
    20  
    21  	guid, err := generateSeededGUID(hashParts...)
    22  	if err != nil {
    23  		return ""
    24  	}
    25  
    26  	return guid.String()
    27  }
    28  
    29  func generateSeededGUID(seedParts ...string) (uuid.UUID, error) {
    30  	var id uuid.UUID
    31  
    32  	stringToHash := strings.Join(seedParts, "")
    33  
    34  	hsha2 := sha256.Sum256([]byte(stringToHash))
    35  
    36  	copy(id[:], hsha2[:16])
    37  	id[6] = (id[6] & 0x0f) | 0x40 // Version 4
    38  	id[8] = (id[8] & 0x3f) | 0x80 // Variant is 10
    39  	return id, nil
    40  }
    41  
    42  func NewGuid(args ...interface{}) interface{} {
    43  	return uuid.NewString()
    44  }