ut_dep.py 2.6 KB

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