4 from szyfrow
.cadenus
import *
5 from szyfrow
.support
.utilities
import *
8 assert make_cadenus_keycolumn()['a'] == 0
9 assert make_cadenus_keycolumn()['b'] == 1
10 assert make_cadenus_keycolumn()['c'] == 2
11 assert make_cadenus_keycolumn()['v'] == 21
12 assert make_cadenus_keycolumn()['w'] == 21
13 assert make_cadenus_keycolumn()['z'] == 24
14 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
15 reverse
=True)['a'] == 1
16 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
17 reverse
=True)['b'] == 0
18 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
19 reverse
=True)['c'] == 24
20 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
21 reverse
=True)['i'] == 18
22 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
23 reverse
=True)['j'] == 18
24 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
25 reverse
=True)['v'] == 6
26 assert make_cadenus_keycolumn(doubled_letters
='ij', start
='b',
27 reverse
=True)['z'] == 2
30 def test_encipher_message():
31 plaintext
= sanitise('''Whoever has made a voyage up the Hudson must
32 remember the Kaatskill mountains. They are a dismembered branch of
34 keycol
= make_cadenus_keycolumn(doubled_letters
='vw', start
='a', reverse
=True)
35 ciphertext
= cadenus_encipher(plaintext
, 'wink', keycol
)
36 expected
= 'antodeleeeuhrsidrbhmhdrrhnimefmthgeaetakseomehetyaasuvoyegrastmmuuaeenabbtpchehtarorikswosmvaleatned'
37 assert ciphertext
== expected
39 plaintext
= sanitise('''a severe limitation on the usefulness of the
40 cadenus is that every message must be a multiple of twenty-five
42 ciphertext
= cadenus_encipher(plaintext
, 'easy', keycol
)
43 expected
= 'systretomtattlusoatleeesfiyheasdfnmschbhneuvsnpmtofarenuseieeieltarlmentieetogevesitfaisltngeeuvowul'
44 assert ciphertext
== expected
47 def test_decipher_message():
48 plaintext
= sanitise('''Whoever has made a voyage up the Hudson must
49 remember the Kaatskill mountains. They are a dismembered branch of
51 keycol
= make_cadenus_keycolumn(doubled_letters
='vw', start
='a', reverse
=True)
52 for key
in ['wink', 'easy']:
53 enciphered
= cadenus_encipher(plaintext
, key
, keycol
)
54 deciphered
= cadenus_decipher(enciphered
, key
, keycol
)
55 assert deciphered
== plaintext
58 def test_cadenus_break():
59 plaintext
= sanitise('''It is a truth universally acknowledged, that a single man in
60 possession of a good fortune, must be in want of a wife. However
61 little known the feelings or views of such a man may be on his
62 first entering a neighbourhood, this truth is so well fixed in
63 the minds of the surrounding families, that he is considered the
64 rightful property of some one or other of their daughters.''')
65 expected_key
= 'swashbuckling'
66 expected_score
= Ptrigrams(plaintext
)
67 expected_keycol
= make_cadenus_keycolumn(doubled_letters
='vw', start
='a',
70 ciphertext
= cadenus_encipher(plaintext
, expected_key
, expected_keycol
)
72 # dictionary = ['clearinghouse', 'computerising', 'counterclaims',
73 # 'housewarmings', 'intravenously', 'liquefactions', 'somersaulting',
74 # 'sportsmanlike', 'swashbuckling']
76 dictionary
= ['swashbuckling']
78 (key
, keycol
), score
= cadenus_break(ciphertext
, words
=dictionary
,
81 assert key
== expected_key
82 assert keycol
== expected_keycol
83 assert score
== pytest
.approx(expected_score
)