47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
from hashlib import new as hashlib_new
|
|
from hashlib import sha256 as hashlib_sha256
|
|
from hashlib import sha512 as hashlib_sha512
|
|
from pybtc.crypto import __double_sha256__
|
|
from pybtc.crypto import __sha256__
|
|
import hmac
|
|
|
|
bytes_from_hex = bytes.fromhex
|
|
|
|
def sha256(h, hex=False):
|
|
if isinstance(h, str):
|
|
h = bytes_from_hex(h)
|
|
# return hashlib_sha256(h).hexdigest() if hex else hashlib_sha256(h).digest()
|
|
return __sha256__(h).hex() if hex else __sha256__(h)
|
|
|
|
|
|
def double_sha256(h, hex=False):
|
|
if not isinstance(h, bytes):
|
|
if isinstance(h,str):
|
|
h = bytes_from_hex(h)
|
|
# if isinstance(h, bytearray):
|
|
# h = bytes(h)
|
|
# return hashlib_sha256(hashlib_sha256(h).digest()).digest()
|
|
return __double_sha256__(h).hex() if hex else __double_sha256__(h)
|
|
|
|
|
|
def hmac_sha512(key, data, hex=False):
|
|
if hex:
|
|
return hmac.new(key, data, hashlib_sha512).hexdigest()
|
|
return hmac.new(key, data, hashlib_sha512).digest()
|
|
|
|
|
|
def ripemd160(h, hex=False):
|
|
if isinstance(h, str):
|
|
h = bytes_from_hex(h)
|
|
a = hashlib_new('ripemd160')
|
|
a.update(h)
|
|
return a.hexdigest() if hex else a.digest()
|
|
|
|
|
|
def hash160(h, hex=False):
|
|
if isinstance(h, str):
|
|
bytes_from_hex(h)
|
|
return ripemd160(sha256(h), True) if hex else ripemd160(sha256(h))
|
|
|
|
|