File: password.cpp

package info (click to toggle)
asc 2.4.0.0-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 75,080 kB
  • ctags: 24,943
  • sloc: cpp: 155,023; sh: 8,829; ansic: 6,890; makefile: 650; perl: 138
file content (123 lines) | stat: -rw-r--r-- 2,815 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/***************************************************************************
                          password.cpp  -  description
                             -------------------
    begin                : Mon Nov 27 2000
    copyright            : (C) 2000 by Martin Bickel
    email                : bickel@asc-hq.org
 ***************************************************************************/

/*! \file password.cpp
    \brief A class for holding, encoding and comparing passwords
*/


/***************************************************************************
 *                                                                         *
 *   This program 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; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#include "password.h"
#include "misc.h"


void Password :: setUnencoded ( const string& s )
{
   password = encodedpassword2string ( encodepassword ( s.c_str() ) );
}

void Password :: setEncoded   ( const string& s )
{
   if ( !s.empty () ) {
      if ( s[0] == 'A' )
         password = s;
      else
         password = encodedpassword2string ( atoi ( s.c_str() ));
   } else
      password = s;
}


void Password :: setInt  ( int pwd )
{
   password = encodedpassword2string ( pwd );
}

bool Password :: operator== ( const Password& p ) const
{
   return p.password == password;
}

bool Password :: operator!= ( const Password& p ) const
{
   return p.password != password;
}


int Password :: encodepassword ( const char* pw ) const
{
   if ( !pw )
      return 0;

   int len = strlen ( pw );

   if ( len )
      return crc32buf( pw, len+1 );
   else
      return 0;
}

string Password :: encodedpassword2string ( int pwd ) const
{
   string s;
   if ( !pwd )
      return s;

   s = "A";
   if ( pwd > 0 )
      s+= "A";
   else
      s+= "B";
   s += strrr ( abs (pwd) );
   return s;
}


bool Password :: empty () const
{
   return password.empty();
}

string Password :: toString ( ) const
{
   return password;
}


void Password::read ( tnstream& stream )
{
   int i = stream.readInt();
   password = encodedpassword2string ( i );
}

void Password::write ( tnstream& stream ) const
{
   int i;
   if ( password[0] == 'A' ) {
      if ( password[1] == 'A' )
         i = atoi ( password.substr ( 2 ).c_str() );
      else
         i = -atoi ( password.substr ( 2 ).c_str() );

      stream.writeInt ( i );
   } else
      stream.writeInt ( 0 );
}

void Password::reset()
{
  password = "";
}