Mercurial > gemma
comparison pkg/common/random.go @ 5490:5f47eeea988d logging
Use own logging package.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 20 Sep 2021 17:45:39 +0200 |
parents | 8c5df0f3562e |
children |
comparison
equal
deleted
inserted
replaced
5488:a726a92ea5c9 | 5490:5f47eeea988d |
---|---|
15 | 15 |
16 import ( | 16 import ( |
17 "bytes" | 17 "bytes" |
18 "crypto/rand" | 18 "crypto/rand" |
19 "io" | 19 "io" |
20 "log" | |
21 "math" | 20 "math" |
22 "math/big" | 21 "math/big" |
23 mrand "math/rand" | 22 mrand "math/rand" |
24 "time" | 23 "time" |
24 | |
25 "gemma.intevation.de/gemma/pkg/log" | |
25 ) | 26 ) |
26 | 27 |
27 // GenerateRandomKey generates a cryptographically secure random key | 28 // GenerateRandomKey generates a cryptographically secure random key |
28 // of a given length. | 29 // of a given length. |
29 func GenerateRandomKey(length int) []byte { | 30 func GenerateRandomKey(length int) []byte { |
52 | 53 |
53 for i := 0; i < 1000; i++ { | 54 for i := 0; i < 1000; i++ { |
54 for i := range out { | 55 for i := range out { |
55 v, err := rand.Int(rand.Reader, max) | 56 v, err := rand.Int(rand.Reader, max) |
56 if err != nil { | 57 if err != nil { |
57 log.Panicf("error: %v\n", err) | 58 log.Panicf("%v\n", err) |
58 } | 59 } |
59 out[i] = alphabet[v.Int64()] | 60 out[i] = alphabet[v.Int64()] |
60 } | 61 } |
61 // Ensure at least one special char. | 62 // Ensure at least one special char. |
62 if bytes.ContainsAny(out, special) { | 63 if bytes.ContainsAny(out, special) { |
63 return string(out) | 64 return string(out) |
64 } | 65 } |
65 } | 66 } |
66 log.Println("warn: Your random generator may be broken.") | 67 log.Warnf("Your random generator may be broken.") |
67 out[0] = special[0] | 68 out[0] = special[0] |
68 return string(out) | 69 return string(out) |
69 } | 70 } |
70 | 71 |
71 // Random returns a function which generates pseudo random | 72 // Random returns a function which generates pseudo random |
75 low, high = high, low | 76 low, high = high, low |
76 } | 77 } |
77 | 78 |
78 var seed int64 | 79 var seed int64 |
79 if seedInt, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64)); err != nil { | 80 if seedInt, err := rand.Int(rand.Reader, big.NewInt(math.MaxInt64)); err != nil { |
80 log.Printf("warn: Generating good random seed failed: %v\n", err) | 81 log.Warnf("Generating good random seed failed: %v\n", err) |
81 seed = time.Now().Unix() | 82 seed = time.Now().Unix() |
82 } else { | 83 } else { |
83 seed = seedInt.Int64() | 84 seed = seedInt.Int64() |
84 } | 85 } |
85 rnd := mrand.New(mrand.NewSource(seed)) | 86 rnd := mrand.New(mrand.NewSource(seed)) |