def is_valid(v): '''Check vector v for validity''' result = b58decode_chk(v) if result is None: return False for template in templates: prefix = str(bytearray(template[0])) suffix = str(bytearray(template[2])) if result.startswith(prefix) and result.endswith(suffix): if (len(result) - len(prefix) - len(suffix)) == template[1]: return True return False
def is_valid(v): '''Check vector v for validity''' if len(set(v) - set(b58chars)) > 0: return is_valid_bech32(v) result = b58decode_chk(v) if result is None: return is_valid_bech32(v) for template in templates: prefix = bytearray(template[0]) suffix = bytearray(template[2]) if result.startswith(prefix) and result.endswith(suffix): if (len(result) - len(prefix) - len(suffix)) == template[1]: return True return is_valid_bech32(v)
def is_valid_syscoin_address(address, network='mainnet'): # bech32 try: syscoin_hrp = "tsys" if network == 'testnet' else "sys" witver, _ = segwit_addr.decode(syscoin_hrp, address) if witver is not None: return True except: address_version = None # Only public key addresses are allowed # A valid address is a RIPEMD-160 hash which contains 20 bytes # Prior to base58 encoding 1 version byte is prepended and # 4 checksum bytes are appended so the total number of # base58 encoded bytes should be 25. This means the number of characters # in the encoding should be about 34 ( 25 * log2( 256 ) / log2( 58 ) ). # Support syscoin address (T-address on testnet and S-address on mainnet) syscoin_version = 65 if network == 'testnet' else 63 # Check length (This is important because the base58 library has problems # with long addresses (which are invalid anyway). if ((len(address) < 26) or (len(address) > 35)): return False address_version = None try: decoded = base58.b58decode_chk(address) address_version = ord(decoded[0:1]) except: # rescue from exception, not a valid Syscoin address return False if (address_version != syscoin_version): return False return True