summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/comm/keypebble/d3des.c7
-rw-r--r--noncore/comm/keypebble/krfbcanvas.cpp8
-rw-r--r--noncore/comm/keypebble/kvnc.cpp2
-rw-r--r--noncore/comm/keypebble/vncauth.c2
4 files changed, 7 insertions, 12 deletions
diff --git a/noncore/comm/keypebble/d3des.c b/noncore/comm/keypebble/d3des.c
index b0f065e..7f50da4 100644
--- a/noncore/comm/keypebble/d3des.c
+++ b/noncore/comm/keypebble/d3des.c
@@ -1,90 +1,83 @@
1/* 1/*
2 * This is D3DES (V5.09) by Richard Outerbridge with the double and 2 * This is D3DES (V5.09) by Richard Outerbridge with the double and
3 * triple-length support removed for use in VNC. Also the bytebit[] array 3 * triple-length support removed for use in VNC. Also the bytebit[] array
4 * has been reversed so that the most significant bit in each byte of the 4 * has been reversed so that the most significant bit in each byte of the
5 * key is ignored, not the least significant. 5 * key is ignored, not the least significant.
6 * 6 *
7 * These changes are Copyright (C) 1998 Olivetti & Oracle Research Laboratory 7 * These changes are Copyright (C) 1998 Olivetti & Oracle Research Laboratory
8 * 8 *
9 * This software is distributed in the hope that it will be useful, 9 * This software is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 */ 12 */
13 13
14/* D3DES (V5.09) - 14/* D3DES (V5.09) -
15 * 15 *
16 * A portable, public domain, version of the Data Encryption Standard. 16 * A portable, public domain, version of the Data Encryption Standard.
17 * 17 *
18 * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge. 18 * Written with Symantec's THINK (Lightspeed) C by Richard Outerbridge.
19 * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation 19 * Thanks to: Dan Hoey for his excellent Initial and Inverse permutation
20 * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis 20 * code; Jim Gillogly & Phil Karn for the DES key schedule code; Dennis
21 * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau, 21 * Ferguson, Eric Young and Dana How for comparing notes; and Ray Lau,
22 * for humouring me on. 22 * for humouring me on.
23 * 23 *
24 * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge. 24 * Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge.
25 * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992. 25 * (GEnie : OUTER; CIS : [71755,204]) Graven Imagery, 1992.
26 */ 26 */
27 27
28#include "d3des.h" 28#include "d3des.h"
29 29
30static void scrunch(unsigned char *, unsigned long *); 30static void scrunch(unsigned char *, unsigned long *);
31static void unscrun(unsigned long *, unsigned char *); 31static void unscrun(unsigned long *, unsigned char *);
32static void desfunc(unsigned long *, unsigned long *); 32static void desfunc(unsigned long *, unsigned long *);
33static void cookey(unsigned long *); 33static void cookey(unsigned long *);
34 34
35static unsigned long KnL[32] = { 0L }; 35static unsigned long KnL[32] = { 0L };
36static unsigned long KnR[32] = { 0L };
37static unsigned long Kn3[32] = { 0L };
38static unsigned char Df_Key[24] = {
39 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
40 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
41 0x89,0xab,0xcd,0xef,0x01,0x23,0x45,0x67 };
42
43 static unsigned short bytebit[8]= { 36 static unsigned short bytebit[8]= {
44 01, 02, 04, 010, 020, 040, 0100, 0200 }; 37 01, 02, 04, 010, 020, 040, 0100, 0200 };
45 38
46static unsigned long bigbyte[24] = { 39static unsigned long bigbyte[24] = {
47 0x800000L, 0x400000L, 0x200000L,0x100000L, 40 0x800000L, 0x400000L, 0x200000L,0x100000L,
48 0x80000L, 0x40000L, 0x20000L,0x10000L, 41 0x80000L, 0x40000L, 0x20000L,0x10000L,
49 0x8000L, 0x4000L, 0x2000L,0x1000L, 42 0x8000L, 0x4000L, 0x2000L,0x1000L,
50 0x800L, 0x400L, 0x200L, 0x100L, 43 0x800L, 0x400L, 0x200L, 0x100L,
51 0x80L, 0x40L, 0x20L, 0x10L, 44 0x80L, 0x40L, 0x20L, 0x10L,
52 0x8L, 0x4L, 0x2L, 0x1L}; 45 0x8L, 0x4L, 0x2L, 0x1L};
53 46
54/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */ 47/* Use the key schedule specified in the Standard (ANSI X3.92-1981). */
55 48
56static unsigned char pc1[56] = { 49static unsigned char pc1[56] = {
57 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 50 56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17,
58 9, 1, 58, 50, 42, 34, 26,18, 10, 2, 59, 51, 43, 35, 51 9, 1, 58, 50, 42, 34, 26,18, 10, 2, 59, 51, 43, 35,
59 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 52 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21,
60 13, 5, 60, 52, 44, 36, 28,20, 12, 4, 27, 19, 11, 3 }; 53 13, 5, 60, 52, 44, 36, 28,20, 12, 4, 27, 19, 11, 3 };
61 54
62static unsigned char totrot[16] = { 55static unsigned char totrot[16] = {
63 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 }; 56 1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28 };
64 57
65static unsigned char pc2[48] = { 58static unsigned char pc2[48] = {
66 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9, 59 13, 16, 10, 23, 0, 4, 2, 27, 14, 5, 20, 9,
67 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1, 60 22, 18, 11, 3, 25, 7, 15, 6, 26, 19, 12, 1,
68 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47, 61 40, 51, 30, 36, 46, 54, 29, 39, 50, 44, 32, 47,
69 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 }; 62 43, 48, 38, 55, 33, 52, 45, 41, 49, 35, 28, 31 };
70 63
71 void deskey(key, edf)/* Thanks to James Gillogly & Phil Karn! */ 64 void deskey(key, edf)/* Thanks to James Gillogly & Phil Karn! */
72unsigned char *key; 65unsigned char *key;
73short edf; 66short edf;
74{ 67{
75 register int i, j, l, m, n; 68 register int i, j, l, m, n;
76 unsigned char pc1m[56], pcr[56]; 69 unsigned char pc1m[56], pcr[56];
77 unsigned long kn[32]; 70 unsigned long kn[32];
78 71
79 for ( j = 0; j < 56; j++ ) { 72 for ( j = 0; j < 56; j++ ) {
80 l = pc1[j]; 73 l = pc1[j];
81 m = l & 07; 74 m = l & 07;
82 pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0; 75 pc1m[j] = (key[l >> 3] & bytebit[m]) ? 1 : 0;
83 } 76 }
84 for( i = 0; i < 16; i++ ) { 77 for( i = 0; i < 16; i++ ) {
85 if( edf == DE1 ) m = (15 - i) << 1; 78 if( edf == DE1 ) m = (15 - i) << 1;
86 else m = i << 1; 79 else m = i << 1;
87 n = m + 1; 80 n = m + 1;
88 kn[m] = kn[n] = 0L; 81 kn[m] = kn[n] = 0L;
89 for( j = 0; j < 28; j++ ) { 82 for( j = 0; j < 28; j++ ) {
90 l = j + totrot[i]; 83 l = j + totrot[i];
diff --git a/noncore/comm/keypebble/krfbcanvas.cpp b/noncore/comm/keypebble/krfbcanvas.cpp
index b3525df..d5b8ce7 100644
--- a/noncore/comm/keypebble/krfbcanvas.cpp
+++ b/noncore/comm/keypebble/krfbcanvas.cpp
@@ -1,129 +1,131 @@
1#include "krfbconnection.h" 1#include "krfbconnection.h"
2#include "krfbcanvas.h" 2#include "krfbcanvas.h"
3#include "krfbbuffer.h" 3#include "krfbbuffer.h"
4 4
5/* OPIE */ 5/* OPIE */
6#include <opie2/odebug.h> 6#include <opie2/odebug.h>
7#include <qpe/qpeapplication.h> 7#include <qpe/qpeapplication.h>
8using namespace Opie::Core; 8using namespace Opie::Core;
9 9
10/* QT */ 10/* QT */
11#include <qclipboard.h> 11#include <qclipboard.h>
12 12
13KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name ) 13KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name )
14 : QScrollView( parent, name ) 14 : QScrollView( parent, name )
15{ 15{
16 connection_ = new KRFBConnection(); 16 connection_ = new KRFBConnection();
17 connect( connection_, SIGNAL( loggedIn() ), 17 connect( connection_, SIGNAL( loggedIn() ),
18 this, SLOT( loggedIn() ) ); 18 this, SLOT( loggedIn() ) );
19 19
20 loggedIn_ = false; 20 loggedIn_ = false;
21 21
22 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold); 22 //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold);
23 23
24 viewport()->setFocusPolicy( QWidget::StrongFocus ); 24 viewport()->setFocusPolicy( QWidget::StrongFocus );
25 viewport()->setFocus(); 25 viewport()->setFocus();
26 26
27 nextRightClick=0; 27 nextRightClick=0;
28 nextDoubleClick=0; 28 nextDoubleClick=0;
29} 29}
30 30
31KRFBCanvas::~KRFBCanvas() 31KRFBCanvas::~KRFBCanvas()
32{ 32{
33} 33}
34 34
35 35
36void KRFBCanvas::openConnection(KRFBServer server) 36void KRFBCanvas::openConnection(KRFBServer server)
37{ 37{
38 38
39 39
40 QCString host = server.hostname.latin1(); 40 QCString host = server.hostname.latin1();
41 password=server.password; 41 password=server.password;
42 connection_->connectTo( server); 42 connection_->connectTo( server);
43} 43}
44 44
45 45
46void KRFBCanvas::openURL( const QUrl &url ) 46void KRFBCanvas::openURL( const QUrl &url )
47{ 47{
48 if ( loggedIn_ ) { 48 if ( loggedIn_ ) {
49 owarn << "openURL invoked when logged in\n" << oendl; 49 owarn << "openURL invoked when logged in\n" << oendl;
50 return; 50 return;
51 } 51 }
52 52
53 QCString host = url.host().latin1(); 53 QCString host = url.host().latin1();
54 int display = url.port(); 54 int display = url.port();
55 Q_UNUSED( host )
56 Q_UNUSED( display )
55 57
56// connection_->connectTo( host, display ); 58// connection_->connectTo( host, display );
57} 59}
58 60
59void KRFBCanvas::closeConnection() 61void KRFBCanvas::closeConnection()
60{ 62{
61 loggedIn_ = false; 63 loggedIn_ = false;
62 connection_->disconnect(); 64 connection_->disconnect();
63 65
64 viewport()->setMouseTracking( false ); 66 viewport()->setMouseTracking( false );
65 viewport()->setBackgroundMode( PaletteDark ); 67 viewport()->setBackgroundMode( PaletteDark );
66 setBackgroundMode( PaletteDark ); 68 setBackgroundMode( PaletteDark );
67 update(); 69 update();
68} 70}
69 71
70 72
71void KRFBCanvas::bell() 73void KRFBCanvas::bell()
72{ 74{
73 if ( connection_->options()->deIconify ) { 75 if ( connection_->options()->deIconify ) {
74 topLevelWidget()->raise(); 76 topLevelWidget()->raise();
75 topLevelWidget()->show(); 77 topLevelWidget()->show();
76 } 78 }
77} 79}
78 80
79void KRFBCanvas::loggedIn() 81void KRFBCanvas::loggedIn()
80{ 82{
81 owarn << "Ok, we're logged in" << oendl; 83 owarn << "Ok, we're logged in" << oendl;
82 84
83 // 85 //
84 // Get ready for action 86 // Get ready for action
85 // 87 //
86 loggedIn_ = true; 88 loggedIn_ = true;
87 viewport()->setMouseTracking( true ); 89 viewport()->setMouseTracking( true );
88 viewport()->setBackgroundMode( NoBackground ); 90 viewport()->setBackgroundMode( NoBackground );
89 setBackgroundMode( NoBackground ); 91 setBackgroundMode( NoBackground );
90 92
91 // Start using the buffer 93 // Start using the buffer
92 connect( connection_->buffer(), SIGNAL( sizeChanged(int,int) ), 94 connect( connection_->buffer(), SIGNAL( sizeChanged(int,int) ),
93 this, SLOT( resizeContents(int,int) ) ); 95 this, SLOT( resizeContents(int,int) ) );
94 connect( connection_->buffer(), SIGNAL( updated(int,int,int,int) ), 96 connect( connection_->buffer(), SIGNAL( updated(int,int,int,int) ),
95 this, SLOT( viewportUpdate(int,int,int,int) ) ); 97 this, SLOT( viewportUpdate(int,int,int,int) ) );
96 connect( connection_->buffer(), SIGNAL( bell() ), 98 connect( connection_->buffer(), SIGNAL( bell() ),
97 this, SLOT( bell() ) ); 99 this, SLOT( bell() ) );
98 connect( qApp->clipboard(), SIGNAL( dataChanged() ), 100 connect( qApp->clipboard(), SIGNAL( dataChanged() ),
99 this, SLOT( clipboardChanged() ) ); 101 this, SLOT( clipboardChanged() ) );
100} 102}
101 103
102void KRFBCanvas::viewportPaintEvent( QPaintEvent *e ) 104void KRFBCanvas::viewportPaintEvent( QPaintEvent *e )
103{ 105{
104 QRect r = e->rect(); 106 QRect r = e->rect();
105 107
106 if ( loggedIn_ ) { 108 if ( loggedIn_ ) {
107 QPixmap p; 109 QPixmap p;
108 110
109 bitBlt( viewport(), r.x(), r.y(), 111 bitBlt( viewport(), r.x(), r.y(),
110 connection_->buffer()->pixmap(), 112 connection_->buffer()->pixmap(),
111 r.x() + contentsX(), r.y() + contentsY(), 113 r.x() + contentsX(), r.y() + contentsY(),
112 r.width(), r.height() ); 114 r.width(), r.height() );
113 } 115 }
114 else { 116 else {
115 QScrollView::viewportPaintEvent( e ); 117 QScrollView::viewportPaintEvent( e );
116 } 118 }
117} 119}
118 120
119void KRFBCanvas::viewportUpdate( int x, int y, int w, int h ) 121void KRFBCanvas::viewportUpdate( int x, int y, int w, int h )
120{ 122{
121 updateContents( x, y, w, h ); 123 updateContents( x, y, w, h );
122} 124}
123 125
124void KRFBCanvas::contentsMousePressEvent( QMouseEvent *e ) 126void KRFBCanvas::contentsMousePressEvent( QMouseEvent *e )
125{ 127{
126 128
127 if (nextDoubleClick) { 129 if (nextDoubleClick) {
128 connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonPress, e->pos(),LeftButton,LeftButton)); 130 connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonPress, e->pos(),LeftButton,LeftButton));
129 connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),LeftButton,0)); 131 connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),LeftButton,0));
diff --git a/noncore/comm/keypebble/kvnc.cpp b/noncore/comm/keypebble/kvnc.cpp
index 88cb50b..3a8e919 100644
--- a/noncore/comm/keypebble/kvnc.cpp
+++ b/noncore/comm/keypebble/kvnc.cpp
@@ -1,94 +1,94 @@
1#include <qaction.h> 1#include <qaction.h>
2#include <qpopupmenu.h> 2#include <qpopupmenu.h>
3#include <qpushbutton.h> 3#include <qpushbutton.h>
4#include <qmessagebox.h> 4#include <qmessagebox.h>
5#include <qlistbox.h> 5#include <qlistbox.h>
6#include <qpe/qpeapplication.h> 6#include <qpe/qpeapplication.h>
7#include <qpe/resource.h> 7#include <qpe/resource.h>
8 8
9#include <assert.h> 9#include <assert.h>
10 10
11#include "kvnc.h" 11#include "kvnc.h"
12#include "krfbcanvas.h" 12#include "krfbcanvas.h"
13#include "krfbconnection.h" 13#include "krfbconnection.h"
14#include "kvncconndlg.h" 14#include "kvncconndlg.h"
15 15
16static int u_id = 1; 16static int u_id = 1;
17static int get_unique_id() 17static int get_unique_id()
18{ 18{
19 return u_id++; 19 return u_id++;
20} 20}
21 21
22 22
23/* XPM */ 23/* XPM */
24static char * menu_xpm[] = { 24static char * menu_xpm[] = {
25"12 12 5 1", 25"12 12 5 1",
26 " c None", 26 " c None",
27 ".c #000000", 27 ".c #000000",
28 "+c #FFFDAD", 28 "+c #FFFDAD",
29 "@c #FFFF00", 29 "@c #FFFF00",
30 "#c #E5E100", 30 "#c #E5E100",
31" ", 31" ",
32" ", 32" ",
33" ......... ", 33" ......... ",
34" .+++++++. ", 34" .+++++++. ",
35" .+@@@@#. ", 35" .+@@@@#. ",
36" .+@@@#. ", 36" .+@@@#. ",
37" .+@@#. ", 37" .+@@#. ",
38" .+@#. ", 38" .+@#. ",
39" .+#. ", 39" .+#. ",
40" .+. ", 40" .+. ",
41" .. ", 41" .. ",
42" "}; 42" "};
43 43
44const int StatusTextId = 0; 44const int StatusTextId = 0;
45 45
46KVNC::KVNC( QWidget *parent, const char *name, WFlags f) : QMainWindow( 0, name ,WStyle_ContextHelp) 46KVNC::KVNC( QWidget *parent, const char *name, WFlags ) : QMainWindow( parent, name ,WStyle_ContextHelp)
47{ 47{
48 setCaption( tr("VNC Viewer") ); 48 setCaption( tr("VNC Viewer") );
49 fullscreen = false; 49 fullscreen = false;
50 50
51 stack = new QWidgetStack( this ); 51 stack = new QWidgetStack( this );
52 setCentralWidget( stack ); 52 setCentralWidget( stack );
53 53
54 bookmarkSelector=new KVNCBookmarkDlg(); 54 bookmarkSelector=new KVNCBookmarkDlg();
55 stack->addWidget(bookmarkSelector,get_unique_id()); 55 stack->addWidget(bookmarkSelector,get_unique_id());
56 stack->raiseWidget( bookmarkSelector ); 56 stack->raiseWidget( bookmarkSelector );
57 57
58 canvas = new KRFBCanvas( stack, "canvas" ); 58 canvas = new KRFBCanvas( stack, "canvas" );
59 stack->addWidget(canvas,get_unique_id()); 59 stack->addWidget(canvas,get_unique_id());
60 setCentralWidget( stack ); 60 setCentralWidget( stack );
61 61
62 62
63 connect( bookmarkSelector->bookmarkList, SIGNAL(clicked(QListBoxItem*)), 63 connect( bookmarkSelector->bookmarkList, SIGNAL(clicked(QListBoxItem*)),
64 this, SLOT(openConnection(QListBoxItem*)) ); 64 this, SLOT(openConnection(QListBoxItem*)) );
65 connect( canvas->connection(), SIGNAL(statusChanged(const QString&)), 65 connect( canvas->connection(), SIGNAL(statusChanged(const QString&)),
66 this, SLOT(statusMessage(const QString&)) ); 66 this, SLOT(statusMessage(const QString&)) );
67 connect( canvas->connection(), SIGNAL(error(const QString&)), 67 connect( canvas->connection(), SIGNAL(error(const QString&)),
68 this, SLOT(error(const QString&)) ); 68 this, SLOT(error(const QString&)) );
69 connect( canvas->connection(), SIGNAL(connected()), this, SLOT(connected()) ); 69 connect( canvas->connection(), SIGNAL(connected()), this, SLOT(connected()) );
70 connect( canvas->connection(), SIGNAL(loggedIn()), this, SLOT(loggedIn()) ); 70 connect( canvas->connection(), SIGNAL(loggedIn()), this, SLOT(loggedIn()) );
71 connect( canvas->connection(), SIGNAL(disconnected()), this, SLOT(disconnected()) ); 71 connect( canvas->connection(), SIGNAL(disconnected()), this, SLOT(disconnected()) );
72 72
73 setupActions(); 73 setupActions();
74 74
75 cornerButton = new QPushButton( this ); 75 cornerButton = new QPushButton( this );
76 cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) ); 76 cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) );
77 connect( cornerButton, SIGNAL(pressed()), this, SLOT(showMenu()) ); 77 connect( cornerButton, SIGNAL(pressed()), this, SLOT(showMenu()) );
78 canvas->setCornerWidget( cornerButton ); 78 canvas->setCornerWidget( cornerButton );
79 79
80 stack->raiseWidget( bookmarkSelector ); 80 stack->raiseWidget( bookmarkSelector );
81 81
82 82
83 bar= new QToolBar( this ); 83 bar= new QToolBar( this );
84 setToolBarsMovable( false ); 84 setToolBarsMovable( false );
85 setRightJustification(false); 85 setRightJustification(false);
86 86
87 87
88 QAction *n = new QAction( tr( "New Connection" ), Resource::loadPixmap( "new" ), 88 QAction *n = new QAction( tr( "New Connection" ), Resource::loadPixmap( "new" ),
89 QString::null, 0, this, 0 ); 89 QString::null, 0, this, 0 );
90 connect( n, SIGNAL( activated() ), 90 connect( n, SIGNAL( activated() ),
91 this, SLOT( newConnection() ) ); 91 this, SLOT( newConnection() ) );
92 n->addTo( bar ); 92 n->addTo( bar );
93 93
94 QAction *o = new QAction( tr( "Open Bookmark" ), Resource::loadPixmap( "fileopen" ), 94 QAction *o = new QAction( tr( "Open Bookmark" ), Resource::loadPixmap( "fileopen" ),
diff --git a/noncore/comm/keypebble/vncauth.c b/noncore/comm/keypebble/vncauth.c
index dc276bf..277d145 100644
--- a/noncore/comm/keypebble/vncauth.c
+++ b/noncore/comm/keypebble/vncauth.c
@@ -4,97 +4,97 @@
4 * This is free software; you can redistribute it and/or modify 4 * This is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by 5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or 6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version. 7 * (at your option) any later version.
8 * 8 *
9 * This software is distributed in the hope that it will be useful, 9 * This software is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software 15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
17 * USA. 17 * USA.
18 */ 18 */
19 19
20/* 20/*
21 * vncauth.c - Functions for VNC password management and authentication. 21 * vncauth.c - Functions for VNC password management and authentication.
22 */ 22 */
23 23
24#include <stdio.h> 24#include <stdio.h>
25#include <stdlib.h> 25#include <stdlib.h>
26#include <string.h> 26#include <string.h>
27#include <sys/types.h> 27#include <sys/types.h>
28#include <sys/stat.h> 28#include <sys/stat.h>
29#include <time.h> 29#include <time.h>
30#include "vncauth.h" 30#include "vncauth.h"
31#include "d3des.h" 31#include "d3des.h"
32 32
33 33
34/* 34/*
35 * We use a fixed key to store passwords, since we assume that our local 35 * We use a fixed key to store passwords, since we assume that our local
36 * file system is secure but nonetheless don't want to store passwords 36 * file system is secure but nonetheless don't want to store passwords
37 * as plaintext. 37 * as plaintext.
38 */ 38 */
39 39
40unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7}; 40unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7};
41 41
42 42
43/* 43/*
44 * Encrypt a password and store it in a file. Returns 0 if successful, 44 * Encrypt a password and store it in a file. Returns 0 if successful,
45 * 1 if the file could not be written. 45 * 1 if the file could not be written.
46 */ 46 */
47 47
48int 48int
49vncEncryptAndStorePasswd(char *passwd, char *fname) 49vncEncryptAndStorePasswd(char *passwd, char *fname)
50{ 50{
51 FILE *fp; 51 FILE *fp;
52 int i; 52 uint i;
53 unsigned char encryptedPasswd[8]; 53 unsigned char encryptedPasswd[8];
54 54
55 if ((fp = fopen(fname,"w")) == NULL) return 1; 55 if ((fp = fopen(fname,"w")) == NULL) return 1;
56 56
57 chmod(fname, S_IRUSR|S_IWUSR); 57 chmod(fname, S_IRUSR|S_IWUSR);
58 58
59 /* pad password with nulls */ 59 /* pad password with nulls */
60 60
61 for (i = 0; i < 8; i++) { 61 for (i = 0; i < 8; i++) {
62 if (i < strlen(passwd)) { 62 if (i < strlen(passwd)) {
63 encryptedPasswd[i] = passwd[i]; 63 encryptedPasswd[i] = passwd[i];
64 } else { 64 } else {
65 encryptedPasswd[i] = 0; 65 encryptedPasswd[i] = 0;
66 } 66 }
67 } 67 }
68 68
69 /* Do encryption in-place - this way we overwrite our copy of the plaintext 69 /* Do encryption in-place - this way we overwrite our copy of the plaintext
70 password */ 70 password */
71 71
72 deskey(fixedkey, EN0); 72 deskey(fixedkey, EN0);
73 des(encryptedPasswd, encryptedPasswd); 73 des(encryptedPasswd, encryptedPasswd);
74 74
75 for (i = 0; i < 8; i++) { 75 for (i = 0; i < 8; i++) {
76 putc(encryptedPasswd[i], fp); 76 putc(encryptedPasswd[i], fp);
77 } 77 }
78 78
79 fclose(fp); 79 fclose(fp);
80 return 0; 80 return 0;
81} 81}
82 82
83 83
84/* 84/*
85 * Decrypt a password from a file. Returns a pointer to a newly allocated 85 * Decrypt a password from a file. Returns a pointer to a newly allocated
86 * string containing the password or a null pointer if the password could 86 * string containing the password or a null pointer if the password could
87 * not be retrieved for some reason. 87 * not be retrieved for some reason.
88 */ 88 */
89 89
90char * 90char *
91vncDecryptPasswdFromFile(char *fname) 91vncDecryptPasswdFromFile(char *fname)
92{ 92{
93 FILE *fp; 93 FILE *fp;
94 int i, ch; 94 int i, ch;
95 unsigned char *passwd = (unsigned char *)malloc(9); 95 unsigned char *passwd = (unsigned char *)malloc(9);
96 96
97 if ((fp = fopen(fname,"r")) == NULL) return NULL; 97 if ((fp = fopen(fname,"r")) == NULL) return NULL;
98 98
99 for (i = 0; i < 8; i++) { 99 for (i = 0; i < 8; i++) {
100 ch = getc(fp); 100 ch = getc(fp);