summaryrefslogtreecommitdiff
path: root/rsa
diff options
context:
space:
mode:
authorSybren A. Stüvel <sybren@stuvel.eu>2019-08-04 17:43:55 +0200
committerSybren A. Stüvel <sybren@stuvel.eu>2019-08-04 17:47:26 +0200
commit3c5ee594a2e38b27f086d042d9d2b9d7d0d0269d (patch)
treeb8caf816400742d66a547c21cfef950a6c3b3d9f /rsa
parentb68f6181e9729afc6cae42cdf12b6a8dba52a80e (diff)
downloadrsa-git-3c5ee594a2e38b27f086d042d9d2b9d7d0d0269d.tar.gz
Add support for SHA3 hashing
This is based on https://github.com/sybrenstuvel/python-rsa/pull/96, with a few improvements: - The minimum of one use of SHA3 in a unit test, to at least touch it at some point. - Documented the support of SHA3. - Only install the third-party library required by Python 3.5 when we're running on Python 3.5. Newer Python versions support SHA3 natively.
Diffstat (limited to 'rsa')
-rw-r--r--rsa/pkcs1.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/rsa/pkcs1.py b/rsa/pkcs1.py
index 39ebc49..f810771 100644
--- a/rsa/pkcs1.py
+++ b/rsa/pkcs1.py
@@ -30,8 +30,16 @@ to your users.
import hashlib
import os
+import sys
import typing
+if sys.version_info < (3, 6):
+ # Python 3.6 and newer have SHA-3 support. For Python 3.5 we need a third party library.
+ # This library monkey-patches the hashlib module so that it looks like Python actually
+ # supports SHA-3 natively.
+ import sha3
+
+
from . import common, transform, core, key
# ASN.1 codes that describe the hash algorithm used.
@@ -42,6 +50,9 @@ HASH_ASN1 = {
'SHA-256': b'\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20',
'SHA-384': b'\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02\x05\x00\x04\x30',
'SHA-512': b'\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03\x05\x00\x04\x40',
+ 'SHA3-256': b'\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x08\x05\x00\x04\x20',
+ 'SHA3-384': b'\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x09\x05\x00\x04\x30',
+ 'SHA3-512': b'\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x0a\x05\x00\x04\x40',
}
HASH_METHODS = {
@@ -51,6 +62,9 @@ HASH_METHODS = {
'SHA-256': hashlib.sha256,
'SHA-384': hashlib.sha384,
'SHA-512': hashlib.sha512,
+ 'SHA3-256': hashlib.sha3_256,
+ 'SHA3-384': hashlib.sha3_384,
+ 'SHA3-512': hashlib.sha3_512,
}