72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
package uuid
|
|
|
|
// Version represents the type of UUID.
|
|
type Version int
|
|
|
|
// The following are the supported Versions.
|
|
const (
|
|
VersionUnknown Version = iota // Unknown
|
|
VersionOne // Time based
|
|
VersionTwo // DCE security via POSIX UIDs
|
|
VersionThree // Namespace hash uses MD5
|
|
VersionFour // Crypto random
|
|
VersionFive // Namespace hash uses SHA-1
|
|
)
|
|
|
|
// The following are the supported Variants.
|
|
const (
|
|
VariantNCS uint8 = 0x00
|
|
VariantRFC4122 uint8 = 0x80 // or and A0 if masked with 1F
|
|
VariantMicrosoft uint8 = 0xC0
|
|
VariantFuture uint8 = 0xE0
|
|
)
|
|
|
|
const (
|
|
// 3f used by RFC4122 although 1f works for all
|
|
variantSet = 0x3f
|
|
|
|
// rather than using 0xc0 we use 0xe0 to retrieve the variant
|
|
// The result is the same for all other variants
|
|
// 0x80 and 0xa0 are used to identify RFC4122 compliance
|
|
variantGet = 0xe0
|
|
)
|
|
|
|
// String returns English description of version.
|
|
func (o Version) String() string {
|
|
switch o {
|
|
case VersionOne:
|
|
return "Version 1: Based on a 60 Bit Timestamp."
|
|
case VersionTwo:
|
|
return "Version 2: Based on DCE security domain and 60 bit timestamp."
|
|
case VersionThree:
|
|
return "Version 3: Namespace UUID and unique names hashed by MD5."
|
|
case VersionFour:
|
|
return "Version 4: Crypto-random generated."
|
|
case VersionFive:
|
|
return "Version 5: Namespace UUID and unique names hashed by SHA-1."
|
|
default:
|
|
return "Unknown: Not supported"
|
|
}
|
|
}
|
|
|
|
func resolveVersion(version uint8) Version {
|
|
switch Version(version) {
|
|
case VersionOne, VersionTwo, VersionThree, VersionFour, VersionFive:
|
|
return Version(version)
|
|
default:
|
|
return VersionUnknown
|
|
}
|
|
}
|
|
|
|
func variant(variant uint8) uint8 {
|
|
switch variant & variantGet {
|
|
case VariantRFC4122, 0xA0:
|
|
return VariantRFC4122
|
|
case VariantMicrosoft:
|
|
return VariantMicrosoft
|
|
case VariantFuture:
|
|
return VariantFuture
|
|
}
|
|
return VariantNCS
|
|
}
|