From ce4fd171d1bd6bd2a0c478d78151d4d379f5380b Mon Sep 17 00:00:00 2001 From: siddharth Date: Thu, 1 Jul 2021 00:42:46 -0400 Subject: challenge: do challenge 22 --- challenge/c22.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 challenge/c22.go (limited to 'challenge') 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 +// 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 -- cgit v1.2.3