ut_dep.py 2.5 KB

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