crypto.py:mmgen_{en,de}crypt(): whitespace, cleanups
This commit is contained in:
parent
ad569cbeb7
commit
748bf68c15
8 changed files with 31 additions and 25 deletions
|
|
@ -55,10 +55,12 @@ class AddrFile(MMGenObject):
|
|||
self.parent = parent
|
||||
self.infile = None
|
||||
|
||||
def encrypt(self,desc='new key list'):
|
||||
def encrypt(self):
|
||||
from .crypto import mmgen_encrypt,mmenc_ext
|
||||
from .globalvars import g
|
||||
self.fmt_data = mmgen_encrypt(self.fmt_data.encode(),desc,'')
|
||||
self.fmt_data = mmgen_encrypt(
|
||||
data = self.fmt_data.encode(),
|
||||
desc = f'new {self.parent.desc} list' )
|
||||
self.ext += f'.{mmenc_ext}'
|
||||
|
||||
@property
|
||||
|
|
|
|||
|
|
@ -261,36 +261,38 @@ def get_passphrase(desc,passchg=False):
|
|||
else:
|
||||
return ' '.join(get_words_from_user(f'Enter {pw_desc}: '))
|
||||
|
||||
_salt_len,_sha256_len,_nonce_len = (32,32,32)
|
||||
mmenc_salt_len = 32
|
||||
mmenc_nonce_len = 32
|
||||
|
||||
def mmgen_encrypt(data,desc='data',hash_preset=''):
|
||||
salt = get_random(_salt_len)
|
||||
salt = get_random(mmenc_salt_len)
|
||||
iv = get_random(g.aesctr_iv_len)
|
||||
nonce = get_random(_nonce_len)
|
||||
nonce = get_random(mmenc_nonce_len)
|
||||
hp = hash_preset or opt.hash_preset or get_hash_preset_from_user('3',desc)
|
||||
m = ('user-requested','default')[hp=='3']
|
||||
vmsg(f'Encrypting {desc}')
|
||||
qmsg(f'Using {m} hash preset of {hp!r}')
|
||||
passwd = get_new_passphrase(desc)
|
||||
key = make_key(passwd,salt,hp)
|
||||
enc_d = encrypt_data(sha256(nonce+data).digest() + nonce + data, key, iv, desc=desc)
|
||||
enc_d = encrypt_data( sha256(nonce+data).digest() + nonce + data, key, iv, desc=desc )
|
||||
return salt+iv+enc_d
|
||||
|
||||
def mmgen_decrypt(data,desc='data',hash_preset=''):
|
||||
vmsg(f'Preparing to decrypt {desc}')
|
||||
dstart = _salt_len + g.aesctr_iv_len
|
||||
salt = data[:_salt_len]
|
||||
iv = data[_salt_len:dstart]
|
||||
dstart = mmenc_salt_len + g.aesctr_iv_len
|
||||
salt = data[:mmenc_salt_len]
|
||||
iv = data[mmenc_salt_len:dstart]
|
||||
enc_d = data[dstart:]
|
||||
hp = hash_preset or opt.hash_preset or get_hash_preset_from_user('3',desc)
|
||||
m = ('user-requested','default')[hp=='3']
|
||||
qmsg(f'Using {m} hash preset of {hp!r}')
|
||||
passwd = get_passphrase(desc)
|
||||
key = make_key(passwd,salt,hp)
|
||||
dec_d = decrypt_data(enc_d,key,iv,desc)
|
||||
if dec_d[:_sha256_len] == sha256(dec_d[_sha256_len:]).digest():
|
||||
dec_d = decrypt_data( enc_d, key, iv, desc )
|
||||
sha256_len = 32
|
||||
if dec_d[:sha256_len] == sha256(dec_d[sha256_len:]).digest():
|
||||
vmsg('OK')
|
||||
return dec_d[_sha256_len+_nonce_len:]
|
||||
return dec_d[sha256_len+mmenc_nonce_len:]
|
||||
else:
|
||||
msg('Incorrect passphrase or hash preset')
|
||||
return False
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ af = al.get_file()
|
|||
af.format()
|
||||
|
||||
if keypress_confirm('Encrypt password list?'):
|
||||
af.encrypt(desc='password list')
|
||||
af.encrypt()
|
||||
af.write(binary=True,desc='encrypted password list')
|
||||
else:
|
||||
if g.test_suite_popen_spawn and g.platform == 'win':
|
||||
|
|
|
|||
|
|
@ -731,7 +731,7 @@ class MMGenToolCmdFileCrypt(MMGenToolCmds):
|
|||
"encrypt a file"
|
||||
data = get_data_from_file(infile,'data for encryption',binary=True)
|
||||
from .crypto import mmgen_encrypt,mmenc_ext
|
||||
enc_d = mmgen_encrypt(data,'user data',hash_preset)
|
||||
enc_d = mmgen_encrypt(data,'data',hash_preset)
|
||||
if not outfile:
|
||||
outfile = f'{os.path.basename(infile)}.{mmenc_ext}'
|
||||
write_data_to_file(outfile,enc_d,'encrypted data',binary=True)
|
||||
|
|
@ -742,7 +742,7 @@ class MMGenToolCmdFileCrypt(MMGenToolCmds):
|
|||
enc_d = get_data_from_file(infile,'encrypted data',binary=True)
|
||||
from .crypto import mmgen_decrypt,mmenc_ext
|
||||
while True:
|
||||
dec_d = mmgen_decrypt(enc_d,'user data',hash_preset)
|
||||
dec_d = mmgen_decrypt(enc_d,'data',hash_preset)
|
||||
if dec_d: break
|
||||
msg('Trying again...')
|
||||
if not outfile:
|
||||
|
|
|
|||
|
|
@ -25,16 +25,18 @@ from mmgen.crypto import get_passphrase,get_new_passphrase,get_hash_preset_from_
|
|||
from mmgen.wallet import Wallet
|
||||
|
||||
def crypto():
|
||||
pw = get_new_passphrase(desc='test script')
|
||||
desc = 'test data'
|
||||
|
||||
pw = get_new_passphrase(desc=desc)
|
||||
msg(f'==> got new passphrase: [{pw}]\n')
|
||||
|
||||
pw = get_passphrase(desc='test script')
|
||||
pw = get_passphrase(desc=desc)
|
||||
msg(f'==> got passphrase: [{pw}]\n')
|
||||
|
||||
hp = get_hash_preset_from_user(desc='test script')
|
||||
hp = get_hash_preset_from_user(desc=desc)
|
||||
msg(f'==> got hash preset: [{hp}]')
|
||||
|
||||
hp = get_hash_preset_from_user(desc='test script')
|
||||
hp = get_hash_preset_from_user(desc=desc)
|
||||
msg(f'==> got hash preset: [{hp}]')
|
||||
|
||||
def seed():
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ class TestSuiteRef(TestSuiteBase,TestSuiteShared):
|
|||
t = self.spawn('mmgen-tool', ['-q','decrypt',f,'outfile='+dec_file,'hash_preset=1'])
|
||||
if not g.debug_utf8:
|
||||
restore_debug()
|
||||
t.passphrase('user data',tool_enc_passwd)
|
||||
t.passphrase('data',tool_enc_passwd)
|
||||
t.written_to_file('Decrypted data')
|
||||
dec_txt = read_from_file(dec_file)
|
||||
imsg_r(dec_txt)
|
||||
|
|
|
|||
|
|
@ -254,8 +254,8 @@ class TestSuiteShared(object):
|
|||
cmp_or_die(chk,chk_ref,desc='key-address list data checksum')
|
||||
t.expect('Encrypt key list? (y/N): ','y')
|
||||
t.usr_rand(self.usr_rand_chars)
|
||||
t.hash_preset('new key list','1')
|
||||
t.passphrase_new('new key list',self.kapasswd)
|
||||
t.hash_preset('new key-address list','1')
|
||||
t.passphrase_new('new key-address list',self.kapasswd)
|
||||
t.written_to_file('Encrypted secret keys',oo=True)
|
||||
return t
|
||||
|
||||
|
|
|
|||
|
|
@ -53,15 +53,15 @@ class TestSuiteTool(TestSuiteMain,TestSuiteBase):
|
|||
write_to_file(infile,getrand(1033),binary=True)
|
||||
t = self.spawn('mmgen-tool',['-d',self.tmpdir,self.usr_rand_arg,'encrypt',infile])
|
||||
t.usr_rand(self.usr_rand_chars)
|
||||
t.hash_preset('user data','1')
|
||||
t.passphrase_new('user data',tool_enc_passwd)
|
||||
t.hash_preset('data','1')
|
||||
t.passphrase_new('data',tool_enc_passwd)
|
||||
t.written_to_file('Encrypted data')
|
||||
return t
|
||||
|
||||
def tool_decrypt(self,f1):
|
||||
out_fn = 'tool_encrypt.out'
|
||||
t = self.spawn('mmgen-tool',['-d',self.tmpdir,'decrypt',f1,'outfile='+out_fn,'hash_preset=1'])
|
||||
t.passphrase('user data',tool_enc_passwd)
|
||||
t.passphrase('data',tool_enc_passwd)
|
||||
t.written_to_file('Decrypted data')
|
||||
d1 = self.read_from_tmpfile(self.enc_infn,binary=True)
|
||||
d2 = self.read_from_tmpfile(out_fn,binary=True)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue