mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-10-11 17:58:13 +08:00
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"crypto/md5"
|
|
"crypto/rand"
|
|
"crypto/sha1"
|
|
|
|
"github.com/gofrs/uuid/v5"
|
|
)
|
|
|
|
// NewUUIDV3 returns a UUID based on the MD5 hash of the namespace UUID and name.
|
|
func NewUUIDV3(ns uuid.UUID, name string) (u uuid.UUID) {
|
|
h := md5.New()
|
|
h.Write(ns[:])
|
|
h.Write([]byte(name))
|
|
copy(u[:], h.Sum(make([]byte, 0, md5.Size)))
|
|
|
|
u.SetVersion(uuid.V3)
|
|
u.SetVariant(uuid.VariantRFC9562)
|
|
return u
|
|
}
|
|
|
|
// NewUUIDV4 returns a new version 4 UUID.
|
|
//
|
|
// Version 4 UUIDs contain 122 bits of random data.
|
|
func NewUUIDV4() (u uuid.UUID) {
|
|
rand.Read(u[:])
|
|
u.SetVersion(uuid.V4)
|
|
u.SetVariant(uuid.VariantRFC9562)
|
|
return u
|
|
}
|
|
|
|
// NewUUIDV5 returns a UUID based on SHA-1 hash of the namespace UUID and name.
|
|
func NewUUIDV5(ns uuid.UUID, name string) (u uuid.UUID) {
|
|
h := sha1.New()
|
|
h.Write(ns[:])
|
|
h.Write([]byte(name))
|
|
copy(u[:], h.Sum(make([]byte, 0, sha1.Size)))
|
|
|
|
u.SetVersion(uuid.V5)
|
|
u.SetVariant(uuid.VariantRFC9562)
|
|
return u
|
|
}
|
|
|
|
// UUIDMap https://github.com/XTLS/Xray-core/issues/158#issue-783294090
|
|
func UUIDMap(str string) uuid.UUID {
|
|
u, err := uuid.FromString(str)
|
|
if err != nil {
|
|
return NewUUIDV5(uuid.Nil, str)
|
|
}
|
|
return u
|
|
}
|