Author: dmeyer
Date: Tue Feb  5 08:30:52 2008
New Revision: 3034

Log:
add tls for kaa.notifier support based on tlslite

Added:
   trunk/base/src/net/tls.py

Added: trunk/base/src/net/tls.py
==============================================================================
--- (empty file)
+++ trunk/base/src/net/tls.py   Tue Feb  5 08:30:52 2008
@@ -0,0 +1,103 @@
+# -* -coding: iso-8859-1 -*-
+# -----------------------------------------------------------------------------
+# tls.py - TLS support for kaa.notifier based on tlslite
+# -----------------------------------------------------------------------------
+# $Id$
+#
+# -----------------------------------------------------------------------------
+# Copyright (C) 2008 Dirk Meyer
+#
+# First Edition: Dirk Meyer <[EMAIL PROTECTED]>
+# Maintainer:    Dirk Meyer <[EMAIL PROTECTED]>
+#
+# Please see the file AUTHORS for a complete list of authors.
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version
+# 2.1 as published by the Free Software Foundation.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+#
+# -----------------------------------------------------------------------------
+
+# import some classes to the namespace of this module
+from tlslite.api import X509, X509CertChain, parsePEMKey, Session
+
+# import tlslite.api to overwrite TLSConnection
+import tlslite.api
+
+# kaa imports
+import kaa
+
+class TLSConnection(tlslite.api.TLSConnection):
+    """
+    This class wraps a socket and provides TLS handshaking and data transfer.
+    It enhances the tlslite version of the class with the same name with
+    kaa.notifier support.
+    """
+    @kaa.yield_execution()
+    def handshakeClientCert(self, certChain=None, privateKey=None, 
session=None,
+                            settings=None, checker=None):
+        """
+        Perform a certificate-based handshake in the role of client.
+        """
+        handshake = tlslite.api.TLSConnection.handshakeClientCert(
+            self, certChain=certChain, privateKey=privateKey, session=session,
+            settings=settings, checker=checker, async=True)
+        try:
+            while True:
+                n = handshake.next()
+                cb = kaa.YieldCallback()
+                disp = kaa.notifier.SocketDispatcher(cb)
+                if n == 0:
+                    disp.register(self.sock.fileno(), kaa.notifier.IO_READ)
+                if n == 1:
+                    disp.register(self.sock.fileno(), kaa.notifier.IO_WRITE)
+                yield cb
+                disp.unregister()
+        except StopIteration:
+            pass
+        yield True
+
+
+    def fileno(self):
+        """
+        Return socket descriptor. This makes this class feel like a normal
+        socket to the SocketDispatcher.
+        """
+        return self.sock.fileno()
+
+
+
+class Socket(kaa.Socket):
+    """
+    Special version of kaa.Socket with TLS support.
+    """
+    def __init__(self):
+        kaa.Socket.__init__(self)
+        self.signals['tls'] = kaa.Signal()
+
+
+    @kaa.yield_execution()
+    def starttls_client(self, session=None):
+        """
+        Start a certificate-based handshake in the role of a TLS client.
+        Note: this function DOES NOT check the server key based on the
+        key chain yet.
+        """
+        if session is None:
+            session = Session()
+        c = TLSConnection(self._socket)
+        self._rmon.unregister()
+        yield c.handshakeClientCert(session=session)
+        self._socket = c
+        self.signals['tls'].emit()
+        self._rmon.register(self._socket.fileno(), kaa.IO_READ)

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to