Переглянути джерело

combining gui with hashing (still has bugs)

justtheboss97 4 роки тому
батько
коміт
74ada5e009
6 змінених файлів з 87 додано та 30 видалено
  1. 27 0
      companies/justin_privatekey.key
  2. 8 0
      companies/justin_publickey.key
  3. 10 18
      create_keys.py
  4. 7 0
      gui.py
  5. 18 4
      gui/gui_helpers.py
  6. 17 8
      lib/transaction.py

+ 27 - 0
companies/justin_privatekey.key

@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEqgIBAAKCAQEAl4nU4yOZ1xRnww3Wss1Q8TIy+WX0I7kk8v9gyGaWwlbfYYLE
+KWxkQzuYpJb0G0V0vlkqi/7w+qm3yOrona+//vTdpKp9w3YG09tr7dswVszFodb/
+S2uUio35q03ySOzosNrO7Kfb4mUha6BBupCMT+WPzt2IgeFekois/kBySmBZpm3s
+W0AG09RM32s8Kil9xN0HNjgnSHCxEkkS3uX0i5sjigiiRsSjePom0F56mFQhGp36
+sNfdfRrXQcvJNzRfDER/YymQ8McgwnxheKI1oVMuQT8NDEBE8Wpb1DWzqiy/Bn4y
+eH8Ad4zcpUM92YdJn0JqfQpqPwjrgva9veUM5wIDAQABAoIBADTxmehVutzzKyFx
+x04m/52VTUvnO/nzKJ6hbL33Ybq6QUc/OavDS/BVdQokF1sj1Brg6kWJJ8Zb33MZ
+53WYPrsj8AAk9NWCefYw1i9/Ag+BcZcOl5lRF8+ktNMN45Vo+A86E0uJhgA+FwQU
+NIKrF+qeKLU8nwHJrDzpB1GLPji/JzaxG9vefmzDvyjsz9yXxEIgKEjVHVRgEdjG
+3J/3pw+FGukZheaOXQf1fzsH/5fD7rneSDAiaJAZoE6szWCzKsuwrD53+uYx25FT
+TSXWi3dxfnjYdaYggo49WgPp7WeSln78sXoONN8mhAZWnasIoDa2hiIUggCoLxjP
+vQole6ECgYkA85a/3AWeBIFVR7/QdhoLDz6ct60xj8ffOalWA0+jMTwAvTfl5ISO
+SSmOK1S0HccAoHdj+McIheBBJAgTEbLgtzy2bIsXXXDqcZATtLnY4UDVU32Kvq5B
+IHBLunSwQGu8Koxt7C9DX+UTctyz8mluwK5Z3++0gyqJjamnvIGIac1EcQT2XY6q
+1wJ5AJ9CbBmrBDKhGvTJPK/OgKrDfHhvMN8DGQSf6S4CnptRwtkmlrVkJND7CJBQ
+WyB2cdU5WTcIwEbr5uIsB3m10pUW0Opws+WEhQjgjhHbNSYWo0qlTBSC5m1Nk2TY
+kwjp5vPDVCOPlHpXoLuC8C3IUTNK15hhlED8cQKBiQCLJ2BdUfwueK/+OA7fmQse
+X1dp+o/oonbcWudfJtyEYNHPRqKXRD6AfzPPfykSJcAu62V6FkHBMRYlflNedgC3
+zQAty9vCLqJP083eHZlPPRlhA8QCIEvmOyCX2NdjReiNqgGVvn5Pxu6wXHKUFjUF
+79Q6AJbvo5pHCldfceQ7BN+HbR1M3xarAnkAgFqVKx7EtFVZl120tnB1DKue3qWm
+uqYRfMOwt+9OixmbM05BepHqhi88GKtatlAfsFyXBZ7c8IvhufkIUVR0Esqft8L7
+igiC+8OXXNbSAA+QrXGJXqKdOgyitU1DO5TgGSgc4MgwP2XuWhHOpudiYjd4iQxj
+4vhRAoGIXTsM2psRv851dnBz2wrl0+N4dtXppTuLKC036HgZqUZjj+8nm+vYSTza
+k4wztg4i8vm6m+XwHnmyvs6TOphJySt92LkikPa9Y65Y2SDvDsWpYEVgV3Of3GU4
+rWcdvwKjk2UmAr4UKrDz/pJ93JJD4OTBGQeFW0zDBnNXBo5iAdIUg4DyaAdplg==
+-----END RSA PRIVATE KEY-----

+ 8 - 0
companies/justin_publickey.key

@@ -0,0 +1,8 @@
+-----BEGIN RSA PUBLIC KEY-----
+MIIBCgKCAQEAl4nU4yOZ1xRnww3Wss1Q8TIy+WX0I7kk8v9gyGaWwlbfYYLEKWxk
+QzuYpJb0G0V0vlkqi/7w+qm3yOrona+//vTdpKp9w3YG09tr7dswVszFodb/S2uU
+io35q03ySOzosNrO7Kfb4mUha6BBupCMT+WPzt2IgeFekois/kBySmBZpm3sW0AG
+09RM32s8Kil9xN0HNjgnSHCxEkkS3uX0i5sjigiiRsSjePom0F56mFQhGp36sNfd
+fRrXQcvJNzRfDER/YymQ8McgwnxheKI1oVMuQT8NDEBE8Wpb1DWzqiy/Bn4yeH8A
+d4zcpUM92YdJn0JqfQpqPwjrgva9veUM5wIDAQAB
+-----END RSA PUBLIC KEY-----

+ 10 - 18
create_keys.py

@@ -9,23 +9,15 @@ import rsa
 #k.close()
 
 # create the pub & private keys for the parties
