|
|
|
#!env python3
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
p≡p command line version 1.0
|
|
|
|
Copyleft 2016, p≡p foundation
|
|
|
|
written by Volker Birk
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
from pEp import *
|
|
|
|
import argparse
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser(
|
|
|
|
description='provide p≡p functionality on the command line',
|
|
|
|
epilog='Copyleft 2016, p≡p foundation. All lefts reserved.'
|
|
|
|
)
|
|
|
|
|
|
|
|
parser.add_argument('--encrypt', '-e', help='encrypt p≡p message',
|
|
|
|
action='store_true', dest='encrypt')
|
|
|
|
parser.add_argument('--decrypt', '-d', help='decrypt p≡p message',
|
|
|
|
action='store_true', dest='decrypt')
|
|
|
|
parser.add_argument('--version', '-V', help='show program version',
|
|
|
|
action='store_true', dest='version')
|
|
|
|
parser.add_argument('files', metavar='FILE', nargs='*',
|
|
|
|
help='FILE with MIME text')
|
|
|
|
|
|
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
if not(args.encrypt) and not(args.decrypt) and not(args.version):
|
|
|
|
print('use either --encrypt or --decrypt', file=sys.stderr)
|
|
|
|
sys.exit(2)
|
|
|
|
|
|
|
|
if args.version:
|
|
|
|
print(__doc__)
|
|
|
|
|
|
|
|
def crlf(line):
|
|
|
|
if line[-2:] == '\r\n':
|
|
|
|
return line
|
|
|
|
elif line[-1:] == '\n':
|
|
|
|
return line[:-1] + '\r\n'
|
|
|
|
else:
|
|
|
|
return line + '\r\n'
|
|
|
|
|
|
|
|
try:
|
|
|
|
if len(args.files) == 0:
|
|
|
|
args.files = ['-']
|
|
|
|
|
|
|
|
for filename in args.files:
|
|
|
|
text = ''
|
|
|
|
if filename == '-':
|
|
|
|
for line in sys.stdin.readlines():
|
|
|
|
text += line
|
|
|
|
else:
|
|
|
|
with open(filename, "r") as f:
|
|
|
|
for line in f:
|
|
|
|
text += line
|
|
|
|
|
|
|
|
src = Message(text)
|
|
|
|
|
|
|
|
if args.encrypt:
|
|
|
|
src.dir = 1
|
|
|
|
dst = src.encrypt()
|
|
|
|
else:
|
|
|
|
src.dir = 0
|
|
|
|
dst, keys, rating, consumed, flags = src.decrypt()
|
|
|
|
|
|
|
|
print(str(dst))
|
|
|
|
|
|
|
|
except KeyboardInterrupt:
|
|
|
|
print('\n', file=sys.stderr)
|
|
|
|
sys.exit(1)
|
|
|
|
|