diff options
Diffstat (limited to 'lc4.py')
| -rw-r--r-- | lc4.py | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -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; |
