Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/openwrt/packages-abandoned.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/python-crypto/patches/101-CVE-2018-6594.patch')
-rw-r--r--lang/python/python-crypto/patches/101-CVE-2018-6594.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/lang/python/python-crypto/patches/101-CVE-2018-6594.patch b/lang/python/python-crypto/patches/101-CVE-2018-6594.patch
new file mode 100644
index 0000000..8e8c558
--- /dev/null
+++ b/lang/python/python-crypto/patches/101-CVE-2018-6594.patch
@@ -0,0 +1,51 @@
+--- a/lib/Crypto/PublicKey/ElGamal.py
++++ b/lib/Crypto/PublicKey/ElGamal.py
+@@ -153,33 +153,33 @@ def generate(bits, randfunc, progress_fu
+ if number.isPrime(obj.p, randfunc=randfunc):
+ break
+ # Generate generator g
+- # See Algorithm 4.80 in Handbook of Applied Cryptography
+- # Note that the order of the group is n=p-1=2q, where q is prime
+ if progress_func:
+ progress_func('g\n')
+ while 1:
++ # Choose a square residue; it will generate a cyclic group of order q.
++ obj.g = pow(number.getRandomRange(2, obj.p, randfunc), 2, obj.p)
++
+ # We must avoid g=2 because of Bleichenbacher's attack described
+ # in "Generating ElGamal signatures without knowning the secret key",
+ # 1996
+- #
+- obj.g = number.getRandomRange(3, obj.p, randfunc)
+- safe = 1
+- if pow(obj.g, 2, obj.p)==1:
+- safe=0
+- if safe and pow(obj.g, q, obj.p)==1:
+- safe=0
++ if obj.g in (1, 2):
++ continue
++
+ # Discard g if it divides p-1 because of the attack described
+ # in Note 11.67 (iii) in HAC
+- if safe and divmod(obj.p-1, obj.g)[1]==0:
+- safe=0
++ if (obj.p - 1) % obj.g == 0:
++ continue
++
+ # g^{-1} must not divide p-1 because of Khadir's attack
+ # described in "Conditions of the generator for forging ElGamal
+ # signature", 2011
+ ginv = number.inverse(obj.g, obj.p)
+- if safe and divmod(obj.p-1, ginv)[1]==0:
+- safe=0
+- if safe:
+- break
++ if (obj.p - 1) % ginv == 0:
++ continue
++
++ # Found
++ break
++
+ # Generate private key x
+ if progress_func:
+ progress_func('x\n')