diff options
author | Rutger Broekhoff | 2023-12-29 21:31:53 +0100 |
---|---|---|
committer | Rutger Broekhoff | 2023-12-29 21:31:53 +0100 |
commit | 404aeae4545d2426c089a5f8d5e82dae56f5212b (patch) | |
tree | 2d84e00af272b39fc04f3795ae06bc48970e57b5 /vendor/github.com/google/uuid/version4.go | |
parent | 209d8b0187ed025dec9ac149ebcced3462877bff (diff) | |
download | gitolfs3-404aeae4545d2426c089a5f8d5e82dae56f5212b.tar.gz gitolfs3-404aeae4545d2426c089a5f8d5e82dae56f5212b.zip |
Make Nix builds work
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 @@ | |||
1 | // Copyright 2016 Google Inc. All rights reserved. | ||
2 | // Use of this source code is governed by a BSD-style | ||
3 | // license that can be found in the LICENSE file. | ||
4 | |||
5 | package uuid | ||
6 | |||
7 | import "io" | ||
8 | |||
9 | // New creates a new random UUID or panics. New is equivalent to | ||
10 | // the expression | ||
11 | // | ||
12 | // uuid.Must(uuid.NewRandom()) | ||
13 | func New() UUID { | ||
14 | return Must(NewRandom()) | ||
15 | } | ||
16 | |||
17 | // NewString creates a new random UUID and returns it as a string or panics. | ||
18 | // NewString is equivalent to the expression | ||
19 | // | ||
20 | // uuid.New().String() | ||
21 | func NewString() string { | ||
22 | return Must(NewRandom()).String() | ||
23 | } | ||
24 | |||
25 | // NewRandom returns a Random (Version 4) UUID. | ||
26 | // | ||
27 | // The strength of the UUIDs is based on the strength of the crypto/rand | ||
28 | // package. | ||
29 | // | ||
30 | // Uses the randomness pool if it was enabled with EnableRandPool. | ||
31 | // | ||
32 | // A note about uniqueness derived from the UUID Wikipedia entry: | ||
33 | // | ||
34 | // Randomly generated UUIDs have 122 random bits. One's annual risk of being | ||
35 | // hit by a meteorite is estimated to be one chance in 17 billion, that | ||
36 | // means the probability is about 0.00000000006 (6 × 10−11), | ||
37 | // equivalent to the odds of creating a few tens of trillions of UUIDs in a | ||
38 | // year and having one duplicate. | ||
39 | func NewRandom() (UUID, error) { | ||
40 | if !poolEnabled { | ||
41 | return NewRandomFromReader(rander) | ||
42 | } | ||
43 | return newRandomFromPool() | ||
44 | } | ||
45 | |||
46 | // NewRandomFromReader returns a UUID based on bytes read from a given io.Reader. | ||
47 | func NewRandomFromReader(r io.Reader) (UUID, error) { | ||
48 | var uuid UUID | ||
49 | _, err := io.ReadFull(r, uuid[:]) | ||
50 | if err != nil { | ||
51 | return Nil, err | ||
52 | } | ||
53 | uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 | ||
54 | uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 | ||
55 | return uuid, nil | ||
56 | } | ||
57 | |||
58 | func newRandomFromPool() (UUID, error) { | ||
59 | var uuid UUID | ||
60 | poolMu.Lock() | ||
61 | if poolPos == randPoolSize { | ||
62 | _, err := io.ReadFull(rander, pool[:]) | ||
63 | if err != nil { | ||
64 | poolMu.Unlock() | ||
65 | return Nil, err | ||
66 | } | ||
67 | poolPos = 0 | ||
68 | } | ||
69 | copy(uuid[:], pool[poolPos:(poolPos+16)]) | ||
70 | poolPos += 16 | ||
71 | poolMu.Unlock() | ||
72 | |||
73 | uuid[6] = (uuid[6] & 0x0f) | 0x40 // Version 4 | ||
74 | uuid[8] = (uuid[8] & 0x3f) | 0x80 // Variant is 10 | ||
75 | return uuid, nil | ||
76 | } | ||