diff --git a/.travis.yml b/.travis.yml index f957eda..5ba8d69 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ notifications: on_success: never on_failure: always -install: pip install -r requirements.txt +install: python3 setup.py install before_script: pip install pytest diff --git a/README.md b/README.md index cc368f6..faefb2f 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,11 @@ A cryptocurrency address inspection/validation library for python. * zcash ## Installation +From `setup.py`: +```commandline +python setup.py install +``` +Pip: ```shell pip3 install coinaddrng ``` diff --git a/coinaddrng/__init__.py b/coinaddrng/__init__.py index 1c86817..9d9b124 100644 --- a/coinaddrng/__init__.py +++ b/coinaddrng/__init__.py @@ -16,7 +16,7 @@ :license: MIT, see LICENSE for more details. """ -__version__ = '1.0.30' +__version__ = '1.1.0' from . import interfaces, currency, validation from .validation import validate diff --git a/coinaddrng/validation.py b/coinaddrng/validation.py index 01c18c8..215acb6 100644 --- a/coinaddrng/validation.py +++ b/coinaddrng/validation.py @@ -15,8 +15,8 @@ from zope.interface import implementer, provider import attr -import sha3 import base58check +from Crypto.Hash import keccak import math from binascii import unhexlify, crc32 import base64 @@ -510,11 +510,14 @@ def validate(self): # Ethereum address is generated by keccak algorithm and has to # hexadecimal - addr_hash = sha3.keccak_256(addr.lower().encode('ascii')).hexdigest() + kh = keccak.new(digest_bits=256) + kh.update(addr.lower().encode('ascii')) + addr_hash = kh.hexdigest() + for i, letter in enumerate(addr): if any([ - int(addr_hash[i], 16) >= 8 and letter.upper() != letter, - int(addr_hash[i], 16) < 8 and letter.lower() != letter + int(addr_hash[i], 16) >= 8 and letter.upper() != letter, + int(addr_hash[i], 16) < 8 and letter.lower() != letter ]): return False return True @@ -522,22 +525,6 @@ def validate(self): def validate_extended(self): return False - #def validate(self): - # """Validate the address.""" - # address = self.request.address.decode() - # if any(bool(pat.match(address)) - # for pat in self.non_checksummed_patterns): - # return True - # addr = address.lstrip('0x') - # addr_hash = sha3.keccak_256(addr.lower().encode('ascii')).hexdigest() - # for i in range(0, len(addr)): - # if any([ - # int(addr_hash[i], 16) > 7 and addr[i].upper() != addr[i], - # int(addr_hash[i], 16) <= 7 and addr[i].lower() != addr[i] - # ]): - # return False - # return True - @property def network(self): """Return network derived from network version bytes.""" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 8a00f0b..0000000 --- a/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -zope -attrs>=17.4.0 -pysha3>=1.0.2 -base58check>=1.0.1 -zope.interface>=4.4.3 -bech32 -cbor -blake256 -groestlcoin_hash2 -crc16 \ No newline at end of file diff --git a/setup.py b/setup.py index 81bc4d2..0b1a829 100644 --- a/setup.py +++ b/setup.py @@ -41,14 +41,15 @@ license='MIT', install_requires=[ 'attrs>=17.4.0', - 'pysha3>=1.0.2', 'base58check>=1.0.1', + 'bech32', + 'blake256', + 'cbor', + 'crc16', + 'groestlcoin_hash2', + 'pycryptodome', + 'zope', 'zope.interface>=4.4.3', - 'crc16>=0.1.1', - 'blake256>=0.1.1', - 'cbor>=1.0.0', - 'bech32>=1.1.0', - 'groestlcoin-hash2>=1.1.1' ], zip_safe=False, packages=find_packages(), @@ -62,7 +63,7 @@ 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: >=3.6', 'Programming Language :: Python :: 3 :: Only', 'Topic :: Internet :: WWW/HTTP', 'Topic :: Software Development',