OSDN Git Service

add gm_xpub_verify
authorChengcheng Zhang <943420582@qq.com>
Thu, 14 Feb 2019 09:10:32 +0000 (17:10 +0800)
committerChengcheng Zhang <943420582@qq.com>
Thu, 14 Feb 2019 09:10:32 +0000 (17:10 +0800)
app/api/__init__.py
app/api/resources.py
app/model/key_gm.py

index d7fa166..b761907 100644 (file)
@@ -29,6 +29,7 @@ from app.api.resources import Get_Gm_Xprv
 from app.api.resources import Get_Gm_Public_Key
 from app.api.resources import Get_Gm_Child_Xprv
 from app.api.resources import Get_Gm_Child_Xpub
+from app.api.resources import Gm_Xpub_Verify
 
 
 blueprint = Blueprint('api', __name__, url_prefix='/api/v1')
@@ -61,4 +62,5 @@ api.add_resource(Get_Gm_Xpub, '/get_gm_xpub')
 api.add_resource(Get_Gm_Xprv, '/get_gm_xprv')
 api.add_resource(Get_Gm_Public_Key, '/get_gm_public_key')
 api.add_resource(Get_Gm_Child_Xprv, '/get_gm_child_xprv')
-api.add_resource(Get_Gm_Child_Xpub, '/get_gm_child_xpub')
\ No newline at end of file
+api.add_resource(Get_Gm_Child_Xpub, '/get_gm_child_xpub')
+api.add_resource(Gm_Xpub_Verify, '/gm_xpub_verify')
\ No newline at end of file
index b983be0..976f4c6 100644 (file)
@@ -29,6 +29,7 @@ from app.model.key_gm import get_gm_xprv
 from app.model.key_gm import get_gm_public_key
 from app.model.key_gm import get_gm_child_xprv
 from app.model.key_gm import get_gm_child_xpub
+from app.model.key_gm import gm_xpub_verify
 
 
 parser = reqparse.RequestParser()
@@ -288,4 +289,14 @@ class Get_Gm_Child_Xpub(Resource):
         xpub = args.get('xpub_str')
         path = args.get('path_list')
         child_xpub = get_gm_child_xpub(xpub, path)
-        return child_xpub
\ No newline at end of file
+        return child_xpub
+
+class Gm_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 = gm_xpub_verify(xpub, message, signature)
+        return result
index 52f2d03..8139991 100644 (file)
@@ -221,13 +221,33 @@ def get_gm_child_xpub(xpub_str, path_list):
 #     # message_bytes = bytes.fromhex(message_str)
 #     # data_bytes = xprv_bytes[32:64]
 
-
-# def gm_xpub_verify(xpub_str, message_str, signature_str):
-#     public_key = xpub_str[:66]
-#     result = False
-#     sm2_crypt = sm2.CryptSM2(private_key="", public_key=public_key)
-#     data = bytes.fromhex(message_str)
-#     result = sm2_crypt.verify(signature_str, data)
-#     return {
-#         "result": result
-#     }
\ No newline at end of file
+# gm_xpub_verify verify signature
+# xpub_str length is 65 bytes.
+# message_str length is variable.
+# signature_str length is 64 bytes.
+# You can get more test data from: https://gist.github.com/zcc0721/705463507b8734b46a2eb2256ddd785a
+# test data 1:
+#   xprv_str: 36667587de27eec684fc4b222276f22a24d9a82e947ee0119148bedd4dec461dd4e1b1d95dfb0f78896677ea1026af7510b41fabd3bd5771311c0cb6968337b2
+#   xpub_str: 0396a36cd902db56eca016c213a8ac25de35a7afd78061351f1898529f0956c22ed4e1b1d95dfb0f78896677ea1026af7510b41fabd3bd5771311c0cb6968337b2
+#   message_str: 1246b84985e1ab5f83f4ec2bdf271114666fd3d9e24d12981a3c861b9ed523c6
+#   signature_str: 1cd9cebbc4771fe136c98101c80c37efbd0dc7bf0aef1bddf07b0c1c86e3746167cfab14f55720a1d7d00d16d5bf42769fff307bb6c3142dcd51e2a299f289ce
+#   result: True
+# test data 2:
+#   xprv_str: c003f4bcccf9ad6f05ad2c84fa5ff98430eb8e73de5de232bc29334c7d074759d513bc370335cac51d77f0be5dfe84de024cfee562530b4d873b5f5e2ff4f57c
+#   xpub_str: 02476044353971ae0ed41cba76f27d0bd2e09d09db5c238bb74f69569bf343f742d513bc370335cac51d77f0be5dfe84de024cfee562530b4d873b5f5e2ff4f57c
+#   message_str: 1234abcd
+#   signature_str: 7c61e3a3fc999dfdd88151d207758c8c1dd0bf6e1558088634471022c68512a94c0f94cab07c7ba2ca3c59cced8c6eedad1eaf10ffb481950b5aa7348a9f9030
+# test data 3:
+#   xprv_str: 74a49c698dbd3c12e36b0b287447d833f74f3937ff132ebff7054baa18623c35a705bb18b82e2ac0384b5127db97016e63609f712bc90e3506cfbea97599f46f
+#   xpub_str: 03cafbdedea4a639d31fe4c257f1bb58303359be1a00b9f90b5c605f57e4308ed1a705bb18b82e2ac0384b5127db97016e63609f712bc90e3506cfbea97599f46f
+#   message_str: ec684f
+#   signature_str: f065d15148087f4e4f936aca0dba5db6b331a72cfe905ef70b1b9f48797daaacfae38f24a39ce0daf02444885b72aa4969e4ebf044c330510cc2319a10dd3dd1
+def gm_xpub_verify(xpub_str, message_str, signature_str):
+    result = False
+    public_key_str = xpub_str[2:66] + decompress_public_key(xpub_str[:66])
+    sm2_crypt = sm2.CryptSM2(private_key="", public_key=public_key_str)
+    data = bytes.fromhex(message_str)
+    result = sm2_crypt.verify(signature_str, data)
+    return {
+        "result": result
+    }
\ No newline at end of file