package cryptopals_test import ( "bufio" "math" "os" "testing" "mvvasilev.dev/cryptopals/set1" ) const Challenge1HexValue = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d" func Test_Challenge1(t *testing.T) { const expected = "SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t" value, success := set1.HexToBase64(Challenge1HexValue) if !success || value != expected { t.Fatal("Set 1, Challenge 1 has failed") } } func Test_Challenge2(t *testing.T) { const expected = "746865206b696420646f6e277420706c6179" const content = "1c0111001f010100061a024b53535009181c" const password = "686974207468652062756c6c277320657965" value := set1.XORHexString(content, password) if value != expected { t.Fatal(("Set 1, Challenge 2 has failed")) } } func Test_Challenge3(t *testing.T) { const encodedString = "1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736" score, bytes := set1.BruteForceXORSingleCharacterEncodedString(encodedString) t.Logf("Result: '%s' with score %d", string(bytes), score) } func Test_Challenge4(t *testing.T) { file, err := os.Open("./res/set-1-challenge-4.txt") if err != nil { t.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) bestScore := math.MinInt32 bestResult := "" for scanner.Scan() { original := scanner.Text() score, result := set1.BruteForceXORSingleCharacterEncodedString(original) if score > bestScore { bestScore = score bestResult = string(result) } } t.Logf("Result: '%s' with score %d", bestResult, bestScore) }