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)
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
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)
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)
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)
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
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)
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