def DecodeAddr(addr: str, **kwargs: Any) -> bytes: """ Decode a P2PKH address to bytes. Args: addr (str): Address string Other Parameters: net_ver (bytes) : Net address version base58_alph (Base58Alphabets, optional): Base58 alphabet, Bitcoin alphabet by default Returns: bytes: Public key hash bytes Raises: ValueError: If the address encoding is not valid """ net_ver_bytes = kwargs["net_ver"] base58_alph = kwargs.get("base58_alph", Base58Alphabets.BITCOIN) try: addr_dec_bytes = Base58Decoder.CheckDecode(addr, base58_alph) except Base58ChecksumError as ex: raise ValueError("Invalid base58 checksum") from ex else: # Validate length AddrDecUtils.ValidateLength( addr_dec_bytes, CryptoUtils.Hash160DigestSize() + len(net_ver_bytes)) # Validate and remove prefix return AddrDecUtils.ValidateAndRemovePrefix( addr_dec_bytes, net_ver_bytes)
def DecodeAddr(addr: str, **kwargs: Any) -> bytes: """ Decode an Ethereum address to bytes. Args: addr (str): Address string Other Parameters: skip_chksum_enc (bool, optional): True to skip checksum encoding verification, false otherwise (default) Returns: bytes: Public key hash bytes Raises: ValueError: If the address encoding is not valid """ skip_chksum_enc = kwargs.get("skip_chksum_enc", False) # Validate and remove prefix addr_no_prefix = AddrDecUtils.ValidateAndRemovePrefix( addr, CoinsConf.Ethereum.Params("addr_prefix")) # Validate length AddrDecUtils.ValidateLength(addr_no_prefix, EthAddrConst.ADDR_LEN) # Check checksum encoding if not skip_chksum_enc and addr_no_prefix != _EthAddrUtils.ChecksumEncode( addr_no_prefix): raise ValueError("Invalid checksum encode") return BytesUtils.FromHexString(addr_no_prefix)
def DecodeAddr(addr: str, **kwargs: Any) -> bytes: """ Decode a Tron address to bytes. Args: addr (str): Address string **kwargs : Not used Returns: bytes: Public key hash bytes Raises: ValueError: If the address encoding is not valid """ try: # Decode from base58 addr_dec = Base58Decoder.CheckDecode(addr) except Base58ChecksumError as ex: raise ValueError("Invalid base58 checksum") from ex else: # Validate length AddrDecUtils.ValidateLength( addr_dec, (EthAddrConst.ADDR_LEN // 2) + len(CoinsConf.Tron.Params("addr_prefix"))) # Validate and remove prefix addr_no_prefix = AddrDecUtils.ValidateAndRemovePrefix( addr_dec, CoinsConf.Tron.Params("addr_prefix")) return EthAddrDecoder.DecodeAddr( CoinsConf.Ethereum.Params("addr_prefix") + BytesUtils.ToHexString(addr_no_prefix), skip_chksum_enc=True)
def DecodeAddr(addr: str, prefix: str, hrp: str) -> bytes: """ Decode an Avax address to bytes. Args: addr (str) : Address string prefix (str): Address prefix hrp (str) : Address HRP Returns: bytes: Public key hash bytes Raises: ValueError: If the address encoding is not valid """ addr_no_prefix = AddrDecUtils.ValidateAndRemovePrefix(addr, prefix) return AtomAddrDecoder.DecodeAddr(addr_no_prefix, hrp=hrp)
def DecodeAddr(addr: str, addr_type: FillAddrTypes) -> bytes: """ Decode a Filecoin address to bytes. Args: addr (str) : Address string addr_type (FillAddrTypes): Address type Returns: bytes: Public key hash bytes Raises: ValueError: If the address encoding is not valid """ # Validate and remove prefix addr_no_prefix = AddrDecUtils.ValidateAndRemovePrefix( addr, CoinsConf.Filecoin.Params("addr_prefix")) # Check address type addr_type_got = ord(addr_no_prefix[0]) - ord("0") if addr_type != addr_type_got: raise ValueError( f"Invalid address type (expected {addr_type}, got {addr_type_got})" ) # Decode from base32 addr_dec_bytes = Base32Decoder.Decode(addr_no_prefix[1:], FilAddrConst.BASE32_ALPHABET) # Validate length AddrDecUtils.ValidateLength( addr_dec_bytes, FilAddrConst.BLAKE2B_BYTE_LEN + FilAddrConst.CHECKSUM_BYTE_LEN) # Get back checksum and public key bytes pub_key_hash_bytes, checksum_bytes = AddrDecUtils.SplitPartsByChecksum( addr_dec_bytes, FilAddrConst.CHECKSUM_BYTE_LEN) # Validate checksum AddrDecUtils.ValidateChecksum( pub_key_hash_bytes, checksum_bytes, lambda pub_key_bytes: _FilAddrUtils.ComputeChecksum( pub_key_bytes, addr_type)) return pub_key_hash_bytes
def DecodeAddr(addr: str, **kwargs: Any) -> bytes: """ Decode a Nano address to bytes. Args: addr (str): Address string **kwargs : Not used Returns: bytes: Public key bytes Raises: ValueError: If the address encoding is not valid """ # Validate and remove prefix addr_no_prefix = AddrDecUtils.ValidateAndRemovePrefix( addr, CoinsConf.Nano.Params("addr_prefix")) # Decode from base32 addr_dec_bytes = Base32Decoder.Decode( NanoAddrConst.PAYLOAD_PAD_ENC + addr_no_prefix, NanoAddrConst.BASE32_ALPHABET) # Validate length AddrDecUtils.ValidateLength( addr_dec_bytes, Ed25519Blake2bPublicKey.CompressedLength() + NanoAddrConst.CHECKSUM_BYTE_LEN + len(NanoAddrConst.PAYLOAD_PAD_DEC) - 1) # Get back checksum and public key bytes pub_key_bytes, checksum_bytes = AddrDecUtils.SplitPartsByChecksum( addr_dec_bytes[len(NanoAddrConst.PAYLOAD_PAD_DEC):], NanoAddrConst.CHECKSUM_BYTE_LEN) # Validate checksum AddrDecUtils.ValidateChecksum(pub_key_bytes, checksum_bytes, _NanoAddrUtils.ComputeChecksum) # Validate public key AddrDecUtils.ValidatePubKey(pub_key_bytes, Ed25519Blake2bPublicKey) return pub_key_bytes
def DecodeAddr(addr: str, **kwargs: Any) -> bytes: """ Decode a Tezos address to bytes. Args: addr (str): Address string Other Parameters: prefix (XtzAddrPrefixes): Address prefix Returns: bytes: Public key hash bytes Raises: ValueError: If the address encoding is not valid TypeError: If the prefix is not a XtzAddrPrefixes enum """ # Get and check prefix prefix = kwargs["prefix"] if not isinstance(prefix, XtzAddrPrefixes): raise TypeError( "Address type is not an enumerative of XtzAddrPrefixes") # Decode from base58 try: addr_dec_bytes = Base58Decoder.CheckDecode(addr) except Base58ChecksumError as ex: raise ValueError("Invalid base58 checksum") from ex else: # Validate length AddrDecUtils.ValidateLength( addr_dec_bytes, len(prefix.value) + XtzAddrConst.BLAKE2B_BYTE_LEN) # Validate and remove prefix blake_bytes = AddrDecUtils.ValidateAndRemovePrefix( addr_dec_bytes, prefix.value) return blake_bytes
def DecodeAddr(addr: str, **kwargs: Any) -> bytes: """ Decode an EOS address to bytes. Args: addr (str): Address string **kwargs : Not used Returns: bytes: Public key bytes Raises: ValueError: If the address encoding is not valid """ # Validate and remove prefix addr_no_prefix = AddrDecUtils.ValidateAndRemovePrefix( addr, CoinsConf.Eos.Params("addr_prefix")) # Decode from base58 addr_dec_bytes = Base58Decoder.Decode(addr_no_prefix) # Validate length AddrDecUtils.ValidateLength( addr_dec_bytes, Secp256k1PublicKey.CompressedLength() + EosAddrConst.CHECKSUM_BYTE_LEN) # Get back checksum and public key bytes pub_key_bytes, checksum_bytes = AddrDecUtils.SplitPartsByChecksum( addr_dec_bytes, EosAddrConst.CHECKSUM_BYTE_LEN) # Validate checksum AddrDecUtils.ValidateChecksum(pub_key_bytes, checksum_bytes, _EosAddrUtils.ComputeChecksum) # Validate public key AddrDecUtils.ValidatePubKey(pub_key_bytes, Secp256k1PublicKey) return pub_key_bytes
def DecodeAddr(addr: str, net_ver_bytes: bytes, payment_id_bytes: Optional[bytes] = None) -> bytes: """ Decode a Monero address to bytes. Args: addr (str) : Address string net_ver_bytes (bytes) : Net version payment_id_bytes (bytes, optional): Payment ID (only for integrated addresses) Returns: bytes: Public spend (first) and view (second) keys joined together Raises: ValueError: If the address encoding is not valid """ # Decode from base58 XMR addr_dec_bytes = Base58XmrDecoder.Decode(addr) # Validate, remove prefix and split payload_bytes, checksum_bytes = AddrDecUtils.SplitPartsByChecksum( addr_dec_bytes, XmrAddrConst.CHECKSUM_BYTE_LEN) # Validate checksum AddrDecUtils.ValidateChecksum(payload_bytes, checksum_bytes, _XmrAddrUtils.ComputeChecksum) # Validate and remove prefix payload_bytes = AddrDecUtils.ValidateAndRemovePrefix( payload_bytes, net_ver_bytes) try: # Validate length without payment ID AddrDecUtils.ValidateLength( payload_bytes, Ed25519MoneroPublicKey.CompressedLength() * 2) except ValueError as ex: # Validate length with payment ID AddrDecUtils.ValidateLength( payload_bytes, (Ed25519MoneroPublicKey.CompressedLength() * 2) + XmrAddrConst.PAYMENT_ID_BYTE_LEN) # Check payment ID if payment_id_bytes is None or len( payment_id_bytes) != XmrAddrConst.PAYMENT_ID_BYTE_LEN: raise ValueError("Invalid payment ID") from ex payment_id_got_bytes = payload_bytes[-XmrAddrConst. PAYMENT_ID_BYTE_LEN:] if payment_id_bytes != payment_id_got_bytes: raise ValueError( f"Invalid payment ID (expected {BytesUtils.ToHexString(payment_id_bytes)}, " f"got {BytesUtils.ToHexString(payment_id_got_bytes)})" ) from ex # Validate public spend key pub_spend_key_bytes = payload_bytes[:Ed25519MoneroPublicKey. CompressedLength()] AddrDecUtils.ValidatePubKey(pub_spend_key_bytes, Ed25519MoneroPublicKey) # Validate public view key pub_view_key_bytes = payload_bytes[ Ed25519MoneroPublicKey.CompressedLength( ):Ed25519MoneroPublicKey.CompressedLength() * 2] AddrDecUtils.ValidatePubKey(pub_view_key_bytes, Ed25519MoneroPublicKey) return pub_spend_key_bytes + pub_view_key_bytes