Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
9e37591d
Commit
9e37591d
authored
May 10, 2006
by
Mike McCormack
Committed by
Alexandre Julliard
May 10, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
advapi32: Implement and test SystemFunction032 (arc4 encryption).
parent
72822c0f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
147 additions
and
1 deletion
+147
-1
Makefile.in
dlls/advapi32/Makefile.in
+1
-0
advapi32.spec
dlls/advapi32/advapi32.spec
+1
-1
crypt_arc4.c
dlls/advapi32/crypt_arc4.c
+109
-0
crypt_lmhash.c
dlls/advapi32/tests/crypt_lmhash.c
+36
-0
No files found.
dlls/advapi32/Makefile.in
View file @
9e37591d
...
...
@@ -11,6 +11,7 @@ EXTRALIBS = $(LIBUNICODE)
C_SRCS
=
\
advapi.c
\
crypt.c
\
crypt_arc4.c
\
crypt_des.c
\
crypt_lmhash.c
\
crypt_md4.c
\
...
...
dlls/advapi32/advapi32.spec
View file @
9e37591d
...
...
@@ -626,7 +626,7 @@
@ stub SystemFunction029
@ stub SystemFunction030
@ stub SystemFunction031
@ st
ub SystemFunction032
@ st
dcall SystemFunction032(ptr ptr)
@ stub SystemFunction033
@ stub SystemFunction034
@ stub SystemFunction035
...
...
dlls/advapi32/crypt_arc4.c
0 → 100644
View file @
9e37591d
/*
* Copyright 2006 Mike McCormack
*
* based on arc4.cpp - written and placed in the public domain by Wei Dai
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* http://cryptopp.sourceforge.net/docs/ref521/arc4_8cpp-source.html */
#include <stdarg.h>
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
#include "winternl.h"
typedef
struct
tag_arc4_info
{
unsigned
char
state
[
256
];
unsigned
char
x
,
y
;
}
arc4_info
;
static
void
arc4_init
(
arc4_info
*
a4i
,
const
BYTE
*
key
,
unsigned
int
keyLen
)
{
unsigned
int
keyIndex
=
0
,
stateIndex
=
0
;
unsigned
int
i
,
a
;
a4i
->
x
=
a4i
->
y
=
0
;
for
(
i
=
0
;
i
<
256
;
i
++
)
a4i
->
state
[
i
]
=
i
;
for
(
i
=
0
;
i
<
256
;
i
++
)
{
a
=
a4i
->
state
[
i
];
stateIndex
+=
key
[
keyIndex
]
+
a
;
stateIndex
&=
0xff
;
a4i
->
state
[
i
]
=
a4i
->
state
[
stateIndex
];
a4i
->
state
[
stateIndex
]
=
a
;
if
(
++
keyIndex
>=
keyLen
)
keyIndex
=
0
;
}
}
static
void
arc4_ProcessString
(
arc4_info
*
a4i
,
BYTE
*
inoutString
,
unsigned
int
length
)
{
BYTE
*
const
s
=
a4i
->
state
;
unsigned
int
x
=
a4i
->
x
;
unsigned
int
y
=
a4i
->
y
;
unsigned
int
a
,
b
;
while
(
length
--
)
{
x
=
(
x
+
1
)
&
0xff
;
a
=
s
[
x
];
y
=
(
y
+
a
)
&
0xff
;
b
=
s
[
y
];
s
[
x
]
=
b
;
s
[
y
]
=
a
;
*
inoutString
++
^=
s
[(
a
+
b
)
&
0xff
];
}
a4i
->
x
=
x
;
a4i
->
y
=
y
;
}
struct
ustring
{
DWORD
Length
;
DWORD
MaximumLength
;
unsigned
char
*
Buffer
;
};
/******************************************************************************
* SystemFunction032 [ADVAPI32.@]
*
* Encrypts a string data using ARC4
*
* PARAMS
* data [I/O] data to encrypt
* key [I] key data
*
* RETURNS
* Success: STATUS_SUCCESS
* Failure: STATUS_UNSUCCESSFUL
*
* NOTES
* see http://web.it.kth.se/~rom/ntsec.html#crypto-strongavail
*/
NTSTATUS
WINAPI
SystemFunction032
(
struct
ustring
*
data
,
struct
ustring
*
key
)
{
arc4_info
a4i
;
arc4_init
(
&
a4i
,
key
->
Buffer
,
key
->
Length
);
arc4_ProcessString
(
&
a4i
,
data
->
Buffer
,
key
->
Length
);
return
STATUS_SUCCESS
;
}
dlls/advapi32/tests/crypt_lmhash.c
View file @
9e37591d
...
...
@@ -28,13 +28,21 @@
#include "winbase.h"
#include "winternl.h"
struct
ustring
{
DWORD
Length
;
DWORD
MaximumLength
;
unsigned
char
*
Buffer
;
};
typedef
VOID
(
WINAPI
*
fnSystemFunction006
)(
PCSTR
passwd
,
PSTR
lmhash
);
typedef
NTSTATUS
(
WINAPI
*
fnSystemFunction008
)(
const
LPBYTE
,
const
LPBYTE
,
LPBYTE
);
typedef
NTSTATUS
(
WINAPI
*
fnSystemFunction001
)(
const
LPBYTE
,
const
LPBYTE
,
LPBYTE
);
typedef
NTSTATUS
(
WINAPI
*
fnSystemFunction032
)(
struct
ustring
*
,
struct
ustring
*
);
fnSystemFunction006
pSystemFunction006
;
fnSystemFunction008
pSystemFunction008
;
fnSystemFunction001
pSystemFunction001
;
fnSystemFunction032
pSystemFunction032
;
static
void
test_SystemFunction006
(
void
)
{
...
...
@@ -114,6 +122,30 @@ static void test_SystemFunction001(void)
ok
(
!
memcmp
(
output
,
expected
,
sizeof
expected
),
"response wrong
\n
"
);
}
static
void
test_SystemFunction032
(
void
)
{
struct
ustring
key
,
data
;
unsigned
char
szKey
[]
=
{
'f'
,
'o'
,
'o'
,
0
};
unsigned
char
szData
[
8
]
=
{
'b'
,
'a'
,
'r'
,
0
};
unsigned
char
expected
[]
=
{
0x28
,
0xb9
,
0xf8
,
0xe1
};
int
r
;
/* crashes: pSystemFunction032(NULL,NULL); */
key
.
Buffer
=
szKey
;
key
.
Length
=
sizeof
szKey
;
key
.
MaximumLength
=
key
.
Length
;
data
.
Buffer
=
szData
;
data
.
Length
=
4
;
data
.
MaximumLength
=
8
;
r
=
pSystemFunction032
(
&
data
,
&
key
);
ok
(
r
==
STATUS_SUCCESS
,
"function failed
\n
"
);
ok
(
!
memcmp
(
expected
,
data
.
Buffer
,
data
.
Length
),
"wrong result
\n
"
);
}
START_TEST
(
crypt_lmhash
)
{
HMODULE
module
;
...
...
@@ -132,5 +164,9 @@ START_TEST(crypt_lmhash)
if
(
pSystemFunction001
)
test_SystemFunction001
();
pSystemFunction032
=
(
fnSystemFunction032
)
GetProcAddress
(
module
,
"SystemFunction032"
);
if
(
pSystemFunction032
)
test_SystemFunction032
();
FreeLibrary
(
module
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment