forked from LBRYCommunity/lbry-sdk
71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
"""Encrypt a single file using the given key and iv"""
|
|
import argparse
|
|
import binascii
|
|
import logging
|
|
import os
|
|
import StringIO
|
|
import sys
|
|
|
|
from twisted.internet import defer
|
|
from twisted.internet import reactor
|
|
|
|
from lbrynet import conf
|
|
from lbrynet.cryptstream import CryptBlob
|
|
from lbrynet.core import HashBlob
|
|
from lbrynet.core import log_support
|
|
from lbrynet.core import cryptoutils
|
|
|
|
|
|
log = logging.getLogger('decrypt_blob')
|
|
|
|
|
|
def main():
|
|
conf.initialize_settings()
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('filename')
|
|
parser.add_argument('hex_key')
|
|
parser.add_argument('hex_iv')
|
|
args = parser.parse_args()
|
|
log_support.configure_console(level='DEBUG')
|
|
|
|
d = run(args)
|
|
reactor.run()
|
|
|
|
|
|
@defer.inlineCallbacks
|
|
def run(args):
|
|
try:
|
|
yield encrypt_blob(args.filename, args.hex_key, args.hex_iv)
|
|
except Exception:
|
|
log.exception('Failed to encrypt blob')
|
|
finally:
|
|
reactor.callLater(0, reactor.stop)
|
|
|
|
|
|
def encrypt_blob(filename, key, iv):
|
|
blob = Blob()
|
|
blob_maker = CryptBlob.CryptStreamBlobMaker(
|
|
binascii.unhexlify(key), binascii.unhexlify(iv), 0, blob)
|
|
with open(filename) as fin:
|
|
blob_maker.write(fin.read())
|
|
blob_maker.close()
|
|
|
|
|
|
class Blob(object):
|
|
def __init__(self):
|
|
self.data = StringIO.StringIO()
|
|
|
|
def write(self, data):
|
|
self.data.write(data)
|
|
|
|
def close(self):
|
|
hashsum = cryptoutils.get_lbry_hash_obj()
|
|
buffer = self.data.getvalue()
|
|
hashsum.update(buffer)
|
|
with open(hashsum.hexdigest(), 'w') as fout:
|
|
fout.write(buffer)
|
|
return defer.succeed(True)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|