OSDN Git Service

fix bug
authorChengcheng Zhang <943420582@qq.com>
Tue, 26 Mar 2019 11:07:22 +0000 (19:07 +0800)
committerChengcheng Zhang <943420582@qq.com>
Tue, 26 Mar 2019 11:07:22 +0000 (19:07 +0800)
pybtm/__init__.py
pybtm/key.py
pybtm/signature.py
pybtm/utils.py
setup.py

index 0384550..4050c0f 100644 (file)
@@ -1,2 +1,2 @@
 name = "pybtm"
-version = "0.0.9"
\ No newline at end of file
+version = "0.0.14"
\ No newline at end of file
index 75e6f83..d1d977c 100644 (file)
@@ -206,7 +206,7 @@ def prune_intermediate_scalar(f):
 def get_child_xprv(xprv_hexstr, path_list):
     for i in range(len(path_list)):
         selector_bytes = bytes.fromhex(path_list[i])
-        xpub_hexstr = xprv_to_xpub(xprv_hexstr)['xpub']
+        xpub_hexstr = get_xpub(xprv_hexstr)
         xpub_bytes = bytes.fromhex(xpub_hexstr)
         xprv_bytes = bytes.fromhex(xprv_hexstr)
         hc_bytes = hmac.HMAC(xpub_bytes[32:], b'N'+xpub_bytes[:32]+selector_bytes, digestmod=hashlib.sha512).digest()
@@ -305,7 +305,7 @@ def get_child_xpub(xpub_hexstr, path_list):
 #   message_hexstr: 1246b84985e1ab5f83f4ec2bdf271114666fd3d9e24d12981a3c861b9ed523c6
 #   signature_hexstr: ab18f49b23d03295bc2a3f2a7d5bb53a2997bed733e1fc408b50ec834ae7e43f7da40fe5d9d50f6ef2d188e1d27f976aa2586cef1ba00dd098b5c9effa046306
 def xprv_sign(xprv_hexstr, message_hexstr):
-    xprv_hexstr = xprv_to_expanded_private_key(xprv_hexstr)['expanded_private_key']
+    xprv_hexstr = get_expanded_private_key(xprv_hexstr)
     xprv_bytes = bytes.fromhex(xprv_hexstr)
     message_bytes = bytes.fromhex(message_hexstr)
     data_bytes = xprv_bytes[32:64] + message_bytes
@@ -317,7 +317,7 @@ def xprv_sign(xprv_hexstr, message_hexstr):
 
     scalar = decodeint(message_digest_reduced)
     encoded_r = encodepoint(scalarmultbase(scalar))
-    xpub_hexstr = xprv_to_xpub(xprv_hexstr)['xpub']
+    xpub_hexstr = get_xpub(xprv_hexstr)
     xpub_bytes = bytes.fromhex(xpub_hexstr)
     hram_digest_data = encoded_r + xpub_bytes[:32] + message_bytes
 
@@ -357,16 +357,16 @@ def xprv_sign(xprv_hexstr, message_hexstr):
 #   signature_hexstr: ab18f49b23d03295bc2a3f2a7d5bb53a2997bed733e1fc408b50ec834ae7e43f7da40fe5d9d50f6ef2d188e1d27f976aa2586cef1ba00dd098b5c9effa046306
 def xpub_verify(xpub_hexstr, message_hexstr, signature_hexstr):
     result = False
-    result = verify(xpub_to_public_key(xpub_hexstr)['public_key'], signature_hexstr, message_hexstr)['result']
+    result = verify(get_public_key(xpub_hexstr), signature_hexstr, message_hexstr)
     return result
 
 
-def get_new_key(entropy_hexstr=None, mnemonic_hexstr=None):
+def get_new_key(entropy_hexstr=None, mnemonic_str=None):
     if (entropy_hexstr is None) and (mnemonic_str is None):
         entropy_hexstr = get_entropy()
         mnemonic_str = get_mnemonic(entropy_hexstr)
     if (entropy_hexstr is None) and (mnemonic_str is not None):
-        pass
+        entropy_hexstr = ''
     if entropy_hexstr is not None:
         mnemonic_str = get_mnemonic(entropy_hexstr)
     seed_hexstr = get_seed(mnemonic_str)
index e5fe969..a800ce8 100644 (file)
@@ -33,6 +33,4 @@ def verify(public_key_str, signature_str, message_str):
         result = True
     except ed25519.BadSignatureError:
         result = False
-    return {
-        "result": result
-    }
+    return result
\ No newline at end of file
index 3b170fb..0dbce38 100644 (file)
@@ -1,6 +1,14 @@
 import qrcode
 import pybase64
+import six
+import hmac
+import hashlib
+import sha3
 from io import BytesIO
+from binascii import hexlify
+from binascii import unhexlify
+from .edwards25519 import *
+# from bytom.signatures import ed25519
 
 # create_qrcode_base64 create qrcode, then encode it to base64
 # type(s) is str
@@ -11,4 +19,62 @@ def create_qrcode_base64(s):
     base64_str = pybase64.b64encode(buffered.getvalue()).decode("utf-8")
     return {
         "base64": base64_str
-    }
\ No newline at end of file
+    }
+
+
+if six.PY3:
+    def byte2int(b):
+        return b
+    def int2byte(i):
+        return bytes(chr(i % 256), encoding="UTF-8")
+
+elif six.PY2:
+    def byte2int(b):
+        return ord(b)
+    def int2byte(i):
+        return chr(i % 256)
+
+L = 2 ** 252 + 27742317777372353535851937790883648493
+
+def sha3_digest_256(data):
+    s = sha3.sha3_256()
+    s.update(data)
+    return s.digest()
+
+def hmac_sha_512(data, key):
+    digest = hmac.new(key, msg=data, digestmod=hashlib.sha512).digest()
+    return digest
+
+def sha_512(data):
+    md = hashlib.sha512()
+    md.update(data)
+    return md.digest()
+
+def hex2int(hex):
+    ## converts a hex string to integer
+    unhex = unhexlify(hex)
+    s = 0
+    for i in range(len(unhex)):
+        s += 256 ** i * byte2int(unhex[i])
+    return s
+
+def int2hex(int):
+    ## converts an integer to a little endian encoded hex string
+    return hexlify(encodeint(int))
+
+def sc_reduce32(input):
+    ## convert hex string input to integer
+    int = hex2int(input)
+    ## reduce mod l
+    modulo = int % L
+    ## convert back to hex string for return value
+    return int2hex(modulo)
+
+def sc_muladd(a, b, c):
+    a_int = hex2int(a)
+    b_int = hex2int(b)
+    c_int = hex2int(c)
+    
+    s = a_int * b_int + c_int
+    modulo = s % L
+    return int2hex(modulo)
index 3ca616f..50ff20f 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
 
 setuptools.setup(
     name="pybtm",
-    version="0.0.9",
+    version="0.0.14",
     author="zcc0721",
     author_email="zcc0721@foxmail.com",
     description="Python3 implementation of the Bytom protocol.",