206 lines
6.1 KiB
Python
Executable File
206 lines
6.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import matplotlib.pyplot as plt
|
|
from matplotlib.pyplot import rcParams
|
|
from cryptography.fernet import Fernet
|
|
from cryptography.hazmat.backends import default_backend
|
|
from cryptography.hazmat.primitives import hashes
|
|
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
|
|
from Crypto.Cipher import AES
|
|
import base64
|
|
import csv
|
|
import struct
|
|
import time
|
|
import string
|
|
import random
|
|
import aes
|
|
import numpy as np
|
|
from ctypes import *
|
|
import _ctypes
|
|
from Crypto.PublicKey import RSA
|
|
from Crypto.Cipher import PKCS1_OAEP
|
|
import os
|
|
#from multiprocessing import Pool
|
|
|
|
def u_decrypt(arg):
|
|
so_file2 = 'EES401/URG_decrypt.so'
|
|
arg_len = len(arg)
|
|
print("Length ", arg_len)
|
|
u_dec = CDLL(so_file2)
|
|
u_dec.main.restype = c_char_p
|
|
u_dec.main.argtype = c_char_p
|
|
c_return = u_dec.main(arg)
|
|
_ctypes.dlclose(u_dec._handle)
|
|
print("C Return ",c_return)
|
|
return c_return
|
|
|
|
def u_decrypt593(arg):
|
|
so_file2 = 'EES593/URG_decrypt.so'
|
|
arg_len = len(arg)
|
|
print("Length ", arg_len)
|
|
u_dec = CDLL(so_file2)
|
|
u_dec.main.restype = c_char_p
|
|
u_dec.main.argtype = c_char_p
|
|
c_return = u_dec.main(arg)
|
|
_ctypes.dlclose(u_dec._handle)
|
|
print("C Return ",c_return)
|
|
return c_return
|
|
|
|
def Fernet_process():
|
|
password="urg123"
|
|
pass_byte=password.encode()
|
|
salt=b'salt_'
|
|
kdf = PBKDF2HMAC(
|
|
algorithm=hashes.SHA256(),
|
|
length=32,
|
|
salt=salt,
|
|
iterations=100,
|
|
backend=default_backend()
|
|
)
|
|
key = base64.urlsafe_b64encode(kdf.derive(pass_byte))
|
|
return key
|
|
|
|
def file_handler(f_name, num):
|
|
num = str(num).zfill(2)
|
|
f = open("./cipher_bak/"+f_name+"_"+num+".dat", "rb")
|
|
#file_val = list(f.read())
|
|
#file_val = bytearray(file_val)
|
|
file_val = f.read()
|
|
return file_val
|
|
|
|
def rsa_file_handler(f_name, num):
|
|
num = str(num).zfill(2)
|
|
f = open("./cipher/"+f_name+"_"+num+".dat", "rb")
|
|
return f.read()
|
|
|
|
NTRU_var = []
|
|
NTRU593_var = []
|
|
RSA_var = []
|
|
RSA2_var = []
|
|
AES_var = []
|
|
Fernet_var = []
|
|
plain_length = []
|
|
|
|
aes_key = "1234123412341234"
|
|
IV = 16 * '\x00'
|
|
|
|
base_name = "cipher_EES401"
|
|
base_name_593 = "cipher_EES593"
|
|
base_name_RSA3 = "RSA_3072"
|
|
base_name_RSA7 = "RSA_7680"
|
|
base_name_aes = "AES_128"
|
|
base_name_Fernet = "Fernet_128"
|
|
|
|
i = 1
|
|
while i <= 16:
|
|
plain_length.append(i)
|
|
i = i+1
|
|
|
|
for i in plain_length:
|
|
|
|
plain = rsa_file_handler(base_name, i)
|
|
plain2 = rsa_file_handler(base_name_593, i)
|
|
fernet_key = Fernet_process()
|
|
#print("Cip now : ", plain)
|
|
|
|
start = time.perf_counter()
|
|
print("NTRU PLAIN ",u_decrypt(plain))
|
|
end=time.perf_counter()-start
|
|
NTRU_var.append(end)
|
|
|
|
start=time.perf_counter()
|
|
print("NTRU PLAIN 593 ",u_decrypt593(plain2))
|
|
end=time.perf_counter()-start
|
|
NTRU593_var.append(end)
|
|
|
|
fernet_cipher = rsa_file_handler(base_name_Fernet, i)
|
|
time_s = time.perf_counter()
|
|
Fernet_data = Fernet(fernet_key).decrypt(fernet_cipher)
|
|
time_e = time.perf_counter()
|
|
end = time_e - time_s
|
|
Fernet_var.append(time_e - time_s)
|
|
|
|
print("Fernet Result : ", Fernet_data)
|
|
print("Fernet Cipher Length : ",len(fernet_cipher))
|
|
print("Fernet Decryption Time : ",end)
|
|
print(" ")
|
|
|
|
aes_cipher = rsa_file_handler(base_name_aes, i)
|
|
start=time.perf_counter()
|
|
AES128= AES.new(aes_key, AES.MODE_CBC, IV).decrypt(aes_cipher)
|
|
end=time.perf_counter()-start
|
|
AES_var.append(end)
|
|
|
|
print("AES Result : ", AES128.decode('ascii'))
|
|
print("AES128 Cipher Length : ",len(aes_cipher))
|
|
print("AES128 Decryption Time : ",end)
|
|
print(" ")
|
|
|
|
rsa3072 = open("RSA3072_priv.pem", "r").read()
|
|
start=time.perf_counter()
|
|
rsa_priv = RSA.importKey(rsa3072)
|
|
RSA_dec = rsa_priv.decrypt(rsa_file_handler(base_name_RSA3, i))
|
|
end=time.perf_counter()-start
|
|
RSA_var.append(end)
|
|
print("3072 Result : ", RSA_dec)
|
|
print("RSA Cipher length", len(plain))
|
|
print("RSA Decryption Time : ", end)
|
|
print(" ")
|
|
|
|
rsa7680 = open("RSA7680_priv.pem", "r").read()
|
|
start=time.perf_counter()
|
|
RSA2_priv = RSA.importKey(rsa7680)
|
|
RSA2_dec = RSA2_priv.decrypt(rsa_file_handler(base_name_RSA3, i))
|
|
end=time.perf_counter()-start
|
|
RSA2_var.append(end)
|
|
print("7680 Result : ", RSA_dec)
|
|
print("RSA2 Plain length", len(plain))
|
|
print("RSA2 Encryption Time : ", end)
|
|
print(" ")
|
|
|
|
|
|
NTRU_var = [ round(i * 1000, 3) for i in NTRU_var ]
|
|
NTRU593_var = [ round(i * 1000, 3) for i in NTRU593_var ]
|
|
RSA_var = [ round(i * 1000, 3) for i in RSA_var ]
|
|
RSA2_var = [ round(i * 1000, 3) for i in RSA2_var ]
|
|
AES_var = [ round(i * 1000, 3) for i in AES_var ]
|
|
Fernet_var = [ round(i * 1000, 3) for i in Fernet_var ]
|
|
|
|
|
|
header = ["NTRU 401","NTRU 593", "RSA_2048", "RSA_7680", "AES128", "Fernet128"]
|
|
all_time = zip(NTRU_var, NTRU593_var, RSA_var, RSA2_var, AES_var, Fernet_var)
|
|
with open("Benchmark_Decryption_Time.csv", "w") as f:
|
|
writer = csv.writer(f)
|
|
writer.writerow(header)
|
|
for row in all_time:
|
|
writer.writerow(row)
|
|
|
|
print(NTRU_var)
|
|
print(AES_var)
|
|
y =np.array(plain_length)
|
|
plt.figure(figsize=(11,5))
|
|
rcParams['legend.fontsize'] = '50'
|
|
rcParams['font.family'] = 'sans-serif'
|
|
rcParams['font.size'] = '16'
|
|
plt.scatter(y ,AES_var ,marker="x" ,label='AES 128' )
|
|
plt.scatter(y ,Fernet_var ,marker="^" ,label='Fernet 128')
|
|
plt.scatter(y ,RSA_var ,marker="P" ,label='RSA 2048' )
|
|
plt.scatter(y ,RSA2_var ,marker="d" ,label='RSA 7680' )
|
|
plt.scatter(y ,NTRU_var ,marker="v" ,label='NTRU 401' )
|
|
plt.scatter(y ,NTRU593_var ,marker="o" ,label='NTRU 593' )
|
|
plt.plot(y, AES_var, linestyle=':')
|
|
plt.plot(y, Fernet_var, linestyle=':')
|
|
plt.plot(y, RSA_var, linestyle=':')
|
|
plt.plot(y, RSA2_var, linestyle=':')
|
|
plt.plot(y, NTRU_var, linestyle=':')
|
|
plt.plot(y, NTRU593_var, linestyle=':')
|
|
plt.xticks(list(range(1,17)))
|
|
plt.xlabel("Length Plain text")
|
|
plt.ylabel("Time (ms)")
|
|
plt.yscale('log')
|
|
plt.gca().set_yticks([0.03, 1.90], minor=True)
|
|
plt.legend(bbox_to_anchor=(1.04,1), loc="upper left", fontsize='14')
|
|
plt.subplots_adjust(right=0.8)
|
|
plt.tight_layout()
|
|
plt.savefig('time_comparsion_DEC.eps', format='eps', dpi=900)
|