diff --git a/README.md b/README.md index fece0ef..abcac96 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,12 @@ PrivateBin CLI (in development) Installing ----- ```bash -$ virtualenv --python=python3 venv +$ virtualenv --python=python2.7 venv $ . venv/bin/activate $ pip install -r requirements.txt ``` + +Using +----- +Edit `self.server = 'http://paste.r4sas.i2p/'` in `pbincli/transports.py` to your server. +Run inside `venv` command `python pbincli.py send`. It will send string `Test!` to PrivateBin. diff --git a/pbincli.py b/pbincli.py index d5ea5ff..ee0fa27 100755 --- a/pbincli.py +++ b/pbincli.py @@ -20,7 +20,7 @@ def main(): send_parser.add_argument("-e", "--expire", default="1day", action="store", help="expiration of paste (default: 1day)") send_parser.add_argument("-f", "--format", default="plaintext", action="store", help="format of paste (default: plaintext)") send_parser.add_argument("-p", "--password", help="password for crypting paste") - send_parser.add_argument("filename", help="filename (example: image.jpg)") + #send_parser.add_argument("filename", help="filename (example: image.jpg)") send_parser.set_defaults(func=pbincli.actions.send) # parse arguments diff --git a/pbincli/actions.py b/pbincli/actions.py index d47a91b..fbcdb6f 100644 --- a/pbincli/actions.py +++ b/pbincli/actions.py @@ -12,24 +12,28 @@ from zlib import compress def send(args): """ Sub-command for sending paste """ - check_readable(args.filename) - with open(args.filename, "rb") as f: - contents = f.read() - file = b64encode(compress(contents)) + #check_readable(args.filename) + #with open(args.filename, "rb") as f: + # contents = f.read() + #file = b64encode(compress(contents)) + + data = b'Test!' passphrase = os.urandom(32) - print("Passphrase: {}".format(passphrase)) + #print("Passphrase: {}".format(passphrase)) if args.password: + #print("Password: {}".format(password)) p = SHA256.new() p.update(args.password.encode("UTF-8")) passphrase = passphrase + p.hexdigest().encode("UTF-8") - print("Password: {}".format(password)) - print(args.password) - '''data = SJCL().encrypt(file, password.decode("UTF-8"))''' - data = pbincli.sjcl_simple.encrypt(password, file) - request = {'data':json.dumps(data, ensure_ascii=False),'expire':args.expire,'formatter':args.format,'burnafterreading':int(args.burn),'opendiscussion':int(args.discus) + + #data = SJCL().encrypt(file, password.decode("UTF-8")) + """Sending text from 'data' string""" + #cipher = pbincli.sjcl_simple.encrypt(b64encode(passphrase), file) + cipher = pbincli.sjcl_simple.encrypt(b64encode(passphrase), data) + request = {'data':json.dumps(cipher, ensure_ascii=False),'expire':args.expire,'formatter':args.format,'burnafterreading':int(args.burn),'opendiscussion':int(args.discus) } print(request) - '''Here we must run function post from pbincli.transports''' - privatebin().post(request, passphrase) + '''Here we run function post from pbincli.transports''' + privatebin().post(request, b64encode(passphrase)) diff --git a/pbincli/sjcl_simple.py b/pbincli/sjcl_simple.py index 751ea1a..8d882c9 100644 --- a/pbincli/sjcl_simple.py +++ b/pbincli/sjcl_simple.py @@ -35,7 +35,7 @@ def decrypt(pwd, json): def encrypt(pwd, plaintext, mode='gcm', algorithm='aes', - keysize=256, tagsize=128, iters=256000): + keysize=256, tagsize=128, iters=10000): ts = tagsize / 8 mode_class = getattr(modes, mode.upper()) @@ -68,7 +68,6 @@ def encrypt(pwd, plaintext, mode='gcm', algorithm='aes', def _kdf(keysize=256, iters=256000, salt=None, **kwargs): kdf_salt = salt or os.urandom(8) - print("Salt: {}".format(kdf_salt)) kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=keysize / 8, salt=kdf_salt, diff --git a/pbincli/transports.py b/pbincli/transports.py index f54f77c..962e8bc 100644 --- a/pbincli/transports.py +++ b/pbincli/transports.py @@ -5,14 +5,15 @@ from pprint import pprint class privatebin(object): def __init__(self): - self.proxies = {'http': 'http://127.0.0.1:4444'} + #self.proxies = {'http': 'http://127.0.0.1:4444'} self.server = 'http://paste.r4sas.i2p/' self.headers = {'X-Requested-With': 'JSONHttpRequest'} def post(self, data, password): - r = requests.post(url=self.server, headers=self.headers, proxies=self.proxies, data=data) + #r = requests.post(url=self.server, headers=self.headers, proxies=self.proxies, data=data) + r = requests.post(url=self.server, headers=self.headers, data=data) print(r.text) result = json.loads(r.text) - '''{"status":0,"id":"aaabbb","url":"\/?aaabbb","deletetoken":"aaabbbccc"}''' + '''Standart response: {"status":0,"id":"aaabbb","url":"\/?aaabbb","deletetoken":"aaabbbccc"}''' if result['status'] == 0: print("Paste uploaded!\nPasteID:\t{}\nPassword:\t{}\nDelete token:\t{}\n".format(result['id'], password.decode("UTF-8"), result['deletetoken']))