import binascii
from zope.interface import implements
from lbrynet.cryptstream.CryptBlob import StreamBlobDecryptor
from lbrynet.interfaces import IBlobHandler


class CryptBlobHandler(object):
    implements(IBlobHandler)

    def __init__(self, key, write_func):
        self.key = key
        self.write_func = write_func

    ######## IBlobHandler #########

    def handle_blob(self, blob, blob_info):
        blob_decryptor = StreamBlobDecryptor(blob, self.key, binascii.unhexlify(blob_info.iv), blob_info.length)
        d = blob_decryptor.decrypt(self.write_func)
        return d