Changeset 206:a32614b03670
- Timestamp:
- Oct 3, 2016, 8:49:10 AM (4 years ago)
- Branch:
- default
- rebase_source:
- 61f8edbf0d012a63234c405576ec2f5cdb67bab2
- Location:
- wokkel
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
wokkel/server.py
r184 r206 12 12 """ 13 13 14 # hashlib is new in Python 2.5, try that first. 15 try: 16 from hashlib import sha256 17 digestmod = sha256 18 except ImportError: 19 import Crypto.Hash.SHA256 as digestmod 20 sha256 = digestmod.new 21 14 from __future__ import division, absolute_import 15 16 import binascii 17 from hashlib import sha256 22 18 import hmac 23 19 24 from zope.interface import implement s20 from zope.interface import implementer 25 21 26 22 from twisted.internet import defer, reactor 27 23 from twisted.names.srvconnect import SRVConnector 28 24 from twisted.python import log, randbytes 25 from twisted.python.compat import iteritems, unicode 29 26 from twisted.words.protocols.jabber import error, ijabber, jid, xmlstream 30 27 from twisted.words.xish import domish … … 44 41 @param secret: the shared secret known to the Originating Server and 45 42 Authoritive Server. 46 @type secret: C{str}43 @type secret: L{unicode} 47 44 @param receivingServer: the Receiving Server host name. 48 @type receivingServer: C{str}45 @type receivingServer: L{unicode} 49 46 @param originatingServer: the Originating Server host name. 50 @type originatingServer: C{str}47 @type originatingServer: L{unicode} 51 48 @param streamID: the Stream ID as generated by the Receiving Server. 52 @type streamID: C{str}49 @type streamID: L{unicode} 53 50 @return: hexadecimal digest of the generated key. 54 51 @type: C{str} … … 56 53 57 54 hashObject = sha256() 58 hashObject.update(secret )55 hashObject.update(secret.encode('ascii')) 59 56 hashedSecret = hashObject.hexdigest() 60 57 message = " ".join([receivingServer, originatingServer, streamID]) 61 hash = hmac.HMAC(hashedSecret, message, digestmod=digestmod) 58 hash = hmac.HMAC(hashedSecret.encode('ascii'), 59 message.encode('ascii'), 60 digestmod=sha256) 62 61 return hash.hexdigest() 63 62 … … 78 77 try: 79 78 observer(element) 80 except error.StreamError ,exc:79 except error.StreamError as exc: 81 80 xs.sendStreamError(exc) 82 81 except: … … 108 107 109 108 109 @implementer(ijabber.IInitiatingInitializer) 110 110 class OriginatingDialbackInitializer(object): 111 111 """ 112 112 Server Dialback Initializer for the Orginating Server. 113 113 """ 114 115 implements(ijabber.IInitiatingInitializer)116 114 117 115 _deferred = None … … 161 159 162 160 161 @implementer(ijabber.IInitiatingInitializer) 163 162 class ReceivingDialbackInitializer(object): 164 163 """ 165 164 Server Dialback Initializer for the Receiving Server. 166 165 """ 167 168 implements(ijabber.IInitiatingInitializer)169 166 170 167 _deferred = None … … 329 326 xmlstream.ListenAuthenticator.streamStarted(self, rootElement) 330 327 331 # Compatibility fix for pre-8.2 implementations of ListenAuthenticator332 if not self.xmlstream.sid:333 self.xmlstream.sid = randbytes.secureRandom(8).encode('hex')334 335 328 if self.xmlstream.thisEntity: 336 329 targetDomain = self.xmlstream.thisEntity.host … … 348 341 if xmlstream.NS_STREAMS != rootElement.uri or \ 349 342 self.namespace != self.xmlstream.namespace or \ 350 ('db', NS_DIALBACK) not in rootElement.localPrefixes.iteritems():343 ('db', NS_DIALBACK) not in iteritems(rootElement.localPrefixes): 351 344 raise error.StreamError('invalid-namespace') 352 345 353 346 if targetDomain and targetDomain not in self.service.domains: 354 347 raise error.StreamError('host-unknown') 355 except error.StreamError ,exc:348 except error.StreamError as exc: 356 349 prepareStream(self.service.defaultDomain) 357 350 self.xmlstream.sendStreamError(exc) … … 576 569 self.secret = secret 577 570 else: 578 self.secret = randbytes.secureRandom(16).encode('hex')571 self.secret = binascii.hexlify(randbytes.secureRandom(16)) 579 572 580 573 self._outgoingStreams = {} -
wokkel/test/test_server.py
r96 r206 6 6 """ 7 7 8 from __future__ import division, absolute_import 8 9 from twisted.internet import defer 9 10 from twisted.python import failure … … 449 450 450 451 self.assertEqual(1, len(errors)) 452 453 454 def test_generatedSecret(self): 455 self.router = component.Router() 456 self.service = server.ServerService(self.router, 457 domain='example.org') 458 self.assertEqual(32, len(self.service.secret))
Note: See TracChangeset
for help on using the changeset viewer.