summaryrefslogtreecommitdiffstats
path: root/lib/rng.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rng.go')
-rw-r--r--lib/rng.go22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/rng.go b/lib/rng.go
index c1038f4..c48f719 100644
--- a/lib/rng.go
+++ b/lib/rng.go
@@ -142,3 +142,25 @@ func MTXORStream(stream, seed []byte) []byte {
}
return s
}
+
+func MTPasswordResetToken(seed uint32, length int) string {
+ if length < 16 {
+ length = 16 // Default length.
+ }
+
+ // Init MT19937.
+ mtR := new(MTRand)
+ mtR.Seed(seed)
+
+ n := uint32(0)
+ t := make([]byte, 0) // Token in bytes.
+ for i := 0; i < length; i++ {
+ if n == uint32(0) {
+ n = mtR.Extract()
+ }
+ t = append(t, byte(n&0xFF)) // Extract last 8 bits.
+ n = n >> 8 // Get rid of the last 8 bits.
+ }
+
+ return BytesToHexStr(t) // Return token as a hex string.
+}