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))