Yann Leboulanger pushed to branch master at gajim / python-nbxmpp

Commits:
0b77b07b by Philipp Hörist at 2017-11-22T18:03:18+01:00
Use os.urandom for random numbers

- - - - -
ef78e16c by Yann Leboulanger at 2017-11-22T22:50:11+01:00
Merge branch 'master' into 'master'

Use os.urandom for random numbers

See merge request gajim/python-nbxmpp!9
- - - - -


3 changed files:

- nbxmpp/auth_nb.py
- nbxmpp/bosh.py
- − nbxmpp/rndg.py


Changes:

=====================================
nbxmpp/auth_nb.py
=====================================
--- a/nbxmpp/auth_nb.py
+++ b/nbxmpp/auth_nb.py
@@ -29,6 +29,8 @@ from .protocol import Node, NodeProcessed, isResultNode, Iq, 
Protocol, JID
 from .plugin import PlugIn
 import sys
 import re
+import os
+import binascii
 import base64
 from . import dispatcher_nb
 import hmac
@@ -37,8 +39,6 @@ import hashlib
 import logging
 log = logging.getLogger('nbxmpp.auth_nb')
 
-from . import rndg
-
 def HH(some): return hashlib.md5(some).hexdigest()
 def H(some): return hashlib.md5(some).digest()
 def C(some): return b':'.join(some)
@@ -463,7 +463,7 @@ class SASL(PlugIn):
         (isinstance(chal['qop'], list) and 'auth' in chal['qop'])):
             self.resp = {'username': self.username,
                 'nonce': chal['nonce'],
-                'cnonce': '%x' % rndg.getrandbits(196),
+                'cnonce': '%x' % int(binascii.hexlify(os.urandom(24)), 16),
                 'nc': ('00000001'),  # ToDo: Is this a tupel or only a string?
                 'qop': 'auth',
                 'digest-uri': 'xmpp/' + self._owner.Server,
@@ -498,7 +498,7 @@ class SASL(PlugIn):
     def set_password(self, password):
         self.password = '' if password is None else password
         if self.mechanism in ('SCRAM-SHA-1', 'SCRAM-SHA-1-PLUS'):
-            self.client_nonce = '%x' % rndg.getrandbits(196)
+            self.client_nonce = '%x' % int(binascii.hexlify(os.urandom(24)), 
16)
             self.scram_soup = 'n=' + self.username + ',r=' + self.client_nonce
             if self.mechanism == 'SCRAM-SHA-1':
                 if self.channel_binding is None:


=====================================
nbxmpp/bosh.py
=====================================
--- a/nbxmpp/bosh.py
+++ b/nbxmpp/bosh.py
@@ -17,7 +17,8 @@
 ## You should have received a copy of the GNU General Public License
 ## along with Gajim.  If not, see <http://www.gnu.org/licenses/>.
 
-
+import os
+import binascii
 import locale
 from hashlib import sha1
 from .transports_nb import NonBlockingTransport, NonBlockingHTTPBOSH,\
@@ -29,8 +30,6 @@ from .simplexml import Node
 import logging
 log = logging.getLogger('nbxmpp.bosh')
 
-from . import rndg
-
 KEY_COUNT = 10
 
 # Fake file descriptor - it's used for setting read_timeout in idlequeue for
@@ -486,11 +485,9 @@ class NonBlockingBOSH(NonBlockingTransport):
 
 
 def get_rand_number():
-    # with 50-bit random initial rid, session would have to go up
-    # to 7881299347898368 messages to raise rid over 2**53
     # (see http://www.xmpp.org/extensions/xep-0124.html#rids)
     # it's also used for sequence key initialization
-    return rndg.getrandbits(50)
+    return int(binascii.hexlify(os.urandom(6)), 16)
 
 
 class AckChecker(object):


=====================================
nbxmpp/rndg.py deleted
=====================================
--- a/nbxmpp/rndg.py
+++ /dev/null
@@ -1,49 +0,0 @@
-## rndg.py
-##
-##   cryptographically secure pseudo-random number generator.
-##   When possible use OpenSSL PRNG combined with os.random,
-##   if OpenSSL PRNG is not available, use only os.random.
-##
-## Copyright (C) 2013 Fedor Brunner <[email protected]>
-##
-## This file is part of Gajim.
-##
-## Gajim is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published
-## by the Free Software Foundation; version 3 only.
-##
-## Gajim is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Gajim.  If not, see <http://www.gnu.org/licenses/>.
-
-USE_PYOPENSSL = False
-try:
-    import OpenSSL.rand
-    import binascii, os
-    USE_PYOPENSSL = True
-except ImportError:
-    import random
-
-if not USE_PYOPENSSL:
-    getrandbits = random.SystemRandom().getrandbits
-else:
-    def getrandbits(k):
-        """getrandbits(k) -> x.  Generates a long int with k random bits."""
-        if k <= 0:
-            raise ValueError('number of bits must be greater than zero')
-        if k != int(k):
-            raise TypeError('number of bits should be an integer')
-
-        bytes = (k + 7) // 8                    # bits / 8 and rounded up
-
-        # Add system entropy to OpenSSL PRNG
-        OpenSSL.rand.add(os.urandom(bytes), bytes)
-        # Extract random bytes from OpenSSL PRNG
-        random_str = OpenSSL.rand.bytes(bytes)
-
-        x = int(binascii.hexlify(random_str), 16)
-        return x >> (bytes * 8 - k)             # trim excess bits



View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/compare/6807867b231ed7e25fbdbac364dae517e67ef3af...ef78e16c87afc84f481c567cccc4bff8731e690d

---
View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/compare/6807867b231ed7e25fbdbac364dae517e67ef3af...ef78e16c87afc84f481c567cccc4bff8731e690d
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to