OSDN Git Service

add xpub_verify
authorChengcheng Zhang <943420582@qq.com>
Mon, 24 Dec 2018 11:51:25 +0000 (19:51 +0800)
committerChengcheng Zhang <943420582@qq.com>
Mon, 24 Dec 2018 11:51:25 +0000 (19:51 +0800)
app/api/__init__.py
app/api/resources.py
app/model/key.py
app/model/signature.py

index a55057b..be60c27 100644 (file)
@@ -10,6 +10,7 @@ from app.api.resources import Mnemonic_To_Seed
 from app.api.resources import Seed_To_Root_Xprv
 from app.api.resources import Xprv_To_Expanded_Private_Key
 from app.api.resources import Xpub_To_Public_Key
+from app.api.resources import Xpub_Verify
 
 blueprint = Blueprint('api', __name__, url_prefix='/api/v1')
 api = Api(blueprint)
@@ -22,4 +23,5 @@ api.add_resource(Entropy_To_Mnemonic, '/entropy_to_mnemonic')
 api.add_resource(Mnemonic_To_Seed, '/mnemonic_to_seed')
 api.add_resource(Seed_To_Root_Xprv, '/seed_to_root_xprv')
 api.add_resource(Xprv_To_Expanded_Private_Key, '/xprv_to_expanded_private_key')
-api.add_resource(Xpub_To_Public_Key, '/xpub_to_public_key')
\ No newline at end of file
+api.add_resource(Xpub_To_Public_Key, '/xpub_to_public_key')
+api.add_resource(Xpub_Verify, '/xpub_verify')
\ No newline at end of file
index 76512de..13eb107 100644 (file)
@@ -9,6 +9,7 @@ from app.model.key import mnemonic_to_seed
 from app.model.key import seed_to_root_xprv
 from app.model.key import xprv_to_expanded_private_key
 from app.model.key import xpub_to_public_key
+from app.model.key import xpub_verify
 
 parser = reqparse.RequestParser()
 parser.add_argument('private_key_str', type=str)
@@ -89,4 +90,14 @@ class Xpub_To_Public_Key(Resource):
         args = parser.parse_args()
         xpub_str = args.get('xpub_str')
         public_key_str = xpub_to_public_key(xpub_str)
-        return public_key_str
\ No newline at end of file
+        return public_key_str
+
+class Xpub_Verify(Resource):
+
+    def post(self):
+        args = parser.parse_args()
+        xpub = args.get('xpub_str')
+        message = args.get('message_str')
+        signature = args.get('signature_str')
+        result = xpub_verify(xpub, message, signature)
+        return result
\ No newline at end of file
index 57c8fbe..858800a 100644 (file)
@@ -3,6 +3,7 @@ import hashlib
 import pbkdf2
 import hmac
 import ed25519
+from app.model.signature import *
 
 # create_key create 128 bits entropy
 def create_entropy():
@@ -127,7 +128,6 @@ def seed_to_root_xprv(seed_str):
 
 # def xprv_to_child_xprv(xprv_str, path_str):
 #     child_xprv_str = xprv_str
-
 #     return child_xprv_str
 
 # xprv_to_expanded_private_key create expanded private key from xprv
@@ -148,26 +148,49 @@ def xprv_to_expanded_private_key(xprv_str):
     return expanded_private_key_str
 
 
-# def xprv_sign(xprv_str, message_str):
-
-
-#     return signature_str
-
-
 # xpub_to_public_key create 32 bytes public key from xpub
 # xpub length is 64 bytes.
-# You can verify or get more test data from: 
+# You can verify or get more test data from: https://gist.github.com/zcc0721/9e10f2fa5bd0c8f33aa6dfc87f6aa856
 # test data 1:
 #   xpub_str: ecc2bbb6c0492873cdbc81edf56bd896d3b644047879840e357be735b7fa7b6f4af1be7b8d71cc649ac4ca3816f9ccaf11bf49f4effb845f3c19e16eaf8bfcda
 #   public_key_str: ecc2bbb6c0492873cdbc81edf56bd896d3b644047879840e357be735b7fa7b6f
 # test data 2:
-#   xprv_str: 406c82307bf7978d17f3ecfeea7705370e9faef2027affa86c8027c6e11a8a50e231e65bd97048850ae6c39d0f46b63ae70aa24f5aac7877727c430c2201e6d6
+#   xpub_str: 406c82307bf7978d17f3ecfeea7705370e9faef2027affa86c8027c6e11a8a50e231e65bd97048850ae6c39d0f46b63ae70aa24f5aac7877727c430c2201e6d6
 #   public_key_str: 406c82307bf7978d17f3ecfeea7705370e9faef2027affa86c8027c6e11a8a50
 # test data 3:
