Skip to content

Commit ebfa15c

Browse files
committed
add tests for seed regen
1 parent 7f674e5 commit ebfa15c

1 file changed

Lines changed: 25 additions & 7 deletions

File tree

tests/tests.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,17 +1026,17 @@ def test_open_save(self):
10261026
filenames_in, filenames_out, passwords, transformed_keys,
10271027
keyfiles, encryption_algorithms, kdf_algorithms, versions
10281028
):
1029-
kp = PyKeePass(
1029+
old_kp = PyKeePass(
10301030
filename_in,
10311031
password,
10321032
None if keyfile is None else os.path.join(base_dir, keyfile),
10331033
transformed_key=transformed_key
10341034
)
1035-
self.assertEqual(kp.encryption_algorithm, encryption_algorithm)
1036-
self.assertEqual(kp.kdf_algorithm, kdf_algorithm)
1037-
self.assertEqual(kp.version, version)
1035+
self.assertEqual(old_kp.encryption_algorithm, encryption_algorithm)
1036+
self.assertEqual(old_kp.kdf_algorithm, kdf_algorithm)
1037+
self.assertEqual(old_kp.version, version)
10381038

1039-
kp.save(
1039+
old_kp.save(
10401040
filename_out,
10411041
transformed_key=transformed_key
10421042
)
@@ -1045,18 +1045,36 @@ def test_open_save(self):
10451045
# rewind so PyKeePass can read from the same stream
10461046
filename_out.seek(0)
10471047

1048-
kp = PyKeePass(
1048+
new_kp = PyKeePass(
10491049
filename_out,
10501050
password,
10511051
None if keyfile is None else os.path.join(base_dir, keyfile),
10521052
transformed_key=transformed_key
10531053
)
10541054

1055+
def regen_test(old_kp, new_kp, attr):
1056+
# import recursive getattr
1057+
from operator import attrgetter
1058+
self.assertNotEqual(
1059+
attrgetter(attr)(old_kp),
1060+
attrgetter(attr)(new_kp),
1061+
"regen test failed for {} on file {}".format(attr, old_kp.filename)
1062+
)
1063+
1064+
# verify that various seeds have been regenerated after saving
1065+
regen_test(old_kp, new_kp, 'kdbx.header.value.dynamic_header.master_seed.data')
1066+
regen_test(old_kp, new_kp, 'kdbx.header.value.dynamic_header.encryption_iv.data')
1067+
if new_kp.version == (3, 0):
1068+
regen_test(old_kp, new_kp, 'kdbx.header.value.dynamic_header.protected_stream_key.data')
1069+
regen_test(old_kp, new_kp, 'kdbx.header.value.dynamic_header.old_start_bytes.data')
1070+
if new_kp.version == (4, 1):
1071+
regen_test(old_kp, new_kp, 'kdbx.body.payload.inner_header.protected_stream_key.data')
1072+
1073+
# remove old files
10551074
for filename in os.listdir(base_dir):
10561075
if filename.endswith('.out'):
10571076
os.remove(os.path.join(base_dir, filename))
10581077

1059-
10601078
def test_credentials_error(self):
10611079

10621080
databases = [

0 commit comments

Comments
 (0)