|
import gradio as gr |
|
from cryptography.fernet import Fernet |
|
from cryptography.hazmat.primitives import hashes |
|
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC |
|
import os |
|
import base64 |
|
import hashlib |
|
from pathlib import Path |
|
import qr |
|
import stegan |
|
import json |
|
|
|
def trans_block(sender,recipient,amount): |
|
transaction = [{ |
|
'sender': sender, |
|
'recipient': recipient, |
|
'amount': amount |
|
}] |
|
json_object = json.dumps(transaction, indent=4) |
|
print (json_object) |
|
return json_object |
|
|
|
def create_key(passw): |
|
key = passw.encode() |
|
h = hashlib.new('sha256') |
|
h.update(key) |
|
key = h.hexdigest() |
|
key = key.encode() |
|
|
|
salt = key |
|
kdf = PBKDF2HMAC( |
|
algorithm=hashes.SHA256(), |
|
length=32, |
|
salt=salt, |
|
iterations=480000, |
|
) |
|
key = base64.urlsafe_b64encode(kdf.derive(key)) |
|
return key |
|
|
|
|
|
def encrypt(passw,trans_s=None,trans_r=None,trans_a=None): |
|
|
|
key = create_key(passw) |
|
fernet = Fernet(key) |
|
enc_mes="" |
|
enc_file=None |
|
|
|
if trans_s != None and trans_r != None and trans_a != None and trans_s != "" and trans_r != "" and trans_a != "": |
|
trans = trans_block(trans_s,trans_r,trans_a) |
|
bytes_j = trans.encode() |
|
|
|
json_bytes = fernet.encrypt(bytes_j) |
|
enc_mes = f'{json_bytes}+ccc+' |
|
|
|
|
|
m = hashlib.sha256() |
|
bytes_enc_mes = enc_mes.encode() |
|
m.update(bytes_enc_mes) |
|
out = m.hexdigest() |
|
out = out.encode() |
|
print(out) |
|
qr_link = out |
|
enc_qr = stegan.conv_im(qr_link=qr_link,data=enc_mes) |
|
|
|
return enc_mes,enc_qr,enc_qr |
|
|
|
def decrypt(passw,enc_in=None): |
|
key = create_key(passw) |
|
fernet = Fernet(key) |
|
dec_im = None |
|
mes_dec= None |
|
enc_in=enc_in.strip('"') |
|
print (f'enc_in :::: {enc_in}') |
|
|
|
|
|
|
|
if "+aaa+" in enc_in: |
|
mes1=enc_in.split("+aaa+",1)[0] |
|
mes1=mes1.strip("b'").strip("'") |
|
mes_bytes = bytes(mes1,'utf-8') |
|
mes_dec = fernet.decrypt(mes_bytes).decode() |
|
if "+bbb+" in enc_in: |
|
mes12=enc_in.split("+aaa+",1)[1] |
|
mes2=mes12.split("+bbb+",1)[0] |
|
mes2=mes2.strip("b'").strip("'") |
|
im_bytes = bytes(mes2,'utf-8') |
|
print(f'im_bytes::{im_bytes}') |
|
|
|
mes2 = fernet.decrypt(mes2).decode() |
|
|
|
with open(f"finished_im.png", "wb") as fh: |
|
|
|
fh.write(base64.decodebytes(bytes(mes2, 'utf-8'))) |
|
fh.close |
|
dec_im = "finished_im.png" |
|
if "+ccc+" in enc_in: |
|
mes13=enc_in.split("+bbb+",1)[1] |
|
mes3=mes13.split("+ccc+",1)[0] |
|
mes3=mes3.strip("b'").strip("'") |
|
json_bytes = bytes(mes3,'utf-8') |
|
print(f'im_bytes::{json_bytes}') |
|
dec_json = fernet.decrypt(json_bytes).decode() |
|
if not "+bbb+" in enc_in: |
|
if "+ccc+" in enc_in: |
|
mes14=enc_in.split("+aaa+",1)[1] |
|
|
|
mes4=mes14.split("+ccc+",1)[0] |
|
mes4=mes4.strip("b'").strip("'") |
|
json_bytes = bytes(mes4,'utf-8') |
|
print(f'im_bytes::{json_bytes}') |
|
dec_json = fernet.decrypt(json_bytes).decode() |
|
|
|
if not "+aaa+" in enc_in: |
|
if "+bbb+" in enc_in: |
|
mes2 = enc_in.split("+bbb+",1)[0] |
|
mes2=mes2.strip("b'").strip("'") |
|
im_bytes = bytes(mes2,'utf-8') |
|
print(f'im_bytes2::{im_bytes}') |
|
mes2 = fernet.decrypt(mes2).decode() |
|
|
|
|
|
with open(f"finished_im.png", "wb") as fh: |
|
|
|
fh.write(base64.decodebytes(bytes(mes2, 'utf-8'))) |
|
fh.close |
|
dec_im = "finished_im.png" |
|
if "+ccc+" in enc_in: |
|
mes13=enc_in.split("+bbb+",1)[1] |
|
mes3=mes13.split("+ccc+",1)[0] |
|
mes3=mes3.strip("b'").strip("'") |
|
json_bytes = bytes(mes3,'utf-8') |
|
print(f'im_bytes::{json_bytes}') |
|
dec_json = fernet.decrypt(json_bytes).decode() |
|
if not "+bbb+" in enc_in: |
|
if "+ccc+" in enc_in: |
|
mes4=enc_in.split("+ccc+",1)[0] |
|
mes14=mes4.strip("b'").strip("'") |
|
json_bytes = bytes(mes14,'utf-8') |
|
print(f'im_bytes::{json_bytes}') |
|
dec_json = fernet.decrypt(json_bytes).decode() |
|
|
|
|
|
return(dec_im, mes_dec, dec_json) |
|
|
|
def decode_doc(passw,doc=None): |
|
key = create_key(passw) |
|
fernet = Fernet(key) |
|
doc_name = doc.name |
|
doc_name = doc_name.split("/",4)[4] |
|
|
|
|
|
|
|
with open(doc.name, "rb") as file: |
|
|
|
file_data = file.read() |
|
dec_doc = fernet.decrypt(file_data) |
|
og_name = doc.name |
|
og_end = og_name.split(".",1)[1] |
|
og_front=og_name.split(".",1)[0] |
|
|
|
dec_file = doc.name.strip(".ocrpt") |
|
|
|
with open(dec_file, "wb") as file: |
|
file.write(dec_doc) |
|
return dec_file |
|
|
|
def decode_qr(im,passw): |
|
with open(f'{im}', "rb") as image_file: |
|
bytes_i = base64.b64encode(image_file.read()) |
|
decode_qr = stegan.decode(im) |
|
dec_im,mes_dec,dec_json = decrypt(passw, enc_in=decode_qr) |
|
|
|
return(dec_im,mes_dec,dec_json) |
|
|
|
|
|
with gr.Blocks() as app: |
|
with gr.Row(): |
|
gr.Column() |
|
with gr.Column(): |
|
with gr.Tab("Encrypt"): |
|
pass_in=gr.Textbox(label="Set Password") |
|
with gr.Row(): |
|
with gr.Column(): |
|
send=gr.Textbox(label="Sender") |
|
rec=gr.Textbox(label="Recipient") |
|
am=gr.Textbox(label="Amount") |
|
|
|
|
|
en_btn = gr.Button("Encrypt") |
|
enc_out = gr.Textbox(label="Encrypted Bytes") |
|
enc_qr_out = gr.Image(label = "Encrypted QR") |
|
|
|
with gr.Tab("Decrypt"): |
|
pass_out = gr.Textbox(label="Enter Password") |
|
|
|
dec_qr_im = gr.Image(type="filepath") |
|
d_json = gr.JSON(label="Decrypted JSON") |
|
dec_qr_txt = gr.Textbox(label="Decrypted Message") |
|
dec_qr_im_out =gr.Image(label="Decrytped Image") |
|
dec_qr_btn = gr.Button("Decrypt") |
|
gr.Column() |
|
dec_qr_btn.click(decode_qr,[dec_qr_im,pass_out],[dec_qr_im_out,dec_qr_txt,d_json]) |
|
en_btn.click(encrypt,[pass_in,send,rec,am],[enc_out,enc_qr_out,dec_qr_im]) |
|
app.launch() |