diff options
| author | n1c00o <n@nc0.fr> | 2023-02-05 14:05:26 +0100 | 
|---|---|---|
| committer | Nicolas <34602094+n1c00o@users.noreply.github.com> | 2023-02-06 22:35:54 +0100 | 
| commit | b371cb11a5877ede8847351e95c7847b5024a551 (patch) | |
| tree | 958227cf8562503246976744b89370d389de5f66 /vendor/github.com/google/uuid/version4.go | |
| parent | 03e0c597ad5f3539ad33976fe02c11a9e39f34d6 (diff) | |
Init Go module
Diffstat (limited to 'vendor/github.com/google/uuid/version4.go')
| -rw-r--r-- | vendor/github.com/google/uuid/version4.go | 76 | 
1 files changed, 76 insertions, 0 deletions
diff --git a/vendor/github.com/google/uuid/version4.go b/vendor/github.com/google/uuid/version4.go new file mode 100644 index 0000000..7697802 --- /dev/null +++ b/vendor/github.com/google/uuid/version4.go @@ -0,0 +1,76 @@ +// Copyright 2016 Google Inc.  All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package uuid + +import "io" + +// New creates a new random UUID or panics.  New is equivalent to +// the expression +// +//    uuid.Must(uuid.NewRandom()) +func New() UUID { +	return Must(NewRandom()) +} + +// NewString creates a new random UUID and returns it as a string or panics. +// NewString is equivalent to the expression +// +//    uuid.New().String() +func NewString() string { +	return Must(NewRandom()).String() +} + +// NewRandom returns a Random (Version 4) UUID. +// +// The strength of the UUIDs is based on the strength of the crypto/rand +// package. +// +// Uses the randomness pool if it was enabled with EnableRandPool. +// +// A note about uniqueness derived from the UUID Wikipedia entry: +// +//  Randomly generated UUIDs have 122 random bits.  One's annual risk of being +//  hit by a meteorite is estimated to be one chance in 17 billion, that +//  means the probability is about 0.00000000006 (6 × 10−11), +//  equivalent to the odds of creating a few tens of trillions of UUIDs in a +//  year and having one duplicate. +func NewRandom() (UUID, error) { +	if !poolEnabled { +		return NewRandomFromReader(rander) +	} +	return newRandomFromPool() +} + +// NewRandomFromReader returns a UUID based on bytes read from a given io.Reader. +func NewRandomFromReader(r io.Reader) (UUID, error) { +	var uuid UUID +	_, err := io.ReadFull(r, uuid[:]) +	if err != nil { +		return Nil, err +	} +	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 +	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 +	return uuid, nil +} + +func newRandomFromPool() (UUID, error) { +	var uuid UUID +	poolMu.Lock() +	if poolPos == randPoolSize { +		_, err := io.ReadFull(rander, pool[:]) +		if err != nil { +			poolMu.Unlock() +			return Nil, err +		} +		poolPos = 0 +	} +	copy(uuid[:], pool[poolPos:(poolPos+16)]) +	poolPos += 16 +	poolMu.Unlock() + +	uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 +	uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 +	return uuid, nil +}  | 
