Exemple #1
0
def encrypt_payload( payload, gpg_to_cmdline, check_nested = True ):

	raw_payload = payload.get_payload(decode=True)
	if check_nested and "-----BEGIN PGP MESSAGE-----" in raw_payload and "-----END PGP MESSAGE-----" in raw_payload:
		if verbose:
			log("Message is already pgp encrypted. No nested encryption needed.")
		return payload

	# No check is needed for cfg['gpg']['keyhome'] as this is already done in method gpg_encrypt
	gpg = GnuPG.GPGEncryptor( cfg['gpg']['keyhome'], gpg_to_cmdline, payload.get_content_charset() )
	gpg.update( raw_payload )
	encrypted_data, returncode = gpg.encrypt()
	if verbose:
		log("Return code from encryption=%d (0 indicates success)." % returncode)
	if returncode != 0:
		log("Encrytion failed with return code %d. Encryption aborted." % returncode)
		return payload

	payload.set_payload( encrypted_data )
	isAttachment = payload.get_param( 'attachment', None, 'Content-Disposition' ) is not None

	if isAttachment:
		filename = payload.get_filename()
		if filename:
			pgpFilename = filename + ".pgp"
			if not (payload.get('Content-Disposition') is None):
				payload.set_param( 'filename', pgpFilename, 'Content-Disposition' )
			if not (payload.get('Content-Type') is None) and not (payload.get_param( 'name' ) is None):
				payload.set_param( 'name', pgpFilename )
	if not (payload.get('Content-Transfer-Encoding') is None):
		payload.replace_header( 'Content-Transfer-Encoding', "7bit" )

	return payload
def encrypt_payload(payload, gpg_to_cmdline):
    raw_payload = payload.get_payload(decode=True)
    if "-----BEGIN PGP MESSAGE-----" in raw_payload and "-----END PGP MESSAGE-----" in raw_payload:
        return payload
    gpg = GnuPG.GPGEncryptor(cfg['gpg']['keyhome'], gpg_to_cmdline,
                             payload.get_content_charset())
    gpg.update(raw_payload)
    payload.set_payload(gpg.encrypt())

    isAttachment = payload.get_param('attachment', None,
                                     'Content-Disposition') is not None

    if isAttachment:
        filename = payload.get_filename()

        if filename:
            pgpFilename = filename + ".pgp"

            if payload.get('Content-Disposition') is not None:
                payload.set_param('filename', pgpFilename,
                                  'Content-Disposition')
            if payload.get('Content-Type') is not None:
                if payload.get_param('name') is not None:
                    payload.set_param('name', pgpFilename)

    if payload.get('Content-Transfer-Encoding') is not None:
        payload.replace_header('Content-Transfer-Encoding', "7bit")

    return payload
Exemple #3
0
def encrypt_payload( payload, gpg_to_cmdline ):
	raw_payload = payload.get_payload(decode=True)
	if "-----BEGIN PGP MESSAGE-----" in raw_payload and "-----END PGP MESSAGE-----" in raw_payload:
		return payload
	gpg = GnuPG.GPGEncryptor( cfg['gpg']['keyhome'], gpg_to_cmdline, payload.get_content_charset() )
	gpg.update( raw_payload )
	payload.set_payload( gpg.encrypt() )
	if payload['Content-Disposition']:
		payload.replace_header( 'Content-Disposition', re.sub(r'filename="([^"]+)"', r'filename="\1.pgp"', payload['Content-Disposition']) )
	if payload['Content-Type']:
		payload.replace_header( 'Content-Type', re.sub(r'name="([^"]+)"', r'name="\1.pgp"', payload['Content-Type']) )
		if 'name="' in payload['Content-Type']:
			payload.replace_header( 'Content-Type', re.sub(r'^[a-z/]+;', r'application/octet-stream;', payload['Content-Type']) )
			payload.set_payload( "\n".join( filter( lambda x:re.search(r'^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$',x), payload.get_payload().split("\n") ) ) )
	return payload
Exemple #4
0
if ungpg_to != list():
    send_msg(raw_message, ungpg_to)

if raw_message.is_multipart():
    payload = list()
    for part in raw_message.get_payload():
        if part.get_content_type() == "text/plain":
            payload.append(part)
    raw_message.set_payload(payload)

if cfg.has_key('logging') and cfg['logging'].has_key('file'):
    log = open(cfg['logging']['file'], 'a')
    log.write("Encrypting email to: %s\n" %
              ' '.join(map(lambda x: x[0], gpg_to)))
    log.close()

if cfg['default'].has_key(
        'add_header') and cfg['default']['add_header'] == 'yes':
    raw_message['X-GPG-Mailgate'] = 'Encrypted by GPG Mailgate'

gpg_to_cmdline = list()
gpg_to_smtp = list()
for rcpt in gpg_to:
    gpg_to_smtp.append(rcpt[0])
    gpg_to_cmdline.extend(rcpt[1].split(','))

gpg = GnuPG.GPGEncryptor(cfg['gpg']['keyhome'], gpg_to_cmdline)
gpg.update(get_msg(raw_message))
raw_message.set_payload(gpg.encrypt())
send_msg(raw_message, gpg_to_smtp)