Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-rsa for openSUSE:Factory checked in at 2021-02-01 13:26:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-rsa (Old)
and /work/SRC/openSUSE:Factory/.python-rsa.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-rsa"
Mon Feb 1 13:26:57 2021 rev:20 rq:867594 version:4.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-rsa/python-rsa.changes 2020-12-12 20:31:36.545804760 +0100
+++ /work/SRC/openSUSE:Factory/.python-rsa.new.28504/python-rsa.changes 2021-02-01 13:28:38.574144104 +0100
@@ -1,0 +2,9 @@
+Thu Jan 28 23:02:47 UTC 2021 - Dirk M��ller
+
+- update to 4.7:
+ * CVE-2020-25658 - Bleichenbacher-style timing oracle in PKCS#1 v1.5 decryption code
+ * Add padding length check as described by PKCS#1 v1.5
+ * Reuse of blinding factors to speed up blinding operations.
+ * Declare & test support for Python 3.9
+
+-------------------------------------------------------------------
Old:
----
rsa-4.6.tar.gz
New:
----
rsa-4.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-rsa.spec ++++++
--- /var/tmp/diff_new_pack.bvUae2/_old 2021-02-01 13:28:39.270145187 +0100
+++ /var/tmp/diff_new_pack.bvUae2/_new 2021-02-01 13:28:39.274145194 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-rsa
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-rsa
-Version: 4.6
+Version: 4.7
Release: 0
Summary: Pure-Python RSA Implementation
License: Apache-2.0
++++++ rsa-4.6.tar.gz -> rsa-4.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/PKG-INFO new/rsa-4.7/PKG-INFO
--- old/rsa-4.6/PKG-INFO 2020-06-12 22:25:07.000000000 +0200
+++ new/rsa-4.7/PKG-INFO 2021-01-10 11:44:44.184212700 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: rsa
-Version: 4.6
+Version: 4.7
Summary: Pure-Python RSA implementation
Home-page: https://stuvel.eu/rsa
Author: Sybren A. Stuvel
@@ -33,6 +33,12 @@
The source code is maintained at [GitHub](https://github.com/sybrenstuvel/python-rsa/) and is
licensed under the [Apache License, version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+ Security
+ --------
+
+ Because of how Python internally stores numbers, it is very hard (if not impossible) to make a pure-Python program secure against timing attacks. This library is no exception, so use it with care. See https://securitypitfalls.wordpress.com/2018/08/03/constant-time-compare-in-p... for more info.
+
+
Major changes in 4.1
--------------------
@@ -70,6 +76,7 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Security :: Cryptography
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/README.md new/rsa-4.7/README.md
--- old/rsa-4.6/README.md 2020-06-12 22:22:56.000000000 +0200
+++ new/rsa-4.7/README.md 2021-01-10 11:09:07.000000000 +0100
@@ -23,6 +23,12 @@
The source code is maintained at [GitHub](https://github.com/sybrenstuvel/python-rsa/) and is
licensed under the [Apache License, version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+Security
+--------
+
+Because of how Python internally stores numbers, it is very hard (if not impossible) to make a pure-Python program secure against timing attacks. This library is no exception, so use it with care. See https://securitypitfalls.wordpress.com/2018/08/03/constant-time-compare-in-p... for more info.
+
+
Major changes in 4.1
--------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/issue-80.py new/rsa-4.7/issue-80.py
--- old/rsa-4.6/issue-80.py 2017-01-16 13:04:39.000000000 +0100
+++ new/rsa-4.7/issue-80.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,8 +0,0 @@
-#!/usr/bin/env python -bb
-
-import rsa
-
-
-with open('privkey.pem') as privatefile:
- keydata = privatefile.read()
-pubkey = rsa.PrivateKey.load_pkcs1(keydata)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/randomness.py new/rsa-4.7/randomness.py
--- old/rsa-4.6/randomness.py 2020-04-14 19:05:30.000000000 +0200
+++ new/rsa-4.7/randomness.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-#!/usr/bin/env python3
-
-from collections import Counter
-from pprint import pprint
-
-from rsa.randnum import randint
-
-counter = Counter(randint(1024) for _ in range(1000000))
-
-def by_occurrence(item):
- return item[1], item[0]
-
-sorted_by_occurrence = sorted(counter.items(), key=by_occurrence)
-
-print('Number Occurrence')
-for number, occurrence in sorted_by_occurrence[:5]:
- print(f'{number:4d} {occurrence}')
-print("���")
-for number, occurrence in sorted_by_occurrence[-5:]:
- print(f'{number:4d} {occurrence}')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/rsa/__init__.py new/rsa-4.7/rsa/__init__.py
--- old/rsa-4.6/rsa/__init__.py 2020-06-12 22:24:55.000000000 +0200
+++ new/rsa-4.7/rsa/__init__.py 2021-01-10 11:34:53.000000000 +0100
@@ -26,8 +26,8 @@
VerificationError, find_signature_hash, sign_hash, compute_hash
__author__ = "Sybren Stuvel, Barry Mead and Yesudeep Mangalapilly"
-__date__ = '2020-06-12'
-__version__ = '4.6'
+__date__ = '2021-01-10'
+__version__ = '4.7'
# Do doctest if we're run directly
if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/rsa/common.py new/rsa-4.7/rsa/common.py
--- old/rsa-4.6/rsa/common.py 2020-06-12 22:22:56.000000000 +0200
+++ new/rsa-4.7/rsa/common.py 2021-01-10 11:09:07.000000000 +0100
@@ -49,8 +49,8 @@
try:
return num.bit_length()
- except AttributeError:
- raise TypeError('bit_size(num) only supports integers, not %r' % type(num))
+ except AttributeError as ex:
+ raise TypeError('bit_size(num) only supports integers, not %r' % type(num)) from ex
def byte_size(number: int) -> int:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/rsa/key.py new/rsa-4.7/rsa/key.py
--- old/rsa-4.6/rsa/key.py 2020-06-12 22:22:56.000000000 +0200
+++ new/rsa-4.7/rsa/key.py 2021-01-10 11:09:07.000000000 +0100
@@ -49,12 +49,15 @@
class AbstractKey:
"""Abstract superclass for private and public keys."""
- __slots__ = ('n', 'e')
+ __slots__ = ('n', 'e', 'blindfac', 'blindfac_inverse')
def __init__(self, n: int, e: int) -> None:
self.n = n
self.e = e
+ # These will be computed properly on the first call to blind().
+ self.blindfac = self.blindfac_inverse = -1
+
@classmethod
def _load_pkcs1_pem(cls, keyfile: bytes) -> 'AbstractKey':
"""Loads a key in PKCS#1 PEM format, implement in a subclass.
@@ -145,7 +148,7 @@
method = self._assert_format_exists(format, methods)
return method()
- def blind(self, message: int, r: int) -> int:
+ def blind(self, message: int) -> int:
"""Performs blinding on the message using random number 'r'.
:param message: the message, as integer, to blind.
@@ -159,10 +162,10 @@
See https://en.wikipedia.org/wiki/Blinding_%28cryptography%29
"""
+ self._update_blinding_factor()
+ return (message * pow(self.blindfac, self.e, self.n)) % self.n
- return (message * pow(r, self.e, self.n)) % self.n
-
- def unblind(self, blinded: int, r: int) -> int:
+ def unblind(self, blinded: int) -> int:
"""Performs blinding on the message using random number 'r'.
:param blinded: the blinded message, as integer, to unblind.
@@ -174,8 +177,27 @@
See https://en.wikipedia.org/wiki/Blinding_%28cryptography%29
"""
- return (rsa.common.inverse(r, self.n) * blinded) % self.n
+ return (self.blindfac_inverse * blinded) % self.n
+
+ def _initial_blinding_factor(self) -> int:
+ for _ in range(1000):
+ blind_r = rsa.randnum.randint(self.n - 1)
+ if rsa.prime.are_relatively_prime(self.n, blind_r):
+ return blind_r
+ raise RuntimeError('unable to find blinding factor')
+ def _update_blinding_factor(self):
+ if self.blindfac < 0:
+ # Compute initial blinding factor, which is rather slow to do.
+ self.blindfac = self._initial_blinding_factor()
+ self.blindfac_inverse = rsa.common.inverse(self.blindfac, self.n)
+ else:
+ # Reuse previous blinding factor as per section 9 of 'A Timing
+ # Attack against RSA with the Chinese Remainder Theorem' by Werner
+ # Schindler.
+ # See https://tls.mbed.org/public/WSchindler-RSA_Timing_Attack.pdf
+ self.blindfac = pow(self.blindfac, 2, self.n)
+ self.blindfac_inverse = pow(self.blindfac_inverse, 2, self.n)
class PublicKey(AbstractKey):
"""Represents a public RSA key.
@@ -414,13 +436,6 @@
def __hash__(self) -> int:
return hash((self.n, self.e, self.d, self.p, self.q, self.exp1, self.exp2, self.coef))
- def _get_blinding_factor(self) -> int:
- for _ in range(1000):
- blind_r = rsa.randnum.randint(self.n - 1)
- if rsa.prime.are_relatively_prime(self.n, blind_r):
- return blind_r
- raise RuntimeError('unable to find blinding factor')
-
def blinded_decrypt(self, encrypted: int) -> int:
"""Decrypts the message using blinding to prevent side-channel attacks.
@@ -431,11 +446,9 @@
:rtype: int
"""
- blind_r = self._get_blinding_factor()
- blinded = self.blind(encrypted, blind_r) # blind before decrypting
+ blinded = self.blind(encrypted) # blind before decrypting
decrypted = rsa.core.decrypt_int(blinded, self.d, self.n)
-
- return self.unblind(decrypted, blind_r)
+ return self.unblind(decrypted)
def blinded_encrypt(self, message: int) -> int:
"""Encrypts the message using blinding to prevent side-channel attacks.
@@ -447,10 +460,9 @@
:rtype: int
"""
- blind_r = self._get_blinding_factor()
- blinded = self.blind(message, blind_r) # blind before encrypting
+ blinded = self.blind(message) # blind before encrypting
encrypted = rsa.core.encrypt_int(blinded, self.d, self.n)
- return self.unblind(encrypted, blind_r)
+ return self.unblind(encrypted)
@classmethod
def _load_pkcs1_der(cls, keyfile: bytes) -> 'PrivateKey':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/rsa/pkcs1.py new/rsa-4.7/rsa/pkcs1.py
--- old/rsa-4.6/rsa/pkcs1.py 2020-06-12 22:22:56.000000000 +0200
+++ new/rsa-4.7/rsa/pkcs1.py 2021-01-10 11:09:07.000000000 +0100
@@ -30,6 +30,7 @@
import os
import sys
import typing
+from hmac import compare_digest
from . import common, transform, core, key
@@ -252,16 +253,24 @@
# encrypted value (as leading zeroes do not influence the value of an
# integer). This fixes CVE-2020-13757.
if len(crypto) > blocksize:
+ # This is operating on public information, so doesn't need to be constant-time.
raise DecryptionError('Decryption failed')
# If we can't find the cleartext marker, decryption failed.
- if cleartext[0:2] != b'\x00\x02':
- raise DecryptionError('Decryption failed')
+ cleartext_marker_bad = not compare_digest(cleartext[:2], b'\x00\x02')
# Find the 00 separator between the padding and the message
- try:
- sep_idx = cleartext.index(b'\x00', 2)
- except ValueError:
+ sep_idx = cleartext.find(b'\x00', 2)
+
+ # sep_idx indicates the position of the `\x00` separator that separates the
+ # padding from the actual message. The padding should be at least 8 bytes
+ # long (see https://tools.ietf.org/html/rfc8017#section-7.2.2 step 3), which
+ # means the separator should be at least at index 10 (because of the
+ # `\x00\x02` marker that preceeds it).
+ sep_idx_bad = sep_idx < 10
+
+ anything_bad = cleartext_marker_bad | sep_idx_bad
+ if anything_bad:
raise DecryptionError('Decryption failed')
return cleartext[sep_idx + 1:]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/rsa.egg-info/PKG-INFO new/rsa-4.7/rsa.egg-info/PKG-INFO
--- old/rsa-4.6/rsa.egg-info/PKG-INFO 2020-06-12 22:25:07.000000000 +0200
+++ new/rsa-4.7/rsa.egg-info/PKG-INFO 2021-01-10 11:44:44.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: rsa
-Version: 4.6
+Version: 4.7
Summary: Pure-Python RSA implementation
Home-page: https://stuvel.eu/rsa
Author: Sybren A. Stuvel
@@ -33,6 +33,12 @@
The source code is maintained at [GitHub](https://github.com/sybrenstuvel/python-rsa/) and is
licensed under the [Apache License, version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+ Security
+ --------
+
+ Because of how Python internally stores numbers, it is very hard (if not impossible) to make a pure-Python program secure against timing attacks. This library is no exception, so use it with care. See https://securitypitfalls.wordpress.com/2018/08/03/constant-time-compare-in-p... for more info.
+
+
Major changes in 4.1
--------------------
@@ -70,6 +76,7 @@
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Security :: Cryptography
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/rsa.egg-info/SOURCES.txt new/rsa-4.7/rsa.egg-info/SOURCES.txt
--- old/rsa-4.6/rsa.egg-info/SOURCES.txt 2020-06-12 22:25:07.000000000 +0200
+++ new/rsa-4.7/rsa.egg-info/SOURCES.txt 2021-01-10 11:44:44.000000000 +0100
@@ -2,15 +2,8 @@
MANIFEST.in
README.md
create_timing_table.py
-issue-80.py
-randomness.py
setup.cfg
setup.py
-speed_num_in_collection.py
-speedtest_pr_88.py
-wycheproof-2048.py
-wycheproof-4096.py
-wycheproof-crypto.py
rsa/__init__.py
rsa/_compat.py
rsa/asn1.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/setup.cfg new/rsa-4.7/setup.cfg
--- old/rsa-4.6/setup.cfg 2020-06-12 22:25:07.000000000 +0200
+++ new/rsa-4.7/setup.cfg 2021-01-10 11:44:44.189199700 +0100
@@ -1,6 +1,3 @@
-[bdist_wheel]
-universal = 1
-
[metadata]
license_file = LICENSE
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/setup.py new/rsa-4.7/setup.py
--- old/rsa-4.6/setup.py 2020-06-12 22:24:55.000000000 +0200
+++ new/rsa-4.7/setup.py 2021-01-10 11:34:53.000000000 +0100
@@ -25,7 +25,7 @@
if __name__ == '__main__':
setup(name='rsa',
- version='4.6',
+ version='4.7',
description='Pure-Python RSA implementation',
long_description=long_description,
long_description_content_type='text/markdown',
@@ -49,6 +49,7 @@
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
+ 'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: Implementation :: CPython',
'Programming Language :: Python :: Implementation :: PyPy',
'Topic :: Security :: Cryptography',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/speed_num_in_collection.py new/rsa-4.7/speed_num_in_collection.py
--- old/rsa-4.6/speed_num_in_collection.py 2016-03-17 16:15:38.000000000 +0100
+++ new/rsa-4.7/speed_num_in_collection.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,28 +0,0 @@
-"""
-"""
-
-import timeit
-
-setup = '''
-import random
-
-random.seed('slartibartfast')
-numbers = [random.randint(0, 10) for _ in range(100)]
-'''
-
-if __name__ == '__main__':
- print('List time: ', timeit.timeit(
- '[number in [2, 3, 5, 7] for number in numbers]',
- setup=setup))
-
- print('Set time: ', timeit.timeit(
- '[number in {2, 3, 5, 7} for number in numbers]',
- setup=setup))
-
- print('Tuple time: ', timeit.timeit(
- '[number in (2, 3, 5, 7) for number in numbers]',
- setup=setup))
-
- print('Single construction: ', timeit.timeit(
- '[number in TRIVIAL_PRIMES for number in numbers]',
- setup=setup + 'TRIVIAL_PRIMES = {2, 3, 5, 7}'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/speedtest_pr_88.py new/rsa-4.7/speedtest_pr_88.py
--- old/rsa-4.6/speedtest_pr_88.py 2017-04-15 16:02:49.000000000 +0200
+++ new/rsa-4.7/speedtest_pr_88.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-#!/usr/bin/env python3
-
-import secrets
-import math
-import timeit
-
-
-def bit_size(number):
- return number.bit_length()
-
-
-def via_math_module(number):
- return int(math.ceil(bit_size(number) / 8.0))
-
-
-def via_divmod(number):
- quanta, mod = divmod(bit_size(number), 8)
-
- if mod:
- quanta += 1
- return quanta
-
-
-number = int.from_bytes(secrets.token_bytes(2048), 'little')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/tests/test_key.py new/rsa-4.7/tests/test_key.py
--- old/rsa-4.6/tests/test_key.py 2019-08-04 22:23:44.000000000 +0200
+++ new/rsa-4.7/tests/test_key.py 2021-01-10 11:09:07.000000000 +0100
@@ -21,11 +21,20 @@
message = 12345
encrypted = rsa.core.encrypt_int(message, pk.e, pk.n)
- blinded = pk.blind(encrypted, 4134431) # blind before decrypting
- decrypted = rsa.core.decrypt_int(blinded, pk.d, pk.n)
- unblinded = pk.unblind(decrypted, 4134431)
+ blinded_1 = pk.blind(encrypted) # blind before decrypting
+ decrypted = rsa.core.decrypt_int(blinded_1, pk.d, pk.n)
+ unblinded_1 = pk.unblind(decrypted)
- self.assertEqual(unblinded, message)
+ self.assertEqual(unblinded_1, message)
+
+ # Re-blinding should use a different blinding factor.
+ blinded_2 = pk.blind(encrypted) # blind before decrypting
+ self.assertNotEqual(blinded_1, blinded_2)
+
+ # The unblinding should still work, though.
+ decrypted = rsa.core.decrypt_int(blinded_2, pk.d, pk.n)
+ unblinded_2 = pk.unblind(decrypted)
+ self.assertEqual(unblinded_2, message)
class KeyGenTest(unittest.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/tests/test_pkcs1.py new/rsa-4.7/tests/test_pkcs1.py
--- old/rsa-4.6/tests/test_pkcs1.py 2020-06-12 22:22:56.000000000 +0200
+++ new/rsa-4.7/tests/test_pkcs1.py 2021-01-10 11:09:07.000000000 +0100
@@ -183,3 +183,36 @@
signature = signature + bytes.fromhex('0000')
with self.assertRaises(rsa.VerificationError):
pkcs1.verify(message, signature, self.pub)
+
+
+class PaddingSizeTest(unittest.TestCase):
+ def test_too_little_padding(self):
+ """Padding less than 8 bytes should be rejected."""
+
+ # Construct key that will be small enough to need only 7 bytes of padding.
+ # This key is 168 bit long, and was generated with rsa.newkeys(nbits=168).
+ self.private_key = rsa.PrivateKey.load_pkcs1(b'''
+-----BEGIN RSA PRIVATE KEY-----
+MHkCAQACFgCIGbbNSkIRLtprxka9NgOf5UxgxCMCAwEAAQIVQqymO0gHubdEVS68
+CdCiWmOJxVfRAgwBQM+e1JJwMKmxSF0CCmya6CFxO8Evdn8CDACMM3AlVC4FhlN8
+3QIKC9cjoam/swMirwIMAR7Br9tdouoH7jAE
+-----END RSA PRIVATE KEY-----
+ ''')
+ self.public_key = rsa.PublicKey(n=self.private_key.n, e=self.private_key.e)
+
+ cyphertext = self.encrypt_with_short_padding(b'op je hoofd')
+ with self.assertRaises(rsa.DecryptionError):
+ rsa.decrypt(cyphertext, self.private_key)
+
+ def encrypt_with_short_padding(self, message: bytes) -> bytes:
+ # This is a copy of rsa.pkcs1.encrypt() adjusted to use the wrong padding length.
+ keylength = rsa.common.byte_size(self.public_key.n)
+
+ # The word 'padding' has 7 letters, so is one byte short of a valid padding length.
+ padded = b'\x00\x02padding\x00' + message
+
+ payload = rsa.transform.bytes2int(padded)
+ encrypted_value = rsa.core.encrypt_int(payload, self.public_key.e, self.public_key.n)
+ cyphertext = rsa.transform.int2bytes(encrypted_value, keylength)
+
+ return cyphertext
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/wycheproof-2048.py new/rsa-4.7/wycheproof-2048.py
--- old/rsa-4.6/wycheproof-2048.py 2020-06-03 14:13:00.000000000 +0200
+++ new/rsa-4.7/wycheproof-2048.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,45 +0,0 @@
-#!/usr/bin/env python3
-
-import rsa
-from rsa import PrivateKey
-
-privateKeyPem = "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAs1EKK81M5kTFtZSuUFnhKy8FS2WNXaWVmi/fGHG4CLw98+Yo\n0nkuUarVwSS0O9pFPcpc3kvPKOe9Tv+6DLS3Qru21aATy2PRqjqJ4CYn71OYtSwM\n/ZfSCKvrjXybzgu+sBmobdtYm+sppbdL+GEHXGd8gdQw8DDCZSR6+dPJFAzLZTCd\nB+Ctwe/RXPF+ewVdfaOGjkZIzDoYDw7n+OHnsYCYozkbTOcWHpjVevipR+IBpGPi\n1rvKgFnlcG6d/tj0hWRl/6cS7RqhjoiNEtxqoJzpXs/Kg8xbCxXbCchkf11STA8u\ndiCjQWuWI8rcDwl69XMmHJjIQAqhKvOOQ8rYTQIDAQABAoIBABpQLQ7qbHtp4h1Y\nORAfcFRW7Q74UvtH/iEHH1TF8zyM6wZsYtcn4y0mxYE3Mp+J0xlTJbeVJkwZXYVH\nL3UH29CWHSlR+TWiazTwrCTRVJDhEoqbcTiRW8fb+o/jljVxMcVDrpyYUHNo2c6w\njBxhmKPtp66hhaDpds1Cwi0A8APZ8Z2W6kya/L/hRBzMgCz7Bon1nYBMak5PQEwV\nF0dF7Wy4vIjvCzO6DSqA415DvJDzUAUucgFudbANNXo4HJwNRnBpymYIh8mHdmNJ\n/MQ0YLSqUWvOB57dh7oWQwe3UsJ37ZUorTugvxh3NJ7Tt5ZqbCQBEECb9ND63gxo\n/a3YR/0CgYEA7BJc834xCi/0YmO5suBinWOQAF7IiRPU+3G9TdhWEkSYquupg9e6\nK9lC5k0iP+t6I69NYF7+6mvXDTmv6Z01o6oV50oXaHeAk74O3UqNCbLe9tybZ/+F\ndkYlwuGSNttMQBzjCiVy0+y0+Wm3rRnFIsAtd0RlZ24aN3bFTWJINIsCgYEAwnQq\nvNmJe9SwtnH5c/yCqPhKv1c
F/4jdQZSGI6/p3KYNxlQzkHZ/6uvrU5V27ov6YbX8\nvKlKfO91oJFQxUD6lpTdgAStI3GMiJBJIZNpyZ9EWNSvwUj28H34cySpbZz3s4Xd\nhiJBShgy+fKURvBQwtWmQHZJ3EGrcOI7PcwiyYcCgYEAlql5jSUCY0ALtidzQogW\nJ+B87N+RGHsBuJ/0cxQYinwg+ySAAVbSyF1WZujfbO/5+YBN362A/1dn3lbswCnH\nK/bHF9+fZNqvwprPnceQj5oK1n4g6JSZNsy6GNAhosT+uwQ0misgR8SQE4W25dDG\nkdEYsz+BgCsyrCcu8J5C+tUCgYAFVPQbC4f2ikVyKzvgz0qx4WUDTBqRACq48p6e\n+eLatv7nskVbr7QgN+nS9+Uz80ihR0Ev1yCAvnwmM/XYAskcOea87OPmdeWZlQM8\nVXNwINrZ6LMNBLgorfuTBK1UoRo1pPUHCYdqxbEYI2unak18mikd2WB7Fp3h0YI4\nVpGZnwKBgBxkAYnZv+jGI4MyEKdsQgxvROXXYOJZkWzsKuKxVkVpYP2V4nR2YMOJ\nViJQ8FUEnPq35cMDlUk4SnoqrrHIJNOvcJSCqM+bWHAioAsfByLbUPM8sm3CDdIk\nXVJl32HuKYPJOMIWfc7hIfxLRHnCN+coz2M6tgqMDs0E/OfjuqVZ\n-----END RSA PRIVATE KEY-----"
-private_key = PrivateKey.load_pkcs1(privateKeyPem, format='PEM')
-
-original_ct = "4501b4d669e01b9ef2dc800aa1b06d49196f5a09fe8fbcd037323c60eaf027bfb98432be4e4a26c567ffec718bcbea977dd26812fa071c33808b4d5ebb742d9879806094b6fbeea63d25ea3141733b60e31c6912106e1b758a7fe0014f075193faa8b4622bfd5d3013f0a32190a95de61a3604711bc62945f95a6522bd4dfed0a994ef185b28c281f7b5e4c8ed41176d12d9fc1b837e6a0111d0132d08a6d6f0580de0c9eed8ed105531799482d1e466c68c23b0c222af7fc12ac279bc4ff57e7b4586d209371b38c4c1035edd418dc5f960441cb21ea2bedbfea86de0d7861e81021b650a1de51002c315f1e7c12debe4dcebf790caaa54a2f26b149cf9e77d"
-pt = bytes.fromhex("54657374")
-
-print('----------------------------------------------')
-print("Test with original ciphertext:")
-ct = bytes.fromhex(f"{original_ct}")
-try:
- message = rsa.decrypt(ct, private_key)
-except:
- print("[*] \033[91mInvalid decryption\033[0m")
-else:
- print("[!] \033[92mNo errors in decryption\033[0m")
- print("message == pt?", message == pt)
-
-print('----------------------------------------------')
-print("Test with prepended bytes to ciphertext:")
-ct_with_prepend = bytes.fromhex(f"0000{original_ct}")
-assert ct != ct_with_prepend
-try:
- message = rsa.decrypt(ct_with_prepend, private_key)
-except:
- print("\033[92m[*] Invalid decryption\033[0m")
-else:
- print("\033[91m[!] No errors in decryption\033[0m")
- print("message == pt?", message == pt)
-
-print('----------------------------------------------')
-print("Test with appended bytes to ciphertext:")
-ct_with_append = bytes.fromhex(f"{original_ct}0000")
-assert ct != ct_with_append
-try:
- message = rsa.decrypt(ct_with_append, private_key)
-except:
- print("\033[92m[*] Invalid decryption\033[0m")
-else:
- print("\033[91m[!] No errors in decryption\033[0m")
- print("message == pt?", message == pt)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/wycheproof-4096.py new/rsa-4.7/wycheproof-4096.py
--- old/rsa-4.6/wycheproof-4096.py 2020-06-03 15:00:39.000000000 +0200
+++ new/rsa-4.7/wycheproof-4096.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,86 +0,0 @@
-#!/usr/bin/env python3
-
-import rsa
-from rsa import PrivateKey
-
-import json
-
-"""
-{
- "algorithm" : "RSAES-PKCS1-v1_5",
- "generatorVersion" : "0.8r12",
- "numberOfTests" : 65,
- "header" : [
- "Test vectors of type RsaesPkcs1Decrypt are intended to check the decryption",
- "of RSA encrypted ciphertexts."
- ],
- "notes" : {
- "InvalidPkcs1Padding" : "This is a test vector with an invalid PKCS #1 padding. Implementations must ensure that different error conditions cannot be distinguished, since the information about the error condition can be used for a padding oracle attack. (RFC 8017 Section 7.2.2)"
- },
- "schema" : "rsaes_pkcs1_decrypt_schema.json",
- "testGroups" : [
- {
- "d" : "00d3519bd86edf5dbe9c64a3781713dd049b747f5651fd918cce8a9b80b6d6a2fb6aab334ab569a89b58982e0aae373090299fa227f9652b802d23ee5ca6824c433d01d40bb0473b16190a8bfb137c0a704b4f49b45015bfbee1f670446f07595259d70c7d79ae95f9b2543b0162ebb763ebb81c4b6edff9d197dede1dbe57e40466d156d4dfd5d7634c45534fb2bbbd1bf257817a173c0795fdbcc533976f4a0d04160f299af5dc272a814b36d5bae5116b9542178f1d554cab7a6453035482b981add4bd8ffd5d500839b23e30ebd3f3868f07584cbd12ba089325982860f69f2bdc7077b6c60f58a2272823379e1023704165f7c14f64a18fd5b245a18149b7eda3385a56ba9e79502a27bf13865cde35be15de03d06aa6f08b172b7eeb4b73cbc157019c5d933584a8d1add61b7dbca3b253ca0cf93dc9a8a3aac2f50227022e692f7b4767556620cc928d63e31078c360e2ab4b71a917e19e7eb09380482e5b4ea88202871c2a29ca6f66b2fe304af609520e4f81d64c26768bb812a86679366611f4cf6e89e2bd1d9d7e28729c7f0e4e3152d7ad7f186fa32f01e169ff06a12001bc179dfd0dc942cbabc555f67f5fd043e0a3354340fa490d2f123367be926eb3e1dffe70c3151c87450f3217dc2aa0b5a7069c5a17d55614c9994139f7b37b49e9fe780af65a0e89
e2e58feaaffe163bc9d19eafd9cd29b0ef3cef3d01",
- "e" : "010001",
- "keysize" : 4096,
- "n" : "00f601be0dccd04aa40b12f3f191ae17c1f9c8c0b68e7a77e14be25c3c7907cb1d33a6ef418ef41852f32c98392bc5c9aed91c1a1501c503eab89b3ee6f4f8eb2e0fcfc41bd03609cf6a8eb3aa6f0fbe23187b33db4d34b66d128a8aba0a2abf40bb9d13d8e2554569a57ab1d8c61b8cad2dc88599ae0da5346e15dace1bac7bf69737c22f083be9b46bb8b1eab5957b2da740275e96c87195b96fe11452159dafcfd916cee5d749a77bc3905a5ebd387ae445e8fe70f16e9a086639779ceffbfd41557bd99aea6a371a6b4b160615a1a12bc6958d34bce0c85adcbd8392fa10ceca52209d56196ba3d273ce228f1f111192aa92de2a039798a17bcecb4dc6100e6f8ae8c2643f2ae768b2255f082c978e95ca551555f10608231cf8003bbf807969fff1e51914b9a8c9b8f4564645b9e5d705ffad29663f5dae3d76652b422e43f13e6c1491090805c2d1268a74a251177427e33a9a91175c3670b91746008bce1fd231e6e4f2ad70cb43aca5f07600a6d31dd02915243dfdd943a02165da367a6b7e4dae1dd2e8b836903080795d2585076cc1c15dd9e8d2e5e047526569b1bfd395d957eb9fde325d342d14426e71efdc1887515e53cdea5834921f928629e748eed097ac4024e2bf255d70411f87373948cf8e8aa7effa2b0ab47d5166091e1aedec60568b155bd9c27b
c55f3ece35f83d636dbcd5abf4853a051db94d5045",
- "privateKeyJwk" : {
- "alg" : "RSA1_5",
- "d" : "01Gb2G7fXb6cZKN4FxPdBJt0f1ZR_ZGMzoqbgLbWovtqqzNKtWmom1iYLgquNzCQKZ-iJ_llK4AtI-5cpoJMQz0B1AuwRzsWGQqL-xN8CnBLT0m0UBW_vuH2cERvB1lSWdcMfXmulfmyVDsBYuu3Y-u4HEtu3_nRl97eHb5X5ARm0VbU39XXY0xFU0-yu70b8leBehc8B5X9vMUzl29KDQQWDyma9dwnKoFLNtW65RFrlUIXjx1VTKt6ZFMDVIK5ga3UvY_9XVAIObI-MOvT84aPB1hMvRK6CJMlmChg9p8r3HB3tsYPWKInKCM3nhAjcEFl98FPZKGP1bJFoYFJt-2jOFpWup55UConvxOGXN41vhXeA9BqpvCLFyt-60tzy8FXAZxdkzWEqNGt1ht9vKOyU8oM-T3JqKOqwvUCJwIuaS97R2dVZiDMko1j4xB4w2Diq0txqRfhnn6wk4BILltOqIIChxwqKcpvZrL-MEr2CVIOT4HWTCZ2i7gSqGZ5NmYR9M9uieK9HZ1-KHKcfw5OMVLXrX8Yb6MvAeFp_wahIAG8F539DclCy6vFVfZ_X9BD4KM1Q0D6SQ0vEjNnvpJus-Hf_nDDFRyHRQ8yF9wqoLWnBpxaF9VWFMmZQTn3s3tJ6f54CvZaDoni5Y_qr_4WO8nRnq_ZzSmw7zzvPQE",
- "dp" : "gVSGqrCgiWv5fxPj6x9_XEkZW0nMO2J3QSo2iHmLGPRkIt9HnLlBs7VOJZZKPWm4l7zINVFg5YtK8p8XRd0sq7Zw9jS5wFjms1FJR_LCfeXtQk9zseHxvkoYiRGgMz86Zohliz7o4yZaUS5N6srcRw7jBOu1IkEjr7RhmE_oUk_gtrMNMqWfbtLcdKlrx8v9G7ROWKcJIjXF1icuEqLIYsuMjPXRCapPscZHKHWhRGDB7VIHxLIrxJTHlH63ymOoyv0xNh0ADd8WotefE92RQNl5FJtIjL9ElFpbaq8TIhv0SR67t_yifKIOIh9Jw8N7ifzy3A4stj-Pipt6FCJQWQ",
- "dq" : "th2E_5NKTkN7Fu4bS5_fSuEzcLU4W956VGShI8A0PfV1-eEo7535RCMNOcyc9dwO2yi350C2nvAkwb_uOfzVNA_66gAQFgxTXcCSDnzYG-Uz0A-lVKH8TT4CxGFWn158p4fxUV7fRbGWt1mITeZSw41ZNM-SUk6Ae007WQvDm8QX7kiFp2HSjdrc5sj9s7lh0-f9SAZN-TQKln-LeZl0OIQfSFeaR23bVQiMMI9o8rKdAcZZelp8jQZihPY-N6aMOHnDKqODZnX9DrJxmIOpGURWHp3X6KprsXFX8IxI-Ob65cPlortrXVgO7GyX3c2b4KSe8oOnAxrXq6jUON9OlQ",
- "e" : "AQAB",
- "kid" : "none",
- "kty" : "RSA",
- "n" : "9gG-DczQSqQLEvPxka4XwfnIwLaOenfhS-JcPHkHyx0zpu9BjvQYUvMsmDkrxcmu2RwaFQHFA-q4mz7m9PjrLg_PxBvQNgnPao6zqm8PviMYezPbTTS2bRKKiroKKr9Au50T2OJVRWmlerHYxhuMrS3IhZmuDaU0bhXazhuse_aXN8IvCDvptGu4seq1lXstp0AnXpbIcZW5b-EUUhWdr8_ZFs7l10mne8OQWl69OHrkRej-cPFumghmOXec7_v9QVV72Zrqajcaa0sWBhWhoSvGlY00vODIWty9g5L6EM7KUiCdVhlro9JzziKPHxERkqqS3ioDl5ihe87LTcYQDm-K6MJkPyrnaLIlXwgsl46VylUVVfEGCCMc-AA7v4B5af_x5RkUuajJuPRWRkW55dcF_60pZj9drj12ZStCLkPxPmwUkQkIBcLRJop0olEXdCfjOpqRF1w2cLkXRgCLzh_SMebk8q1wy0OspfB2AKbTHdApFSQ9_dlDoCFl2jZ6a35Nrh3S6Lg2kDCAeV0lhQdswcFd2ejS5eBHUmVpsb_TldlX65_eMl00LRRCbnHv3BiHUV5TzepYNJIfkoYp50ju0JesQCTivyVdcEEfhzc5SM-Oiqfv-isKtH1RZgkeGu3sYFaLFVvZwnvFXz7ONfg9Y2281av0hToFHblNUEU",
- "p" : "_CG4VcWtTKK2lwUWQG9xxuee_EEm5lmHctseCC3msN3aqiopUfBBSOhuC94oITt_YA-YcwgwHqzqE0Biuww932KNqav5PvHOPnWwlTpITb01VL1cBkmTPdd-UnVj6Q8FqAE_3ayVjDKTeOlDA7MEvl-d8f5bBDp_3ZRwCj8LHLvQUWt82UxXypbZ_SqMqXOZEhjLozocI9gQ91GdH3cCq3Kv_bP4ShsqiBFuQDO8TQz8eYnGV-D-lOlkR2rli65reHbzbAnTKxpj-MR8lKdMku7fdfwnz_4PhFI2PkvI92U_PLVer2k87HDRPIdd6TWosgQ5q36T92mBxZV_xbtE2Q",
- "q" : "-cf3SKUF0j7O-ahfgJfIz31wKO9skOIqM2URWC0sw2NuNOrTcgTb0i8UKj-x1fhXsDEMekM_Ua4U1GCLAbQ6qMeuZ4Nff74LnZeUiznpui06FoftuLVu5w_wU22rTQVR9x7Q2u6eQSRJ9fCZvMFeTvBVTcefh_7FoN6nF8cFQ5K_REYTk3QBu-88Ivv35zjFh3m5gWCaH5wR3W8LvpmW4nc0WeTO8kewKp_CEpasV6WxBWGCQxDPvezJDgZZg3DjaYcT_b4lKOxO89zKrnAe7cPlStbnr05o47Ob0ul6yRGZNsZHpQNRHLKD35hM_XwH8PVqqK4xZpSO8_QbCFmTTQ",
- "qi" : "IvuOX82bdnEE5xJE21MFjBgGHhsNH2O3Pi1ZqV4qEM2HQmoz2hPCh83vgTbl5H6T-5swrZJiintUP0jrARqGNWqzy0gPJ-ORsBjKGH2Xrz2C4xhh7K-mY9t4qonDvUaOaq3vs6Q_eLwAuAFMldtU6dIaAX6PIfZxVF7d6all6jLf_0XNo3_KGqUTL2yO7SIr0B_tWm59Y5WAxZVXd6hlRMLEyTm9uLTEht2lMHKGGgM0NZvbN1hHXknZDQU5lE54z8_Y__Vbsxoc68ZbKPUeeQcBsveRIYiYTwNObpbhxSUeM_44-yIbznqQqGhXxfVrbKdzB8RdUpCx8Iit4IKzSQ"
- },
- "privateKeyPem" : "-----BEGIN RSA PRIVATE KEY-----\nMIIJKgIBAAKCAgEA9gG+DczQSqQLEvPxka4XwfnIwLaOenfhS+JcPHkHyx0zpu9B\njvQYUvMsmDkrxcmu2RwaFQHFA+q4mz7m9PjrLg/PxBvQNgnPao6zqm8PviMYezPb\nTTS2bRKKiroKKr9Au50T2OJVRWmlerHYxhuMrS3IhZmuDaU0bhXazhuse/aXN8Iv\nCDvptGu4seq1lXstp0AnXpbIcZW5b+EUUhWdr8/ZFs7l10mne8OQWl69OHrkRej+\ncPFumghmOXec7/v9QVV72Zrqajcaa0sWBhWhoSvGlY00vODIWty9g5L6EM7KUiCd\nVhlro9JzziKPHxERkqqS3ioDl5ihe87LTcYQDm+K6MJkPyrnaLIlXwgsl46VylUV\nVfEGCCMc+AA7v4B5af/x5RkUuajJuPRWRkW55dcF/60pZj9drj12ZStCLkPxPmwU\nkQkIBcLRJop0olEXdCfjOpqRF1w2cLkXRgCLzh/SMebk8q1wy0OspfB2AKbTHdAp\nFSQ9/dlDoCFl2jZ6a35Nrh3S6Lg2kDCAeV0lhQdswcFd2ejS5eBHUmVpsb/TldlX\n65/eMl00LRRCbnHv3BiHUV5TzepYNJIfkoYp50ju0JesQCTivyVdcEEfhzc5SM+O\niqfv+isKtH1RZgkeGu3sYFaLFVvZwnvFXz7ONfg9Y2281av0hToFHblNUEUCAwEA\nAQKCAgEA01Gb2G7fXb6cZKN4FxPdBJt0f1ZR/ZGMzoqbgLbWovtqqzNKtWmom1iY\nLgquNzCQKZ+iJ/llK4AtI+5cpoJMQz0B1AuwRzsWGQqL+xN8CnBLT0m0UBW/vuH2\ncERvB1lSWdcMfXmulfmyVDsBYuu3Y+u4HEtu3/nRl97eHb5X5ARm0VbU39XXY0xF\nU0+yu70b8leBehc
8B5X9vMUzl29KDQQWDyma9dwnKoFLNtW65RFrlUIXjx1VTKt6\nZFMDVIK5ga3UvY/9XVAIObI+MOvT84aPB1hMvRK6CJMlmChg9p8r3HB3tsYPWKIn\nKCM3nhAjcEFl98FPZKGP1bJFoYFJt+2jOFpWup55UConvxOGXN41vhXeA9BqpvCL\nFyt+60tzy8FXAZxdkzWEqNGt1ht9vKOyU8oM+T3JqKOqwvUCJwIuaS97R2dVZiDM\nko1j4xB4w2Diq0txqRfhnn6wk4BILltOqIIChxwqKcpvZrL+MEr2CVIOT4HWTCZ2\ni7gSqGZ5NmYR9M9uieK9HZ1+KHKcfw5OMVLXrX8Yb6MvAeFp/wahIAG8F539DclC\ny6vFVfZ/X9BD4KM1Q0D6SQ0vEjNnvpJus+Hf/nDDFRyHRQ8yF9wqoLWnBpxaF9VW\nFMmZQTn3s3tJ6f54CvZaDoni5Y/qr/4WO8nRnq/ZzSmw7zzvPQECggEBAPwhuFXF\nrUyitpcFFkBvccbnnvxBJuZZh3LbHggt5rDd2qoqKVHwQUjobgveKCE7f2APmHMI\nMB6s6hNAYrsMPd9ijamr+T7xzj51sJU6SE29NVS9XAZJkz3XflJ1Y+kPBagBP92s\nlYwyk3jpQwOzBL5fnfH+WwQ6f92UcAo/Cxy70FFrfNlMV8qW2f0qjKlzmRIYy6M6\nHCPYEPdRnR93Aqtyr/2z+EobKogRbkAzvE0M/HmJxlfg/pTpZEdq5Yuua3h282wJ\n0ysaY/jEfJSnTJLu33X8J8/+D4RSNj5LyPdlPzy1Xq9pPOxw0TyHXek1qLIEOat+\nk/dpgcWVf8W7RNkCggEBAPnH90ilBdI+zvmoX4CXyM99cCjvbJDiKjNlEVgtLMNj\nbjTq03IE29IvFCo/sdX4V7AxDHpDP1GuFNRgiwG0OqjHrmeDX3++C52XlIs56bot\nOhaH7bi1bucP8FNtq00FUf
ce0NrunkEkSfXwmbzBXk7wVU3Hn4f+xaDepxfHBUOS\nv0RGE5N0AbvvPCL79+c4xYd5uYFgmh+cEd1vC76ZluJ3NFnkzvJHsCqfwhKWrFel\nsQVhgkMQz73syQ4GWYNw42mHE/2+JSjsTvPcyq5wHu3D5UrW569OaOOzm9LpeskR\nmTbGR6UDURyyg9+YTP18B/D1aqiuMWaUjvP0GwhZk00CggEBAIFUhqqwoIlr+X8T\n4+sff1xJGVtJzDtid0EqNoh5ixj0ZCLfR5y5QbO1TiWWSj1puJe8yDVRYOWLSvKf\nF0XdLKu2cPY0ucBY5rNRSUfywn3l7UJPc7Hh8b5KGIkRoDM/OmaIZYs+6OMmWlEu\nTerK3EcO4wTrtSJBI6+0YZhP6FJP4LazDTKln27S3HSpa8fL/Ru0TlinCSI1xdYn\nLhKiyGLLjIz10QmqT7HGRyh1oURgwe1SB8SyK8SUx5R+t8pjqMr9MTYdAA3fFqLX\nnxPdkUDZeRSbSIy/RJRaW2qvEyIb9Ekeu7f8onyiDiIfScPDe4n88twOLLY/j4qb\nehQiUFkCggEBALYdhP+TSk5DexbuG0uf30rhM3C1OFveelRkoSPAND31dfnhKO+d\n+UQjDTnMnPXcDtsot+dAtp7wJMG/7jn81TQP+uoAEBYMU13Akg582BvlM9APpVSh\n/E0+AsRhVp9efKeH8VFe30WxlrdZiE3mUsONWTTPklJOgHtNO1kLw5vEF+5Ihadh\n0o3a3ObI/bO5YdPn/UgGTfk0CpZ/i3mZdDiEH0hXmkdt21UIjDCPaPKynQHGWXpa\nfI0GYoT2PjemjDh5wyqjg2Z1/Q6ycZiDqRlEVh6d1+iqa7FxV/CMSPjm+uXD5aK7\na11YDuxsl93Nm+CknvKDpwMa16uo1DjfTpUCggEAIvuOX82bdnEE5xJE21MFjBgG\nHhsNH2O3Pi1ZqV4qEM2HQmoz2hPCh
83vgTbl5H6T+5swrZJiintUP0jrARqGNWqz\ny0gPJ+ORsBjKGH2Xrz2C4xhh7K+mY9t4qonDvUaOaq3vs6Q/eLwAuAFMldtU6dIa\nAX6PIfZxVF7d6all6jLf/0XNo3/KGqUTL2yO7SIr0B/tWm59Y5WAxZVXd6hlRMLE\nyTm9uLTEht2lMHKGGgM0NZvbN1hHXknZDQU5lE54z8/Y//Vbsxoc68ZbKPUeeQcB\nsveRIYiYTwNObpbhxSUeM/44+yIbznqQqGhXxfVrbKdzB8RdUpCx8Iit4IKzSQ==\n-----END RSA PRIVATE KEY-----",
- "privateKeyPkcs8" : "30820944020100300d06092a864886f70d01010105000482092e3082092a0201000282020100f601be0dccd04aa40b12f3f191ae17c1f9c8c0b68e7a77e14be25c3c7907cb1d33a6ef418ef41852f32c98392bc5c9aed91c1a1501c503eab89b3ee6f4f8eb2e0fcfc41bd03609cf6a8eb3aa6f0fbe23187b33db4d34b66d128a8aba0a2abf40bb9d13d8e2554569a57ab1d8c61b8cad2dc88599ae0da5346e15dace1bac7bf69737c22f083be9b46bb8b1eab5957b2da740275e96c87195b96fe11452159dafcfd916cee5d749a77bc3905a5ebd387ae445e8fe70f16e9a086639779ceffbfd41557bd99aea6a371a6b4b160615a1a12bc6958d34bce0c85adcbd8392fa10ceca52209d56196ba3d273ce228f1f111192aa92de2a039798a17bcecb4dc6100e6f8ae8c2643f2ae768b2255f082c978e95ca551555f10608231cf8003bbf807969fff1e51914b9a8c9b8f4564645b9e5d705ffad29663f5dae3d76652b422e43f13e6c1491090805c2d1268a74a251177427e33a9a91175c3670b91746008bce1fd231e6e4f2ad70cb43aca5f07600a6d31dd02915243dfdd943a02165da367a6b7e4dae1dd2e8b836903080795d2585076cc1c15dd9e8d2e5e047526569b1bfd395d957eb9fde325d342d14426e71efdc1887515e53cdea5834921f928629
e748eed097ac4024e2bf255d70411f87373948cf8e8aa7effa2b0ab47d5166091e1aedec60568b155bd9c27bc55f3ece35f83d636dbcd5abf4853a051db94d504502030100010282020100d3519bd86edf5dbe9c64a3781713dd049b747f5651fd918cce8a9b80b6d6a2fb6aab334ab569a89b58982e0aae373090299fa227f9652b802d23ee5ca6824c433d01d40bb0473b16190a8bfb137c0a704b4f49b45015bfbee1f670446f07595259d70c7d79ae95f9b2543b0162ebb763ebb81c4b6edff9d197dede1dbe57e40466d156d4dfd5d7634c45534fb2bbbd1bf257817a173c0795fdbcc533976f4a0d04160f299af5dc272a814b36d5bae5116b9542178f1d554cab7a6453035482b981add4bd8ffd5d500839b23e30ebd3f3868f07584cbd12ba089325982860f69f2bdc7077b6c60f58a2272823379e1023704165f7c14f64a18fd5b245a18149b7eda3385a56ba9e79502a27bf13865cde35be15de03d06aa6f08b172b7eeb4b73cbc157019c5d933584a8d1add61b7dbca3b253ca0cf93dc9a8a3aac2f50227022e692f7b4767556620cc928d63e31078c360e2ab4b71a917e19e7eb09380482e5b4ea88202871c2a29ca6f66b2fe304af609520e4f81d64c26768bb812a86679366611f4cf6e89e2bd1d9d7e28729c7f0e4e3152d7ad7f186fa32f01e169ff06a12001bc179dfd0
dc942cbabc555f67f5fd043e0a3354340fa490d2f123367be926eb3e1dffe70c3151c87450f3217dc2aa0b5a7069c5a17d55614c9994139f7b37b49e9fe780af65a0e89e2e58feaaffe163bc9d19eafd9cd29b0ef3cef3d010282010100fc21b855c5ad4ca2b6970516406f71c6e79efc4126e6598772db1e082de6b0dddaaa2a2951f04148e86e0bde28213b7f600f987308301eacea134062bb0c3ddf628da9abf93ef1ce3e75b0953a484dbd3554bd5c0649933dd77e527563e90f05a8013fddac958c329378e94303b304be5f9df1fe5b043a7fdd94700a3f0b1cbbd0516b7cd94c57ca96d9fd2a8ca973991218cba33a1c23d810f7519d1f7702ab72affdb3f84a1b2a88116e4033bc4d0cfc7989c657e0fe94e964476ae58bae6b7876f36c09d32b1a63f8c47c94a74c92eedf75fc27cffe0f8452363e4bc8f7653f3cb55eaf693cec70d13c875de935a8b20439ab7e93f76981c5957fc5bb44d90282010100f9c7f748a505d23ecef9a85f8097c8cf7d7028ef6c90e22a336511582d2cc3636e34ead37204dbd22f142a3fb1d5f857b0310c7a433f51ae14d4608b01b43aa8c7ae67835f7fbe0b9d97948b39e9ba2d3a1687edb8b56ee70ff0536dab4d0551f71ed0daee9e412449f5f099bcc15e4ef0554dc79f87fec5a0dea717c7054392bf444613937401bbef3c22fbf7e738c5
8779b981609a1f9c11dd6f0bbe9996e2773459e4cef247b02a9fc21296ac57a5b10561824310cfbdecc90e06598370e3698713fdbe2528ec4ef3dccaae701eedc3e54ad6e7af4e68e3b39bd2e97ac9119936c647a503511cb283df984cfd7c07f0f56aa8ae3166948ef3f41b0859934d0282010100815486aab0a0896bf97f13e3eb1f7f5c49195b49cc3b6277412a3688798b18f46422df479cb941b3b54e25964a3d69b897bcc8355160e58b4af29f1745dd2cabb670f634b9c058e6b3514947f2c27de5ed424f73b1e1f1be4a188911a0333f3a6688658b3ee8e3265a512e4deacadc470ee304ebb5224123afb461984fe8524fe0b6b30d32a59f6ed2dc74a96bc7cbfd1bb44e58a7092235c5d6272e12a2c862cb8c8cf5d109aa4fb1c6472875a14460c1ed5207c4b22bc494c7947eb7ca63a8cafd31361d000ddf16a2d79f13dd9140d979149b488cbf44945a5b6aaf13221bf4491ebbb7fca27ca20e221f49c3c37b89fcf2dc0e2cb63f8f8a9b7a142250590282010100b61d84ff934a4e437b16ee1b4b9fdf4ae13370b5385bde7a5464a123c0343df575f9e128ef9df944230d39cc9cf5dc0edb28b7e740b69ef024c1bfee39fcd5340ffaea0010160c535dc0920e7cd81be533d00fa554a1fc4d3e02c461569f5e7ca787f1515edf45b196b759884de652c38d5934cf92524e807
b4d3b590bc39bc417ee4885a761d28ddadce6c8fdb3b961d3e7fd48064df9340a967f8b79997438841f48579a476ddb55088c308f68f2b29d01c6597a5a7c8d066284f63e37a68c3879c32aa3836675fd0eb2719883a91944561e9dd7e8aa6bb17157f08c48f8e6fae5c3e5a2bb6b5d580eec6c97ddcd9be0a49ef283a7031ad7aba8d438df4e950282010022fb8e5fcd9b767104e71244db53058c18061e1b0d1f63b73e2d59a95e2a10cd87426a33da13c287cdef8136e5e47e93fb9b30ad92628a7b543f48eb011a86356ab3cb480f27e391b018ca187d97af3d82e31861ecafa663db78aa89c3bd468e6aadefb3a43f78bc00b8014c95db54e9d21a017e8f21f671545edde9a965ea32dfff45cda37fca1aa5132f6c8eed222bd01fed5a6e7d639580c5955777a86544c2c4c939bdb8b4c486dda53072861a0334359bdb3758475e49d90d0539944e78cfcfd8fff55bb31a1cebc65b28f51e790701b2f7912188984f034e6e96e1c5251e33fe38fb221bce7a90a86857c5f56b6ca77307c45d5290b1f088ade082b349",
- "type" : "RsaesPkcs1Decrypt",
-
- {
- "tcId" : 31,
- "comment" : "prepended bytes to ciphertext",
- "msg" : "54657374",
- "ct" : "000004327a40b02bf671557124f963a57b3860e92cff62c439c0425b48b4346fc60c0ebf7a7584f94d34450d20cbd877c8d5dca12f517b486c2cccb8e1f467276ac03aadc94a97fcd224994d81672eb577cf0bbd6aa948d3dc4d7f06456f6650e5620435c078787db0f36124b292349ebe011ce54b3e932fac6525a37c793846a4f08ac3694d649f4a04e24e1f5e50f11a0492a68a509cf30e565ceb9931565b4aa5c3514b2ba87c4c0937ebcd6bb2b8248abb0970d30480059daea4c6ae556f6e91b25ffa5a4f723a9bf98a0bff668a1f0c799d3b0c85b19190dbfb5d894f84fa5d72d261dd2c09013dc0981cd0c46d7a08710801590aac8ff17b237387427ab3c6d6f2a59434b37f123bc7fc0a83d5ca5793540cba582e41b262859d36eabd0aa8203ca05d4c16aaf2a7b2bc7f251497d4c8f8654deae3cfffc5d3599ab4779585bf1673196782075a91ee7c3296a2edc6ee6c30344dd0c0a82274ae17982eeb23eca5c39c7d11a2dd171c70108b0a33164fc175425586f714deb5552e90e561f7882211d3f01c07867256d0cca511e61b0cb51189d8e5124e8cacdab6042bd421447ffa7fe6cad8e7f17dd3e599bae061f85bb5181726d1c0c5bbf2c2a5c1e60f486a81782e58d90ccd5a769f98361765441de142bb0a7f7bd406a537d5be0c2773e847b1df1d49a
c1daa963feec84954b72a695b74281159647a62a3c19acdda",
- "result" : "invalid",
- "flags" : []
- },
-
-
-"""
-
-print("\nTest with prepended bytes to ciphertext\n")
-
-privateKeyPem = "-----BEGIN RSA PRIVATE KEY-----\nMIIJKgIBAAKCAgEA9gG+DczQSqQLEvPxka4XwfnIwLaOenfhS+JcPHkHyx0zpu9B\njvQYUvMsmDkrxcmu2RwaFQHFA+q4mz7m9PjrLg/PxBvQNgnPao6zqm8PviMYezPb\nTTS2bRKKiroKKr9Au50T2OJVRWmlerHYxhuMrS3IhZmuDaU0bhXazhuse/aXN8Iv\nCDvptGu4seq1lXstp0AnXpbIcZW5b+EUUhWdr8/ZFs7l10mne8OQWl69OHrkRej+\ncPFumghmOXec7/v9QVV72Zrqajcaa0sWBhWhoSvGlY00vODIWty9g5L6EM7KUiCd\nVhlro9JzziKPHxERkqqS3ioDl5ihe87LTcYQDm+K6MJkPyrnaLIlXwgsl46VylUV\nVfEGCCMc+AA7v4B5af/x5RkUuajJuPRWRkW55dcF/60pZj9drj12ZStCLkPxPmwU\nkQkIBcLRJop0olEXdCfjOpqRF1w2cLkXRgCLzh/SMebk8q1wy0OspfB2AKbTHdAp\nFSQ9/dlDoCFl2jZ6a35Nrh3S6Lg2kDCAeV0lhQdswcFd2ejS5eBHUmVpsb/TldlX\n65/eMl00LRRCbnHv3BiHUV5TzepYNJIfkoYp50ju0JesQCTivyVdcEEfhzc5SM+O\niqfv+isKtH1RZgkeGu3sYFaLFVvZwnvFXz7ONfg9Y2281av0hToFHblNUEUCAwEA\nAQKCAgEA01Gb2G7fXb6cZKN4FxPdBJt0f1ZR/ZGMzoqbgLbWovtqqzNKtWmom1iY\nLgquNzCQKZ+iJ/llK4AtI+5cpoJMQz0B1AuwRzsWGQqL+xN8CnBLT0m0UBW/vuH2\ncERvB1lSWdcMfXmulfmyVDsBYuu3Y+u4HEtu3/nRl97eHb5X5ARm0VbU39XXY0xF\nU0+yu70b8leBehc8B5X9vMU
zl29KDQQWDyma9dwnKoFLNtW65RFrlUIXjx1VTKt6\nZFMDVIK5ga3UvY/9XVAIObI+MOvT84aPB1hMvRK6CJMlmChg9p8r3HB3tsYPWKIn\nKCM3nhAjcEFl98FPZKGP1bJFoYFJt+2jOFpWup55UConvxOGXN41vhXeA9BqpvCL\nFyt+60tzy8FXAZxdkzWEqNGt1ht9vKOyU8oM+T3JqKOqwvUCJwIuaS97R2dVZiDM\nko1j4xB4w2Diq0txqRfhnn6wk4BILltOqIIChxwqKcpvZrL+MEr2CVIOT4HWTCZ2\ni7gSqGZ5NmYR9M9uieK9HZ1+KHKcfw5OMVLXrX8Yb6MvAeFp/wahIAG8F539DclC\ny6vFVfZ/X9BD4KM1Q0D6SQ0vEjNnvpJus+Hf/nDDFRyHRQ8yF9wqoLWnBpxaF9VW\nFMmZQTn3s3tJ6f54CvZaDoni5Y/qr/4WO8nRnq/ZzSmw7zzvPQECggEBAPwhuFXF\nrUyitpcFFkBvccbnnvxBJuZZh3LbHggt5rDd2qoqKVHwQUjobgveKCE7f2APmHMI\nMB6s6hNAYrsMPd9ijamr+T7xzj51sJU6SE29NVS9XAZJkz3XflJ1Y+kPBagBP92s\nlYwyk3jpQwOzBL5fnfH+WwQ6f92UcAo/Cxy70FFrfNlMV8qW2f0qjKlzmRIYy6M6\nHCPYEPdRnR93Aqtyr/2z+EobKogRbkAzvE0M/HmJxlfg/pTpZEdq5Yuua3h282wJ\n0ysaY/jEfJSnTJLu33X8J8/+D4RSNj5LyPdlPzy1Xq9pPOxw0TyHXek1qLIEOat+\nk/dpgcWVf8W7RNkCggEBAPnH90ilBdI+zvmoX4CXyM99cCjvbJDiKjNlEVgtLMNj\nbjTq03IE29IvFCo/sdX4V7AxDHpDP1GuFNRgiwG0OqjHrmeDX3++C52XlIs56bot\nOhaH7bi1bucP8FNtq00FUfce0Nrunk
EkSfXwmbzBXk7wVU3Hn4f+xaDepxfHBUOS\nv0RGE5N0AbvvPCL79+c4xYd5uYFgmh+cEd1vC76ZluJ3NFnkzvJHsCqfwhKWrFel\nsQVhgkMQz73syQ4GWYNw42mHE/2+JSjsTvPcyq5wHu3D5UrW569OaOOzm9LpeskR\nmTbGR6UDURyyg9+YTP18B/D1aqiuMWaUjvP0GwhZk00CggEBAIFUhqqwoIlr+X8T\n4+sff1xJGVtJzDtid0EqNoh5ixj0ZCLfR5y5QbO1TiWWSj1puJe8yDVRYOWLSvKf\nF0XdLKu2cPY0ucBY5rNRSUfywn3l7UJPc7Hh8b5KGIkRoDM/OmaIZYs+6OMmWlEu\nTerK3EcO4wTrtSJBI6+0YZhP6FJP4LazDTKln27S3HSpa8fL/Ru0TlinCSI1xdYn\nLhKiyGLLjIz10QmqT7HGRyh1oURgwe1SB8SyK8SUx5R+t8pjqMr9MTYdAA3fFqLX\nnxPdkUDZeRSbSIy/RJRaW2qvEyIb9Ekeu7f8onyiDiIfScPDe4n88twOLLY/j4qb\nehQiUFkCggEBALYdhP+TSk5DexbuG0uf30rhM3C1OFveelRkoSPAND31dfnhKO+d\n+UQjDTnMnPXcDtsot+dAtp7wJMG/7jn81TQP+uoAEBYMU13Akg582BvlM9APpVSh\n/E0+AsRhVp9efKeH8VFe30WxlrdZiE3mUsONWTTPklJOgHtNO1kLw5vEF+5Ihadh\n0o3a3ObI/bO5YdPn/UgGTfk0CpZ/i3mZdDiEH0hXmkdt21UIjDCPaPKynQHGWXpa\nfI0GYoT2PjemjDh5wyqjg2Z1/Q6ycZiDqRlEVh6d1+iqa7FxV/CMSPjm+uXD5aK7\na11YDuxsl93Nm+CknvKDpwMa16uo1DjfTpUCggEAIvuOX82bdnEE5xJE21MFjBgG\nHhsNH2O3Pi1ZqV4qEM2HQmoz2hPCh83vgTbl5
H6T+5swrZJiintUP0jrARqGNWqz\ny0gPJ+ORsBjKGH2Xrz2C4xhh7K+mY9t4qonDvUaOaq3vs6Q/eLwAuAFMldtU6dIa\nAX6PIfZxVF7d6all6jLf/0XNo3/KGqUTL2yO7SIr0B/tWm59Y5WAxZVXd6hlRMLE\nyTm9uLTEht2lMHKGGgM0NZvbN1hHXknZDQU5lE54z8/Y//Vbsxoc68ZbKPUeeQcB\nsveRIYiYTwNObpbhxSUeM/44+yIbznqQqGhXxfVrbKdzB8RdUpCx8Iit4IKzSQ==\n-----END RSA PRIVATE KEY-----"
-private_key = PrivateKey.load_pkcs1(privateKeyPem, format='PEM')
-
-ct = bytes.fromhex("000004327a40b02bf671557124f963a57b3860e92cff62c439c0425b48b4346fc60c0ebf7a7584f94d34450d20cbd877c8d5dca12f517b486c2cccb8e1f467276ac03aadc94a97fcd224994d81672eb577cf0bbd6aa948d3dc4d7f06456f6650e5620435c078787db0f36124b292349ebe011ce54b3e932fac6525a37c793846a4f08ac3694d649f4a04e24e1f5e50f11a0492a68a509cf30e565ceb9931565b4aa5c3514b2ba87c4c0937ebcd6bb2b8248abb0970d30480059daea4c6ae556f6e91b25ffa5a4f723a9bf98a0bff668a1f0c799d3b0c85b19190dbfb5d894f84fa5d72d261dd2c09013dc0981cd0c46d7a08710801590aac8ff17b237387427ab3c6d6f2a59434b37f123bc7fc0a83d5ca5793540cba582e41b262859d36eabd0aa8203ca05d4c16aaf2a7b2bc7f251497d4c8f8654deae3cfffc5d3599ab4779585bf1673196782075a91ee7c3296a2edc6ee6c30344dd0c0a82274ae17982eeb23eca5c39c7d11a2dd171c70108b0a33164fc175425586f714deb5552e90e561f7882211d3f01c07867256d0cca511e61b0cb51189d8e5124e8cacdab6042bd421447ffa7fe6cad8e7f17dd3e599bae061f85bb5181726d1c0c5bbf2c2a5c1e60f486a81782e58d90ccd5a769f98361765441de142bb0a7f7bd406a537d5be0c2773e847b1df1d4
9ac1daa963feec84954b72a695b74281159647a62a3c19acdda")
-pt = bytes.fromhex("54657374")
-
-try:
- message = rsa.decrypt(ct, private_key)
-except:
- print("[*] Invalid decryption")
-else:
- print("[!] No errors in decryption")
- print("message == pt?", message == pt)
-
-print("\nTest with original ciphertext\n")
-
-privateKeyPem = "-----BEGIN RSA PRIVATE KEY-----\nMIIJKgIBAAKCAgEA9gG+DczQSqQLEvPxka4XwfnIwLaOenfhS+JcPHkHyx0zpu9B\njvQYUvMsmDkrxcmu2RwaFQHFA+q4mz7m9PjrLg/PxBvQNgnPao6zqm8PviMYezPb\nTTS2bRKKiroKKr9Au50T2OJVRWmlerHYxhuMrS3IhZmuDaU0bhXazhuse/aXN8Iv\nCDvptGu4seq1lXstp0AnXpbIcZW5b+EUUhWdr8/ZFs7l10mne8OQWl69OHrkRej+\ncPFumghmOXec7/v9QVV72Zrqajcaa0sWBhWhoSvGlY00vODIWty9g5L6EM7KUiCd\nVhlro9JzziKPHxERkqqS3ioDl5ihe87LTcYQDm+K6MJkPyrnaLIlXwgsl46VylUV\nVfEGCCMc+AA7v4B5af/x5RkUuajJuPRWRkW55dcF/60pZj9drj12ZStCLkPxPmwU\nkQkIBcLRJop0olEXdCfjOpqRF1w2cLkXRgCLzh/SMebk8q1wy0OspfB2AKbTHdAp\nFSQ9/dlDoCFl2jZ6a35Nrh3S6Lg2kDCAeV0lhQdswcFd2ejS5eBHUmVpsb/TldlX\n65/eMl00LRRCbnHv3BiHUV5TzepYNJIfkoYp50ju0JesQCTivyVdcEEfhzc5SM+O\niqfv+isKtH1RZgkeGu3sYFaLFVvZwnvFXz7ONfg9Y2281av0hToFHblNUEUCAwEA\nAQKCAgEA01Gb2G7fXb6cZKN4FxPdBJt0f1ZR/ZGMzoqbgLbWovtqqzNKtWmom1iY\nLgquNzCQKZ+iJ/llK4AtI+5cpoJMQz0B1AuwRzsWGQqL+xN8CnBLT0m0UBW/vuH2\ncERvB1lSWdcMfXmulfmyVDsBYuu3Y+u4HEtu3/nRl97eHb5X5ARm0VbU39XXY0xF\nU0+yu70b8leBehc8B5X9vMU
zl29KDQQWDyma9dwnKoFLNtW65RFrlUIXjx1VTKt6\nZFMDVIK5ga3UvY/9XVAIObI+MOvT84aPB1hMvRK6CJMlmChg9p8r3HB3tsYPWKIn\nKCM3nhAjcEFl98FPZKGP1bJFoYFJt+2jOFpWup55UConvxOGXN41vhXeA9BqpvCL\nFyt+60tzy8FXAZxdkzWEqNGt1ht9vKOyU8oM+T3JqKOqwvUCJwIuaS97R2dVZiDM\nko1j4xB4w2Diq0txqRfhnn6wk4BILltOqIIChxwqKcpvZrL+MEr2CVIOT4HWTCZ2\ni7gSqGZ5NmYR9M9uieK9HZ1+KHKcfw5OMVLXrX8Yb6MvAeFp/wahIAG8F539DclC\ny6vFVfZ/X9BD4KM1Q0D6SQ0vEjNnvpJus+Hf/nDDFRyHRQ8yF9wqoLWnBpxaF9VW\nFMmZQTn3s3tJ6f54CvZaDoni5Y/qr/4WO8nRnq/ZzSmw7zzvPQECggEBAPwhuFXF\nrUyitpcFFkBvccbnnvxBJuZZh3LbHggt5rDd2qoqKVHwQUjobgveKCE7f2APmHMI\nMB6s6hNAYrsMPd9ijamr+T7xzj51sJU6SE29NVS9XAZJkz3XflJ1Y+kPBagBP92s\nlYwyk3jpQwOzBL5fnfH+WwQ6f92UcAo/Cxy70FFrfNlMV8qW2f0qjKlzmRIYy6M6\nHCPYEPdRnR93Aqtyr/2z+EobKogRbkAzvE0M/HmJxlfg/pTpZEdq5Yuua3h282wJ\n0ysaY/jEfJSnTJLu33X8J8/+D4RSNj5LyPdlPzy1Xq9pPOxw0TyHXek1qLIEOat+\nk/dpgcWVf8W7RNkCggEBAPnH90ilBdI+zvmoX4CXyM99cCjvbJDiKjNlEVgtLMNj\nbjTq03IE29IvFCo/sdX4V7AxDHpDP1GuFNRgiwG0OqjHrmeDX3++C52XlIs56bot\nOhaH7bi1bucP8FNtq00FUfce0Nrunk
EkSfXwmbzBXk7wVU3Hn4f+xaDepxfHBUOS\nv0RGE5N0AbvvPCL79+c4xYd5uYFgmh+cEd1vC76ZluJ3NFnkzvJHsCqfwhKWrFel\nsQVhgkMQz73syQ4GWYNw42mHE/2+JSjsTvPcyq5wHu3D5UrW569OaOOzm9LpeskR\nmTbGR6UDURyyg9+YTP18B/D1aqiuMWaUjvP0GwhZk00CggEBAIFUhqqwoIlr+X8T\n4+sff1xJGVtJzDtid0EqNoh5ixj0ZCLfR5y5QbO1TiWWSj1puJe8yDVRYOWLSvKf\nF0XdLKu2cPY0ucBY5rNRSUfywn3l7UJPc7Hh8b5KGIkRoDM/OmaIZYs+6OMmWlEu\nTerK3EcO4wTrtSJBI6+0YZhP6FJP4LazDTKln27S3HSpa8fL/Ru0TlinCSI1xdYn\nLhKiyGLLjIz10QmqT7HGRyh1oURgwe1SB8SyK8SUx5R+t8pjqMr9MTYdAA3fFqLX\nnxPdkUDZeRSbSIy/RJRaW2qvEyIb9Ekeu7f8onyiDiIfScPDe4n88twOLLY/j4qb\nehQiUFkCggEBALYdhP+TSk5DexbuG0uf30rhM3C1OFveelRkoSPAND31dfnhKO+d\n+UQjDTnMnPXcDtsot+dAtp7wJMG/7jn81TQP+uoAEBYMU13Akg582BvlM9APpVSh\n/E0+AsRhVp9efKeH8VFe30WxlrdZiE3mUsONWTTPklJOgHtNO1kLw5vEF+5Ihadh\n0o3a3ObI/bO5YdPn/UgGTfk0CpZ/i3mZdDiEH0hXmkdt21UIjDCPaPKynQHGWXpa\nfI0GYoT2PjemjDh5wyqjg2Z1/Q6ycZiDqRlEVh6d1+iqa7FxV/CMSPjm+uXD5aK7\na11YDuxsl93Nm+CknvKDpwMa16uo1DjfTpUCggEAIvuOX82bdnEE5xJE21MFjBgG\nHhsNH2O3Pi1ZqV4qEM2HQmoz2hPCh83vgTbl5
H6T+5swrZJiintUP0jrARqGNWqz\ny0gPJ+ORsBjKGH2Xrz2C4xhh7K+mY9t4qonDvUaOaq3vs6Q/eLwAuAFMldtU6dIa\nAX6PIfZxVF7d6all6jLf/0XNo3/KGqUTL2yO7SIr0B/tWm59Y5WAxZVXd6hlRMLE\nyTm9uLTEht2lMHKGGgM0NZvbN1hHXknZDQU5lE54z8/Y//Vbsxoc68ZbKPUeeQcB\nsveRIYiYTwNObpbhxSUeM/44+yIbznqQqGhXxfVrbKdzB8RdUpCx8Iit4IKzSQ==\n-----END RSA PRIVATE KEY-----"
-private_key = PrivateKey.load_pkcs1(privateKeyPem, format='PEM')
-
-ct = bytes.fromhex("04327a40b02bf671557124f963a57b3860e92cff62c439c0425b48b4346fc60c0ebf7a7584f94d34450d20cbd877c8d5dca12f517b486c2cccb8e1f467276ac03aadc94a97fcd224994d81672eb577cf0bbd6aa948d3dc4d7f06456f6650e5620435c078787db0f36124b292349ebe011ce54b3e932fac6525a37c793846a4f08ac3694d649f4a04e24e1f5e50f11a0492a68a509cf30e565ceb9931565b4aa5c3514b2ba87c4c0937ebcd6bb2b8248abb0970d30480059daea4c6ae556f6e91b25ffa5a4f723a9bf98a0bff668a1f0c799d3b0c85b19190dbfb5d894f84fa5d72d261dd2c09013dc0981cd0c46d7a08710801590aac8ff17b237387427ab3c6d6f2a59434b37f123bc7fc0a83d5ca5793540cba582e41b262859d36eabd0aa8203ca05d4c16aaf2a7b2bc7f251497d4c8f8654deae3cfffc5d3599ab4779585bf1673196782075a91ee7c3296a2edc6ee6c30344dd0c0a82274ae17982eeb23eca5c39c7d11a2dd171c70108b0a33164fc175425586f714deb5552e90e561f7882211d3f01c07867256d0cca511e61b0cb51189d8e5124e8cacdab6042bd421447ffa7fe6cad8e7f17dd3e599bae061f85bb5181726d1c0c5bbf2c2a5c1e60f486a81782e58d90ccd5a769f98361765441de142bb0a7f7bd406a537d5be0c2773e847b1df1d49ac1
daa963feec84954b72a695b74281159647a62a3c19acdda")
-pt = bytes.fromhex("54657374")
-
-try:
- message = rsa.decrypt(ct, private_key)
-except:
- print("[*] Invalid decryption")
-else:
- print("[!] No errors in decryption")
- print("message == pt?", message == pt)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/rsa-4.6/wycheproof-crypto.py new/rsa-4.7/wycheproof-crypto.py
--- old/rsa-4.6/wycheproof-crypto.py 2020-06-03 14:15:31.000000000 +0200
+++ new/rsa-4.7/wycheproof-crypto.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,40 +0,0 @@
-#!/usr/bin/env python3
-
-from Crypto.Cipher import PKCS1_v1_5
-from Crypto.PublicKey import RSA
-from Crypto.Hash import SHA
-from Crypto.Hash import SHA
-from Crypto import Random
-
-privateKeyPem = "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAs1EKK81M5kTFtZSuUFnhKy8FS2WNXaWVmi/fGHG4CLw98+Yo\n0nkuUarVwSS0O9pFPcpc3kvPKOe9Tv+6DLS3Qru21aATy2PRqjqJ4CYn71OYtSwM\n/ZfSCKvrjXybzgu+sBmobdtYm+sppbdL+GEHXGd8gdQw8DDCZSR6+dPJFAzLZTCd\nB+Ctwe/RXPF+ewVdfaOGjkZIzDoYDw7n+OHnsYCYozkbTOcWHpjVevipR+IBpGPi\n1rvKgFnlcG6d/tj0hWRl/6cS7RqhjoiNEtxqoJzpXs/Kg8xbCxXbCchkf11STA8u\ndiCjQWuWI8rcDwl69XMmHJjIQAqhKvOOQ8rYTQIDAQABAoIBABpQLQ7qbHtp4h1Y\nORAfcFRW7Q74UvtH/iEHH1TF8zyM6wZsYtcn4y0mxYE3Mp+J0xlTJbeVJkwZXYVH\nL3UH29CWHSlR+TWiazTwrCTRVJDhEoqbcTiRW8fb+o/jljVxMcVDrpyYUHNo2c6w\njBxhmKPtp66hhaDpds1Cwi0A8APZ8Z2W6kya/L/hRBzMgCz7Bon1nYBMak5PQEwV\nF0dF7Wy4vIjvCzO6DSqA415DvJDzUAUucgFudbANNXo4HJwNRnBpymYIh8mHdmNJ\n/MQ0YLSqUWvOB57dh7oWQwe3UsJ37ZUorTugvxh3NJ7Tt5ZqbCQBEECb9ND63gxo\n/a3YR/0CgYEA7BJc834xCi/0YmO5suBinWOQAF7IiRPU+3G9TdhWEkSYquupg9e6\nK9lC5k0iP+t6I69NYF7+6mvXDTmv6Z01o6oV50oXaHeAk74O3UqNCbLe9tybZ/+F\ndkYlwuGSNttMQBzjCiVy0+y0+Wm3rRnFIsAtd0RlZ24aN3bFTWJINIsCgYEAwnQq\nvNmJe9SwtnH5c/yCqPhKv1c
F/4jdQZSGI6/p3KYNxlQzkHZ/6uvrU5V27ov6YbX8\nvKlKfO91oJFQxUD6lpTdgAStI3GMiJBJIZNpyZ9EWNSvwUj28H34cySpbZz3s4Xd\nhiJBShgy+fKURvBQwtWmQHZJ3EGrcOI7PcwiyYcCgYEAlql5jSUCY0ALtidzQogW\nJ+B87N+RGHsBuJ/0cxQYinwg+ySAAVbSyF1WZujfbO/5+YBN362A/1dn3lbswCnH\nK/bHF9+fZNqvwprPnceQj5oK1n4g6JSZNsy6GNAhosT+uwQ0misgR8SQE4W25dDG\nkdEYsz+BgCsyrCcu8J5C+tUCgYAFVPQbC4f2ikVyKzvgz0qx4WUDTBqRACq48p6e\n+eLatv7nskVbr7QgN+nS9+Uz80ihR0Ev1yCAvnwmM/XYAskcOea87OPmdeWZlQM8\nVXNwINrZ6LMNBLgorfuTBK1UoRo1pPUHCYdqxbEYI2unak18mikd2WB7Fp3h0YI4\nVpGZnwKBgBxkAYnZv+jGI4MyEKdsQgxvROXXYOJZkWzsKuKxVkVpYP2V4nR2YMOJ\nViJQ8FUEnPq35cMDlUk4SnoqrrHIJNOvcJSCqM+bWHAioAsfByLbUPM8sm3CDdIk\nXVJl32HuKYPJOMIWfc7hIfxLRHnCN+coz2M6tgqMDs0E/OfjuqVZ\n-----END RSA PRIVATE KEY-----"
-
-private_key = RSA.importKey(privateKeyPem)
-cipher = PKCS1_v1_5.new(private_key)
-"""
- "tcId" : 31,
- "comment" : "prepended bytes to ciphertext",
- "msg" : "54657374",
- "ct" : "00004501b4d669e01b9ef2dc800aa1b06d49196f5a09fe8fbcd037323c60eaf027bfb98432be4e4a26c567ffec718bcbea977dd26812fa071c33808b4d5ebb742d9879806094b6fbeea63d25ea3141733b60e31c6912106e1b758a7fe0014f075193faa8b4622bfd5d3013f0a32190a95de61a3604711bc62945f95a6522bd4dfed0a994ef185b28c281f7b5e4c8ed41176d12d9fc1b837e6a0111d0132d08a6d6f0580de0c9eed8ed105531799482d1e466c68c23b0c222af7fc12ac279bc4ff57e7b4586d209371b38c4c1035edd418dc5f960441cb21ea2bedbfea86de0d7861e81021b650a1de51002c315f1e7c12debe4dcebf790caaa54a2f26b149cf9e77d",
- "result" : "invalid",
- "flags" : []
- },
-"""
-
-ct = "4501b4d669e01b9ef2dc800aa1b06d49196f5a09fe8fbcd037323c60eaf027bfb98432be4e4a26c567ffec718bcbea977dd26812fa071c33808b4d5ebb742d9879806094b6fbeea63d25ea3141733b60e31c6912106e1b758a7fe0014f075193faa8b4622bfd5d3013f0a32190a95de61a3604711bc62945f95a6522bd4dfed0a994ef185b28c281f7b5e4c8ed41176d12d9fc1b837e6a0111d0132d08a6d6f0580de0c9eed8ed105531799482d1e466c68c23b0c222af7fc12ac279bc4ff57e7b4586d209371b38c4c1035edd418dc5f960441cb21ea2bedbfea86de0d7861e81021b650a1de51002c315f1e7c12debe4dcebf790caaa54a2f26b149cf9e77d"
-
-print("[*] Unmodified ciphertext")
-
-try:
- secret = cipher.decrypt(bytes.fromhex(ct), "test")
- print("\tDecryption OK")
-except Exception as e:
- print(e)
-
-print("[*] Ciphertext with prepended bytes")
-
-ct = "00004501b4d669e01b9ef2dc800aa1b06d49196f5a09fe8fbcd037323c60eaf027bfb98432be4e4a26c567ffec718bcbea977dd26812fa071c33808b4d5ebb742d9879806094b6fbeea63d25ea3141733b60e31c6912106e1b758a7fe0014f075193faa8b4622bfd5d3013f0a32190a95de61a3604711bc62945f95a6522bd4dfed0a994ef185b28c281f7b5e4c8ed41176d12d9fc1b837e6a0111d0132d08a6d6f0580de0c9eed8ed105531799482d1e466c68c23b0c222af7fc12ac279bc4ff57e7b4586d209371b38c4c1035edd418dc5f960441cb21ea2bedbfea86de0d7861e81021b650a1de51002c315f1e7c12debe4dcebf790caaa54a2f26b149cf9e77d"
-
-try:
- secret = cipher.decrypt(bytes.fromhex(ct), "test")
-except Exception as e:
- print("\t", e)