-(pubkey_forParty1,privkey_forParty1)=rsa.newkeys(2048)
-(pubkey_forParty2,privkey_forParty2)=rsa.newkeys(2048)
+def make_keys(company):
+    (pubkey,privkey)=rsa.newkeys(2048)
 
-#write the public key to a file
-pukey = open('publickey_Party1.key','wb')
-pukey.write(pubkey_forParty1.save_pkcs1('PEM'))
-pukey.close()
+    #write the public key to a file
+    pukey = open('companies\\' + company + '_publickey.key','wb')
+    pukey.write(pubkey.save_pkcs1('PEM'))
+    pukey.close()
 
-pukey = open('publickey_Party2.key','wb')
-pukey.write(pubkey_forParty2.save_pkcs1('PEM'))
-pukey.close()
-
-# write the private key to a file
-prkey = open('privkey_Party1.txt','wb')
-prkey.write(privkey_forParty1.save_pkcs1('PEM'))
-prkey.close()
-
-prkey = open('privkey_Party2.txt','wb')
-prkey.write(privkey_forParty2.save_pkcs1('PEM'))
-prkey.close()
+    # write the private key to a file
+    prkey = open('companies\\' + company + '_privatekey.key','wb')
+    prkey.write(privkey.save_pkcs1('PEM'))
+    prkey.close()

+ 7 - 0
gui.py

@@ -6,8 +6,12 @@ from gui.gui_helpers import add_contract
 from lib.transaction import Transaction
 from lib.contract import Contract
 
+import rpyc
+from rpyc.utils.server import ThreadPoolServer
+
 # chain = Chain()
 # chain.populate()
+# conn = rpyc.connect(host='localhost', port=42069, keepalive=True)
 
 root = Tk()
 root.title('dsp blockchain')
@@ -38,3 +42,6 @@ Button(root, text="New contract", command=add_contract).grid(row=1, column=0)
 
 
 root.mainloop()
+
+# conn.close()
+print('test')

+ 18 - 4
gui/gui_helpers.py

@@ -19,7 +19,7 @@ def add_contract():
         add_term(contract1)
 
     def add_term(contract1):
-
+        
         def process_term():
             term1 = Contract.Term()
             term1.create(title=title2.get(),
@@ -35,6 +35,8 @@ def add_contract():
             # Bind contract to transaction
             transaction1 = Transaction()
             transaction1.set_contract(contract=contract1)
+            r = recipient.get()
+            transaction1.hash(recipient=r)
 
             # get the contract with transaction1.data
             # add reciever and sender keys and data
@@ -43,6 +45,10 @@ def add_contract():
             # send to push_transaction(hashed:str)
             # hashed has the format: {’sender’:..,’receiver’:…, ‘data’:encrypted contract} (see github readme)
             # deamon does the rest
+            
+            print(transaction1.hash_value)
+
+
 
             term_window.destroy()
             newWindow.destroy()
@@ -62,8 +68,12 @@ def add_contract():
         deadline2 =  Entry(term_window, width=35, borderwidth=5)
         deadline2.grid(row=2, column=1, columnspan=3, padx=10, pady=10)
 
-        Button(term_window, text='Add term', command=process_term).grid(row=3,column=0)
-        Button(term_window, text='Add term', command=complete).grid(row=3,column=1)
+        Label(term_window, text='Recipient: ').grid(row=3, column=0)
+        recipient1 =  Entry(term_window, width=35, borderwidth=5)
+        recipient1.grid(row=3, column=1, columnspan=3, padx=10, pady=10)
+
+        Button(term_window, text='Add term', command=process_term).grid(row=4,column=0)
+        Button(term_window, text='Done', command=complete).grid(row=4,column=1)
 
         
 
@@ -88,8 +98,12 @@ def add_contract():
     price =  Entry(newWindow, width=35, borderwidth=5)
     price.grid(row=3, column=1, columnspan=3, padx=10, pady=10)
 
+    Label(newWindow, text='Recipient: ').grid(row=4, column=0)
+    recipient =  Entry(newWindow, width=35, borderwidth=5)
+    recipient.grid(row=4, column=1, columnspan=3, padx=10, pady=10)
+
     # create the add contract button
-    Button(newWindow, text = "Create contract", command=add).grid(row=4, column=1)
+    Button(newWindow, text = "Create contract", command=add).grid(row=5, column=1)
 
 
 

+ 17 - 8
lib/transaction.py

@@ -2,7 +2,9 @@ import hashlib
 import json
 import time
 import uuid
+import os
 
+from create_keys import make_keys
 from lib.contract import Contract
 from cryptography.fernet import Fernet
 import rsa
@@ -63,19 +65,26 @@ class Transaction:
             return True
         return False
 
-    def file_open(file):
-        key_file = open(file, 'rb')
-        key_data = key_file.read()
-        key_file.close()
-        return key_data
+    def get_keys(self, recipient):
+        path = 'companies\\' + recipient + '_publickey.key'
+        if not os.path.exists(path):
+            make_keys(recipient)
 
-    def hash(self):
+        with open(path, 'rb') as f:
+            return rsa.PublicKey.load_pkcs1(f.read())
+    
+        # key_file = open(file, 'rb')
+        # key_data = key_file.read()
+        # key_file.close()
+        # return key_data
+
+    def hash(self, recipient=None):
         string_object = json.dumps(self.data, sort_keys=True)
         block_string = string_object.encode()
 
         # open the public key file
-        pubkey = rsa.PublicKey.load_pkcs1(file_open('publickey.key')) #Sender public key - input field neccessary
-
+        pubkey = self.get_keys(recipient) #Sender public key - input field neccessary
+        print(pubkey)
         # create the cipher
         cipher = Fernet(pubkey)