示例#1
0
def decrypt_and_parse_lines(fd, parser, config,
                            newlines=False, decode='utf-8',
                            passphrase=None, gpgi=None,
                            _raise=IOError, error_cb=None):
    import mailpile.crypto.streamer as cstrm
    symmetric_key = config and config.get_master_key() or 'missing'
    passphrase_reader = (passphrase.get_reader()
                         if (passphrase is not None) else
                         (config.passphrases['DEFAULT'].get_reader()
                          if (config is not None) else None))

    if not newlines:
        if decode:
            _parser = lambda ll: parser((l.rstrip('\r\n').decode(decode)
                                         for l in ll))
        else:
            _parser = lambda ll: parser((l.rstrip('\r\n') for l in ll))
    elif decode:
        _parser = lambda ll: parser((l.decode(decode) for l in ll))
    else:
        _parser = parser

    for line in fd:
        if cstrm.PartialDecryptingStreamer.StartEncrypted(line):
            with cstrm.PartialDecryptingStreamer(
                    [line], fd,
                    name='decrypt_and_parse',
                    mep_key=symmetric_key,
                    gpg_pass=passphrase_reader,
                    gpgi=gpgi) as pdsfd:
                _parser(pdsfd)
                if not pdsfd.verify(_raise=_raise) and error_cb:
                    error_cb(fd.tell())
        else:
            _parser([line])
示例#2
0
def decrypt_and_parse_lines(fd,
                            parser,
                            config,
                            newlines=False,
                            decode='utf-8',
                            _raise=IOError):
    import mailpile.crypto.streamer as cstrm
    symmetric_key = config and config.master_key or 'missing'

    if not newlines:
        if decode:
            _parser = lambda ll: parser(
                (l.rstrip('\r\n').decode(decode) for l in ll))
        else:
            _parser = lambda ll: parser((l.rstrip('\r\n') for l in ll))
    elif decode:
        _parser = lambda ll: parser((l.decode(decode) for l in ll))
    else:
        _parser = parser

    for line in fd:
        if cstrm.PartialDecryptingStreamer.StartEncrypted(line):
            with cstrm.PartialDecryptingStreamer(
                [line],
                    fd,
                    name='decrypt_and_parse',
                    mep_key=symmetric_key,
                    gpg_pass=(config.gnupg_passphrase.get_reader()
                              if config else None)) as pdsfd:
                _parser(pdsfd)
                pdsfd.verify(_raise=_raise)
        else:
            _parser([line])
示例#3
0
def decrypt_and_parse_lines(fd,
                            parser,
                            config,
                            newlines=False,
                            decode='utf-8'):
    import mailpile.crypto.streamer as cstrm
    begin_sym = cstrm.PartialDecryptingStreamer.BEGIN_MED[:-1]
    begin_pgp = cstrm.PartialDecryptingStreamer.BEGIN_PGP[:-1]
    symmetric_key = config and config.prefs.obfuscate_index or 'missing'

    if not newlines:
        if decode:
            _parser = lambda ll: parser(
                (l.rstrip('\r\n').decode(decode) for l in ll))
        else:
            _parser = lambda ll: parser((l.rstrip('\r\n') for l in ll))
    elif decode:
        _parser = lambda ll: parser((l.decode(decode) for l in ll))
    else:
        _parser = parser

    for line in fd:
        if cstrm.PartialDecryptingStreamer.StartEncrypted(line):
            with cstrm.PartialDecryptingStreamer([line], symmetric_key,
                                                 fd) as pdsfd:
                _parser(pdsfd)
        else:
            _parser([line])