ts_ref_3seed.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. #!/usr/bin/env python3
  2. #
  3. # mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
  4. # Copyright (C)2013-2020 The MMGen Project <mmgen@tuta.io>
  5. #
  6. # This program is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # This program is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. """
  19. ts_ref_3seed.py: Saved and generated reference file tests for 128, 192 and
  20. 256-bit seeds for the test.py test suite
  21. """
  22. from mmgen.globalvars import g
  23. from mmgen.opts import opt
  24. from mmgen.seed import SeedSource
  25. from test.common import *
  26. from test.test_py_d.common import *
  27. from test.test_py_d.ts_base import *
  28. from test.test_py_d.ts_shared import *
  29. from test.test_py_d.ts_wallet import TestSuiteWalletConv
  30. class TestSuiteRef3Seed(TestSuiteBase,TestSuiteShared):
  31. 'saved wallet files for 128-, 192- and 256-bit seeds + generated filename checks'
  32. networks = ('btc',)
  33. mmtypes = (None,)
  34. tmpdir_nums = [6,7,8]
  35. addr_idx_list_in = '1010,500-501,31-33,1,33,500,1011'
  36. pass_idx_list_in = '1,4,9-11,1100'
  37. chk_data = {
  38. 'lens': (128, 192, 256),
  39. 'sids': ('FE3C6545', '1378FC64', '98831F3A'),
  40. }
  41. shared_deps = ['mmdat',pwfile]
  42. skip_cmds = (
  43. 'ref_xmrseed_25_passwdgen_1',
  44. 'ref_xmrseed_25_passwdgen_2',
  45. )
  46. cmd_group = (
  47. # reading saved reference wallets
  48. ('ref_wallet_chk', ([],'saved reference wallet')),
  49. ('ref_seed_chk', ([],'saved seed file')),
  50. ('ref_hex_chk', ([],'saved mmhex file')),
  51. ('ref_plainhex_chk',([],'saved hex file')),
  52. ('ref_dieroll_chk', ([],'saved dieroll (b6d) file')),
  53. ('ref_mn_chk', ([],'saved native MMGen mnemonic file')),
  54. ('ref_bip39_chk', ([],'saved BIP39 mnemonic file')),
  55. ('ref_hincog_chk', ([],'saved hidden incog reference wallet')),
  56. ('ref_brain_chk', ([],'saved brainwallet')), # in ts_shared
  57. # generating new reference ('abc' brainwallet) wallets for filename checks:
  58. ('ref_walletgen_brain', ([],'generating new reference wallet + filename check (brain)')),
  59. ('ref_walletconv_words', ([],'wallet filename (native mnemonic)')),
  60. ('ref_walletconv_bip39', ([],'wallet filename (bip39)')),
  61. ('ref_walletconv_seed', ([],'wallet filename (seed)')),
  62. ('ref_walletconv_hexseed', ([],'wallet filename (hex seed)')),
  63. ('ref_walletconv_plainhexseed',([],'wallet filename (plain hex seed)')),
  64. ('ref_walletconv_dieroll', ([],'wallet filename (dieroll (b6d) seed)')),
  65. ('ref_walletconv_incog', ([],'wallet filename (incog)')),
  66. ('ref_walletconv_xincog', ([],'wallet filename (hex incog)')),
  67. )
  68. def __init__(self,trunner,cfgs,spawn):
  69. for k,j in self.cmd_group:
  70. for n in (1,2,3): # 128,192,256 bits
  71. setattr(self,'{}_{}'.format(k,n),getattr(self,k))
  72. if cfgs:
  73. for n in self.tmpdir_nums:
  74. cfgs[str(n)]['addr_idx_list'] = self.addr_idx_list_in
  75. cfgs[str(n)]['pass_idx_list'] = self.pass_idx_list_in
  76. return TestSuiteBase.__init__(self,trunner,cfgs,spawn)
  77. def ref_wallet_chk(self):
  78. wf = joinpath(ref_dir,TestSuiteWalletConv.sources[str(self.seed_len)]['ref_wallet'])
  79. return self.walletchk(wf,pf=None,sid=self.seed_id)
  80. def ref_ss_chk(self,ss=None):
  81. wf = joinpath(ref_dir,'{}.{}'.format(self.seed_id,ss.ext))
  82. return self.walletchk(wf,pf=None,wcls=ss,sid=self.seed_id)
  83. def ref_seed_chk(self):
  84. from mmgen.seed import MMGenSeedFile
  85. return self.ref_ss_chk(ss=MMGenSeedFile)
  86. def ref_hex_chk(self):
  87. from mmgen.seed import MMGenHexSeedFile
  88. return self.ref_ss_chk(ss=MMGenHexSeedFile)
  89. def ref_plainhex_chk(self):
  90. from mmgen.seed import PlainHexSeedFile
  91. return self.ref_ss_chk(ss=PlainHexSeedFile)
  92. def ref_dieroll_chk(self):
  93. from mmgen.seed import DieRollSeedFile
  94. return self.ref_ss_chk(ss=DieRollSeedFile)
  95. def ref_mn_chk(self):
  96. from mmgen.seed import MMGenMnemonic
  97. return self.ref_ss_chk(ss=MMGenMnemonic)
  98. def ref_bip39_chk(self):
  99. from mmgen.seed import BIP39Mnemonic
  100. return self.ref_ss_chk(ss=BIP39Mnemonic)
  101. def ref_hincog_chk(self,desc='hidden incognito data'):
  102. source = TestSuiteWalletConv.sources[str(self.seed_len)]
  103. for wtype,edesc,of_arg in ('hic_wallet','',[]), \
  104. ('hic_wallet_old','(old format)',['-O']):
  105. ic_arg = ['-H{},{}'.format(joinpath(ref_dir,source[wtype]),ref_wallet_incog_offset)]
  106. slarg = ['-l{} '.format(self.seed_len)]
  107. hparg = ['-p1']
  108. if wtype == 'hic_wallet_old' and opt.profile: msg('')
  109. t = self.spawn('mmgen-walletchk',
  110. slarg + hparg + of_arg + ic_arg,
  111. extra_desc=edesc)
  112. t.passphrase(desc,self.wpasswd)
  113. if wtype == 'hic_wallet_old':
  114. t.expect('Is the Seed ID correct? (Y/n): ','\n')
  115. chk = t.expect_getend('Seed ID: ')
  116. t.close()
  117. cmp_or_die(self.seed_id,chk)
  118. ok_msg()
  119. t.skip_ok = True
  120. return t
  121. def ref_walletgen_brain(self):
  122. sl_arg = '-l{}'.format(self.seed_len)
  123. hp_arg = '-p{}'.format(ref_wallet_hash_preset)
  124. label = "test.py ref. wallet (pw '{}', seed len {}) α".format(ref_wallet_brainpass,self.seed_len)
  125. bf = 'ref.mmbrain'
  126. args = ['-d',self.tmpdir,hp_arg,sl_arg,'-ib','-L',label]
  127. self.write_to_tmpfile(bf,ref_wallet_brainpass)
  128. self.write_to_tmpfile(pwfile,self.wpasswd)
  129. t = self.spawn('mmgen-walletconv', args + [self.usr_rand_arg])
  130. t.license()
  131. t.expect('Enter brainwallet: ', ref_wallet_brainpass+'\n')
  132. ocls = Wallet
  133. t.passphrase_new('new '+ocls.desc,self.wpasswd)
  134. t.usr_rand(self.usr_rand_chars)
  135. fn = os.path.split(t.written_to_file(capfirst(ocls.desc)))[-1]
  136. import re
  137. idx = int(self.test_name[-1]) - 1
  138. pat = r'{}-[0-9A-F]{{8}}\[{},1\].mmdat'.format(
  139. self.chk_data['sids'][idx],
  140. self.chk_data['lens'][idx] )
  141. assert re.match(pat,fn)
  142. sid = os.path.basename(fn.split('-')[0])
  143. cmp_or_die(sid,self.seed_id,desc='Seed ID')
  144. return t
  145. def ref_walletconv(self,ofmt,extra_args=[],re_pat=None):
  146. wf = self.get_file_with_ext('mmdat')
  147. pf = joinpath(self.tmpdir,pwfile)
  148. t = self.spawn('mmgen-walletconv',extra_args+['-d','test/trash','-o',ofmt,'-P'+pf,wf])
  149. wcls = SeedSource.fmt_code_to_type(ofmt)
  150. fn = os.path.split(t.written_to_file(capfirst(wcls.desc)))[-1]
  151. idx = int(self.test_name[-1]) - 1
  152. sid = self.chk_data['sids'][idx]
  153. slen = self.chk_data['lens'][idx]
  154. if re_pat:
  155. import re
  156. pat = re_pat.format(sid,slen)
  157. assert re.match(pat,fn),'{} {}'.format(pat,fn)
  158. else:
  159. cmp_or_die('{}[{}].{}'.format(sid,slen,wcls.ext),fn)
  160. return t
  161. def ref_walletconv_words(self): return self.ref_walletconv(ofmt='mn')
  162. def ref_walletconv_bip39(self): return self.ref_walletconv(ofmt='bip39')
  163. def ref_walletconv_seed(self): return self.ref_walletconv(ofmt='mmseed')
  164. def ref_walletconv_hexseed(self): return self.ref_walletconv(ofmt='mmhex')
  165. def ref_walletconv_plainhexseed(self): return self.ref_walletconv(ofmt='hex')
  166. def ref_walletconv_dieroll(self): return self.ref_walletconv(ofmt='dieroll')
  167. def ref_walletconv_incog(self,ofmt='incog',ext='mmincog'):
  168. args = ['-r0','-p1']
  169. pat = r'{}-[0-9A-F]{{8}}-[0-9A-F]{{8}}\[{},1\].' + ext
  170. return self.ref_walletconv(ofmt=ofmt,extra_args=args,re_pat=pat)
  171. def ref_walletconv_xincog(self):
  172. return self.ref_walletconv_incog(ofmt='incog_hex',ext='mmincox')
  173. class TestSuiteRef3Addr(TestSuiteRef3Seed):
  174. 'generated reference address, key and password files for 128-, 192- and 256-bit seeds'
  175. networks = ('btc','btc_tn','ltc','ltc_tn')
  176. passthru_opts = ('coin','testnet')
  177. tmpdir_nums = [26,27,28]
  178. shared_deps = ['mmdat',pwfile]
  179. chk_data = {
  180. 'lens': (128, 192, 256),
  181. 'sids': ('FE3C6545', '1378FC64', '98831F3A'),
  182. 'refaddrgen_legacy_1': {
  183. 'btc': ('B230 7526 638F 38CB','A9DC 5A13 12CB 1317'),
  184. 'ltc': ('2B23 5E97 848A B961','AEC3 E774 0B21 0202'),
  185. },
  186. 'refaddrgen_segwit_1': {
  187. 'btc': ('9914 6D10 2307 F348','83C8 A6B6 ADA8 25B2'),
  188. 'ltc': ('CC09 A190 B7DF B7CD','0425 7893 C6F1 ECA3'),
  189. },
  190. 'refaddrgen_bech32_1': {
  191. 'btc': ('C529 D686 31AA ACD4','21D0 26AD 3A22 5465'),
  192. 'ltc': ('3DFB CFCC E180 DC9D','8C72 D5C2 07E0 5F7B'),
  193. },
  194. 'refaddrgen_compressed_1': {
  195. 'btc': ('95EB 8CC0 7B3B 7856','16E6 6170 154D 2202'),
  196. 'ltc': ('35D5 8ECA 9A42 46C3','15B3 5492 D3D3 6854'),
  197. },
  198. 'refkeyaddrgen_legacy_1': {
  199. 'btc': ('CF83 32FB 8A8B 08E2','1F67 B73A FF8C 5D15'),
  200. 'ltc': ('1896 A26C 7F14 2D01','FA0E CD4E ADAF DBF4'),
  201. },
  202. 'refkeyaddrgen_compressed_1': {
  203. 'btc': ('E43A FA46 5751 720A','FDEE 8E45 1C0A 02AD'),
  204. 'ltc': ('7603 2FE3 2145 FFAD','3FE0 5A8E 5FBE FF3E'),
  205. },
  206. 'refkeyaddrgen_segwit_1': {
  207. 'btc': ('C13B F717 D4E8 CF59','BB71 175C 5416 19D8'),
  208. 'ltc': ('054B 9794 55B4 5D82','DE85 3CF3 9636 FE2E'),
  209. },
  210. 'refkeyaddrgen_bech32_1': {
  211. 'btc': ('934F 1C33 6C06 B18C','A283 5BAB 7AF3 3EA4'),
  212. 'ltc': ('A6AD DF53 5968 7B6A','9572 43E0 A4DC 0B2E'),
  213. },
  214. 'refpasswdgen_1': 'EB29 DC4F 924B 289F',
  215. 'refpasswdgen_half_1':'D310 2593 B5D9 2E88',
  216. 'ref_b32passwdgen_1': '37B6 C218 2ABC 7508',
  217. 'ref_hexpasswdgen_1': '8E99 E696 84CE E7D5',
  218. 'ref_hexpasswdgen_half_1': '8E99 E696 84CE E7D5',
  219. 'ref_bip39_12_passwdgen_1': '834F CF45 0B33 8AF0',
  220. 'ref_bip39_18_passwdgen_1': '834F CF45 0B33 8AF0',
  221. 'ref_bip39_24_passwdgen_1': '834F CF45 0B33 8AF0',
  222. 'ref_hex2bip39_24_passwdgen_1': '91AF E735 A31D 72A0',
  223. 'refaddrgen_legacy_2': {
  224. 'btc': ('8C17 A5FA 0470 6E89','764C 66F9 7502 AAEA'),
  225. 'ltc': ('2B77 A009 D5D0 22AD','51D1 979D 0A35 F24B'),
  226. },
  227. 'refaddrgen_compressed_2': {
  228. 'btc': ('2615 8401 2E98 7ECA','A386 EE07 A356 906D'),
  229. 'ltc': ('197C C48C 3C37 AB0F','8DDC 5FE3 BFF9 1226'),
  230. },
  231. 'refaddrgen_segwit_2': {
  232. 'btc': ('91C4 0414 89E4 2089','BF9F C67F ED22 A47B'),
  233. 'ltc': ('8F12 FA7B 9F12 594C','2609 8494 A23C F836'),
  234. },
  235. 'refaddrgen_bech32_2': {
  236. 'btc': ('2AA3 78DF B965 82EB','027B 1C1F 7FB2 D859'),
  237. 'ltc': ('951C 8FB2 FCA5 87D1','4A5D 67E0 8210 FEF2'),
  238. },
  239. 'refkeyaddrgen_legacy_2': {
  240. 'btc': ('9648 5132 B98E 3AD9','1BD3 5A36 D51C 256D'),
  241. 'ltc': ('DBD4 FAB6 7E46 CD07','8822 3FDF FEC0 6A8C'),
  242. },
  243. 'refkeyaddrgen_compressed_2': {
  244. 'btc': ('6D6D 3D35 04FD B9C3','94BF 4BCF 10B2 394B'),
  245. 'ltc': ('F5DA 9D60 6798 C4E9','7918 88DE 9096 DD7A'),
  246. },
  247. 'refkeyaddrgen_segwit_2': {
  248. 'btc': ('C98B DF08 A3D5 204B','7E7F DF50 FE04 6F68'),
  249. 'ltc': ('1829 7FE7 2567 CB91','BE92 D19C 7589 EF30'),
  250. },
  251. 'refkeyaddrgen_bech32_2': {
  252. 'btc': ('4A6B 3762 DF30 9368','12DD 1888 36BA 85F7'),
  253. 'ltc': ('5C12 FDD4 17AB F179','E195 B28C 59C4 C5EC'),
  254. },
  255. 'refpasswdgen_2': 'ADEA 0083 094D 489A',
  256. 'refpasswdgen_half_2':'12B3 4929 9506 76E0',
  257. 'ref_b32passwdgen_2': '2A28 C5C7 36EC 217A',
  258. 'ref_hexpasswdgen_2': '88F9 0D48 3A7E 7CC2',
  259. 'ref_hexpasswdgen_half_2': '59F3 8F48 861E 1186',
  260. 'ref_bip39_12_passwdgen_2': 'D32D B8D7 A840 250B',
  261. 'ref_bip39_18_passwdgen_2': '0FAA 78DD A6BA 31AD',
  262. 'ref_bip39_24_passwdgen_2': '0FAA 78DD A6BA 31AD',
  263. 'ref_hex2bip39_24_passwdgen_2': '0E8E 23C9 923F 7C2D',
  264. 'refaddrgen_legacy_3': {
  265. 'btc': ('6FEF 6FB9 7B13 5D91','424E 4326 CFFE 5F51'),
  266. 'ltc': ('AD52 C3FE 8924 AAF0','4EBE 2E85 E969 1B30'),
  267. },
  268. 'refaddrgen_compressed_3': {
  269. 'btc': ('A33C 4FDE F515 F5BC','6C48 AA57 2056 C8C8'),
  270. 'ltc': ('3FC0 8F03 C2D6 BD19','4C0A 49B6 2DD1 1BE0'),
  271. },
  272. 'refaddrgen_segwit_3': {
  273. 'btc': ('06C1 9C87 F25C 4EE6','072C 8B07 2730 CB7A'),
  274. 'ltc': ('63DF E42A 0827 21C3','5DD1 D186 DBE1 59F2'),
  275. },
  276. 'refaddrgen_bech32_3': {
  277. 'btc': ('9D2A D4B6 5117 F02E','0527 9C39 6C1B E39A'),
  278. 'ltc': ('FF1C 7939 5967 AB82','ED3D 8AA4 BED4 0B40'),
  279. },
  280. 'refkeyaddrgen_legacy_3': {
  281. 'btc': ('9F2D D781 1812 8BAD','88CC 5120 9A91 22C2'),
  282. 'ltc': ('B804 978A 8796 3ED4','98B5 AC35 F334 0398'),
  283. },
  284. 'refkeyaddrgen_compressed_3': {
  285. 'btc': ('420A 8EB5 A9E2 7814','F43A CB4A 81F3 F735'),
  286. 'ltc': ('8D1C 781F EB7F 44BC','05F3 5C68 FD31 FCEF'),
  287. },
  288. 'refkeyaddrgen_segwit_3': {
  289. 'btc': ('A447 12C2 DD14 5A9B','C770 7391 C415 21F9'),
  290. 'ltc': ('E8A3 9F6E E164 A521','D3D5 BFDD F5D5 20BD'),
  291. },
  292. 'refkeyaddrgen_bech32_3': {
  293. 'btc': ('D0DD BDE3 87BE 15AE','7552 D70C AAB8 DEAA'),
  294. 'ltc': ('74A0 7DD5 963B 6326','2CDA A007 4B9F E9A5'),
  295. },
  296. 'refpasswdgen_3': '2D6D 8FBA 422E 1315',
  297. 'refpasswdgen_half_3':'272C B770 0176 D7EA',
  298. 'ref_b32passwdgen_3': 'F6C1 CDFB 97D9 FCAE',
  299. 'ref_hexpasswdgen_3': 'BD4F A0AC 8628 4BE4',
  300. 'ref_hexpasswdgen_half_3': 'FBDD F733 FFB9 21C1',
  301. 'ref_bip39_12_passwdgen_3': 'A86E EA14 974A 1B0E',
  302. 'ref_bip39_18_passwdgen_3': 'EF87 9904 88E2 5884',
  303. 'ref_bip39_24_passwdgen_3': 'EBE8 2A8F 8F8C 7DBD',
  304. 'ref_hex2bip39_24_passwdgen_3': '93FA 5EFD 33F3 760E',
  305. 'ref_xmrseed_25_passwdgen_3': '91AE E76A 2827 C8CC',
  306. }
  307. cmd_group = (
  308. ('ref_walletgen_brain', ([],'generating new reference wallet + filename check (brain)')),
  309. ('refaddrgen_legacy', ([],'new refwallet addr chksum (uncompressed)')),
  310. ('refaddrgen_compressed', ([],'new refwallet addr chksum (compressed)')),
  311. ('refaddrgen_segwit', ([],'new refwallet addr chksum (segwit)')),
  312. ('refaddrgen_bech32', ([],'new refwallet addr chksum (bech32)')),
  313. ('refkeyaddrgen_legacy', ([],'new refwallet key-addr chksum (uncompressed)')),
  314. ('refkeyaddrgen_compressed', ([],'new refwallet key-addr chksum (compressed)')),
  315. ('refkeyaddrgen_segwit', ([],'new refwallet key-addr chksum (segwit)')),
  316. ('refkeyaddrgen_bech32', ([],'new refwallet key-addr chksum (bech32)')),
  317. ('refpasswdgen', ([],'new refwallet passwd file chksum')),
  318. ('refpasswdgen_half', ([],'new refwallet passwd file chksum (half-length)')),
  319. ('ref_b32passwdgen', ([],'new refwallet passwd file chksum (base32)')),
  320. ('ref_hexpasswdgen', ([],'new refwallet passwd file chksum (hex)')),
  321. ('ref_hexpasswdgen_half', ([],'new refwallet passwd file chksum (hex, half-length)')),
  322. ('ref_bip39_12_passwdgen', ([],'new refwallet passwd file chksum (BIP39, 12 words)')),
  323. ('ref_bip39_18_passwdgen', ([],'new refwallet passwd file chksum (BIP39, up to 18 words)')),
  324. ('ref_bip39_24_passwdgen', ([],'new refwallet passwd file chksum (BIP39, up to 24 words)')),
  325. ('ref_xmrseed_25_passwdgen', ([],'new refwallet passwd file chksum (Monero new-style mnemonic, 25 words)')),
  326. ('ref_hex2bip39_24_passwdgen',([],'new refwallet passwd file chksum (hex-to-BIP39, up to 24 words)')),
  327. )
  328. def call_addrgen(self,mmtype,pfx='addr'):
  329. wf = self.get_file_with_ext('mmdat')
  330. pf = joinpath(self.tmpdir,pwfile)
  331. return getattr(self,pfx+'gen')(wf,pf=pf,check_ref=True,mmtype=mmtype)
  332. def refaddrgen_legacy(self): return self.call_addrgen('legacy')
  333. def refaddrgen_compressed(self): return self.call_addrgen('compressed')
  334. def refaddrgen_segwit(self): return self.call_addrgen('segwit')
  335. def refaddrgen_bech32(self): return self.call_addrgen('bech32')
  336. def refkeyaddrgen_legacy(self): return self.call_addrgen('legacy','keyaddr')
  337. def refkeyaddrgen_compressed(self): return self.call_addrgen('compressed','keyaddr')
  338. def refkeyaddrgen_segwit(self): return self.call_addrgen('segwit','keyaddr')
  339. def refkeyaddrgen_bech32(self): return self.call_addrgen('bech32','keyaddr')
  340. def pwgen(self,ftype,id_str,pwfmt=None,pwlen=None,extra_args=[],stdout=False):
  341. wf = self.get_file_with_ext('mmdat')
  342. pf = joinpath(self.tmpdir,pwfile)
  343. pwfmt = (['--passwd-fmt='+pwfmt] if pwfmt else [])
  344. pwlen = (['--passwd-len='+str(pwlen)] if pwlen else [])
  345. return self.addrgen(wf, pf,
  346. check_ref = True,
  347. ftype = ftype,
  348. id_str = id_str,
  349. extra_args = pwfmt + pwlen + extra_args,
  350. stdout = stdout )
  351. def refpasswdgen(self): return self.pwgen('pass','alice@crypto.org')
  352. def refpasswdgen_half(self): return self.pwgen('pass','alice@crypto.org',pwlen='h')
  353. def ref_b32passwdgen(self): return self.pwgen('pass32','фубар@crypto.org','b32',17)
  354. def ref_hexpasswdgen(self):
  355. pwlen = {'1':32,'2':48,'3':64}[self.test_name[-1]]
  356. return self.pwgen('passhex','фубар@crypto.org','hex',pwlen)
  357. def ref_hexpasswdgen_half(self):
  358. ea = ['--accept-defaults']
  359. return self.pwgen('passhex','фубар@crypto.org','hex','h',ea,stdout=True)
  360. def mn_pwgen(self,req_pw_len,pwfmt,ftype='passbip39',stdout=False):
  361. pwlen = min(req_pw_len,{'1':12,'2':18,'3':24}[self.test_name[-1]])
  362. if pwfmt == 'xmrseed':
  363. pwlen += 1
  364. ea = ['--accept-defaults']
  365. return self.pwgen(ftype,'фубар@crypto.org',pwfmt,pwlen,ea,stdout=stdout)
  366. def ref_bip39_12_passwdgen(self): return self.mn_pwgen(12,'bip39',stdout=True)
  367. def ref_bip39_18_passwdgen(self): return self.mn_pwgen(18,'bip39',stdout=True)
  368. def ref_bip39_24_passwdgen(self): return self.mn_pwgen(24,'bip39')
  369. def ref_hex2bip39_24_passwdgen(self): return self.mn_pwgen(24,'hex2bip39')
  370. def ref_xmrseed_25_passwdgen(self): return self.mn_pwgen(24,'xmrseed',ftype='passxmrseed')