import dependencies.segwit_addr as segwit_addr import dependencies.bchconvert as bchconvert import dependencies.moneropy as moneropy import base58, hashlib, binascii import socket def decodeBase58(address): decoded = base58.b58decode(address).hex() prefixAndHash = decoded[:len(decoded)-8] checksum = decoded[len(decoded)-8:] hash = prefixAndHash for _ in range(1,3): hash = hashlib.sha256(binascii.unhexlify(hash)).hexdigest() if(checksum == hash[:8]): return True return False def decodeMonero(address): # decode monero address if len(address) == 95 or len(address) == 106: # Decode the address from Base58 decoded = moneropy.decode(address) # Verify address type byte if decoded[0:2] not in ["12", "2a", "13"]: return False # Verify checksum # later return True return False def checksumCheck(method, address): match method.lower(): case 'btc': return decodeBase58(address) if address[0] == '1' or address[0] == '3' else True if address[0:3] == 'bc1' and segwit_addr.decode("bc", address)[0] != None else False case 'ltc': return decodeBase58(address) if address[0] == '3' or address[0] == 'M' or address[0] == 'L' else True if address[0:4] == 'ltc1' and segwit_addr.decode("ltc", address)[0] != None else False case 'bch': return bchconvert.is_valid(address) if address[0] == '1' else True if bchconvert.is_valid('bitcoincash:'+address) == True else False case 'zec': return decodeBase58(address) if address[0] == 't' or address[0] == 'z' else False case 'xmr': #needs new function to check if address is valid, a decoder maybe return decodeMonero(address) case _: return False def validDns(d): try: a = socket.gethostbyname(d) except: return False # ip validation if a.split('.')[0] in ['127', '0'] or '.'.join([a.split('.')[0], a.split('.')[1]]) == '192.168' or a in ['1.1.1.1','2.2.2.2', '3.3.3.3']: return False else: return True