pvpgn-twilight 0.0.8 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Changes +7 -1
- data/ext/extconf.rb +8 -6
- data/ext/pvpgn.cpp +206 -206
- data/pvpgn-twilight.gemspec +13 -13
- metadata +1 -1
data/Changes
CHANGED
@@ -25,4 +25,10 @@ Version 0.0.7
|
|
25
25
|
|
26
26
|
Version 0.0.8
|
27
27
|
- Added G++ compiler specifier
|
28
|
-
- GitHub repository now defunkt, use GemCutter instead
|
28
|
+
- GitHub repository now defunkt, use GemCutter instead
|
29
|
+
|
30
|
+
Version 0.0.9
|
31
|
+
- extconf.rb updates
|
32
|
+
|
33
|
+
Version 0.1.0
|
34
|
+
- Changed text formats to UNIX style
|
data/ext/extconf.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
# Loads mkmf which is used to make makefiles for Ruby extensions
|
2
|
-
require 'mkmf'
|
3
|
-
|
4
|
-
# Do the work
|
5
|
-
|
6
|
-
|
1
|
+
# Loads mkmf which is used to make makefiles for Ruby extensions
|
2
|
+
require 'mkmf'
|
3
|
+
|
4
|
+
# Do the work
|
5
|
+
$CC = 'g++'
|
6
|
+
$CXX = $CC
|
7
|
+
cpp_command('g++')
|
8
|
+
create_makefile('pvpgn')
|
data/ext/pvpgn.cpp
CHANGED
@@ -1,206 +1,206 @@
|
|
1
|
-
#define PVPGN_TWILIGHT_VERSION "0.0
|
2
|
-
|
3
|
-
#ifdef __TEST__
|
4
|
-
#include <iostream>
|
5
|
-
#else
|
6
|
-
#include "ruby.h"
|
7
|
-
#endif
|
8
|
-
|
9
|
-
typedef unsigned int t_uint32;
|
10
|
-
typedef signed int t_sint32;
|
11
|
-
|
12
|
-
#define ROTL(x,n,w) (((x)<<((n)&(w-1))) | ((x)>>(((-(n))&(w-1)))))
|
13
|
-
|
14
|
-
#define ROTL32(x,n) ROTL(x,n,32)
|
15
|
-
#define ROTL16(x,n) ROTL(x,n,16)
|
16
|
-
|
17
|
-
static void PVPGN_Hash(t_uint32* pHash, t_uint32* pTemp)
|
18
|
-
{
|
19
|
-
t_uint32 i;
|
20
|
-
|
21
|
-
for(i = 0; i < 64; i++)
|
22
|
-
pTemp[i + 16] = ROTL32(1,pTemp[i] ^ pTemp[i + 8] ^ pTemp[i + 2] ^ pTemp[i + 13]);
|
23
|
-
|
24
|
-
t_uint32 a = pHash[0];
|
25
|
-
t_uint32 b = pHash[1];
|
26
|
-
t_uint32 c = pHash[2];
|
27
|
-
t_uint32 d = pHash[3];
|
28
|
-
t_uint32 e = pHash[4];
|
29
|
-
t_uint32 g;
|
30
|
-
|
31
|
-
for(i = 0; i < 20; i++)
|
32
|
-
{
|
33
|
-
g = pTemp[i] + ROTL32(a,5) + e + ((b & c) | (~b & d)) + 0x5a827999;
|
34
|
-
e = d;
|
35
|
-
d = c;
|
36
|
-
c = ROTL32(b,30);
|
37
|
-
b = a;
|
38
|
-
a = g;
|
39
|
-
}
|
40
|
-
|
41
|
-
for(; i < 40; i++)
|
42
|
-
{
|
43
|
-
g = (d ^ c ^ b) + e + ROTL32(g,5) + pTemp[i] + 0x6ed9eba1;
|
44
|
-
e = d;
|
45
|
-
d = c;
|
46
|
-
c = ROTL32(b,30);
|
47
|
-
b = a;
|
48
|
-
a = g;
|
49
|
-
}
|
50
|
-
|
51
|
-
for (; i < 60; i++)
|
52
|
-
{
|
53
|
-
g = pTemp[i] + ROTL32(g,5) + e + ((c & b) | (d & c) | (d & b)) - 0x70e44324;
|
54
|
-
e = d;
|
55
|
-
d = c;
|
56
|
-
c = ROTL32(b,30);
|
57
|
-
b = a;
|
58
|
-
a = g;
|
59
|
-
}
|
60
|
-
|
61
|
-
for (; i < 80; i++)
|
62
|
-
{
|
63
|
-
g = (d ^ c ^ b) + e + ROTL32(g,5) + pTemp[i] - 0x359d3e2a;
|
64
|
-
e = d;
|
65
|
-
d = c;
|
66
|
-
c = ROTL32(b,30);
|
67
|
-
b = a;
|
68
|
-
a = g;
|
69
|
-
}
|
70
|
-
|
71
|
-
pHash[0] += g;
|
72
|
-
pHash[1] += b;
|
73
|
-
pHash[2] += c;
|
74
|
-
pHash[3] += d;
|
75
|
-
pHash[4] += e;
|
76
|
-
}
|
77
|
-
|
78
|
-
static void PVPGN_Set16(t_uint32* pDest, const unsigned char* pSource, t_sint32 nSize)
|
79
|
-
{
|
80
|
-
if(pDest == NULL || pSource == NULL || nSize < 0)
|
81
|
-
return;
|
82
|
-
|
83
|
-
t_uint32 i, dwPos;
|
84
|
-
for(dwPos = 0, i = 0; i < 16; i++)
|
85
|
-
{
|
86
|
-
pDest[i] = 0;
|
87
|
-
if(dwPos < nSize)
|
88
|
-
pDest[i] |= ((t_uint32)pSource[dwPos]);
|
89
|
-
|
90
|
-
dwPos++;
|
91
|
-
if(dwPos < nSize)
|
92
|
-
pDest[i] |= ((t_uint32)pSource[dwPos]) << 8;
|
93
|
-
|
94
|
-
dwPos++;
|
95
|
-
if(dwPos < nSize)
|
96
|
-
pDest[i] |= ((t_uint32)pSource[dwPos]) << 16;
|
97
|
-
|
98
|
-
dwPos++;
|
99
|
-
if(dwPos < nSize)
|
100
|
-
pDest[i] |= ((t_uint32)pSource[dwPos]) << 24;
|
101
|
-
|
102
|
-
dwPos++;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
|
106
|
-
static void UTILITY_ToLower(char* pString)
|
107
|
-
{
|
108
|
-
if(pString == NULL)
|
109
|
-
return;
|
110
|
-
|
111
|
-
char nChar = 0;
|
112
|
-
while((nChar = *pString))
|
113
|
-
*pString++ = ((nChar < 'A' || nChar > 'Z') ? nChar : (nChar + 0x20));
|
114
|
-
}
|
115
|
-
|
116
|
-
static void UTILITY_HexToText(char* pBuffer, t_uint32 dwHex, t_uint32 bUpper = 0)
|
117
|
-
{
|
118
|
-
if(pBuffer == NULL)
|
119
|
-
return;
|
120
|
-
|
121
|
-
static const char szHex[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
|
122
|
-
static const char szHexU[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
|
123
|
-
int i;
|
124
|
-
if(!bUpper)
|
125
|
-
{
|
126
|
-
for(i = 7; i > -1; i--)
|
127
|
-
{
|
128
|
-
int nChar = dwHex % 16;
|
129
|
-
dwHex >>= 4;
|
130
|
-
pBuffer[i] = szHex[nChar];
|
131
|
-
}
|
132
|
-
}
|
133
|
-
else
|
134
|
-
{
|
135
|
-
for(i = 7; i > -1; i--)
|
136
|
-
{
|
137
|
-
int nChar = dwHex % 16;
|
138
|
-
dwHex >>= 4;
|
139
|
-
pBuffer[i] = szHexU[nChar];
|
140
|
-
}
|
141
|
-
}
|
142
|
-
}
|
143
|
-
|
144
|
-
static char* PVPGN_CreateHash(char* pHash, t_sint32 nSize)
|
145
|
-
{
|
146
|
-
if(pHash == NULL || nSize < 1)
|
147
|
-
return NULL;
|
148
|
-
|
149
|
-
t_uint32 dwLength = 0, i;
|
150
|
-
unsigned char* pData = (unsigned char*)pHash;
|
151
|
-
char pHashOut[41];
|
152
|
-
t_uint32 dwHash[5] = {0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0};
|
153
|
-
t_uint32 dwTemp[80];
|
154
|
-
|
155
|
-
pHashOut[40] = 0;
|
156
|
-
UTILITY_ToLower(pHash);
|
157
|
-
while(nSize > 0)
|
158
|
-
{
|
159
|
-
dwLength = (nSize > 64) ? 64 : nSize;
|
160
|
-
PVPGN_Set16(dwTemp,pData,dwLength);
|
161
|
-
PVPGN_Hash(dwHash,dwTemp);
|
162
|
-
nSize -= dwLength;
|
163
|
-
pData += dwLength;
|
164
|
-
}
|
165
|
-
|
166
|
-
for(i = 0; i < 5; i++)
|
167
|
-
UTILITY_HexToText(&pHashOut[i * 8],dwHash[i]);
|
168
|
-
|
169
|
-
return pHashOut;
|
170
|
-
}
|
171
|
-
#ifdef __TEST__
|
172
|
-
int main(int argc, char *argv[])
|
173
|
-
{
|
174
|
-
std::string sInput;
|
175
|
-
std::cout << "Please Enter Password: ";
|
176
|
-
std::cin >> sInput;
|
177
|
-
std::cout << "Hash: " << PVPGN_CreateHash((char*)sInput.c_str(),sInput.size()) << std::endl;
|
178
|
-
system("PAUSE");
|
179
|
-
return 0;
|
180
|
-
}
|
181
|
-
#else
|
182
|
-
/*
|
183
|
-
* call-seq:
|
184
|
-
* PVPGN.BNHash(string_to_hash)
|
185
|
-
*
|
186
|
-
* Creates the PVPGN hash for the give string, it is automatically
|
187
|
-
* converted to a lower case string, the input is also automatically
|
188
|
-
* converted to lower case
|
189
|
-
*/
|
190
|
-
static VALUE __cdecl RUBY_BNHash(int argc, VALUE* argv, VALUE klass)
|
191
|
-
{
|
192
|
-
VALUE vPassword;
|
193
|
-
if(argc != 1)
|
194
|
-
rb_raise(rb_eRuntimeError,"Invalid Amount of Arguments");
|
195
|
-
|
196
|
-
vPassword = argv[0];
|
197
|
-
char* szPass = StringValuePtr(vPassword);
|
198
|
-
return rb_str_new2(PVPGN_CreateHash(szPass,strlen(szPass)));
|
199
|
-
}
|
200
|
-
|
201
|
-
void Init_pvpgn()
|
202
|
-
{
|
203
|
-
static VALUE mPVPGN = rb_define_module("PVPGN");
|
204
|
-
rb_define_module_function(mPVPGN,"BNHash",(VALUE (*)(...))RUBY_BNHash,-1);
|
205
|
-
}
|
206
|
-
#endif
|
1
|
+
#define PVPGN_TWILIGHT_VERSION "0.1.0"
|
2
|
+
|
3
|
+
#ifdef __TEST__
|
4
|
+
#include <iostream>
|
5
|
+
#else
|
6
|
+
#include "ruby.h"
|
7
|
+
#endif
|
8
|
+
|
9
|
+
typedef unsigned int t_uint32;
|
10
|
+
typedef signed int t_sint32;
|
11
|
+
|
12
|
+
#define ROTL(x,n,w) (((x)<<((n)&(w-1))) | ((x)>>(((-(n))&(w-1)))))
|
13
|
+
|
14
|
+
#define ROTL32(x,n) ROTL(x,n,32)
|
15
|
+
#define ROTL16(x,n) ROTL(x,n,16)
|
16
|
+
|
17
|
+
static void PVPGN_Hash(t_uint32* pHash, t_uint32* pTemp)
|
18
|
+
{
|
19
|
+
t_uint32 i;
|
20
|
+
|
21
|
+
for(i = 0; i < 64; i++)
|
22
|
+
pTemp[i + 16] = ROTL32(1,pTemp[i] ^ pTemp[i + 8] ^ pTemp[i + 2] ^ pTemp[i + 13]);
|
23
|
+
|
24
|
+
t_uint32 a = pHash[0];
|
25
|
+
t_uint32 b = pHash[1];
|
26
|
+
t_uint32 c = pHash[2];
|
27
|
+
t_uint32 d = pHash[3];
|
28
|
+
t_uint32 e = pHash[4];
|
29
|
+
t_uint32 g;
|
30
|
+
|
31
|
+
for(i = 0; i < 20; i++)
|
32
|
+
{
|
33
|
+
g = pTemp[i] + ROTL32(a,5) + e + ((b & c) | (~b & d)) + 0x5a827999;
|
34
|
+
e = d;
|
35
|
+
d = c;
|
36
|
+
c = ROTL32(b,30);
|
37
|
+
b = a;
|
38
|
+
a = g;
|
39
|
+
}
|
40
|
+
|
41
|
+
for(; i < 40; i++)
|
42
|
+
{
|
43
|
+
g = (d ^ c ^ b) + e + ROTL32(g,5) + pTemp[i] + 0x6ed9eba1;
|
44
|
+
e = d;
|
45
|
+
d = c;
|
46
|
+
c = ROTL32(b,30);
|
47
|
+
b = a;
|
48
|
+
a = g;
|
49
|
+
}
|
50
|
+
|
51
|
+
for (; i < 60; i++)
|
52
|
+
{
|
53
|
+
g = pTemp[i] + ROTL32(g,5) + e + ((c & b) | (d & c) | (d & b)) - 0x70e44324;
|
54
|
+
e = d;
|
55
|
+
d = c;
|
56
|
+
c = ROTL32(b,30);
|
57
|
+
b = a;
|
58
|
+
a = g;
|
59
|
+
}
|
60
|
+
|
61
|
+
for (; i < 80; i++)
|
62
|
+
{
|
63
|
+
g = (d ^ c ^ b) + e + ROTL32(g,5) + pTemp[i] - 0x359d3e2a;
|
64
|
+
e = d;
|
65
|
+
d = c;
|
66
|
+
c = ROTL32(b,30);
|
67
|
+
b = a;
|
68
|
+
a = g;
|
69
|
+
}
|
70
|
+
|
71
|
+
pHash[0] += g;
|
72
|
+
pHash[1] += b;
|
73
|
+
pHash[2] += c;
|
74
|
+
pHash[3] += d;
|
75
|
+
pHash[4] += e;
|
76
|
+
}
|
77
|
+
|
78
|
+
static void PVPGN_Set16(t_uint32* pDest, const unsigned char* pSource, t_sint32 nSize)
|
79
|
+
{
|
80
|
+
if(pDest == NULL || pSource == NULL || nSize < 0)
|
81
|
+
return;
|
82
|
+
|
83
|
+
t_uint32 i, dwPos;
|
84
|
+
for(dwPos = 0, i = 0; i < 16; i++)
|
85
|
+
{
|
86
|
+
pDest[i] = 0;
|
87
|
+
if(dwPos < nSize)
|
88
|
+
pDest[i] |= ((t_uint32)pSource[dwPos]);
|
89
|
+
|
90
|
+
dwPos++;
|
91
|
+
if(dwPos < nSize)
|
92
|
+
pDest[i] |= ((t_uint32)pSource[dwPos]) << 8;
|
93
|
+
|
94
|
+
dwPos++;
|
95
|
+
if(dwPos < nSize)
|
96
|
+
pDest[i] |= ((t_uint32)pSource[dwPos]) << 16;
|
97
|
+
|
98
|
+
dwPos++;
|
99
|
+
if(dwPos < nSize)
|
100
|
+
pDest[i] |= ((t_uint32)pSource[dwPos]) << 24;
|
101
|
+
|
102
|
+
dwPos++;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
static void UTILITY_ToLower(char* pString)
|
107
|
+
{
|
108
|
+
if(pString == NULL)
|
109
|
+
return;
|
110
|
+
|
111
|
+
char nChar = 0;
|
112
|
+
while((nChar = *pString))
|
113
|
+
*pString++ = ((nChar < 'A' || nChar > 'Z') ? nChar : (nChar + 0x20));
|
114
|
+
}
|
115
|
+
|
116
|
+
static void UTILITY_HexToText(char* pBuffer, t_uint32 dwHex, t_uint32 bUpper = 0)
|
117
|
+
{
|
118
|
+
if(pBuffer == NULL)
|
119
|
+
return;
|
120
|
+
|
121
|
+
static const char szHex[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
|
122
|
+
static const char szHexU[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
|
123
|
+
int i;
|
124
|
+
if(!bUpper)
|
125
|
+
{
|
126
|
+
for(i = 7; i > -1; i--)
|
127
|
+
{
|
128
|
+
int nChar = dwHex % 16;
|
129
|
+
dwHex >>= 4;
|
130
|
+
pBuffer[i] = szHex[nChar];
|
131
|
+
}
|
132
|
+
}
|
133
|
+
else
|
134
|
+
{
|
135
|
+
for(i = 7; i > -1; i--)
|
136
|
+
{
|
137
|
+
int nChar = dwHex % 16;
|
138
|
+
dwHex >>= 4;
|
139
|
+
pBuffer[i] = szHexU[nChar];
|
140
|
+
}
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
static char* PVPGN_CreateHash(char* pHash, t_sint32 nSize)
|
145
|
+
{
|
146
|
+
if(pHash == NULL || nSize < 1)
|
147
|
+
return NULL;
|
148
|
+
|
149
|
+
t_uint32 dwLength = 0, i;
|
150
|
+
unsigned char* pData = (unsigned char*)pHash;
|
151
|
+
char pHashOut[41];
|
152
|
+
t_uint32 dwHash[5] = {0x67452301,0xefcdab89,0x98badcfe,0x10325476,0xc3d2e1f0};
|
153
|
+
t_uint32 dwTemp[80];
|
154
|
+
|
155
|
+
pHashOut[40] = 0;
|
156
|
+
UTILITY_ToLower(pHash);
|
157
|
+
while(nSize > 0)
|
158
|
+
{
|
159
|
+
dwLength = (nSize > 64) ? 64 : nSize;
|
160
|
+
PVPGN_Set16(dwTemp,pData,dwLength);
|
161
|
+
PVPGN_Hash(dwHash,dwTemp);
|
162
|
+
nSize -= dwLength;
|
163
|
+
pData += dwLength;
|
164
|
+
}
|
165
|
+
|
166
|
+
for(i = 0; i < 5; i++)
|
167
|
+
UTILITY_HexToText(&pHashOut[i * 8],dwHash[i]);
|
168
|
+
|
169
|
+
return pHashOut;
|
170
|
+
}
|
171
|
+
#ifdef __TEST__
|
172
|
+
int main(int argc, char *argv[])
|
173
|
+
{
|
174
|
+
std::string sInput;
|
175
|
+
std::cout << "Please Enter Password: ";
|
176
|
+
std::cin >> sInput;
|
177
|
+
std::cout << "Hash: " << PVPGN_CreateHash((char*)sInput.c_str(),sInput.size()) << std::endl;
|
178
|
+
system("PAUSE");
|
179
|
+
return 0;
|
180
|
+
}
|
181
|
+
#else
|
182
|
+
/*
|
183
|
+
* call-seq:
|
184
|
+
* PVPGN.BNHash(string_to_hash)
|
185
|
+
*
|
186
|
+
* Creates the PVPGN hash for the give string, it is automatically
|
187
|
+
* converted to a lower case string, the input is also automatically
|
188
|
+
* converted to lower case
|
189
|
+
*/
|
190
|
+
static VALUE __cdecl RUBY_BNHash(int argc, VALUE* argv, VALUE klass)
|
191
|
+
{
|
192
|
+
VALUE vPassword;
|
193
|
+
if(argc != 1)
|
194
|
+
rb_raise(rb_eRuntimeError,"Invalid Amount of Arguments");
|
195
|
+
|
196
|
+
vPassword = argv[0];
|
197
|
+
char* szPass = StringValuePtr(vPassword);
|
198
|
+
return rb_str_new2(PVPGN_CreateHash(szPass,strlen(szPass)));
|
199
|
+
}
|
200
|
+
|
201
|
+
void Init_pvpgn()
|
202
|
+
{
|
203
|
+
static VALUE mPVPGN = rb_define_module("PVPGN");
|
204
|
+
rb_define_module_function(mPVPGN,"BNHash",(VALUE (*)(...))RUBY_BNHash,-1);
|
205
|
+
}
|
206
|
+
#endif
|
data/pvpgn-twilight.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.name = %q{pvpgn-twilight}
|
3
|
-
s.version = "0.0
|
4
|
-
s.date = %q{2009-12-02}
|
5
|
-
s.authors = ["Lorenzo Boccetti"]
|
6
|
-
s.email = %q{necrolis@gamil.com}
|
7
|
-
s.summary = %q{A ruby interface for Twilight PVPGN}
|
8
|
-
s.homepage = %q{http://www.twilightgaming.co.za}
|
9
|
-
s.description = %q{PVPGN-Twilight allows ruby scripts to communicate with pvpgn, while providing faster varients of certain functions, like hashing}
|
10
|
-
s.files = ["pvpgn-twilight.gemspec","ext/pvpgn.cpp","examples/pvpgn_test.rb","ext/extconf.rb","Changes","docs/pvpgn-twilight.txt","pvpgn-twilight.gemspec"]
|
11
|
-
s.extensions << 'ext/extconf.rb'
|
12
|
-
s.has_rdoc = true
|
13
|
-
s.extra_rdoc_files = ["Changes","ext/pvpgn.cpp","docs/pvpgn-twilight.txt"]
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{pvpgn-twilight}
|
3
|
+
s.version = "0.1.0"
|
4
|
+
s.date = %q{2009-12-02}
|
5
|
+
s.authors = ["Lorenzo Boccetti"]
|
6
|
+
s.email = %q{necrolis@gamil.com}
|
7
|
+
s.summary = %q{A ruby interface for Twilight PVPGN}
|
8
|
+
s.homepage = %q{http://www.twilightgaming.co.za}
|
9
|
+
s.description = %q{PVPGN-Twilight allows ruby scripts to communicate with pvpgn, while providing faster varients of certain functions, like hashing}
|
10
|
+
s.files = ["pvpgn-twilight.gemspec","ext/pvpgn.cpp","examples/pvpgn_test.rb","ext/extconf.rb","Changes","docs/pvpgn-twilight.txt","pvpgn-twilight.gemspec"]
|
11
|
+
s.extensions << 'ext/extconf.rb'
|
12
|
+
s.has_rdoc = true
|
13
|
+
s.extra_rdoc_files = ["Changes","ext/pvpgn.cpp","docs/pvpgn-twilight.txt"]
|
14
14
|
end
|