-#   xprv_str: b435f948bd3748ede8f9d6f59728d669939e79c6c885667a5c138e05bbabde1de0dcfcbe0c6112022fbbf0da522f4e224a9c2381016380688b51886248b3156f
+#   xpub_str: b435f948bd3748ede8f9d6f59728d669939e79c6c885667a5c138e05bbabde1de0dcfcbe0c6112022fbbf0da522f4e224a9c2381016380688b51886248b3156f
 #   public_key_str: b435f948bd3748ede8f9d6f59728d669939e79c6c885667a5c138e05bbabde1d
 def xpub_to_public_key(xpub_str):
     public_key_str = xpub_str[:64]
 
     return public_key_str
 
+
+# def xprv_sign(xprv_str, message_str):
+    
+
+# xpub_verify verify signature
+# xpub_str length is 64 bytes.
+# message_str length is variable.
+# signature_str length is 64 bytes.
+# You can verify or get more test data from: https://gist.github.com/zcc0721/61a26c811a632623678e274cc7e5c10b
+# test data 1:
+#   xprv_str: c003f4bcccf9ad6f05ad2c84fa5ff98430eb8e73de5de232bc29334c7d074759d513bc370335cac51d77f0be5dfe84de024cfee562530b4d873b5f5e2ff4f57c
+#   xpub_str: 1b0541a7664cee929edb54d9ef21996b90546918a920a77e1cd6015d97c56563d513bc370335cac51d77f0be5dfe84de024cfee562530b4d873b5f5e2ff4f57c
+#   message_str: a6ce34eec332b32e42ef3407e052d64ac625da6f
+#   signature_str: f02f5bb22d8b32f14e88059a786379c26256892f45cf64770c844d0c5de2e52c00307b7bb25fcbb18be13c339a2f511a7c015a8cf81ac681052efe8e50eff00e
+# test data 2:
+#   xprv_str: 008ce51e3b52ee03eb0ad96c55eb5c9fe8736410518b585a0b7f35b2ab48d24c166364ce19322721b7dec84442c3665d97d0e995ba4d01c0f4b19b841379ac90
+#   xpub_str: ead6415a077b91aa7de32e1cf63350f9351d0298f5accc2cf92ef9429bd1f86c166364ce19322721b7dec84442c3665d97d0e995ba4d01c0f4b19b841379ac90
+#   message_str: 68656c6c6f206279746f6d      # value is: 'hello bytom'
+#   signature_str: 1cc6b0f4031352ffd7a62540f13edddaaebf2df05db7a4926df5513129a8e85dcff1324545a024b16f958239ea67840ced3c2d57bb468dbf0e6cf1d1075f0b0f
+# test data 3:
+#   xprv_str: 88c0c40fb54ef9c1b90af8cce8dc4c9d54f915074dde93f79ab61cedae03444101ff37ac4a07869214c2735bba0175e001abe608db18538e083e1e44430a273b
+#   xpub_str: cb22ce197d342d6bb440b0bf13ddd674f367275d28a00f893d7f0b10817690fd01ff37ac4a07869214c2735bba0175e001abe608db18538e083e1e44430a273b
+#   message_str: 1246b84985e1ab5f83f4ec2bdf271114666fd3d9e24d12981a3c861b9ed523c6
+#   signature_str: ab18f49b23d03295bc2a3f2a7d5bb53a2997bed733e1fc408b50ec834ae7e43f7da40fe5d9d50f6ef2d188e1d27f976aa2586cef1ba00dd098b5c9effa046306
+def xpub_verify(xpub_str, message_str, signature_str):
+    result = False
+    result = verify(xpub_to_public_key(xpub_str), signature_str, message_str)
+
+    return result
\ No newline at end of file
index ac16bc8..427b3a0 100644 (file)
@@ -16,7 +16,6 @@ import ed25519
 #   public_key_str: 026b5e22e282d07051203fb0596be140cf17f2532a31407f3b177faa74237cbe
 #   message_str: 48ec69c784c519b65d0e52badda3b7c25113a6b53b4c8e582abee3e2f9aab41514f15bd44c999f3d2ddae4bbab15baf9f4d82dde4f97aa5042cbcfdd8271530e
 #   signature_str: 691fe6fc51603adbac0db2f71f383e7039b6a031a2242da8fd6203f9c71e3b526d0cdace626811ee06797de21afebe54d0293027eb6b22b10c63d4dd0ab8790c
-
 def sign(private_key_str, message_str):
     signing_key = ed25519.SigningKey(bytes.fromhex(private_key_str))
     # signature = signing_key.sign(message_str.encode(), encoding='hex')
@@ -24,6 +23,7 @@ def sign(private_key_str, message_str):
 
     return signature.decode()
 
+
 def verify(public_key_str, signature_str, message_str):
     result = False
     verifying_key = ed25519.VerifyingKey(public_key_str.encode(), encoding='hex')
@@ -32,4 +32,4 @@ def verify(public_key_str, signature_str, message_str):
         result = True
     except ed25519.BadSignatureError:
         result = False
-    return result
\ No newline at end of file
+    return result