Before Identity restructure

This commit is contained in:
Mark Qvist
2018-03-16 10:50:37 +01:00
parent be8fa4f7bb
commit 5fcbb5d338
16 changed files with 128 additions and 20 deletions
Regular → Executable
+51 -15
View File
@@ -1,4 +1,6 @@
import base64
import math
from Identity import Identity
from Transport import Transport
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
@@ -8,6 +10,10 @@ from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.asymmetric import padding
class Destination:
KEYSIZE = Identity.KEYSIZE;
PADDINGSIZE= Identity.PADDINGSIZE;
# Constants
SINGLE = 0x01;
GROUP = 0x02;
PLAIN = 0x03;
@@ -86,7 +92,7 @@ class Destination:
if self.type == Destination.SINGLE:
self.prv = rsa.generate_private_key(
public_exponent=65337,
key_size=2048,
key_size=Destination.KEYSIZE,
backend=default_backend()
)
self.prv_bytes = self.prv.private_bytes(
@@ -99,6 +105,9 @@ class Destination:
encoding=serialization.Encoding.DER,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
print("Keys created, private length is "+str(len(self.prv_bytes)))
print("Keys created, public length is "+str(len(self.pub_bytes)))
#+", public length is "+str(len(self.pub_bytes))))
if self.type == Destination.GROUP:
self.prv_bytes = Fernet.generate_key()
@@ -142,14 +151,28 @@ class Destination:
return plaintext
if self.type == Destination.SINGLE and self.prv != None:
ciphertext = self.pub.encrypt(
plaintext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
chunksize = (Destination.KEYSIZE-Destination.PADDINGSIZE)/8
chunks = int(math.ceil(len(plaintext)/(float(chunksize))))
print("Plaintext size is "+str(len(plaintext))+", with "+str(chunks)+" chunks")
ciphertext = "";
for chunk in range(chunks):
start = chunk*chunksize
end = (chunk+1)*chunksize
if (chunk+1)*chunksize > len(plaintext):
end = len(plaintext)
print("Processing chunk "+str(chunk+1)+" of "+str(chunks)+". Starting at "+str(start)+" and stopping at "+str(end)+". The length is "+str(len(plaintext[start:end])))
ciphertext += self.pub.encrypt(
plaintext[start:end],
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
)
)
)
print("Plaintext encrypted, ciphertext length is "+str(len(ciphertext))+" bytes.")
return ciphertext
if self.type == Destination.GROUP and self.prv != None:
@@ -164,14 +187,27 @@ class Destination:
return ciphertext
if self.type == Destination.SINGLE and self.prv != None:
plaintext = self.prv.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
print("Ciphertext length is "+str(len(ciphertext))+". ")
chunksize = (Destination.KEYSIZE)/8
chunks = int(math.ceil(len(ciphertext)/(float(chunksize))))
plaintext = "";
for chunk in range(chunks):
start = chunk*chunksize
end = (chunk+1)*chunksize
if (chunk+1)*chunksize > len(ciphertext):
end = len(ciphertext)
print("Processing chunk "+str(chunk+1)+" of "+str(chunks)+". Starting at "+str(start)+" and stopping at "+str(end)+". The length is "+str(len(ciphertext[start:end])))
plaintext += self.prv.decrypt(
ciphertext[start:end],
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA1()),
algorithm=hashes.SHA1(),
label=None
)
)
)
return plaintext;
if self.type == Destination.GROUP:
Regular → Executable
+1 -3
View File
@@ -8,7 +8,7 @@ import os.path
import os
class FlexPE:
MTU = 700
MTU = 600
router = None
config = None
destinations = []
@@ -25,8 +25,6 @@ class FlexPE:
self.createDefaultConfig()
self.applyConfig()
print FlexPE.interfaces
FlexPE.router = self
@staticmethod
+7
View File
@@ -0,0 +1,7 @@
class Identity:
# Configure key size
KEYSIZE = 1536;
# Padding size, not configurable
PADDINGSIZE= 336;
Regular → Executable
View File
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
+2 -1
View File
@@ -21,8 +21,9 @@ class Packet:
self.raw = self.header + self.ciphertext
if len(self.raw) > self.MTU:
raise IOError("Packet size exceeds MTU of "+Packet.MTU+" bytes")
raise IOError("Packet size of "+str(len(self.raw))+" exceeds MTU of "+str(self.MTU)+" bytes")
print("Size: "+str(len(self.raw)))
Transport.outbound(self.raw)
self.sent = True
else:
Regular → Executable
View File
Regular → Executable
+7 -1
View File
@@ -1,5 +1,11 @@
import os
import glob
from .Destination import Destination
from .FlexPE import FlexPE
from .Identity import Identity
from .Packet import Packet
from .Transport import Transport
modules = glob.glob(os.path.dirname(__file__)+"/*.py")
__all__ = [ os.path.basename(f)[:-3] for f in modules if not f.endswith('__init__.py')]
__all__ = [ os.path.basename(f)[:-3] for f in modules if not f.endswith('__init__.py')]
Vendored Regular → Executable
View File
Vendored Regular → Executable
View File