Esempio n. 1
0
def _try_decode(s, charsets=('utf-8', 'koi8-r', 'cp1251')):
    for charset in charsets:
        try:
            return to_native(s, charset), charset
        except UnicodeDecodeError:
            pass
    return None, None
Esempio n. 2
0
def test_dkim():

    priv_key, pub_key = _generate_key(length=1024)

    DKIM_PARAMS = [
        dict(key=NativeStringIO(to_native(priv_key)),
             selector='_dkim',
             domain='somewhere1.net'),
        dict(key=priv_key, selector='_dkim', domain='somewhere2.net'),

        # legacy key argument name
        dict(privkey=priv_key, selector='_dkim', domain='somewhere3.net'),
    ]

    if is_py26:
        load_email_charsets()

    for dkimparams in DKIM_PARAMS:
        message = Message(**common_email_data())
        message.dkim(**dkimparams)
        # check DKIM header exist
        assert message.as_message()['DKIM-Signature']
        #print(__name__, "type message.as_string()==", type(message.as_string()))
        #print(message.as_string())
        #print(type(message.as_string()))
        #print(email.__file__)
        #print(email.charset.CHARSETS)
        #print('adding utf-8 charset...')
        #email.charset.add_charset('utf-8', email.charset.BASE64, email.charset.BASE64)
        #print(email.charset.CHARSETS)
        assert 'DKIM-Signature: ' in message.as_string()
        assert _check_dkim(message, pub_key)
def _try_decode(s, charsets=('utf-8', 'koi8-r', 'cp1251')):
    for charset in charsets:
        try:
            return to_native(s, charset), charset
        except UnicodeDecodeError:
            pass
    return None, None
Esempio n. 4
0
def test_dkim_sign_twice():

    # Test #44:
    # " if you put the open there and send more than one messages it fails
    #   (the first works but the next will not if you dont seek(0) the dkim file first)"
    # Actually not.

    priv_key, pub_key = _generate_key(length=1024)
    message = Message(**common_email_data())
    message.dkim(key=NativeStringIO(to_native(priv_key)), selector='_dkim', domain='somewhere.net')
    for n in range(2):
        message.subject = 'Test %s' % n
        assert _check_dkim(message, pub_key)
Esempio n. 5
0
def deobsfucate(key, enc):
    dec = []
    key = to_native(key)
    enc = base64.urlsafe_b64decode(enc)
    for i in range(len(enc)):
        key_c = key[i % len(key)]
        if is_py3:
            c1 = enc[i]
        else:
            c1 = ord(enc[i])
        dec_c = chr((256 + c1 - ord(key_c)) % 256)
        dec.append(dec_c)
    return "".join(dec)
    assert 0
Esempio n. 6
0
def deobsfucate(key, enc):
    dec = []
    key = to_native(key)
    enc = base64.urlsafe_b64decode(enc)
    for i in range(len(enc)):
        key_c = key[i % len(key)]
        if is_py3:
            c1 = enc[i]
        else:
            c1 = ord(enc[i])
        dec_c = chr((256 + c1 - ord(key_c)) % 256)
        dec.append(dec_c)
    return "".join(dec)
    assert 0
Esempio n. 7
0
def test_dkim_sign_twice():

    # Test #44:
    # " if you put the open there and send more than one messages it fails
    #   (the first works but the next will not if you dont seek(0) the dkim file first)"
    # Actually not.

    priv_key, pub_key = _generate_key(length=1024)
    message = Message(**common_email_data())
    message.dkim(key=NativeStringIO(to_native(priv_key)),
                 selector='_dkim',
                 domain='somewhere.net')
    for n in range(2):
        message.subject = 'Test %s' % n
        assert _check_dkim(message, pub_key)
Esempio n. 8
0
    def get_sign(self, message):

        dkim_header = None

        try:
            # TODO:
            #  pydkim module parses message and privkey on each signing
            #  this is not optimal for our purposes
            #  we need patch for pydkim or some another signing module
            dkim_header = dkim.sign(message=message, **self._sign_params)
        except:
            if self.ignore_sign_errors:
                logging.exception('Error signing message')
                #dkim_header = "X-DKIM-Signature-Failed: yes\r\n"
            else:
                raise

        return to_native(dkim_header)
Esempio n. 9
0
def test_dkim():

    priv_key, pub_key = _generate_key(length=1024)

    DKIM_PARAMS = [dict(key=NativeStringIO(to_native(priv_key)),
                        selector='_dkim',
                        domain='somewhere1.net'),

                   dict(key=priv_key,
                        selector='_dkim',
                        domain='somewhere2.net'),

                   # legacy key argument name
                   dict(privkey=priv_key,
                        selector='_dkim',
                        domain='somewhere3.net'),
                   ]

    if is_py26:
        load_email_charsets()

    for dkimparams in DKIM_PARAMS:
        message = Message(**common_email_data())
        message.dkim(**dkimparams)
        # check DKIM header exist
        assert message.as_message()['DKIM-Signature']
        #print(__name__, "type message.as_string()==", type(message.as_string()))
        #print(message.as_string())
        #print(type(message.as_string()))
        #print(email.__file__)
        #print(email.charset.CHARSETS)
        #print('adding utf-8 charset...')
        #email.charset.add_charset('utf-8', email.charset.BASE64, email.charset.BASE64)
        #print(email.charset.CHARSETS)
        assert 'DKIM-Signature: ' in message.as_string()
        assert _check_dkim(message, pub_key)