aboutsummaryrefslogtreecommitdiff
path: root/lc4.py
diff options
context:
space:
mode:
Diffstat (limited to 'lc4.py')
-rw-r--r--lc4.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/lc4.py b/lc4.py
index 03043a4..fea2f7a 100644
--- a/lc4.py
+++ b/lc4.py
@@ -54,8 +54,10 @@ import argparse
version = "v2.8.1 (2018-07-24)"
# define alphabet
-letters6 = "#_23456789abcdefghijklmnopqrstuvwxyz"
-letters7 = "_abcdefghijklmnopqrstuvwxyz.0123456789,-+*/:?!'()"
+letters6 = "#_23456789abcdefghijklmnopqrstuvwxyz"
+letters6card = "#abcdefghijklmnopqrstuvwxyz_23456789"
+letters7 = "_abcdefghijklmnopqrstuvwxyz.0123456789,-+*/:?!'()"
+letters7card = "0abcdefghijklmnopqrstuvwxyz_.,-+*/:?!'()123456789"
def missing_letters(s,t):
@@ -149,9 +151,11 @@ def rotate_marker_down(m, col, n):
return ((m[0] + n) % size, m[1])
-def derive_key(password):
+def derive_key(password, one_indexed):
i = 0
k = letters
+ # if using one-indexed arrays, moves the zero element to the end
+ if one_indexed: k = k[1:]+k[0]
for c in password:
(row, col) = find_ix(c)
k = rotate_down(rotate_right(k, i, col), i, row)
@@ -293,7 +297,7 @@ def test1(size, fixednonce):
else:
keyword = 's3cret_p4ssw0rd/31337'
szkeyword = keyword # This statement needed to show keyword in printinfo() [don't change args.keywordstring within test1()!]
- key = derive_key(keyword)
+ key = derive_key(keyword, false)
else:
key = letters
initialkey = key
@@ -333,6 +337,8 @@ if __name__ == '__main__':
mgroup1.add_argument("-6", "--lc4", help="use ElsieFour cipher (6x6 table) (default)", action="store_true")
mgroup1.add_argument("-7", "--ls47", help="use LS47 cipher (7x7 table)", action="store_true")
+ parser.add_argument("-pc", "--playingcard", help="Use the \"playing card\" character tables (default: standard tables)", action="store_true")
+
mgroup2 = parser.add_mutually_exclusive_group()
mgroup2.add_argument("-ks", "--keystring", metavar="STRING", help="use STRING as key")
mgroup2.add_argument("-kf", "--keyfile", metavar="FILE", help="read key from FILE")
@@ -375,10 +381,16 @@ if __name__ == '__main__':
if args.ls47:
size = 7
- letters = letters7
+ if args.playingcard:
+ letters = letters7card
+ else:
+ letters = letters7
else:
size = 6
- letters = letters6
+ if args.playingcard:
+ letters = letters6card
+ else:
+ letters = letters6
tiles = list(zip(letters, [(x // size, x % size) for x in range(size * size)]))
@@ -423,7 +435,7 @@ if __name__ == '__main__':
if args.keywordfile: args.keywordstring = open(args.keywordfile, 'r').read().rstrip('\r\n')
if args.keywordstring:
szkeyword = args.keywordstring
- key = derive_key(args.keywordstring)
+ key = derive_key(args.keywordstring, args.playingcard)
if args.keyfile: args.keystring = open(args.keyfile, 'r').read().rstrip('\r\n')
if args.keystring: key = args.keystring;