diff options
Diffstat (limited to 'challenge/c22.go')
-rw-r--r-- | challenge/c22.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/challenge/c22.go b/challenge/c22.go new file mode 100644 index 0000000..603cb9e --- /dev/null +++ b/challenge/c22.go @@ -0,0 +1,56 @@ +// Copyright © 2021 rsiddharth <s@ricketyspace.net> +// SPDX-License-Identifier: ISC + +package challenge + +import ( + "fmt" + "time" + + "ricketyspace.net/cryptopals/lib" +) + +func C22() { + minWait := 40 * time.Second + maxWait := 1000 * time.Second + randomWait := func() { + fmt.Printf("Waiting for a random amount of time...\n") + s := time.Now() + lib.SleepRandom(minWait, maxWait) + fmt.Printf("Elapsed time %v\n", time.Now().Sub(s)) + } + + fmt.Printf("This challenge might take ~%v to ~%v to complete\n", + 2*minWait, 2*maxWait) + + randomWait() + fmt.Printf("Generating seed from current time...\n") + lib.MTSeed(uint32(time.Now().Unix())) + randomWait() + + fmt.Printf("Extracting first random 32-bit garbage fron RNG...\n") + random := lib.MTExtract() + + fmt.Printf("Cracking seed...\n") + guess := uint32(time.Now().Unix()) + for { + lib.MTSeed(guess) + x := lib.MTExtract() + if x == random { + fmt.Printf("Found seed %v\n", guess) + break + } + guess = guess - 1 + } +} + +// Output: +// This challenge might take ~1m20s to ~33m20s to complete +// Waiting for a random amount of time... +// Elapsed time 10m51.671176141s +// Generating seed from current time... +// Waiting for a random amount of time... +// Elapsed time 14m48.257182374s +// Extracting first random 32-bit garbage fron RNG... +// Cracking seed... +// Found seed 1625112975 |