示例#1
0
def main():
    with open('demo2_user1.p12', 'rb') as fp:
        p12 = pkcs12.load_key_and_certificates(fp.read(), b'1234',
                                               backends.default_backend())
    datau = open('smime-unsigned.txt', 'rb').read()
    datas = email.sign(datau, p12[0], p12[1], p12[2], 'sha256', attrs=False)
    open('smime-signed-noattr.txt', 'wb').write(datas)
示例#2
0
    def test_email_signed_attr(self):
        with open(fixture('demo2_user1.p12'), 'rb') as fh:
            p12 = crypto.load_pkcs12(fh.read(), b'1234')
        with open(fixture('smime-unsigned.txt'), 'rb') as fh:
            datau = fh.read()
        datas = email.sign(datau,
                           p12.get_privatekey().to_cryptography_key(),
                           p12.get_certificate().to_cryptography(), [],
                           'sha256',
                           attrs=True)
        fname = fixture('smime-signed-attr.txt')
        with open(fname, 'wb') as fh:
            fh.write(datas)

        cmd = [
            'openssl',
            'smime',
            '-verify',
            '-CAfile',
            fixture('demo2_ca.crt.pem'),
            '-in',
            fname,
            '-inform',
            'SMIME',
        ]
        process = Popen(cmd, stdout=PIPE, stderr=PIPE)
        stdout, stderr = process.communicate()

        assert stderr == b'Verification successful\n'
        assert datau.replace(b'\n', b'\r\n') == stdout
示例#3
0
def main():
    p12 = load_pkcs12(open('demo2_user1.p12', 'rb').read(), '1234')
    datau = open('smime-unsigned.txt', 'rb').read()

    datau1 = datau.replace(b'\n', b'\r\n')
    hashalgo = 'sha256'
    signed_value = getattr(hashlib, hashalgo)(datau1).digest()
    attrs = [
        cms.CMSAttribute({
            'type':
            cms.CMSAttributeType('1.2.840.113549.1.9.16.2.47'),
            'values': (algos.DigestAlgorithm({'algorithm': hashalgo}), ),
        }),
        cms.CMSAttribute({
            'type': cms.CMSAttributeType('message_digest'),
            'values': (signed_value, ),
        }),
    ]

    datas = email.sign(datau,
                       p12.get_privatekey().to_cryptography_key(),
                       p12.get_certificate().to_cryptography(), [],
                       'sha256',
                       attrs=attrs)
    open('smime-signed-attr-custom.txt', 'wb').write(datas)
示例#4
0
def main():
    p12 = load_pkcs12(open('demo2_user1.p12', 'rb').read(), '1234')
    datau = open('smime-unsigned.txt', 'rb').read()
    datas = email.sign(datau,
                       p12.get_privatekey().to_cryptography_key(),
                       p12.get_certificate().to_cryptography(), [],
                       'sha256',
                       attrs=False)
    open('smime-signed-noattr.txt', 'wb').write(datas)
示例#5
0
async def send(cl: SMTP, recipient: str, subject: str, body: str) -> None:

    headers = HEADER_TEMPLATE.format(subject=subject,
                                     sender=settings.sender,
                                     to=recipient,
                                     date=formatdate(localtime=True))

    mime_text = MIMEText(body, "plain")
    p12 = load_smime_p12()
    signed = email.sign(mime_text.as_bytes(), p12[0], p12[1], p12[2], 'sha512')

    body = signed.decode("ascii")
    content = (headers + body).strip()

    await cl.sendmail(settings.sender, recipient, content)
示例#6
0
    def test_email_signed_attr_custom(self):
        with open(fixture('demo2_user1.p12'), 'rb') as fh:
            p12 = crypto.load_pkcs12(fh.read(), b'1234')
        with open(fixture('smime-unsigned.txt'), 'rb') as fh:
            datau = fh.read()

        datau1 = datau.replace(b'\n', b'\r\n')
        hashalgo = 'sha256'
        signed_value = getattr(hashlib, hashalgo)(datau1).digest()
        attrs = [
            cms.CMSAttribute({
                'type': cms.CMSAttributeType('content_type'),
                'values': ('data', ),
            }),
            cms.CMSAttribute({
                'type': cms.CMSAttributeType('message_digest'),
                'values': (signed_value, ),
            }),
        ]

        datas = email.sign(datau,
                           p12.get_privatekey().to_cryptography_key(),
                           p12.get_certificate().to_cryptography(), [],
                           'sha256',
                           attrs=attrs)
        fname = fixture('smime-signed-attr-custom.txt')
        with open(fname, 'wb') as fh:
            fh.write(datas)

        cmd = [
            'openssl',
            'smime',
            '-verify',
            '-CAfile',
            fixture('demo2_ca.crt.pem'),
            '-in',
            fname,
            '-inform',
            'SMIME',
        ]
        process = Popen(cmd, stdout=PIPE, stderr=PIPE)
        stdout, stderr = process.communicate()

        assert stderr == b'Verification successful\n'
        assert datau.replace(b'\n', b'\r\n') == stdout
示例#7
0
def main():
    with open('demo2_user1.p12', 'rb') as fp:
        p12 = pkcs12.load_key_and_certificates(fp.read(), b'1234',
                                               backends.default_backend())
    datau = open('smime-unsigned.txt', 'rb').read()

    datau1 = datau.replace(b'\n', b'\r\n')
    hashalgo = 'sha256'
    signed_value = getattr(hashlib, hashalgo)(datau1).digest()
    attrs = [
        cms.CMSAttribute({
            'type': cms.CMSAttributeType('content_type'),
            'values': ('data', ),
        }),
        cms.CMSAttribute({
            'type': cms.CMSAttributeType('message_digest'),
            'values': (signed_value, ),
        }),
    ]

    datas = email.sign(datau, p12[0], p12[1], p12[2], 'sha256', attrs=attrs)
    open('smime-signed-attr-custom.txt', 'wb').write(datas)
示例#8
0
    def test_email_signed_noattr(self):
        with open(fixture('demo2_user1.p12'), 'rb') as fp:
            p12 = pkcs12.load_key_and_certificates(fp.read(), b'1234', backends.default_backend())
        with open(fixture('smime-unsigned.txt'), 'rb') as fh:
            datau = fh.read()
        datas = email.sign(datau,
            p12[0], p12[1], p12[2],
            'sha256',
            attrs=False
        )
        fname = fixture('smime-signed-noattr.txt')
        with open(fname, 'wb') as fh:
            fh.write(datas)

        cmd = [
            'openssl', 'smime', '-verify',
            '-CAfile', fixture('demo2_ca.crt.pem'),
            '-in', fname, '-inform', 'SMIME',
        ]
        process = Popen(cmd, stdout=PIPE, stderr=PIPE)
        stdout, stderr = process.communicate()

        assert stderr == b'Verification successful\n'
        assert datau.replace(b'\n', b'\r\n') == stdout