crypto.py:mmgen_{en,de}crypt(): whitespace, cleanups

This commit is contained in:
The MMGen Project 2022-01-22 14:26:14 +00:00
commit 748bf68c15
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
8 changed files with 31 additions and 25 deletions

View file

@ -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

View file

@ -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

View file

@ -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':

View file

@ -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:

View file

@ -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():

View file

@ -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)

View file

@ -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

View file

@ -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)