diff --git a/data/01.txt b/data/01.txt index e69de29..2aaf984 100644 --- a/data/01.txt +++ b/data/01.txt @@ -0,0 +1 @@ +49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d diff --git a/data/02.txt b/data/02.txt new file mode 100644 index 0000000..3e2d695 --- /dev/null +++ b/data/02.txt @@ -0,0 +1,2 @@ +1c0111001f010100061a024b53535009181c +686974207468652062756c6c277320657965 diff --git a/data/03.txt b/data/03.txt new file mode 100644 index 0000000..38b54db --- /dev/null +++ b/data/03.txt @@ -0,0 +1 @@ +1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736 diff --git a/pyproject.toml b/pyproject.toml index 4d5d47a..f842cef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "cryptopals" -version = "0.0.1" +version = "0.1" authors = [ { name="Joshua Flores", email="josh@heavyguys.net"}, ] diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..d802289 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,24 @@ +[metadata] +name = cryptopals +version = 0.1 +author = Joshua Flores +author_email = josh@heavyguys.net +description = Cryptopals Solutions +long_description = file: README.md, LICENSE.txt +long_description_content_type = text/markdown +url = https://git.heavyguys.net/Josh/cryptopals +project_urls = + repository = https://git.heavyguys.net/Josh/cryptopals.git +classifiers = + Programming Language :: Python :: 3 + License :: OSI Approved :: MIT License + Operating System :: OS Independent + +[options] +package_dir = + = src +packages = find: +python_requires = >=3.9 + +[options.packages.find] +where = src diff --git a/src/cryptopals/cryptlib.py b/src/cryptopals/cryptlib.py new file mode 100644 index 0000000..318821f --- /dev/null +++ b/src/cryptopals/cryptlib.py @@ -0,0 +1,14 @@ +import base64 + + +# this function takes a string representing hex, converts to bytes, and re-encodes to base64 +def hex_to_base64(hex_string): + byte_array = bytearray.fromhex(hex_string) + base64_value = base64.b64encode(byte_array) + return base64_value + +# this function takes two hex strings, converts them to bytes, and xor's them +def byte_xor(bs1, bs2): + byte_array1 = int(bs1,16) + byte_array2 = int(bs2,16) + return byte_array1 ^ byte_array2 diff --git a/src/cryptopals/cryptopals.py b/src/cryptopals/cryptopals.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/cryptopals/helper.py b/src/cryptopals/helper.py new file mode 100644 index 0000000..e29e31c --- /dev/null +++ b/src/cryptopals/helper.py @@ -0,0 +1,5 @@ +def read_file(filepath): + with open(filepath, "r") as file: + content = file.read() + return content + diff --git a/tests/01.py b/tests/01.py index e69de29..cd15344 100644 --- a/tests/01.py +++ b/tests/01.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +import os, sys + +module_dir = os.path.relpath('../src/cryptopals') +sys.path.insert(0, module_dir) + +import helper, cryptlib + +def main(): + hex_string = helper.read_file("../data/01.txt") + solution = cryptlib.hex_to_base64(hex_string) + print(solution.decode()) + + +if __name__ == '__main__': + main() diff --git a/tests/02.py b/tests/02.py new file mode 100644 index 0000000..e34c999 --- /dev/null +++ b/tests/02.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python + +import os, sys + +module_dir = os.path.relpath('../src/cryptopals') +sys.path.insert(0, module_dir) + +import helper, cryptlib + +def main(): + content = helper.read_file("../data/02.txt") + hexstring_list = content.splitlines() + solution = cryptlib.byte_xor(hexstring_list[0], hexstring_list[1]) + print(hex(solution)[2:]) + +if __name__ == '__main__': + main() diff --git a/tests/template.py b/tests/template.py new file mode 100644 index 0000000..1b9b8ae --- /dev/null +++ b/tests/template.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import os, sys + +module_dir = os.path.relpath('../src/cryptopals') +sys.path.insert(0, module_dir) + +import helper, cryptlib + +def main(): + pass + + +if __name__ == '__main__': + main()