|
|
|
@ -1,5 +1,10 @@
|
|
|
|
|
import random
|
|
|
|
|
|
|
|
|
|
PAD_MODULO = 3
|
|
|
|
|
DEFAULT_PAD_WIDTH = 72
|
|
|
|
|
CIPHER_FLOOR = 1
|
|
|
|
|
CIPHER_CEIL = 25
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def encode(msg, pad):
|
|
|
|
|
return msg
|
|
|
|
@ -9,27 +14,34 @@ def decode(msg, pad):
|
|
|
|
|
return msg
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_pad(length, width=72):
|
|
|
|
|
def create_pad(length, width=DEFAULT_PAD_WIDTH):
|
|
|
|
|
return '\n'.join(create_pad_lines(length, width=width))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_pad_lines(length, width=DEFAULT_PAD_WIDTH):
|
|
|
|
|
chars = _create_chars_for_pad(length)
|
|
|
|
|
lines = _chunk_chars_into_lines(chars, width=width)
|
|
|
|
|
return '\n\n\n'.join(lines)
|
|
|
|
|
for line in lines:
|
|
|
|
|
yield line
|
|
|
|
|
yield ''
|
|
|
|
|
yield ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _create_chars_for_pad(length):
|
|
|
|
|
chars = []
|
|
|
|
|
for char in range(length):
|
|
|
|
|
chars.append(_AS_ALPHA[random.randint(1, 25)])
|
|
|
|
|
chars.append(_AS_ALPHA[random.randint(CIPHER_FLOOR, CIPHER_CEIL)])
|
|
|
|
|
return ''.join(chars)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _chunk_chars_into_lines(chars, width=72):
|
|
|
|
|
def _chunk_chars_into_lines(chars, width=DEFAULT_PAD_WIDTH):
|
|
|
|
|
lines = []
|
|
|
|
|
for chunk in _as_line_chunks(chars, width=width):
|
|
|
|
|
lines.append(chunk)
|
|
|
|
|
return lines
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _as_line_chunks(chars, width=72):
|
|
|
|
|
def _as_line_chunks(chars, width=DEFAULT_PAD_WIDTH):
|
|
|
|
|
chunk = []
|
|
|
|
|
for char in chars:
|
|
|
|
|
chunk.append(char)
|
|
|
|
@ -57,11 +69,11 @@ def _get_textwidth(text):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _is_padline(lineno):
|
|
|
|
|
return not lineno % 3
|
|
|
|
|
return not lineno % PAD_MODULO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _is_txtline(lineno):
|
|
|
|
|
return (lineno % 2 and not lineno % 3)
|
|
|
|
|
return (lineno % 2 and not lineno % PAD_MODULO)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _is_cipherline(lineno):
|
|
|
|
@ -73,7 +85,7 @@ def _mk_as_alpha():
|
|
|
|
|
a_chr = ord('A')
|
|
|
|
|
past_j = False
|
|
|
|
|
|
|
|
|
|
for char in range(26):
|
|
|
|
|
for char in range(CIPHER_CEIL + 1):
|
|
|
|
|
letter = chr(a_chr + char)
|
|
|
|
|
if letter != 'J':
|
|
|
|
|
key = char + (1 if not past_j else 0)
|
|
|
|
|