Esempio n. 1
0
 def verify(cls, cpubkey, signature, message):
     '''refer:https://github.com/cityofzion/neo-python/neo/Cryptography/Crypto.py'''
     bitcoin.change_curve(
         int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", 16),
         int("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", 16),
         int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16),
         int("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", 16),
         int("6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", 16),
         int("4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", 16)
     )
     try:
         pubkey = cls.uncompress_pubkey(cpubkey)
         pubkey = binascii.unhexlify(pubkey)[1:]
     except Exception as e:
         return False,'wrong publickey'
     try:
         m = binascii.unhexlify(message)
     except Exception as e:
         return False,"wrong transaction"
     try:
         s = binascii.unhexlify(signature)
     except Exception as e:
         return False,'wrong signature'
     try:
         vk = VerifyingKey.from_string(pubkey, curve=NIST256p, hashfunc=hashlib.sha256)
         res = vk.verify(s, m, hashfunc=hashlib.sha256)
         return res,''
     except Exception as e:
         print('verify failth:%s' % e)
     return False,'failth'
Esempio n. 2
0
    def __init__(self, private_key: bytes):
        self.private_key = private_key
        self.public_key = None

        bitcoin.change_curve(
            115792089210356248762697446949407573530086143415290314195533631308867097853951,
            115792089210356248762697446949407573529996955224135760342422259061068512044369,
            115792089210356248762697446949407573530086143415290314195533631308867097853948,
            41058363725152142129326129780047268409114441015993725554835256314039467401291,
            48439561293906451759052585252797914202762949526041747995844080717082404635286,
            36134250956749795798585127919587881956611106672985015071877198253568414405109
        )

        length = len(self.private_key)

        if length != 32:
            raise ValueError("Invalid private key")

        if length == 32:
            try:
                pubkey_encoded_not_compressed = bitcoin.privkey_to_pubkey(
                    private_key)
                pubkey_points = bitcoin.decode_pubkey(
                    pubkey_encoded_not_compressed, 'bin')

                pubx = pubkey_points[0]
                puby = pubkey_points[1]
                self.public_key = cryptography.ECDSA.secp256r1().Curve.point(
                    pubx, puby)
            except Exception:
                raise ValueError("Could not determine public key")
Esempio n. 3
0
    def setup_curve(self):

        bitcoin.change_curve(
            115792089210356248762697446949407573530086143415290314195533631308867097853951,
            115792089210356248762697446949407573529996955224135760342422259061068512044369,
            115792089210356248762697446949407573530086143415290314195533631308867097853948,
            41058363725152142129326129780047268409114441015993725554835256314039467401291,
            48439561293906451759052585252797914202762949526041747995844080717082404635286,
            36134250956749795798585127919587881956611106672985015071877198253568414405109
        )
Esempio n. 4
0
def reset_curve_to_eth():
    # this is standart btc/eth params for curve
    # this function reset it because 1) this params is global in bitcoin-1.1.42 lib and 2) this params are changing in neo KeyPair init
    P = 2**256 - 2**32 - 977
    N = 115792089237316195423570985008687907852837564279074904382605163141518161494337
    A = 0
    B = 7
    Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240
    Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424
    bitcoin.change_curve(P, N, A, B, Gx, Gy)
Esempio n. 5
0
 def SetupSignatureCurve():
     """
     Setup the Elliptic curve parameters.
     """
     bitcoin.change_curve(
         int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", 16),
         int("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", 16),
         int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16),
         int("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", 16),
         int("6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", 16),
         int("4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", 16)
     )
Esempio n. 6
0
 def setup_curve(self):
     #        bitcoin.change_curve(
     #            int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", 16),
     #            int("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", 16),
     #            int("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16),
     #            int("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", 16),
     #            int("6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", 16),
     #            int("4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", 16)
     #        )
     bitcoin.change_curve(
         115792089210356248762697446949407573530086143415290314195533631308867097853951,
         115792089210356248762697446949407573529996955224135760342422259061068512044369,
         115792089210356248762697446949407573530086143415290314195533631308867097853948,
         41058363725152142129326129780047268409114441015993725554835256314039467401291,
         48439561293906451759052585252797914202762949526041747995844080717082404635286,
         36134250956749795798585127919587881956611106672985015071877198253568414405109
     )
Esempio n. 7
0
#!/usr/bin/env python

from bitcoin import change_curve, fast_add, fast_multiply, inv
import random

# define a 16-bits curve (not secure)
P = 10177
A = 1
B = P-1
G = (1,1)
N = 10331
change_curve(P, N, A, B, G[0], G[1])

# generate private and public key
k = random.randint(1, N)
Q = fast_multiply(G, k)
print("SEARCH - {0}".format(k))

# Pollard rho
def new_xab(x, a, b):
    S = x[0] % 3
    if S == 0:
        a = (a + 1) % N
        x = fast_add(x, G)
    elif S == 1:
        a = (a * 2) % N
        b = (b * 2) % N
        x = fast_add(x, x)
    elif S == 2:
        b = (b + 1) % N
        x = fast_add(x, Q)
Esempio n. 8
0
 def setUp(self):
     import bitcoin
     # reset Elliptic curve parameters to secp256k1
     bitcoin.change_curve(bitcoin.P, bitcoin.N, bitcoin.A, bitcoin.B,
                          bitcoin.Gx, bitcoin.Gy)