ut_dep.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/usr/bin/env python3
  2. """
  3. test.unit_tests_d.ut_dep: dependency unit tests for the MMGen suite
  4. Test whether dependencies are installed and functional.
  5. No data verification is performed.
  6. """
  7. from mmgen.common import *
  8. class unit_tests:
  9. altcoin_deps = ('keccak','py_ecc')
  10. def keccak(self,name,ut): # ETH,XMR
  11. from sha3 import keccak_256
  12. return True
  13. def py_ecc(self,name,ut): # ETH
  14. from py_ecc.secp256k1 import privtopub
  15. return True
  16. def pysocks(self,name,ut):
  17. import requests,urllib3
  18. urllib3.disable_warnings()
  19. session = requests.Session()
  20. session.proxies.update({'https':'socks5h://127.243.172.8:20677'})
  21. try:
  22. session.get('https://127.188.29.17')
  23. except Exception as e:
  24. if type(e).__name__ == 'ConnectionError':
  25. return True
  26. else:
  27. print(e)
  28. return False
  29. def secp256k1(self,name,ut):
  30. from mmgen.secp256k1 import priv2pub
  31. priv2pub(bytes.fromhex('deadbeef'*8),1)
  32. return True
  33. def cryptography(self,name,ut):
  34. from cryptography.hazmat.primitives.ciphers import Cipher,algorithms,modes
  35. from cryptography.hazmat.backends import default_backend
  36. c = Cipher(algorithms.AES(b'deadbeef'*4),modes.CTR(b'deadbeef'*2),backend=default_backend())
  37. encryptor = c.encryptor()
  38. enc_data = encryptor.update(b'foo') + encryptor.finalize()
  39. return True
  40. def ecdsa(self,name,ut):
  41. import ecdsa
  42. pko = ecdsa.SigningKey.from_secret_exponent(12345678901234,curve=ecdsa.SECP256k1)
  43. pubkey = pko.get_verifying_key().to_string().hex()
  44. return True
  45. def gmpy(self,name,ut):
  46. from gmpy2 import context,set_context,sqrt,cbrt
  47. # context() parameters are platform-dependent!
  48. set_context(context(precision=75,round=1)) # OK for gmp 6.1.2 / gmpy 2.1.0
  49. return True
  50. def aiohttp(self,name,ut):
  51. import asyncio,aiohttp
  52. async def do():
  53. async with aiohttp.ClientSession(
  54. headers = { 'Content-Type': 'application/json' },
  55. connector = aiohttp.TCPConnector(),
  56. ) as session:
  57. pass
  58. asyncio.run(do())
  59. return True
  60. def pexpect(self,name,ut):
  61. import pexpect
  62. from pexpect.popen_spawn import PopenSpawn
  63. return True
  64. def scrypt(self,name,ut):
  65. passwd,salt = b'foo',b'bar'
  66. N,r,p = 4,8,16
  67. buflen = 64
  68. import scrypt
  69. scrypt.hash(passwd, salt, N=2**N, r=r, p=p, buflen=buflen)
  70. from hashlib import scrypt # max N == 14!!
  71. scrypt(password=passwd,salt=salt,n=2**N,r=r,p=p,maxmem=0,dklen=buflen)
  72. return True