From 48fcd0ef030cd4174466b3e7642131f887961adc Mon Sep 17 00:00:00 2001
From: prajczerpeter <prajczer.peter@hallgato.ppke.hu>
Date: Thu, 27 Feb 2020 09:58:53 +0100
Subject: [PATCH] orai fos egy

---
 .idea/misc.xml              |   7 +++
 ITKoin_01_Prajczer_Peter.py | 110 +++++++++++++++++++++++++++++-------
 2 files changed, 97 insertions(+), 20 deletions(-)
 create mode 100644 .idea/misc.xml

diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..2784bef
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5 (venv)" project-jdk-type="Python SDK" />
+</project>
\ No newline at end of file
diff --git a/ITKoin_01_Prajczer_Peter.py b/ITKoin_01_Prajczer_Peter.py
index 17eabef..17d0f22 100644
--- a/ITKoin_01_Prajczer_Peter.py
+++ b/ITKoin_01_Prajczer_Peter.py
@@ -1,5 +1,7 @@
+from Crypto.Hash import SHA256
 from Crypto.PublicKey import RSA
 import json
+from Crypto.Signature import pkcs1_15
 from base64 import b64encode, b64decode
 from pprint import pprint
 
@@ -16,27 +18,95 @@ class ITKoin:
         # generálj 2048 bites RSA kulcsot
         rsakey = RSA.generate(2048)
         # a kulcs publikus része kerüljön ide
-        rsapublickey = rsakey.publickey().export_key()
-        # # print(rsakey)
-        # # pprint(rsakey)
-        # # print(vars(rsakey))
-        # # pprint(vars(rsakey))
-        # pprint(vars(rsakey))
-        # pprint(vars(rsapublickey))
-        # PEMrsakey = # PEM formátumra alakítsd az RSA kulcsot
-        # pprint(PEMrsakey)
-        # PEMrsapublickey = # PEM formátumra alakítsd a kulcs publikus részét
-        # pprint(PEMrsapublickey)
-        # privatekeyfilename = filename + 'priv.pem'
-        # f = open(privatekeyfilename, 'wb')
-        # f.write(PEMrsakey)
-        # f.close()
-        # publickeyfilename = filename + 'pub.pem'
-        # f = open(publickeyfilename, 'wb')
-        # f.write(PEMrsapublickey)
-        # f.close()
-        return
+        rsapublickey = rsakey.publickey()
+        # print(rsakey)
+        # print(rsakey)
+        # print(vars(rsakey))
+        # print(vars(rsakey))
+        # print(vars(rsakey))
+        # print(vars(rsapublickey))
+        # PEM formátumra alakítsd az RSA kulcsot
+        PEMrsakey = rsakey.export_key('PEM')
+        # print(PEMrsakey)
+        # PEM formátumra alakítsd a kulcs publikus részét
+        PEMrsapublickey = rsapublickey.export_key("PEM")
+        # print(PEMrsapublickey)
+        privatekeyfilename = filename + 'priv.pem'
+        f = open(privatekeyfilename, 'wb')
+        f.write(PEMrsakey)
+        f.close()
+        publickeyfilename = filename + 'pub.pem'
+        f = open(publickeyfilename, 'wb')
+        f.write(PEMrsapublickey)
+        f.close()
+
+    def load_key(self, filename):
+        privatekeyfilename = filename + 'priv.pem'
+        privatekeyfileobject = open(privatekeyfilename, 'r')
+        privatekeyfilecontent = privatekeyfileobject.read()
+        # print(privatekeyfilecontent)
+        rsakey = RSA.import_key(privatekeyfilecontent)
+        self.rsakey = rsakey
+        # pprint(vars(self.rsakey))
+        rsapublickey = rsakey.publickey()
+        self.rsapublickey = rsapublickey
+        # print("haha")
+        # pprint(vars(self.rsapublickey))
+
+    def load_public_key(self, filename):
+        publickeyfilename = filename + 'pub.pem'
+        publickeyfileobject = open(publickeyfilename, 'r')
+        publickeyfilecontent = publickeyfileobject.read()
+        # pprint(publickeyfilecontent)
+        rsakey = RSA.import_key(publickeyfilecontent)
+        rsapublickey = rsakey.publickey()
+        self.rsapublickey = rsapublickey
+        # pprint(vars(self.rsapublickey))
+
+
+    @staticmethod
+    def create_hashobject(data):
+        stringdump = json.dumps(data)  # ez nem teljesen korrekt megoldás, de így egyszerű mindent byte stringgé konvertálni
+        binarydump = stringdump.encode()
+        # hozz létre egy hash objektumot
+        hashobject = SHA256.new()
+        # töltsd be az objektumba a lenyomatolni kívánt byte stringet
+        hashhexvalue = hashobject.update(binarydump)
+        # print(hashobject)
+        # print(hashhexvalue)
+        return hashobject
+
+    def create_signature(self, data):
+        # hozz létre egy signature objektumot
+        signatureobject = pkcs1_15.new(self.rsakey)
+        # az adatot töltsd be egy hash objektumba a create_hashobject(data) használatával
+        hashobject =  self.create_hashobject(data)
+        # készítsd el az aláírás értéket a sign függvénnyel
+        signaturevalue = signatureobject.sign(hashobject)
+        print(signaturevalue)
+        b64signaturevalue = b64encode(signaturevalue)
+        print(b64signaturevalue)
+        print(b64signaturevalue.decode())
+        return b64signaturevalue.decode()
+
+    def verify_signature(self, data, b64signaturevalue, rsapublickey):
+        # hozz létre egy verify objektumot
+        verifyobject = pkcs1_15.new(rsapublickey)
+        # az adatot töltsd be egy hash objektumba a create_hashobject(data) használatával
+        hashobject =  self.create_hashobject(data)
+        # dekódold base64 kódolással az aláírás értéket
+        signaturevalue =  b64decode(b64signaturevalue)
+        signatureerror =  verifyobject.verify(signaturevalue, hashobject)
+        # értéke: True, ha az aláírás érvényes
+        validsignature =  True
+        return validsignature
 
 
 if __name__ == '__main__':
     test_coin = ITKoin()
+    # test_coin.generate_rsa_key("prajczer")
+    test_coin.load_key("prajczer")
+    test_coin.load_public_key("prajczer")
+    test_coin.create_hashobject("random")
+    test_coin.create_signature('random')
+    test_coin.verify_signature(@fasz kivan)
-- 
GitLab