[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tigervnc-devel
Subject:    [Tigervnc-devel] [PATCH 02/10] Implement VeNCrypt chooser
From:       Martin Koegler <mkoegler () auto ! tuwien ! ac ! at>
Date:       2010-11-07 16:50:53
Message-ID: 1289148661-24512-3-git-send-email-mkoegler () auto ! tuwien ! ac ! at
[Download RAW message or body]

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
---
 java/src/com/tigervnc/vncviewer/RfbProto.java  |   33 +++++++++++++++++-
 java/src/com/tigervnc/vncviewer/VncViewer.java |   43 ++++++++++++++---------
 2 files changed, 58 insertions(+), 18 deletions(-)

diff --git a/java/src/com/tigervnc/vncviewer/RfbProto.java \
b/java/src/com/tigervnc/vncviewer/RfbProto.java index dc7aa2e..ab3c152 100644
--- a/java/src/com/tigervnc/vncviewer/RfbProto.java
+++ b/java/src/com/tigervnc/vncviewer/RfbProto.java
@@ -391,7 +391,8 @@ class RfbProto {
 
     // Find first supported security type.
     for (int i = 0; i < nSecTypes; i++) {
-      if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth) {
+      if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth
+	   || secTypes[i] == SecTypeVeNCrypt) {
 	secType = secTypes[i];
 	break;
       }
@@ -406,6 +407,36 @@ class RfbProto {
     return secType;
   }
 
+    int authenticateVeNCrypt() throws Exception {
+	int majorVersion = readU8();
+	int minorVersion = readU8();
+	int Version = (majorVersion << 8) | minorVersion;
+	if (Version < 0x0002) {
+	    os.write(0);
+	    os.write(0);
+	    throw new Exception("Server reported an unsupported VeNCrypt version");
+	}
+	os.write(0);
+	os.write(2);
+	if (readU8() != 0)
+	    throw new Exception("Server reported it could not support the VeNCrypt \
version"); +	int nSecTypes = readU8();
+	int[] secTypes = new int[nSecTypes];
+	for(int i = 0; i < nSecTypes; i++)
+	    secTypes[i] = readU32();
+
+	for(int i = 0; i < nSecTypes; i++)
+	    switch(secTypes[i])
+		{
+		case SecTypeNone:
+		case SecTypeVncAuth:
+		    writeInt(secTypes[i]);
+		    return secTypes[i];
+		}
+
+	throw new Exception("No valid VeNCrypt sub-type");
+    }
+
   //
   // Perform "no authentication".
   //
diff --git a/java/src/com/tigervnc/vncviewer/VncViewer.java \
b/java/src/com/tigervnc/vncviewer/VncViewer.java index 3c527ba..711b1c9 100644
--- a/java/src/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/src/com/tigervnc/vncviewer/VncViewer.java
@@ -361,25 +361,34 @@ public class VncViewer extends java.applet.Applet
       authType = secType;
     }
 
-    switch (authType) {
-    case RfbProto.AuthNone:
-      showConnectionStatus("No authentication needed");
-      rfb.authenticateNone();
-      break;
-    case RfbProto.AuthVNC:
-      showConnectionStatus("Performing standard VNC authentication");
-      if (passwordParam != null) {
-        rfb.authenticateVNC(passwordParam);
-      } else {
-        String pw = askPassword();
-        rfb.authenticateVNC(pw);
-      }
-      break;
-    default:
-      throw new Exception("Unknown authentication scheme " + authType);
-    }
+    doAuthentification(authType);
   }
 
+    void doAuthentification(int secType) throws Exception {
+	switch (secType) {
+	case RfbProto.SecTypeNone:
+	    showConnectionStatus("No authentication needed");
+	    rfb.authenticateNone();
+	    break;
+	case RfbProto.SecTypeVncAuth:
+	    showConnectionStatus("Performing standard VNC authentication");
+	    if (passwordParam != null) {
+		rfb.authenticateVNC(passwordParam);
+	    } else {
+		String pw = askPassword();
+		rfb.authenticateVNC(pw);
+	    }
+	    break;
+	case RfbProto.SecTypeVeNCrypt:
+	    showConnectionStatus("VeNCrypt chooser");
+	    secType = rfb.authenticateVeNCrypt();
+	    doAuthentification(secType);
+	    break;
+	default:
+	    throw new Exception("Unknown authentication scheme " + secType);
+	}
+    }
+
 
   //
   // Show a message describing the connection status.
-- 
1.5.6.5


------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Tigervnc-devel mailing list
Tigervnc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic