Initial commit
This commit is contained in:
Generated
+3
@@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
Generated
+4
@@ -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>
|
||||||
Generated
+8
@@ -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>
|
||||||
Generated
+8
@@ -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>
|
||||||
Executable
Executable
+32
@@ -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)
|
||||||
Executable
Executable
+14
@@ -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")
|
||||||
Executable
+15
@@ -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)
|
||||||
Executable
+11
@@ -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
|
||||||
Executable
+10
@@ -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'])
|
||||||
Executable
+32
@@ -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)
|
||||||
Executable
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Executable
+14
@@ -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")
|
||||||
Executable
+15
@@ -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)
|
||||||
Executable
+11
@@ -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
|
||||||
@@ -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())
|
||||||
@@ -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())
|
||||||
@@ -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())))
|
||||||
Executable
+32
@@ -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)
|
||||||
Executable
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
Executable
+14
@@ -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")
|
||||||
Executable
+15
@@ -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)
|
||||||
Executable
+11
@@ -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
|
||||||
Reference in New Issue
Block a user