mmgen-wallet/test/test_py_d/input.py

71 lines
1.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
#
# mmgen = Multi-Mode GENerator, command-line Bitcoin cold storage solution
# Copyright (C)2013-2020 The MMGen Project <mmgen@tuta.io>
#
# Project source code repository: https://github.com/mmgen/mmgen
# Licensed according to the terms of GPL Version 3. See LICENSE for details.
"""
input.py: Shared input routines for the test.py test suite
"""
import os,time
from .common import randbool
def stealth_mnemonic_entry(t,mne,mn,entry_mode,pad_entry=False):
def pad_mnemonic(mn,ss_len):
def get_pad_chars(n):
ret = ''
for i in range(n):
m = int.from_bytes(os.urandom(1),'big') % 32
ret += r'123579!@#$%^&*()_+-=[]{}"?/,.<>|'[m]
return ret
ret = []
for w in mn:
if entry_mode == 'short':
w = w[:ss_len]
if len(w) < ss_len:
npc = 3
w = w[0] + get_pad_chars(npc) + w[1:]
if pad_entry:
w += '%' * (1 + mne.em.pad_max - npc)
else:
w += '\n'
else:
w = get_pad_chars(1) + w[0] + get_pad_chars(1) + w[1:]
elif len(w) > (3,5)[ss_len==12]:
w = w + '\n'
else:
w = (
get_pad_chars(2 if randbool() and entry_mode != 'short' else 0)
+ w[0] + get_pad_chars(2) + w[1:]
+ get_pad_chars(9) )
w = w[:ss_len+1]
ret.append(w)
return ret
if entry_mode == 'fixed':
mn = ['bkr'] + mn[:5] + ['nfb'] + mn[5:]
ssl = mne.uniq_ss_len
mn = [w[:ssl] if len(w) >= ssl else (w[0] + 'z\b{}'.format('#'*(ssl-len(w))) + w[1:]) for w in mn]
elif entry_mode in ('full','short'):
mn = ['fzr'] + mn[:5] + ['grd','grdbxm'] + mn[5:]
mn = pad_mnemonic(mn,mne.em.ss_len)
mn[10] = '@#$%*##' + mn[10]
wnum = 1
p_ok,p_err = mne.word_prompt
for w in mn:
ret = t.expect((p_ok.format(wnum),p_err.format(wnum-1)))
if ret == 0:
wnum += 1
for j in range(len(w)):
t.send(w[j])
time.sleep(0.005)
def user_dieroll_entry(t,data):
for s in data:
t.expect(r'Enter die roll #.+: ',s,regex=True)
time.sleep(0.005)