mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-18 05:28:40 +00:00
src/trezor/crypto: refactor {blake256,sha256}_ripemd160_digest to trezor.crypto.scripts
This commit is contained in:
parent
2277a9c754
commit
4a26870fcc
@ -1,6 +1,7 @@
|
||||
# generated from coininfo.py.mako
|
||||
# do not edit manually!
|
||||
from trezor.crypto.base58 import blake256_32, groestl512d_32, sha256d_32
|
||||
from trezor.crypto.scripts import blake256_ripemd160_digest, sha256_ripemd160_digest
|
||||
|
||||
|
||||
class CoinInfo:
|
||||
@ -48,12 +49,15 @@ class CoinInfo:
|
||||
if curve_name == "secp256k1-groestl":
|
||||
self.b58_hash = groestl512d_32
|
||||
self.sign_hash_double = False
|
||||
self.script_hash = sha256_ripemd160_digest
|
||||
elif curve_name == "secp256k1-decred":
|
||||
self.b58_hash = blake256_32
|
||||
self.sign_hash_double = False
|
||||
self.script_hash = blake256_ripemd160_digest
|
||||
else:
|
||||
self.b58_hash = sha256d_32
|
||||
self.sign_hash_double = True
|
||||
self.script_hash = sha256_ripemd160_digest
|
||||
|
||||
|
||||
# fmt: off
|
||||
|
@ -1,7 +1,7 @@
|
||||
from micropython import const
|
||||
|
||||
from trezor.crypto import base58, bech32, cashaddr
|
||||
from trezor.crypto.hashlib import ripemd160, sha256
|
||||
from trezor.crypto.hashlib import sha256
|
||||
from trezor.messages import FailureType, InputScriptType
|
||||
from trezor.utils import ensure
|
||||
|
||||
@ -9,10 +9,8 @@ from apps.common import address_type
|
||||
from apps.common.coininfo import CoinInfo
|
||||
from apps.wallet.sign_tx.multisig import multisig_get_pubkeys, multisig_pubkey_index
|
||||
from apps.wallet.sign_tx.scripts import (
|
||||
blake256_ripemd160_digest,
|
||||
output_script_multisig,
|
||||
output_script_native_p2wpkh_or_p2wsh,
|
||||
sha256_ripemd160_digest,
|
||||
)
|
||||
|
||||
# supported witness version for bech32 addresses
|
||||
@ -93,10 +91,7 @@ def address_multisig_p2sh(pubkeys: bytes, m: int, coin: CoinInfo):
|
||||
FailureType.ProcessError, "Multisig not enabled on this coin"
|
||||
)
|
||||
redeem_script = output_script_multisig(pubkeys, m)
|
||||
if coin.decred:
|
||||
redeem_script_hash = blake256_ripemd160_digest(redeem_script)
|
||||
else:
|
||||
redeem_script_hash = sha256_ripemd160_digest(redeem_script)
|
||||
redeem_script_hash = coin.script_hash(redeem_script)
|
||||
return address_p2sh(redeem_script_hash, coin)
|
||||
|
||||
|
||||
@ -121,7 +116,7 @@ def address_multisig_p2wsh(pubkeys: bytes, m: int, hrp: str):
|
||||
|
||||
|
||||
def address_pkh(pubkey: bytes, coin: CoinInfo) -> str:
|
||||
s = address_type.tobytes(coin.address_type) + sha256_ripemd160_digest(pubkey)
|
||||
s = address_type.tobytes(coin.address_type) + coin.script_hash(pubkey)
|
||||
return base58.encode_check(bytes(s), coin.b58_hash)
|
||||
|
||||
|
||||
@ -133,13 +128,13 @@ def address_p2sh(redeem_script_hash: bytes, coin: CoinInfo) -> str:
|
||||
def address_p2wpkh_in_p2sh(pubkey: bytes, coin: CoinInfo) -> str:
|
||||
pubkey_hash = ecdsa_hash_pubkey(pubkey, coin)
|
||||
redeem_script = output_script_native_p2wpkh_or_p2wsh(pubkey_hash)
|
||||
redeem_script_hash = sha256_ripemd160_digest(redeem_script)
|
||||
redeem_script_hash = coin.script_hash(redeem_script)
|
||||
return address_p2sh(redeem_script_hash, coin)
|
||||
|
||||
|
||||
def address_p2wsh_in_p2sh(witness_script_hash: bytes, coin: CoinInfo) -> str:
|
||||
redeem_script = output_script_native_p2wpkh_or_p2wsh(witness_script_hash)
|
||||
redeem_script_hash = sha256_ripemd160_digest(redeem_script)
|
||||
redeem_script_hash = coin.script_hash(redeem_script)
|
||||
return address_p2sh(redeem_script_hash, coin)
|
||||
|
||||
|
||||
@ -185,12 +180,7 @@ def ecdsa_hash_pubkey(pubkey: bytes, coin: CoinInfo) -> bytes:
|
||||
else:
|
||||
ensure(len(pubkey) == 33) # compresssed format
|
||||
|
||||
if coin.decred:
|
||||
return blake256_ripemd160_digest(pubkey)
|
||||
|
||||
h = sha256(pubkey).digest()
|
||||
h = ripemd160(h).digest()
|
||||
return h
|
||||
return coin.script_hash(pubkey)
|
||||
|
||||
|
||||
def address_short(coin: CoinInfo, address: str) -> str:
|
||||
|
@ -1,4 +1,3 @@
|
||||
from trezor.crypto.hashlib import blake256, ripemd160, sha256
|
||||
from trezor.messages.MultisigRedeemScriptType import MultisigRedeemScriptType
|
||||
|
||||
from apps.common.coininfo import CoinInfo
|
||||
@ -265,15 +264,3 @@ def append_pubkey(w: bytearray, pubkey: bytes) -> bytearray:
|
||||
write_op_push(w, len(pubkey))
|
||||
write_bytes(w, pubkey)
|
||||
return w
|
||||
|
||||
|
||||
def sha256_ripemd160_digest(b: bytes) -> bytes:
|
||||
h = sha256(b).digest()
|
||||
h = ripemd160(h).digest()
|
||||
return h
|
||||
|
||||
|
||||
def blake256_ripemd160_digest(b: bytes) -> bytes:
|
||||
h = blake256(b).digest()
|
||||
h = ripemd160(h).digest()
|
||||
return h
|
||||
|
13
src/trezor/crypto/scripts.py
Normal file
13
src/trezor/crypto/scripts.py
Normal file
@ -0,0 +1,13 @@
|
||||
from trezor.crypto.hashlib import blake256, ripemd160, sha256
|
||||
|
||||
|
||||
def sha256_ripemd160_digest(b: bytes) -> bytes:
|
||||
h = sha256(b).digest()
|
||||
h = ripemd160(h).digest()
|
||||
return h
|
||||
|
||||
|
||||
def blake256_ripemd160_digest(b: bytes) -> bytes:
|
||||
h = blake256(b).digest()
|
||||
h = ripemd160(h).digest()
|
||||
return h
|
Loading…
Reference in New Issue
Block a user