diff --git a/TPs/TP02/py/cfich_chacha20.py b/TPs/TP02/py/cfich_chacha20.py new file mode 100755 index 0000000..fc233bf --- /dev/null +++ b/TPs/TP02/py/cfich_chacha20.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 + +from cryptography.hazmat.primitives.ciphers import Cipher, algorithms +import sys +import os + +def setup(key_file): + f = open(key_file,"wb") + key_bytes = os.urandom(32) + f.write(key_bytes) + f.close() + +def encrypt(input_file, key_file): + fkey = open(key_file,"rb") + inp = open(input_file,"rb") + out = open(f"{input_file}.enc","wb") + + key = fkey.read() + plaintext = inp.read() + nonce = os.urandom(16) + cipher = Cipher(algorithms.ChaCha20(key=key,nonce=nonce),mode=None) + encryptor = cipher.encryptor() + ciphertext = encryptor.update(plaintext) + ciphertext = nonce + ciphertext + + out.write(ciphertext) + + fkey.close() + inp.close() + out.close() + +def decrypt(input_file,key_file): + fkey = open(key_file,"rb") + inp = open(f"{input_file}.enc","rb") + out = open(f"{input_file}.dec","wb") + + key = fkey.read() + input_bytes = inp.read() + nonce = input_bytes[:16] + ciphertext = input_bytes[16:] + + cipher = Cipher(algorithms.ChaCha20(key=key,nonce=nonce),mode=None) + decryptor = cipher.decryptor() + plaintext = decryptor.update(ciphertext) + + out.write(plaintext) + + fkey.close() + inp.close() + out.close() + +def main(): + args = sys.argv[1:] + if len(args) == 0: + sys.exit("Needs at least 2 arguments, use help.") + + match args[0]: + case "setup": + if len(args) != 2: + print("Number of arguments is incorrect for setup option") + key_file = args[1] + setup(key_file) + case "enc": + if len(args) != 3: + print("Number of arguments is incorrect for enc option") + input_file = args[1] + key_file = args[2] + encrypt(input_file,key_file) + case "dec": + if len(args) != 3: + print("Number of arguments is incorrect for dec option") + input_file = args[1] + key_file = args[2] + decrypt(input_file,key_file) + + case "help": + print("skill issue") + case _: + print(f"{args[1]} is not an option, use help") + +if __name__ == "__main__": + main() diff --git a/TPs/TP02/py/input.txt b/TPs/TP02/py/input.txt new file mode 100644 index 0000000..afe74b8 --- /dev/null +++ b/TPs/TP02/py/input.txt @@ -0,0 +1 @@ +panda é fixe!!! diff --git a/TPs/TP02/py/input.txt.dec b/TPs/TP02/py/input.txt.dec new file mode 100644 index 0000000..afe74b8 --- /dev/null +++ b/TPs/TP02/py/input.txt.dec @@ -0,0 +1 @@ +panda é fixe!!! diff --git a/TPs/TP02/py/input.txt.enc b/TPs/TP02/py/input.txt.enc new file mode 100644 index 0000000..7517ad9 --- /dev/null +++ b/TPs/TP02/py/input.txt.enc @@ -0,0 +1 @@ +[n "[vշ4Z![n{V#쁻 \ No newline at end of file diff --git a/TPs/TP02/py/key b/TPs/TP02/py/key new file mode 100644 index 0000000..229658e --- /dev/null +++ b/TPs/TP02/py/key @@ -0,0 +1 @@ +Y!ͬm'HjS<:AƇFf \ No newline at end of file