ut_dep.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 subprocess import run,PIPE
  8. from mmgen.common import *
  9. from mmgen.exception import NoLEDSupport
  10. from ..include.common import check_solc_ver
  11. class unit_tests:
  12. altcoin_deps = ('pysha3','py_ecc','solc')
  13. win_skip = ('aiohttp','pysha3','led')
  14. def led(self,name,ut):
  15. from mmgen.led import LEDControl
  16. try:
  17. LEDControl(enabled=True)
  18. except NoLEDSupport:
  19. ymsg('Warning: no LED support on this platform')
  20. else:
  21. gmsg('LED support found!')
  22. return True
  23. def pysha3(self,name,ut): # ETH,XMR
  24. from sha3 import keccak_256
  25. return True
  26. def py_ecc(self,name,ut): # ETH
  27. from py_ecc.secp256k1 import privtopub
  28. return True
  29. def pysocks(self,name,ut):
  30. import requests,urllib3
  31. urllib3.disable_warnings()
  32. session = requests.Session()
  33. session.trust_env = False
  34. session.proxies.update({'https':'socks5h://127.243.172.8:20677'})
  35. try:
  36. session.get('https://127.188.29.17')
  37. except Exception as e:
  38. if type(e).__name__ == 'ConnectionError':
  39. return True
  40. else:
  41. print(e)
  42. return False
  43. def secp256k1(self,name,ut):
  44. from mmgen.secp256k1 import priv2pub
  45. priv2pub(bytes.fromhex('deadbeef'*8),1)
  46. return True
  47. def cryptography(self,name,ut):
  48. from cryptography.hazmat.primitives.ciphers import Cipher,algorithms,modes
  49. from cryptography.hazmat.backends import default_backend
  50. c = Cipher(algorithms.AES(b'deadbeef'*4),modes.CTR(b'deadbeef'*2),backend=default_backend())
  51. encryptor = c.encryptor()
  52. enc_data = encryptor.update(b'foo') + encryptor.finalize()
  53. return True
  54. def ecdsa(self,name,ut):
  55. import ecdsa
  56. pko = ecdsa.SigningKey.from_secret_exponent(12345678901234,curve=ecdsa.SECP256k1)
  57. pubkey = pko.get_verifying_key().to_string().hex()
  58. return True
  59. def ripemd160(self,name,ut):
  60. import hashlib
  61. if hashlib.new.__name__ == 'hashlib_new_wrapper':
  62. ymsg('Warning: RIPEMD160 missing in hashlib, falling back on pure-Python implementation')
  63. hashlib.new('ripemd160')
  64. return True
  65. def gmpy(self,name,ut):
  66. from gmpy2 import context,set_context,sqrt,cbrt
  67. # context() parameters are platform-dependent!
  68. set_context(context(precision=75,round=1)) # OK for gmp 6.1.2 / gmpy 2.1.0
  69. return True
  70. def aiohttp(self,name,ut):
  71. import asyncio,aiohttp
  72. async def do():
  73. async with aiohttp.ClientSession(
  74. headers = { 'Content-Type': 'application/json' },
  75. connector = aiohttp.TCPConnector(),
  76. ) as session:
  77. pass
  78. asyncio.run(do())
  79. return True
  80. def pexpect(self,name,ut):
  81. import pexpect
  82. from pexpect.popen_spawn import PopenSpawn
  83. return True
  84. def scrypt(self,name,ut):
  85. passwd,salt = b'foo',b'bar'
  86. N,r,p = 4,8,16
  87. buflen = 64
  88. import scrypt
  89. scrypt.hash(passwd, salt, N=2**N, r=r, p=p, buflen=buflen)
  90. from hashlib import scrypt # max N == 14!!
  91. scrypt(password=passwd,salt=salt,n=2**N,r=r,p=p,maxmem=0,dklen=buflen)
  92. return True
  93. def solc(self,name,ut):
  94. from mmgen.protocol import init_proto
  95. solc_ok = check_solc_ver()
  96. if solc_ok:
  97. cmd = [
  98. 'python3',
  99. 'scripts/create-token.py',
  100. '--coin=ETH',
  101. '--name=My Fake Token',
  102. '--symbol=FAKE',
  103. '--supply=100000000000000000000000000',
  104. '--decimals=18',
  105. '--stdout',
  106. init_proto('eth').checksummed_addr('deadbeef'*5),
  107. ]
  108. cp = run(cmd,stdout=PIPE,stderr=PIPE)
  109. vmsg(cp.stderr.decode())
  110. if cp.returncode:
  111. msg(cp.stderr.decode())
  112. return False
  113. return True