Initial commit
This commit is contained in:
commit
42b7f5de64
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
4
.idea/misc.xml
generated
Normal file
4
.idea/misc.xml
generated
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/theoEnc.iml" filepath="$PROJECT_DIR$/.idea/theoEnc.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
8
.idea/theoEnc.iml
generated
Normal file
8
.idea/theoEnc.iml
generated
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.10" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
0
PACKAGE/__init__py
Executable file
0
PACKAGE/__init__py
Executable file
32
PACKAGE/build/lib/theoEnc/E2EE.py
Executable file
32
PACKAGE/build/lib/theoEnc/E2EE.py
Executable file
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from .otp import encrypt_otp, decrypt_otp
|
||||
from .compress import compress, decompress
|
||||
from .random import random_string
|
||||
|
||||
class E2EE:
|
||||
def __init__(self, seed: str):
|
||||
self.seed = seed
|
||||
self.key = seed
|
||||
|
||||
def get_key(self):
|
||||
return self.key
|
||||
|
||||
def add_compressed_key_part(self, ckeypart: bytes):
|
||||
length = len(ckeypart)
|
||||
ckeypart = decrypt_otp(ckeypart, self.key[length-1:])
|
||||
self.key = self.key[length-1:] # delete the used part of the full key
|
||||
self.key += decompress(ckeypart)
|
||||
|
||||
def generate_compressed_key_part(self, length: int, destroy_used_key=True):
|
||||
ckeypart = random_string(length)
|
||||
ckeypart = compress(ckeypart)
|
||||
ckeypart_enc = encrypt_otp(ckeypart, self.key[len(ckeypart)-1:])
|
||||
if destroy_used_key:
|
||||
self.key = self.key[len(ckeypart)-1:] # delete the of the full key which is used now
|
||||
return ckeypart_enc
|
||||
|
||||
def addCKeyPart(self, ckeypart: bytes):
|
||||
self.add_compressed_key_part(ckeypart, length)
|
||||
def generateCKeyPart(self, length: int, destroy_used_key=True):
|
||||
self.generate_compressed_key_part(length, destroy_used_key)
|
0
PACKAGE/build/lib/theoEnc/__init__.py
Executable file
0
PACKAGE/build/lib/theoEnc/__init__.py
Executable file
14
PACKAGE/build/lib/theoEnc/compress.py
Executable file
14
PACKAGE/build/lib/theoEnc/compress.py
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
import zlib
|
||||
import secrets
|
||||
import string
|
||||
|
||||
def compress(to_compress: str):
|
||||
ret = zlib.compress(bytes(to_compress, "ascii"), 9)
|
||||
return ret
|
||||
|
||||
def decompress(to_decompress: bytes):
|
||||
ret = zlib.decompress(to_decompress)
|
||||
return ret.decode("ascii")
|
15
PACKAGE/build/lib/theoEnc/otp.py
Executable file
15
PACKAGE/build/lib/theoEnc/otp.py
Executable file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
def encrypt_otp(message: bytes, key: str):
|
||||
if len(message) > len(key): return False;
|
||||
l = []
|
||||
for counter, i in enumerate(message):
|
||||
l.append(i ^ key.encode()[counter])
|
||||
return bytes(l)
|
||||
|
||||
def decrypt_otp(cipher: bytes, key: str):
|
||||
if len(cipher) > len(key): return False;
|
||||
l = []
|
||||
for counter, i in enumerate(cipher):
|
||||
l.append(i ^ key.encode()[counter])
|
||||
return bytes(l)
|
11
PACKAGE/build/lib/theoEnc/random.py
Executable file
11
PACKAGE/build/lib/theoEnc/random.py
Executable file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import secrets
|
||||
import string
|
||||
|
||||
def random_string(length: int):
|
||||
symbols = string.punctuation + string.ascii_letters + string.digits
|
||||
ret = ""
|
||||
for _ in range(length):
|
||||
ret += secrets.choice(symbols)
|
||||
return ret
|
10
PACKAGE/setup.py
Executable file
10
PACKAGE/setup.py
Executable file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from distutils.core import setup
|
||||
|
||||
setup(name='theoEnc',
|
||||
version='1.0',
|
||||
description='Library for using the OTP (OneTimePad) in Python3',
|
||||
author='Benjamin Burkhardt',
|
||||
packages=['theoEnc'])
|
32
PACKAGE/theoEnc/E2EE.py
Executable file
32
PACKAGE/theoEnc/E2EE.py
Executable file
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from .otp import encrypt_otp, decrypt_otp
|
||||
from .compress import compress, decompress
|
||||
from .random import random_string
|
||||
|
||||
class E2EE:
|
||||
def __init__(self, seed: str):
|
||||
self.seed = seed
|
||||
self.key = seed
|
||||
|
||||
def get_key(self):
|
||||
return self.key
|
||||
|
||||
def add_compressed_key_part(self, ckeypart: bytes):
|
||||
length = len(ckeypart)
|
||||
ckeypart = decrypt_otp(ckeypart, self.key[length-1:])
|
||||
self.key = self.key[length-1:] # delete the used part of the full key
|
||||
self.key += decompress(ckeypart)
|
||||
|
||||
def generate_compressed_key_part(self, length: int, destroy_used_key=True):
|
||||
ckeypart = random_string(length)
|
||||
ckeypart = compress(ckeypart)
|
||||
ckeypart_enc = encrypt_otp(ckeypart, self.key[len(ckeypart)-1:])
|
||||
if destroy_used_key:
|
||||
self.key = self.key[len(ckeypart)-1:] # delete the of the full key which is used now
|
||||
return ckeypart_enc
|
||||
|
||||
def addCKeyPart(self, ckeypart: bytes):
|
||||
self.add_compressed_key_part(ckeypart, length)
|
||||
def generateCKeyPart(self, length: int, destroy_used_key=True):
|
||||
self.generate_compressed_key_part(length, destroy_used_key)
|
0
PACKAGE/theoEnc/__init__.py
Executable file
0
PACKAGE/theoEnc/__init__.py
Executable file
BIN
PACKAGE/theoEnc/__pycache__/E2EE.cpython-38.pyc
Executable file
BIN
PACKAGE/theoEnc/__pycache__/E2EE.cpython-38.pyc
Executable file
Binary file not shown.
BIN
PACKAGE/theoEnc/__pycache__/__init__.cpython-38.pyc
Executable file
BIN
PACKAGE/theoEnc/__pycache__/__init__.cpython-38.pyc
Executable file
Binary file not shown.
BIN
PACKAGE/theoEnc/__pycache__/compress.cpython-38.pyc
Executable file
BIN
PACKAGE/theoEnc/__pycache__/compress.cpython-38.pyc
Executable file
Binary file not shown.
BIN
PACKAGE/theoEnc/__pycache__/otp.cpython-38.pyc
Executable file
BIN
PACKAGE/theoEnc/__pycache__/otp.cpython-38.pyc
Executable file
Binary file not shown.
BIN
PACKAGE/theoEnc/__pycache__/random.cpython-38.pyc
Executable file
BIN
PACKAGE/theoEnc/__pycache__/random.cpython-38.pyc
Executable file
Binary file not shown.
14
PACKAGE/theoEnc/compress.py
Executable file
14
PACKAGE/theoEnc/compress.py
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
import zlib
|
||||
import secrets
|
||||
import string
|
||||
|
||||
def compress(to_compress: str):
|
||||
ret = zlib.compress(bytes(to_compress, "ascii"), 9)
|
||||
return ret
|
||||
|
||||
def decompress(to_decompress: bytes):
|
||||
ret = zlib.decompress(to_decompress)
|
||||
return ret.decode("ascii")
|
15
PACKAGE/theoEnc/otp.py
Executable file
15
PACKAGE/theoEnc/otp.py
Executable file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
def encrypt_otp(message: bytes, key: str):
|
||||
if len(message) > len(key): return False;
|
||||
l = []
|
||||
for counter, i in enumerate(message):
|
||||
l.append(i ^ key.encode()[counter])
|
||||
return bytes(l)
|
||||
|
||||
def decrypt_otp(cipher: bytes, key: str):
|
||||
if len(cipher) > len(key): return False;
|
||||
l = []
|
||||
for counter, i in enumerate(cipher):
|
||||
l.append(i ^ key.encode()[counter])
|
||||
return bytes(l)
|
11
PACKAGE/theoEnc/random.py
Executable file
11
PACKAGE/theoEnc/random.py
Executable file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import secrets
|
||||
import string
|
||||
|
||||
def random_string(length: int):
|
||||
symbols = string.punctuation + string.ascii_letters + string.digits
|
||||
ret = ""
|
||||
for _ in range(length):
|
||||
ret += secrets.choice(symbols)
|
||||
return ret
|
12
client.py
Executable file
12
client.py
Executable file
@ -0,0 +1,12 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from theoEnc.E2EE import E2EE
|
||||
|
||||
seed = input("Seed: ")
|
||||
|
||||
e2ee = E2EE(seed)
|
||||
|
||||
while True:
|
||||
ckeypart = input("Neuer Schlüsselteil: ").encode()
|
||||
e2ee.add_compressed_key_part(ckeypart, 10)
|
||||
print("\nKey: " + e2ee.get_key())
|
14
server.py
Executable file
14
server.py
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from theoEnc.E2EE import E2EE
|
||||
from theoEnc.random import random_string
|
||||
|
||||
seed = random_string(20)
|
||||
print("Seed: " + seed)
|
||||
|
||||
e2ee = E2EE(seed)
|
||||
|
||||
while True:
|
||||
input("Neuer Schlüsselteil: [ENTER] ")
|
||||
ckeypart = e2ee.generate_compressed_key_part(10)
|
||||
print("\nKey: " + e2ee.get_key() + "\nNeuer kompressierter Schlüsselteil: " + ckeypart.decode())
|
24
test.py
Executable file
24
test.py
Executable file
@ -0,0 +1,24 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from theoEnc.E2EE import E2EE
|
||||
from theoEnc.random import random_string
|
||||
|
||||
LEN = 499900
|
||||
|
||||
|
||||
seed = random_string(500000)
|
||||
print("[SERVER] Length of Seed: " + str(len(seed)))
|
||||
|
||||
e2ee_server = E2EE(seed)
|
||||
e2ee_client = E2EE(seed)
|
||||
|
||||
print("\n[SERVER] Generating new compressed key part (CKP)...")
|
||||
ckp = e2ee_server.generate_compressed_key_part(LEN, destroy_used_key=False)
|
||||
e2ee_server.add_compressed_key_part(ckp)
|
||||
print("[SERVER] Generated.")
|
||||
print("[SERVER] Length of Key: " + str(len(e2ee_server.get_key())))
|
||||
|
||||
print("[CLIENT] Adding CCP...")
|
||||
e2ee_client.add_compressed_key_part(ckp)
|
||||
print("[CLIENT] Added.")
|
||||
print("[CLIENT] Length of Key: " + str(len(e2ee_client.get_key())))
|
32
theoEnc/E2EE.py
Executable file
32
theoEnc/E2EE.py
Executable file
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
from .otp import encrypt_otp, decrypt_otp
|
||||
from .compress import compress, decompress
|
||||
from .random import random_string
|
||||
|
||||
class E2EE:
|
||||
def __init__(self, seed: str):
|
||||
self.seed = seed
|
||||
self.key = seed
|
||||
|
||||
def get_key(self):
|
||||
return self.key
|
||||
|
||||
def add_compressed_key_part(self, ckeypart: bytes):
|
||||
length = len(ckeypart)
|
||||
ckeypart = decrypt_otp(ckeypart, self.key[length-1:])
|
||||
self.key = self.key[length-1:] # delete the used part of the full key
|
||||
self.key += decompress(ckeypart)
|
||||
|
||||
def generate_compressed_key_part(self, length: int, destroy_used_key=True):
|
||||
ckeypart = random_string(length)
|
||||
ckeypart = compress(ckeypart)
|
||||
ckeypart_enc = encrypt_otp(ckeypart, self.key[len(ckeypart)-1:])
|
||||
if destroy_used_key:
|
||||
self.key = self.key[len(ckeypart)-1:] # delete the of the full key which is used now
|
||||
return ckeypart_enc
|
||||
|
||||
def addCKeyPart(self, ckeypart: bytes):
|
||||
self.add_compressed_key_part(ckeypart, length)
|
||||
def generateCKeyPart(self, length: int, destroy_used_key=True):
|
||||
self.generate_compressed_key_part(length, destroy_used_key)
|
0
theoEnc/__init__.py
Executable file
0
theoEnc/__init__.py
Executable file
BIN
theoEnc/__pycache__/E2EE.cpython-310.pyc
Normal file
BIN
theoEnc/__pycache__/E2EE.cpython-310.pyc
Normal file
Binary file not shown.
BIN
theoEnc/__pycache__/E2EE.cpython-38.pyc
Executable file
BIN
theoEnc/__pycache__/E2EE.cpython-38.pyc
Executable file
Binary file not shown.
BIN
theoEnc/__pycache__/__init__.cpython-310.pyc
Normal file
BIN
theoEnc/__pycache__/__init__.cpython-310.pyc
Normal file
Binary file not shown.
BIN
theoEnc/__pycache__/__init__.cpython-38.pyc
Executable file
BIN
theoEnc/__pycache__/__init__.cpython-38.pyc
Executable file
Binary file not shown.
BIN
theoEnc/__pycache__/compress.cpython-310.pyc
Normal file
BIN
theoEnc/__pycache__/compress.cpython-310.pyc
Normal file
Binary file not shown.
BIN
theoEnc/__pycache__/compress.cpython-38.pyc
Executable file
BIN
theoEnc/__pycache__/compress.cpython-38.pyc
Executable file
Binary file not shown.
BIN
theoEnc/__pycache__/otp.cpython-310.pyc
Normal file
BIN
theoEnc/__pycache__/otp.cpython-310.pyc
Normal file
Binary file not shown.
BIN
theoEnc/__pycache__/otp.cpython-38.pyc
Executable file
BIN
theoEnc/__pycache__/otp.cpython-38.pyc
Executable file
Binary file not shown.
BIN
theoEnc/__pycache__/random.cpython-310.pyc
Normal file
BIN
theoEnc/__pycache__/random.cpython-310.pyc
Normal file
Binary file not shown.
BIN
theoEnc/__pycache__/random.cpython-38.pyc
Executable file
BIN
theoEnc/__pycache__/random.cpython-38.pyc
Executable file
Binary file not shown.
14
theoEnc/compress.py
Executable file
14
theoEnc/compress.py
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import sys
|
||||
import zlib
|
||||
import secrets
|
||||
import string
|
||||
|
||||
def compress(to_compress: str):
|
||||
ret = zlib.compress(bytes(to_compress, "ascii"), 9)
|
||||
return ret
|
||||
|
||||
def decompress(to_decompress: bytes):
|
||||
ret = zlib.decompress(to_decompress)
|
||||
return ret.decode("ascii")
|
15
theoEnc/otp.py
Executable file
15
theoEnc/otp.py
Executable file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
def encrypt_otp(message: bytes, key: str):
|
||||
if len(message) > len(key): return False;
|
||||
l = []
|
||||
for counter, i in enumerate(message):
|
||||
l.append(i ^ key.encode()[counter])
|
||||
return bytes(l)
|
||||
|
||||
def decrypt_otp(cipher: bytes, key: str):
|
||||
if len(cipher) > len(key): return False;
|
||||
l = []
|
||||
for counter, i in enumerate(cipher):
|
||||
l.append(i ^ key.encode()[counter])
|
||||
return bytes(l)
|
11
theoEnc/random.py
Executable file
11
theoEnc/random.py
Executable file
@ -0,0 +1,11 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
import secrets
|
||||
import string
|
||||
|
||||
def random_string(length: int):
|
||||
symbols = string.punctuation + string.ascii_letters + string.digits
|
||||
ret = ""
|
||||
for _ in range(length):
|
||||
ret += secrets.choice(symbols)
|
||||
return ret
|
Loading…
x
Reference in New Issue
Block a user