python: Implement phogen encode

Implement phogen.encode() to encode Bhashes to phogen strings. This
commit also adds unit tests for the above function.
This commit is contained in:
2021-11-03 11:26:02 +01:00
parent 52935bc765
commit ea5abfe149
3 changed files with 52 additions and 3 deletions

View File

@ -0,0 +1,19 @@
from passgeny import bhash, phogen_map
def encode(bh: bhash.Bhash, ph_len: int):
"""
Consume the Bhash and return a string of length ph_len
This function generates a phonetic representation of the binary data in
Bhash.
"""
phogen = ''
ngram = ' '
for x in range(ph_len):
ngram_space = phogen_map.g_phonetic_map[ngram]
n = bh.modulo(len(ngram_space))
letter = ngram_space[n]
ngram = ngram[1:] + letter
phogen += letter
return phogen

View File

@ -9,8 +9,11 @@ test('test_phogen_map',
'PHOGEN_MAP_PY=@0@'.format(_phogen_map_py), 'PHOGEN_MAP_PY=@0@'.format(_phogen_map_py),
'PHOGEN_WORD_LIST=@0@'.format(_word_list)]) 'PHOGEN_WORD_LIST=@0@'.format(_word_list)])
test('test_bhash', test('test_bhash_py',
find_program('test_bhash.py'), find_program('test_bhash.py'),
env: ['SOURCE_ROOT=' + meson.project_source_root(), env: ['PYTHONPATH=' + PYTHONPATH])
'PYTHONPATH=' + PYTHONPATH])
test('test_phogen_py',
find_program('test_phogen.py'),
env: ['PYTHONPATH=' + PYTHONPATH])

27
tests/test_phogen.py Executable file
View File

@ -0,0 +1,27 @@
#!/usr/bin/env python3
import hashlib
from passgeny import phogen
from passgeny import bhash
PHO_GEN_TEST = [
[ b"passgeny", "herang xiasem zitend qibele" ],
[ b"phonetic", "lineum foneum zybale mangur" ],
[ b"generator", "latole elitab ackina exprou" ],
[ b"password", "nulize nomere fonici crednt" ],
[ b"duck", "catabb rompor cricin prunsi" ] ]
for pt in PHO_GEN_TEST:
bh = bhash.Bhash()
bh.from_bytes(hashlib.sha256(pt[0]).digest())
wa = []
for x in range(4):
wa.append(phogen.encode(bh, 6))
word = " ".join(wa)
if word != pt[1]:
raise Exception("Test failed: {} != {}".format(word, pt1))
print(word)