def hex2mn(self,hexstr:'sstr',wordlist_id=dfl_wl_id): "convert a 16, 24 or 32-byte hexadecimal number to a mnemonic" opt.out_fmt = 'words' from mmgen.seed import SeedSource s = SeedSource(seed=bytes.fromhex(hexstr)) s._format() return ' '.join(s.ssdata.mnemonic)
def get_subseed_by_seed_id(self,seed_id:str,wallet='',last_idx=g.subseeds): "get the Subseed Index of a single subseed by Seed ID for default or specified wallet" opt.quiet = True sf = get_seed_file([wallet] if wallet else [],1) from mmgen.seed import SeedSource ret = SeedSource(sf).seed.subseed_by_seed_id(seed_id,last_idx) return ret.ss_idx if ret else None
def list_subseeds(self, subseed_idx_range: str, wallet=''): "list a range of subseed Seed IDs for default or specified wallet" opt.quiet = True sf = get_seed_file([wallet] if wallet else [], 1) from mmgen.seed import SeedSource return SeedSource(sf).seed.subseeds.format( *SubSeedIdxRange(subseed_idx_range))
def hex2mn(self, hexstr: 'sstr', fmt: mn_opts_disp = dfl_mnemonic_fmt): "convert a 16, 24 or 32-byte hexadecimal number to a mnemonic seed phrase" opt.out_fmt = self._get_mnemonic_fmt(fmt) from mmgen.seed import SeedSource s = SeedSource(seed_bin=bytes.fromhex(hexstr)) s._format() return ' '.join(s.ssdata.mnemonic)
def setup(): remove_wallet_dir() gen_key(no_unmount=True) from mmgen.seed import SeedSource opt.hidden_incog_input_params = None opt.quiet = True opt.in_fmt = 'words' ss_in = SeedSource() opt.out_fmt = 'mmdat' opt.usr_randchars = 0 opt.hash_preset = '1' opt.set_by_user = ['hash_preset'] opt.passwd_file = os.path.join(tx_dir, key_fn) from mmgen.obj import MMGenWalletLabel opt.label = MMGenWalletLabel('Autosign Wallet') ss_out = SeedSource(ss=ss_in) ss_out.write_to_file(desc='autosign wallet', outdir=wallet_dir)
def mn2hex(self, seed_mnemonic: 'sstr', fmt: mn_opts_disp = dfl_mnemonic_fmt): "convert a 12, 18 or 24-word mnemonic seed phrase to a hexadecimal number" in_fmt = self._get_mnemonic_fmt(fmt) opt.quiet = True from mmgen.seed import SeedSource return SeedSource(in_data=seed_mnemonic, in_fmt=in_fmt).seed.hexdata
def Gen_addr(addr,wallet='',target='addr'): addr = MMGenID(addr) sf = get_seed_file([wallet] if wallet else [],1) opt.quiet = True from mmgen.seed import SeedSource ss = SeedSource(sf) if ss.seed.sid != addr.sid: m = 'Seed ID of requested address ({}) does not match wallet ({})' die(1,m.format(addr.sid,ss.seed.sid)) al = AddrList(seed=ss.seed,addr_idxs=AddrIdxList(str(addr.idx)),mmtype=addr.mmtype,do_chksum=False) d = al.data[0] Msg(d.sec.wif if target=='wif' else d.addr)
def gen_addr(self,mmgen_addr:str,wallet='',target='addr'): "generate a single MMGen address from default or specified wallet" addr = MMGenID(mmgen_addr) opt.quiet = True sf = get_seed_file([wallet] if wallet else [],1) from mmgen.seed import SeedSource ss = SeedSource(sf) if ss.seed.sid != addr.sid: m = 'Seed ID of requested address ({}) does not match wallet ({})' die(1,m.format(addr.sid,ss.seed.sid)) al = AddrList(seed=ss.seed,addr_idxs=AddrIdxList(str(addr.idx)),mmtype=addr.mmtype) d = al.data[0] ret = d.sec.wif if target=='wif' else d.addr return ret
def decrypt_wallets(): opt.hash_preset = '1' opt.set_by_user = ['hash_preset'] opt.passwd_file = os.path.join(tx_dir, key_fn) # opt.passwd_file = '/tmp/key' from mmgen.seed import SeedSource msg("Unlocking wallet{} with key from '{}'".format(suf(wfs), opt.passwd_file)) fails = 0 for wf in wfs: try: SeedSource(wf) except SystemExit as e: if e.code != 0: fails += 1 return False if fails else True
errmsg = "'{}': invalid parameter for --type option".format(opt.type) addr_type = MAT(opt.type or g.proto.dfl_mmtype, errmsg=errmsg) if len(cmd_args) < 1: opts.usage() if opt.use_internal_ed25519_mod: msg('Using (slow) internal ed25519 module by user request') idxs = AddrIdxList(fmt_str=cmd_args.pop()) sf = get_seed_file(cmd_args, 1) do_license_msg() ss = SeedSource(sf) i = (gen_what == 'addresses') or bool(opt.no_addresses) * 2 al = (KeyAddrList, AddrList, KeyList)[i](seed=ss.seed, addr_idxs=idxs, mmtype=addr_type) al.format() if al.gen_addrs and opt.print_checksum: Die(0, al.checksum) if al.gen_keys and keypress_confirm('Encrypt key list?'): al.encrypt() al.write_to_file(binary=True, desc='encrypted ' + al.file_desc) else: al.write_to_file()
cmd_args = opts.init(opts_data, opt_filter=opt_filter) if opt.label: opt.label = MMGenWalletLabel(opt.label, msg="Error in option '--label'") sf = get_seed_file(cmd_args, nargs, invoked_as=invoked_as) if not invoked_as == 'chk': do_license_msg() if invoked_as in ('conv', 'passchg'): m1 = green('Processing input wallet') m2 = yellow(' (default wallet)' ) if sf and os.path.dirname(sf) == g.data_dir else '' msg(m1 + m2) ss_in = None if invoked_as == 'gen' else SeedSource( sf, passchg=(invoked_as == 'passchg')) if invoked_as == 'chk': lbl = ss_in.ssdata.label.hl() if hasattr(ss_in.ssdata, 'label') else 'NONE' vmsg('Wallet label: {}'.format(lbl)) # TODO: display creation date sys.exit(0) if invoked_as in ('conv', 'passchg'): gmsg('Processing output wallet') ss_out = SeedSource(ss=ss_in, passchg=invoked_as == 'passchg') if invoked_as == 'gen': qmsg("This wallet's Seed ID: {}".format(ss_out.seed.sid.hl())) if invoked_as == 'passchg':
if invoked_as == 'subgen': from mmgen.obj import SubSeedIdx ss_idx = SubSeedIdx(cmd_args.pop()) sf = get_seed_file(cmd_args, nargs, invoked_as=invoked_as) if not invoked_as == 'chk': do_license_msg() if invoked_as in ('conv', 'passchg', 'subgen'): m1 = green('Processing input wallet') m2 = yellow(' (default wallet)' ) if sf and os.path.dirname(sf) == g.data_dir else '' msg(m1 + m2) ss_in = None if invoked_as == 'gen' else SeedSource( sf, passchg=(invoked_as == 'passchg')) if invoked_as == 'chk': lbl = ss_in.ssdata.label.hl() if hasattr(ss_in.ssdata, 'label') else 'NONE' vmsg('Wallet label: {}'.format(lbl)) # TODO: display creation date sys.exit(0) if invoked_as in ('conv', 'passchg', 'subgen'): gmsg('Processing output wallet') if invoked_as == 'subgen': ss_out = SeedSource(seed=ss_in.seed.subseed(ss_idx, print_msg=True).data) else: ss_out = SeedSource(ss=ss_in, passchg=invoked_as == 'passchg')
def get_subseed(self,subseed_idx:str,wallet=''): "get the Seed ID of a single subseed by Subseed Index for default or specified wallet" opt.quiet = True sf = get_seed_file([wallet] if wallet else [],1) from mmgen.seed import SeedSource return SeedSource(sf).seed.subseed(subseed_idx).sid
def mn2hex(self,seed_mnemonic:'sstr',wordlist=dfl_wl_id): "convert a 12, 18 or 24-word mnemonic to a hexadecimal number" opt.quiet = True from mmgen.seed import SeedSource return SeedSource(in_data=seed_mnemonic,in_fmt='words').seed.hexdata