Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
logger.debug(pubkey.encode("hex"))
# generate signdata
# replace input script with funding script of 17SkEw2md5avVNyYgj6RiXuQKNwkXaxFyQ
for txin in jsontx['ins']:
txin['script']=''
funding_txid = jsontxverbose['vin'][index]['txid']
funding_tx = rpc.rpc.getrawtransaction(funding_txid,1)
#pprint.pprint(funding_tx)
funding_script = funding_tx['vout'][0]['scriptPubKey']['hex']
jsontx['ins'][index]['script']=funding_script
signdata= pybitcointools.serialize(jsontx) + "01000000" #SIGHASH ALL
import hashlib
digest = hashlib.sha256(hashlib.sha256(signdata.decode("hex")).digest()).digest()
logger.debug(digest[::-1].encode("hex"))
vk = VerifyingKey.from_string(pubkey, curve=curve)
logger.debug("verify --> %s "%(vk.pubkey.verifies(int(digest.encode("hex"),16),Signature(sig[0],sig[1]))))
#print vk.verify_digest(scriptSigasm.split("[ALL]",1)[0].decode("hex"), digest, sigdecode=ecdsa.util.sigdecode_der)
return BTCSignature(sig=Signature(sig[0],sig[1]),
h=int(digest.encode("hex"),16),
pubkey=pubkey,
)
if vals is not None:
self.signing_key, self.verifying_key = vals
else:
if msg is None:
raise SSHException('Key object may not be empty')
if msg.get_text() != 'ecdsa-sha2-nistp256':
raise SSHException('Invalid key')
curvename = msg.get_text()
if curvename != 'nistp256':
raise SSHException("Can't handle curve of type %s" % curvename)
pointinfo = msg.get_binary()
if pointinfo[0:1] != four_byte:
raise SSHException('Point compression is being used: %s' %
binascii.hexlify(pointinfo))
self.verifying_key = VerifyingKey.from_string(pointinfo[1:],
curve=curves.NIST256p,
validate_point=validate_point)
self.size = 256
def signature_verify(message, signature, pubkey):
from ecdsa import VerifyingKey, SECP256k1
if isinstance(pubkey, str):
pubkey = VerifyingKey.from_string(pubkey, curve=SECP256k1)
elif isinstance(pubkey, bytes):
pubkey = VerifyingKey.from_string(pubkey, curve=SECP256k1)
if isinstance(pubkey, VerifyingKey):
try:
return pubkey.verify(signature, message)
except:
return False
else:
return False
def compressed(self):
""" Derive compressed public key """
order = ecdsa.SECP256k1.generator.order()
p = ecdsa.VerifyingKey.from_string(
future_bytes(self), curve=ecdsa.SECP256k1).pubkey.point
x_str = ecdsa.util.number_to_string(p.x(), order)
# y_str = ecdsa.util.number_to_string(p.y(), order)
compressed = hexlify(
future_bytes(chr(2 + (p.y() & 1)), 'ascii') + x_str).decode('ascii')
return (compressed)
def ecdh(self, identity, pubkey):
"""Get shared session key using Elliptic Curve Diffie-Hellman."""
assert pubkey[:1] == b'\x04'
peer = ecdsa.VerifyingKey.from_string(
pubkey[1:],
curve=ecdsa.curves.NIST256p,
hashfunc=hashlib.sha256)
shared = ecdsa.VerifyingKey.from_public_point(
point=(peer.pubkey.point * self.secexp),
curve=ecdsa.curves.NIST256p,
hashfunc=hashlib.sha256)
return shared.to_string()
if y_values[0] % 2 == 0:
y_coord = y_values[0]
else:
y_coord = y_values[1]
elif first_byte_in_hex == '03':
# y is the odd value
if y_values[0] % 2 == 0:
y_coord = y_values[1]
else:
y_coord = y_values[0]
else:
raise TypeError("Invalid SEC compressed format")
uncompressed_hex = "%0.64X%0.64X" % (x_coord, y_coord)
uncompressed_hex_bytes = unhexlify(uncompressed_hex)
self.key = VerifyingKey.from_string(uncompressed_hex_bytes, curve=SECP256k1)
def __init__(self, public_key):
if isinstance(public_key, Identity):
self._verifying_key = public_key.verifying_key
elif isinstance(public_key, ecdsa.VerifyingKey):
self._verifying_key = public_key
elif isinstance(public_key, bytes):
self._verifying_key = ecdsa.VerifyingKey.from_string(public_key, curve=self.curve,
hashfunc=self.hash_function)
else:
raise RuntimeError('Failed')
# cache the binary representations of the public key
self._public_key_bytes = self._verifying_key.to_string()
self._public_key = base64.b64encode(self._public_key_bytes).decode()