summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShengkai Sun <shengkai.sun01@gmail.com>2023-04-18 18:15:11 +0800
committerSybren A. Stüvel <sybren@stuvel.eu>2023-04-23 15:38:33 +0200
commitb94766f775aa3cdc541a66355cb00e439aab3e55 (patch)
tree6c69a9b5f2d94fe1ff177561a383f47d42d27a1f
parent5045b149ba255349730e1c7ad78c61700427c5da (diff)
downloadrsa-git-b94766f775aa3cdc541a66355cb00e439aab3e55.tar.gz
modified: Fixed a bug in rsa/core.py where the message should not be equals to the modulus
modified: Added test cases in tests/test_integers.py
-rw-r--r--.gitignore1
-rw-r--r--rsa/core.py2
-rw-r--r--tests/test_integers.py28
3 files changed, 30 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index e31443a..2002142 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ __pycache__/
/build/
/doc/_build/
+.vscode/settings.json
diff --git a/rsa/core.py b/rsa/core.py
index 84ed3f8..4acfa3a 100644
--- a/rsa/core.py
+++ b/rsa/core.py
@@ -36,7 +36,7 @@ def encrypt_int(message: int, ekey: int, n: int) -> int:
if message < 0:
raise ValueError("Only non-negative numbers are supported")
- if message > n:
+ if message >= n:
raise OverflowError("The message %i is too long for n=%i" % (message, n))
return pow(message, ekey, n)
diff --git a/tests/test_integers.py b/tests/test_integers.py
index 659e85a..fa85cdf 100644
--- a/tests/test_integers.py
+++ b/tests/test_integers.py
@@ -46,3 +46,31 @@ class IntegerTest(unittest.TestCase):
print("\tVerified: %d" % verified)
self.assertEqual(message, verified)
+
+ def test_extreme_values(self):
+ # message < 0
+ message = -1
+ print("\n\tMessage: %d" % message)
+
+ with self.assertRaises(ValueError):
+ rsa.core.encrypt_int(message, self.pub.e, self.pub.n)
+
+ # message == 0
+ message = 0
+ print("\n\tMessage: %d" % message)
+
+ encrypted = rsa.core.encrypt_int(message, self.pub.e, self.pub.n)
+ print("\tEncrypted: %d" % encrypted)
+
+ decrypted = rsa.core.decrypt_int(encrypted, self.priv.d, self.pub.n)
+ print("\tDecrypted: %d" % decrypted)
+
+ self.assertEqual(message, decrypted)
+
+ # message >= n
+ message = self.pub.n
+ print("\n\tMessage: %d" % message)
+
+ with self.assertRaises(OverflowError):
+ rsa.core.encrypt_int(message, self.pub.e, self.pub.n)
+