mirror of
https://github.com/kiddin9/openwrt-packages.git
synced 2025-01-09 10:27:29 +08:00
update
This commit is contained in:
parent
f7c208d518
commit
d78859e8db
0
luci-app-minieap/root/etc/init.d/minieap
Normal file → Executable file
0
luci-app-minieap/root/etc/init.d/minieap
Normal file → Executable file
0
luci-app-minieap/root/usr/sbin/minieap-conver
Normal file → Executable file
0
luci-app-minieap/root/usr/sbin/minieap-conver
Normal file → Executable file
0
luci-app-minieap/root/usr/sbin/minieap-ping
Normal file → Executable file
0
luci-app-minieap/root/usr/sbin/minieap-ping
Normal file → Executable file
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (C) 2006-2011 Xmlad.com
|
||||
# Copyright (C) 2016 Openwrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
@ -13,38 +13,34 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/updateing/minieap.git
|
||||
PKG_SOURCE_VERSION:=9e10f320a9fce46c8f4286324a0fc70e572f61dc
|
||||
PKG_MIRROR_HASH:=41c976810c994d6125f6fe3cb1d978f7e257aa587ee32229364942a82621b273
|
||||
PKG_REV=9e10f320a9fce46c8f4286324a0fc70e572f61dc
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_REV)
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
||||
|
||||
PKG_INSTALL:=1
|
||||
PKG_LICENSE:=GPLv3
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/minieap
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
DEPENDS:=+libpcap
|
||||
TITLE:=Extendable 802.1x client
|
||||
URL:=https://github.com/updateing/minieap
|
||||
SUBMENU:=Campus Network
|
||||
endef
|
||||
|
||||
define Package/minieap/description
|
||||
Extendable 802.1x client
|
||||
Extendable 802.1x client with Ruijie v3 (v4) plugin.
|
||||
endef
|
||||
|
||||
define Package/minieap/conffiles
|
||||
/etc/minieap.conf
|
||||
endef
|
||||
|
||||
define Build/Install
|
||||
endef
|
||||
|
||||
define Package/minieap/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/minieap $(1)/usr/sbin/
|
||||
|
13
minieap/patches/001-enable-gbconv.patch
Normal file
13
minieap/patches/001-enable-gbconv.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- a/config.mk
|
||||
+++ b/config.mk
|
||||
@@ -17,8 +17,8 @@ PLUGIN_MODULES += if_impl_sockraw
|
||||
# PLUGIN_MODULES += ifaddrs
|
||||
|
||||
ENABLE_DEBUG := false
|
||||
-ENABLE_ICONV := true
|
||||
-ENABLE_GBCONV := false
|
||||
+ENABLE_ICONV := false
|
||||
+ENABLE_GBCONV := true
|
||||
STATIC_BUILD := false
|
||||
|
||||
# If your platform has iconv_* integrated into libc, change to false
|
12
minieap/patches/002-disable-hdd-serial-query.patch
Normal file
12
minieap/patches/002-disable-hdd-serial-query.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- a/packet_plugin/rjv3/packet_plugin_rjv3_priv.c
|
||||
+++ b/packet_plugin/rjv3/packet_plugin_rjv3_priv.c
|
||||
@@ -132,7 +132,8 @@ static void rjv3_set_hdd_serial(uint8_t* serial_buf, char* fake_serial) {
|
||||
memmove(serial_buf, fake_serial, strnlen(fake_serial, MAX_PROP_LEN));
|
||||
return;
|
||||
}
|
||||
-#ifdef __linux__
|
||||
+ PR_WARN("请使用 --fake-serial 选项手动指定硬盘序列号");
|
||||
+#if 0
|
||||
FILE* _fp = fopen("/etc/mtab", "r");
|
||||
char _line_buf[MAX_LINE_LEN] = {0};
|
||||
char* _line_buf_dev, *_line_buf_mountpoint;
|
@ -1,16 +1,18 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ngrokc
|
||||
PKG_VERSION:=e4d1859
|
||||
PKG_VERSION:=1.54
|
||||
PKG_RELEASE:=1
|
||||
PKG_REV:=e4d18597debc01827171f224c38e27ff5feb07a4
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_URL:=https://github.com/dosgo/ngrok-c.git
|
||||
PKG_MIRROR_HASH:=9534e2510de60d74e1b4e2aadb88309c1b0e5401998e3872a6c412832259408c
|
||||
PKG_SOURCE_VERSION:=$(PKG_REV)
|
||||
PKG_SOURCE_VERSION:=5ecd4e03d04ac538051fe8f1b0deaca500dc7185
|
||||
PKG_MIRROR_HASH:=6bb27003b9357e9edd07b3b869e150ad506b253f3469fbbbae1fcece630afeb2
|
||||
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
@ -2,6 +2,16 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=njit8021xclient
|
||||
PKG_VERSION:=2.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/bitdust/njit8021xclient.git
|
||||
PKG_SOURCE_VERSION:=dd28c17f24275bbbf4c44504b832c0f1e6b9ae40
|
||||
PKG_MIRROR_HASH:=689c01fe559a1ad00446bdb92890ddfcfbe0f53e5afd9ae54d5649e7a43ff961
|
||||
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_INSTALL:=1
|
||||
@ -12,19 +22,14 @@ define Package/njit8021xclient
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=NJIT 802.1X client program
|
||||
DEPENDS:=+libpcap +libopenssl
|
||||
DEPENDS:=+libopenssl +libpcap
|
||||
SUBMENU:=Campus Network
|
||||
endef
|
||||
|
||||
define Package/njit8021xclient/description
|
||||
802.1X client from Nanjing Institude of Technology,
|
||||
compatable with H3C iNode 802.1X client.
|
||||
Support H3C/iNode's private authentication protocol V7.10
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
$(CP) ./src/* $(PKG_BUILD_DIR)/
|
||||
compatable with H3C iNode 802.1X client. Support
|
||||
H3C/iNode's private authentication protocol V7.10.
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
@ -33,12 +38,11 @@ define Build/Compile
|
||||
CFLAGS="$(TARGET_CFLAGS) -static" \
|
||||
CPPFLAGS="$(TARGET_CPPFLAGS)" \
|
||||
LIBS="$(STAGING_DIR)/usr/lib/libpcap.a"
|
||||
$(CP) $(PKG_BUILD_DIR)/client $(PKG_BUILD_DIR)/njit-client
|
||||
endef
|
||||
|
||||
define Package/njit8021xclient/install
|
||||
$(INSTALL_DIR) $(1)/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/njit-client $(1)/bin/
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/client $(1)/usr/sbin/njit-client
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,njit8021xclient))
|
||||
|
@ -1,7 +0,0 @@
|
||||
SUBDIRS = src
|
||||
dist_doc_DATA =
|
||||
dist_doc_DATA += ReadMe.html
|
||||
dist_doc_DATA += Install.html
|
||||
dist_doc_DATA += documents/Documents.html
|
||||
dist_doc_DATA += License/gpl-3.0.txt
|
||||
|
@ -1,9 +0,0 @@
|
||||
dnl Run autoreconf --install to generate ./configure from this file
|
||||
AC_INIT([njit8021xclient],[1.3])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
|
||||
AC_CONFIG_SUBDIRS([src])
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
echo "帮助您自动生成可发布的源码包..."
|
||||
|
||||
echo "1、调用automake和autoconf等标准工具"
|
||||
autoreconf --install
|
||||
if test $? != 0 ; then
|
||||
echo "缺少标准开发工具automake autoconf,请先安装开发工具"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "2、调用./configure脚本自动完成各项检查"
|
||||
./configure
|
||||
if test $? != 0 ; then
|
||||
echo "缺少开发库,请参考Install.html文档安装所有开发工具"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo "3、调用make工具生成tar.gz源代码压缩包"
|
||||
make dist --quiet
|
||||
ls *.tar.gz || ls *.tar.bz2
|
@ -1,674 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
@ -1,12 +0,0 @@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
SUBDIRS = \
|
||||
tests \
|
||||
po \
|
||||
$(NULL)
|
||||
EXTRA_DIST = HACKING
|
||||
|
||||
bin_PROGRAMS = hello
|
||||
hello_SOURCES = hello.c hello.h config.c config.h
|
||||
hello_CPPFLAGS = @GTK_CFLAGS@
|
||||
hello_LDADD = @GTK_LIBS@
|
||||
|
@ -1,24 +0,0 @@
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef PACKAGE_NAME
|
||||
#define PACKAGE_NAME ""
|
||||
#endif
|
||||
|
||||
#ifndef PACKAGE_VERSION
|
||||
#define PACKAGE_VERSION ""
|
||||
#endif
|
||||
|
||||
#ifndef LOCALEDIR
|
||||
#define LOCALEDIR "/usr/local/share/locale"
|
||||
#endif
|
||||
|
||||
#include "hello.h"
|
||||
|
||||
const struct GlobalConfig g_config = {
|
||||
.package_name = PACKAGE_NAME,
|
||||
.package_version = PACKAGE_VERSION,
|
||||
.locale_dir = LOCALEDIR,
|
||||
};
|
||||
|
@ -1,26 +0,0 @@
|
||||
AC_PREREQ(2.60)
|
||||
AC_INIT([gtkhelloworld], [0.1])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AM_INIT_AUTOMAKE([1.9.6 -Wall -Werror dist-bzip2])
|
||||
|
||||
AC_PROG_CC
|
||||
AM_PROG_CC_C_O
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_LIBTOOL
|
||||
AC_PROG_INTLTOOL
|
||||
ALL_LINGUAS="zh_CN"
|
||||
GETTEXT_PACKAGE="$PACKAGE"
|
||||
AC_SUBST(GETTEXT_PACKAGE)
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
AM_GLIB_DEFINE_LOCALEDIR(LOCALEDIR)
|
||||
AM_PATH_GTK_2_0
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
tests/Makefile
|
||||
po/Makefile.in
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
@ -1,135 +0,0 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <glib.h>
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "hello.h"
|
||||
|
||||
static void SendHelloWorld(gpointer);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
GtkWidget *win = NULL; /* The main window */
|
||||
GtkWidget *vbox = NULL; /* Packing box for the menu and toolbars */
|
||||
GtkWidget *menubar = NULL; /* The actual menubar */
|
||||
GtkWidget *toolbar = NULL; /* The actual toolbar */
|
||||
GtkActionGroup *action_group = NULL; /* Packing group for our Actions */
|
||||
GtkUIManager *menu_manager = NULL; /* The magic widget! */
|
||||
GError *error = NULL; /* For reporting exceptions or errors */
|
||||
|
||||
/* Initialize translation text domain */
|
||||
bindtextdomain(g_config.package_name, g_config.locale_dir);
|
||||
bind_textdomain_codeset(g_config.package_name, "UTF-8");
|
||||
textdomain(g_config.package_name);
|
||||
|
||||
/* Initialize GTK+ */
|
||||
g_log_set_handler("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
|
||||
gtk_init(&argc, &argv);
|
||||
g_log_set_handler("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
|
||||
|
||||
/* Create the main window */
|
||||
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_title(GTK_WINDOW(win), _("Hello World"));
|
||||
gtk_window_set_default_size(GTK_WINDOW(win), 400, 300);
|
||||
gtk_widget_realize(win);
|
||||
|
||||
/* Create a vertical box to hold menubar and toolbar */
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
|
||||
/* Create menus */
|
||||
action_group = gtk_action_group_new("TestActions");
|
||||
gtk_action_group_set_translation_domain(action_group, g_config.package_name);
|
||||
menu_manager = gtk_ui_manager_new();
|
||||
|
||||
/* Load UI from XML string */
|
||||
const gchar *UI =
|
||||
"<ui>"
|
||||
" <menubar name='MainMenuBar'>"
|
||||
" <menu name='FileMenu' action='FileMenuAction'>"
|
||||
" <menuitem name='Send' action='SendAction' />"
|
||||
" <separator/>"
|
||||
" <menuitem name='Quit' action='QuitAction' />"
|
||||
" <placeholder name='FileMenuAdditions' />"
|
||||
" </menu>"
|
||||
" </menubar>"
|
||||
""
|
||||
" <toolbar name='MainToolbar' action='MainMenuBarAction'>"
|
||||
" <placeholder name='ToolItems'>"
|
||||
" <separator/>"
|
||||
" <toolitem name='Send' action='SendAction'/>"
|
||||
" <separator/>"
|
||||
" </placeholder>"
|
||||
" </toolbar>"
|
||||
"</ui>"
|
||||
;
|
||||
error = NULL;
|
||||
gtk_ui_manager_add_ui_from_string(menu_manager, UI, strlen(UI), &error);
|
||||
|
||||
if (error)
|
||||
{
|
||||
g_message("building menus failed: %s", error->message);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Create a list of entries which are passed to the Action constructor.
|
||||
* This is a huge convenience over building Actions by hand.
|
||||
*/
|
||||
const GtkActionEntry entries[] = {
|
||||
/**********************************/
|
||||
{ "FileMenuAction", NULL,
|
||||
_("_File"), NULL,
|
||||
_("File operations"),
|
||||
NULL
|
||||
},
|
||||
/**********************************/
|
||||
{ "SendAction", GTK_STOCK_EXECUTE,
|
||||
_("_Send"), "<Ctrl>S",
|
||||
_("Send hello world to console"),
|
||||
G_CALLBACK(SendHelloWorld)
|
||||
},
|
||||
/**********************************/
|
||||
{ "QuitAction", GTK_STOCK_QUIT,
|
||||
_("_Quit"), "<Ctrl>Q",
|
||||
_("Quit"),
|
||||
G_CALLBACK(gtk_main_quit)
|
||||
},
|
||||
/**********************************/
|
||||
};
|
||||
/* Pack up our objects:
|
||||
* vbox -> win
|
||||
* actions -> action_group
|
||||
* action_group -> menu_manager
|
||||
*/
|
||||
gtk_container_add(GTK_CONTAINER(win), vbox);
|
||||
gtk_action_group_add_actions(action_group, entries, G_N_ELEMENTS(entries), NULL);
|
||||
gtk_ui_manager_insert_action_group(menu_manager, action_group, 0);
|
||||
|
||||
/* Get the menubar and the toolbar and put them in the vertical packing box */
|
||||
menubar = gtk_ui_manager_get_widget(menu_manager, "/MainMenuBar");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
|
||||
toolbar = gtk_ui_manager_get_widget(menu_manager, "/MainToolbar");
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
|
||||
|
||||
|
||||
/* Connect signals */
|
||||
g_signal_connect(win, "destroy", gtk_main_quit, NULL);
|
||||
|
||||
/* Make sure that the accelerators work */
|
||||
gtk_window_add_accel_group(GTK_WINDOW(win),
|
||||
gtk_ui_manager_get_accel_group(menu_manager));
|
||||
|
||||
/* Enter the main loop */
|
||||
gtk_widget_show_all(win);
|
||||
gtk_main();
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void SendHelloWorld(gpointer p)
|
||||
{
|
||||
(void) p;
|
||||
g_print("%s\n", _("Hello world!"));
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
#ifndef HELLO_H
|
||||
#define HELLO_H
|
||||
|
||||
extern const struct GlobalConfig {
|
||||
const char *package_name;
|
||||
const char *package_version;
|
||||
const char *locale_dir;
|
||||
} g_config;
|
||||
|
||||
#endif//HELLO_H
|
0
njitclient/src-gui/gtkgui/m4/.gitignore
vendored
0
njitclient/src-gui/gtkgui/m4/.gitignore
vendored
@ -1,217 +0,0 @@
|
||||
# Makefile for program source directory in GNU NLS utilities package.
|
||||
# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||
# Copyright (C) 2004-2008 Rodney Dawes <dobey.pwns@gmail.com>
|
||||
#
|
||||
# This file may be copied and used freely without restrictions. It may
|
||||
# be used in projects which are not available under a GNU Public License,
|
||||
# but which still want to provide support for the GNU gettext functionality.
|
||||
#
|
||||
# - Modified by Owen Taylor <otaylor@redhat.com> to use GETTEXT_PACKAGE
|
||||
# instead of PACKAGE and to look for po2tbl in ./ not in intl/
|
||||
#
|
||||
# - Modified by jacob berkman <jacob@ximian.com> to install
|
||||
# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize
|
||||
#
|
||||
# - Modified by Rodney Dawes <dobey.pwns@gmail.com> for use with intltool
|
||||
#
|
||||
# We have the following line for use by intltoolize:
|
||||
# INTLTOOL_MAKEFILE
|
||||
|
||||
GETTEXT_PACKAGE = @GETTEXT_PACKAGE@
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
SHELL = @SHELL@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
top_builddir = @top_builddir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
libdir = @libdir@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
itlocaledir = $(prefix)/$(DATADIRNAME)/locale
|
||||
subdir = po
|
||||
install_sh = @install_sh@
|
||||
# Automake >= 1.8 provides @mkdir_p@.
|
||||
# Until it can be supposed, use the safe fallback:
|
||||
mkdir_p = $(install_sh) -d
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
||||
GMSGFMT = @GMSGFMT@
|
||||
MSGFMT = @MSGFMT@
|
||||
XGETTEXT = @XGETTEXT@
|
||||
INTLTOOL_UPDATE = @INTLTOOL_UPDATE@
|
||||
INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@
|
||||
MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist
|
||||
GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot
|
||||
|
||||
ALL_LINGUAS = @ALL_LINGUAS@
|
||||
|
||||
PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi)
|
||||
|
||||
USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi)
|
||||
|
||||
USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done)
|
||||
|
||||
POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done)
|
||||
|
||||
DISTFILES = Makefile.in.in POTFILES.in $(POFILES)
|
||||
EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS
|
||||
|
||||
POTFILES = \
|
||||
# This comment gets stripped out
|
||||
|
||||
CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done)
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .po .pox .gmo .mo .msg .cat
|
||||
|
||||
.po.pox:
|
||||
$(MAKE) $(GETTEXT_PACKAGE).pot
|
||||
$(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox
|
||||
|
||||
.po.mo:
|
||||
$(MSGFMT) -o $@ $<
|
||||
|
||||
.po.gmo:
|
||||
file=`echo $* | sed 's,.*/,,'`.gmo \
|
||||
&& rm -f $$file && $(GMSGFMT) -o $$file $<
|
||||
|
||||
.po.cat:
|
||||
sed -f ../intl/po2msg.sed < $< > $*.msg \
|
||||
&& rm -f $@ && gencat $@ $*.msg
|
||||
|
||||
|
||||
all: all-@USE_NLS@
|
||||
|
||||
all-yes: $(CATALOGS)
|
||||
all-no:
|
||||
|
||||
$(GETTEXT_PACKAGE).pot: $(POTFILES)
|
||||
$(GENPOT)
|
||||
|
||||
install: install-data
|
||||
install-data: install-data-@USE_NLS@
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
linguas="$(USE_LINGUAS)"; \
|
||||
for lang in $$linguas; do \
|
||||
dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $$dir; \
|
||||
if test -r $$lang.gmo; then \
|
||||
$(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
|
||||
echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \
|
||||
echo "installing $(srcdir)/$$lang.gmo as" \
|
||||
"$$dir/$(GETTEXT_PACKAGE).mo"; \
|
||||
fi; \
|
||||
if test -r $$lang.gmo.m; then \
|
||||
$(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \
|
||||
echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \
|
||||
else \
|
||||
if test -r $(srcdir)/$$lang.gmo.m ; then \
|
||||
$(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \
|
||||
$$dir/$(GETTEXT_PACKAGE).mo.m; \
|
||||
echo "installing $(srcdir)/$$lang.gmo.m as" \
|
||||
"$$dir/$(GETTEXT_PACKAGE).mo.m"; \
|
||||
else \
|
||||
true; \
|
||||
fi; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
# Empty stubs to satisfy archaic automake needs
|
||||
dvi info ctags tags CTAGS TAGS ID:
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
install-exec installcheck:
|
||||
|
||||
uninstall:
|
||||
linguas="$(USE_LINGUAS)"; \
|
||||
for lang in $$linguas; do \
|
||||
rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \
|
||||
rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \
|
||||
done
|
||||
|
||||
check: all $(GETTEXT_PACKAGE).pot
|
||||
rm -f missing notexist
|
||||
srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m
|
||||
if [ -r missing -o -r notexist ]; then \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
mostlyclean:
|
||||
rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp
|
||||
rm -f .intltool-merge-cache
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile Makefile.in POTFILES stamp-it
|
||||
rm -f *.mo *.msg *.cat *.cat.m *.gmo
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
rm -f Makefile.in.in
|
||||
|
||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir: $(DISTFILES)
|
||||
dists="$(DISTFILES)"; \
|
||||
extra_dists="$(EXTRA_DISTFILES)"; \
|
||||
for file in $$extra_dists; do \
|
||||
test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \
|
||||
done; \
|
||||
for file in $$dists; do \
|
||||
test -f $$file || file="$(srcdir)/$$file"; \
|
||||
ln $$file $(distdir) 2> /dev/null \
|
||||
|| cp -p $$file $(distdir); \
|
||||
done
|
||||
|
||||
update-po: Makefile
|
||||
$(MAKE) $(GETTEXT_PACKAGE).pot
|
||||
tmpdir=`pwd`; \
|
||||
linguas="$(USE_LINGUAS)"; \
|
||||
for lang in $$linguas; do \
|
||||
echo "$$lang:"; \
|
||||
result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \
|
||||
if $$result; then \
|
||||
if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.gmo failed!"; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
Makefile POTFILES: stamp-it
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-it; \
|
||||
$(MAKE) stamp-it; \
|
||||
fi
|
||||
|
||||
stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
$(SHELL) ./config.status
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
@ -1 +0,0 @@
|
||||
hello.c
|
@ -1,49 +0,0 @@
|
||||
# Chinese translations for njit-gui package
|
||||
# njit-gui 软件包的简体中文翻译.
|
||||
# Copyright (C) 2010 南京工程学院
|
||||
# This file is distributed under the same license as the njit-gui package.
|
||||
# 刘群 <njit8021xclient@googlegroups.com>, 2010.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: njit-gui 1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-09-20 00:54+0800\n"
|
||||
"PO-Revision-Date: 2010-09-19 12:51+0800\n"
|
||||
"Last-Translator: 刘群 <liuqun68@gmail.com>\n"
|
||||
"Language-Team: Chinese (simplified)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: hello.c:35
|
||||
msgid "Hello World"
|
||||
msgstr "Hello World 测试小程序"
|
||||
|
||||
#: hello.c:65
|
||||
msgid "_File"
|
||||
msgstr "文件(_F)"
|
||||
|
||||
#: hello.c:66
|
||||
msgid "File operations"
|
||||
msgstr "文件操作"
|
||||
|
||||
#: hello.c:71
|
||||
msgid "_Send"
|
||||
msgstr "发送(_S)"
|
||||
|
||||
#: hello.c:72
|
||||
msgid "Send hello world to console"
|
||||
msgstr "发送字符串Hello World到控制台"
|
||||
|
||||
#: hello.c:77
|
||||
msgid "_Quit"
|
||||
msgstr "退出(_Q)"
|
||||
|
||||
#: hello.c:78
|
||||
msgid "Quit"
|
||||
msgstr "退出"
|
||||
|
||||
#: hello.c:115
|
||||
msgid "Hello world!"
|
||||
msgstr "Hello World! 你好,世界!"
|
@ -1,5 +0,0 @@
|
||||
module("luci.controller.njit", package.seeall)
|
||||
|
||||
function index()
|
||||
entry({"admin", "network", "njit"}, cbi("njit"), _("njit-client"), 88).i18n = "wol"
|
||||
end
|
@ -1,61 +0,0 @@
|
||||
--[[
|
||||
LuCI - Lua Configuration Interface
|
||||
|
||||
Copyright 2010 Jo-Philipp Wich <xm@subsignal.org>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
]]--
|
||||
|
||||
local sys = require "luci.sys"
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
m = SimpleForm("njit", translate("njit-client"),
|
||||
translate("njit 802.11x client"))
|
||||
|
||||
m.submit = translate("Connect")
|
||||
m.reset = false
|
||||
|
||||
r = m:field(Value, "username", translate("Username"))
|
||||
s = m:field(Value, "password", translate("Password"))
|
||||
t = m:section(SimpleSection)
|
||||
interface = t:option(ListValue, "interface", translate("Network interface"))
|
||||
for _, e in ipairs(sys.net.devices()) do
|
||||
if e ~= "lo" then interface:value(e) end
|
||||
end
|
||||
|
||||
|
||||
function interface.write(self, s, val)
|
||||
local cmd
|
||||
local user = luci.http.formvalue("cbid.njit.1.username")
|
||||
local pass = luci.http.formvalue("cbid.njit.1.password")
|
||||
local iface = luci.http.formvalue("cbid.njit.1.interface")
|
||||
cmd = "njit-client %s %s %s & (sleep 10 && killall njit-client)" %{ user, pass, iface }
|
||||
|
||||
local msg = "<p><strong>%s</strong><br /><br /><code>%s<br /><br />" %{
|
||||
translate("Starting njit-client:"), cmd
|
||||
}
|
||||
|
||||
local p = io.popen(cmd .. " 2>&1")
|
||||
if p then
|
||||
while true do
|
||||
local l = p:read("*l")
|
||||
if l then
|
||||
if #l > 100 then l = l:sub(1, 100) .. "..." end
|
||||
msg = msg .. l .. "<br />"
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
p:close()
|
||||
end
|
||||
msg = msg .. "</code></p>"
|
||||
m.message = msg
|
||||
end
|
||||
|
||||
return m
|
||||
|
||||
|
@ -1,2 +0,0 @@
|
||||
cp ./njit.lua /usr/lib/lua/luci/model/cbi/njit.lua
|
||||
cp ./luci_controller_njit.lua /usr/lib/lua/luci/controller/njit.lua
|
@ -1,18 +0,0 @@
|
||||
|
||||
<html>
|
||||
<head> <meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
<title>NJIT 802.1X Client - Qt GUI</title>
|
||||
</head>
|
||||
<body> <pre>
|
||||
===============================================================================
|
||||
南京工程学院校园网802.1X客户端 - Qt用户界面
|
||||
-------------------------------------------------------------------------------
|
||||
[正文]
|
||||
(尚未在此处添加正文...)
|
||||
|
||||
[致谢]
|
||||
感谢客户端Qt用户界面作者 WangDiwen From 南京工程学院
|
||||
===============================================================================
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@ -1,263 +0,0 @@
|
||||
#include <iostream>
|
||||
#include "mainDlg.h"
|
||||
//#include "main.h"
|
||||
//#include "auth.h"
|
||||
//#include "thread.h"
|
||||
//#include "debug.h"
|
||||
|
||||
//extern pthread_t pthread;
|
||||
extern USER userinfo;
|
||||
MainDlg::MainDlg(QWidget *parent, Qt::WindowFlags f):QDialog(parent,f)
|
||||
{
|
||||
setWindowTitle(tr("xClient 802.1x"));
|
||||
|
||||
Qt::WindowFlags flags = Qt::Window;
|
||||
flags |= Qt::WindowMinimizeButtonHint;
|
||||
flags |= Qt::WindowCloseButtonHint;
|
||||
setWindowFlags(flags);
|
||||
|
||||
initDlg();
|
||||
createLeftLayout();
|
||||
createRightLayout();
|
||||
createBottomLayout();
|
||||
createMainLayout();
|
||||
setLayout(mainLayout);
|
||||
|
||||
getInfo();
|
||||
|
||||
connect(version,SIGNAL(clicked()),this,SLOT(showVersion()));
|
||||
connect(reset,SIGNAL(clicked()),this,SLOT(resetInfo()));
|
||||
connect(savePasswdBox,SIGNAL(toggled(bool)),\
|
||||
this,SLOT(saveInfo()));
|
||||
connect(start,SIGNAL(clicked()),this,SLOT(startNet()));
|
||||
connect(stop,SIGNAL(clicked()),this,SLOT(stopNet()));
|
||||
}
|
||||
|
||||
MainDlg::~MainDlg()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MainDlg::getInfo()
|
||||
{
|
||||
QFile file("info.dat");
|
||||
file.open(QIODevice::ReadOnly);
|
||||
QDataStream in(&file);
|
||||
|
||||
in.setVersion(QDataStream::Qt_4_0);
|
||||
qint32 magic;
|
||||
in>>magic;
|
||||
if (magic != (qint32)0xa1a2a3a4)
|
||||
{
|
||||
QMessageBox::information(this,"Tips",tr("Invalide file format"));
|
||||
return;
|
||||
}
|
||||
|
||||
QString userName;
|
||||
QString passwd;
|
||||
int netcard;
|
||||
int startAuto;
|
||||
int savePasswd;
|
||||
in>>userName>>passwd>>netcard>>startAuto>>savePasswd;
|
||||
|
||||
userEdit->setText(userName);
|
||||
passwdEdit->setText(passwd);
|
||||
//passwdEdit->setEchoMode(QLineEdit::Password);
|
||||
netcardEdit->setCurrentIndex(netcard);
|
||||
autoStart->setCheckState((startAuto != 0)?Qt::Checked:Qt::Unchecked);
|
||||
savePasswdBox->setCheckState((savePasswd != 0)?Qt::Unchecked:Qt::Checked);
|
||||
|
||||
}
|
||||
|
||||
void MainDlg::initDlg()
|
||||
{
|
||||
userLabel = new QLabel(tr("UserName"));
|
||||
passwdLabel = new QLabel(tr("Password"));
|
||||
netcardLabel = new QLabel(tr("NetCard"));
|
||||
stateLabel = new QLabel(tr("Status"));
|
||||
|
||||
userEdit = new QLineEdit;
|
||||
passwdEdit = new QLineEdit;
|
||||
passwdEdit->setEchoMode(QLineEdit::Password);
|
||||
autoStart = new QCheckBox(tr("Auto Start"));
|
||||
savePasswdBox = new QCheckBox(tr("Save Passwd"));
|
||||
netcardEdit = new QComboBox;
|
||||
netcardEdit->insertItem(0,tr("eth0"));
|
||||
netcardEdit->insertItem(1,tr("eth1"));
|
||||
stateText = new QTextEdit;
|
||||
stateText->setText("Net state...");
|
||||
copyRight = new QLabel(tr("Author:WangDiwen(From njit) Date:2011-09-01"));
|
||||
|
||||
labelIcon = new QLabel();
|
||||
QPixmap pic("./imags/pic.png");
|
||||
|
||||
labelIcon->resize(pic.width(),pic.height());
|
||||
labelIcon->setPixmap(pic);
|
||||
|
||||
start = new QPushButton();
|
||||
start->setText(tr("StartNet"));
|
||||
stop = new QPushButton();
|
||||
stop->setText(tr("StopNet"));
|
||||
stop->setEnabled(false);
|
||||
reset = new QPushButton();
|
||||
reset->setText(tr("ResetNet"));
|
||||
version = new QPushButton();
|
||||
version->setText(tr("Version"));
|
||||
}
|
||||
|
||||
void MainDlg::createLeftLayout()
|
||||
{
|
||||
leftLayout = new QGridLayout();
|
||||
int labelCol = 0;
|
||||
int contentCol1 = 1;
|
||||
|
||||
leftLayout->addWidget(userLabel,0,labelCol);
|
||||
leftLayout->addWidget(userEdit,0,contentCol1);
|
||||
|
||||
|
||||
leftLayout->addWidget(passwdLabel,1,labelCol);
|
||||
leftLayout->addWidget(passwdEdit,1,contentCol1);
|
||||
|
||||
|
||||
leftLayout->addWidget(netcardLabel,2,labelCol);
|
||||
leftLayout->addWidget(netcardEdit,2,contentCol1);
|
||||
|
||||
|
||||
leftLayout->addWidget(autoStart,3,labelCol);
|
||||
leftLayout->addWidget(savePasswdBox,3,contentCol1);
|
||||
|
||||
|
||||
leftLayout->addWidget(stateLabel,4,labelCol,Qt::AlignTop);
|
||||
leftLayout->addWidget(stateText,4,contentCol1);
|
||||
|
||||
leftLayout->setColumnStretch(0,1);
|
||||
leftLayout->setColumnStretch(1,3);
|
||||
|
||||
}
|
||||
|
||||
void MainDlg::createRightLayout()
|
||||
{
|
||||
rightLayout = new QVBoxLayout();
|
||||
|
||||
rightLayout->setMargin(10);
|
||||
rightLayout->setSpacing(10);
|
||||
|
||||
rightLayout->addWidget(start);
|
||||
rightLayout->addWidget(stop);
|
||||
rightLayout->addWidget(reset);
|
||||
rightLayout->addWidget(version);
|
||||
rightLayout->addStretch();
|
||||
rightLayout->addWidget(labelIcon);
|
||||
//rightLayout->setSizeConstraint(QLayout::SetFixedSize);
|
||||
//rightLayout->setAlignment(Qt::AlignTop);
|
||||
}
|
||||
|
||||
|
||||
void MainDlg::createBottomLayout()
|
||||
{
|
||||
bottomLayout = new QHBoxLayout();
|
||||
bottomLayout->addWidget(copyRight);
|
||||
}
|
||||
|
||||
void MainDlg::createMainLayout()
|
||||
{
|
||||
mainLayout = new QGridLayout(this);
|
||||
|
||||
mainLayout->setMargin(10);
|
||||
mainLayout->setSpacing(10);
|
||||
mainLayout->addLayout(leftLayout,0,0);
|
||||
mainLayout->addLayout(rightLayout,0,1);
|
||||
mainLayout->addLayout(bottomLayout,1,0);
|
||||
mainLayout->setSizeConstraint(QLayout::SetFixedSize);
|
||||
}
|
||||
|
||||
void MainDlg::startNet()
|
||||
{
|
||||
QString user = userEdit->text();
|
||||
QString pass = passwdEdit->text();
|
||||
QString net = netcardEdit->currentText();
|
||||
|
||||
strcpy(userinfo.username,user.toLatin1().data());
|
||||
strcpy(userinfo.passwd,pass.toLatin1().data());
|
||||
strcpy(userinfo.netcard,net.toLatin1().data());
|
||||
|
||||
//DPRINTF("user: %s\n",userinfo.username);
|
||||
//DPRINTF("pass: %s\n",userinfo.passwd);
|
||||
//DPRINTF("net: %s\n",userinfo.netcard);
|
||||
//Modified by WangDiwen(njit) for test;
|
||||
/**
|
||||
USER userinfo;
|
||||
userinfo.username = "s-208080236";
|
||||
userinfo.passwd = "126333";
|
||||
userinfo.netcard = "eth0";
|
||||
*/
|
||||
int ret = -1/*pthread_create(&(pthread), NULL, thread_func, (void *)&userinfo)*/;
|
||||
if (ret != 0)
|
||||
{
|
||||
//exit(ret);
|
||||
std::cerr<<"create thread failed...\n";
|
||||
}
|
||||
std::clog<<"create thread success...\n";
|
||||
stateText->setText("Connect Server Success!\nIf your net has not connected yet,\nPlease clicked the <startNet> button!\n");
|
||||
start->setEnabled(false);
|
||||
stop->setEnabled(true);
|
||||
userEdit->setEnabled(false);
|
||||
passwdEdit->setEnabled(false);
|
||||
netcardEdit->setEnabled(false);
|
||||
//pthread_join(pthread,NULL);
|
||||
}
|
||||
|
||||
void MainDlg::stopNet()
|
||||
{
|
||||
//pthread_cancel(pthread);
|
||||
start->setEnabled(true);
|
||||
userEdit->setEnabled(true);
|
||||
passwdEdit->setEnabled(true);
|
||||
netcardEdit->setEnabled(true);
|
||||
stateText->setText("Stop Connect!");
|
||||
}
|
||||
|
||||
void MainDlg::showVersion()
|
||||
{
|
||||
QMessageBox::information(this,"Version",tr("xClient 802.1x for Linux!\nBased on QT4.\n\nAuthor:WangDiwen(From njit)\nEmail:dw_wang126@126.com"));
|
||||
return;
|
||||
}
|
||||
void MainDlg::resetInfo()
|
||||
{
|
||||
userEdit->setText(tr(""));
|
||||
passwdEdit->setText(tr(""));
|
||||
netcardEdit->setCurrentIndex(0);
|
||||
stateText->setText(tr(""));
|
||||
return;
|
||||
}
|
||||
void MainDlg::saveInfo()
|
||||
{
|
||||
QString userName = userEdit->text();
|
||||
QString passwd = passwdEdit->text();
|
||||
int netcard = netcardEdit->currentIndex();
|
||||
int startAuto = autoStart->isChecked()? 1 : 0;
|
||||
int savePasswd = savePasswdBox->isChecked()? 1 : 0;
|
||||
|
||||
QFile file("info.dat");
|
||||
file.open(QIODevice::WriteOnly);
|
||||
QDataStream out(&file);
|
||||
|
||||
out.setVersion(QDataStream::Qt_4_0);
|
||||
out<<(qint32)0xa1a2a3a4;
|
||||
out<<userName<<passwd<<netcard<<startAuto<<savePasswd;
|
||||
}
|
||||
|
||||
|
||||
void *thread_func(void *arg)
|
||||
{
|
||||
// struct USER *user = (struct USER *)arg;
|
||||
int ret = -1/*Authentication(user->username,user->passwd,user->netcard)*/;
|
||||
if (ret == -1)
|
||||
{
|
||||
std::cerr<<"Authentication failed...\n";
|
||||
}
|
||||
std::clog<<"Authentication quit...\n";
|
||||
// pthread_exit(NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1,52 +0,0 @@
|
||||
#ifndef __MAINDLG_H__
|
||||
#define __MAINDLG_H__
|
||||
|
||||
#include "main.h"
|
||||
|
||||
class MainDlg : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
MainDlg(QWidget *parent = 0,Qt::WindowFlags f=0);
|
||||
~MainDlg();
|
||||
void getInfo();
|
||||
public:
|
||||
QLabel *userLabel;
|
||||
QLineEdit *userEdit;
|
||||
QLabel *passwdLabel;
|
||||
QLineEdit *passwdEdit;
|
||||
QCheckBox *autoStart;
|
||||
QCheckBox *savePasswdBox;
|
||||
|
||||
QLabel *netcardLabel;
|
||||
QComboBox *netcardEdit;
|
||||
QLabel *stateLabel;
|
||||
QTextEdit *stateText;
|
||||
QLabel *copyRight;
|
||||
|
||||
QLabel *labelIcon;
|
||||
QPushButton *start;
|
||||
QPushButton *stop;
|
||||
QPushButton *reset;
|
||||
QPushButton *version;
|
||||
private:
|
||||
QGridLayout *leftLayout;
|
||||
QVBoxLayout *rightLayout;
|
||||
QHBoxLayout *bottomLayout;
|
||||
QGridLayout *mainLayout;
|
||||
|
||||
public:
|
||||
void initDlg();
|
||||
void createLeftLayout();
|
||||
void createRightLayout();
|
||||
void createBottomLayout();
|
||||
void createMainLayout();
|
||||
public slots:
|
||||
void startNet();
|
||||
void stopNet();
|
||||
void showVersion();
|
||||
void resetInfo();
|
||||
void saveInfo();
|
||||
};
|
||||
|
||||
#endif // __MAINDLG_H__
|
@ -1,20 +0,0 @@
|
||||
#include <QApplication>
|
||||
#include "./dialogs/mainDlg.h"
|
||||
//#include <pthread.h>
|
||||
//#include "thread.h"
|
||||
|
||||
//pthread_t pthread;
|
||||
USER userinfo={ {'\0'},{'\0'},{'\0'} };
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
//QFont f("ZYSong 18030",12);
|
||||
//QApplication::setFont(f);
|
||||
|
||||
QApplication app(argc,argv);
|
||||
MainDlg mainDlg;
|
||||
mainDlg.show();
|
||||
|
||||
// app.connect( &app, SIGNAL( lastWindowClosed() ), &app, SLOT( quit() ) );
|
||||
return app.exec();
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
#ifndef __MAIN_H__
|
||||
#define __MAIN_H__
|
||||
|
||||
#include <QtGui>
|
||||
//#include <QWidget>
|
||||
//#include <QDialog>
|
||||
//#include <QFont>
|
||||
//#include <QPushButton>
|
||||
//#include <QLabel>
|
||||
//#include <QLineEdit>
|
||||
//#include <QComboBox>
|
||||
//#include <QCheckBox>
|
||||
//#include <QTextEdit>
|
||||
//#include <QGridLayout>
|
||||
//#include <QVBoxLayout>
|
||||
|
||||
struct USER
|
||||
{
|
||||
char username[20];
|
||||
char passwd[10];
|
||||
char netcard[10];
|
||||
};
|
||||
void *thread_func(void * arg);
|
||||
|
||||
#endif // __MAIN_H__
|
@ -1,12 +0,0 @@
|
||||
######################################################################
|
||||
# Automatically generated by qmake (2.01a) ?? 9? 30 13:03:14 2011
|
||||
######################################################################
|
||||
|
||||
TEMPLATE = app
|
||||
TARGET =
|
||||
DEPENDPATH += .
|
||||
INCLUDEPATH += .
|
||||
|
||||
# Input
|
||||
HEADERS += dialogs/mainDlg.h
|
||||
SOURCES += main.cpp dialogs/mainDlg.cpp
|
@ -1,28 +0,0 @@
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
sbin_PROGRAMS = \
|
||||
client \
|
||||
$(NULL)
|
||||
client_SOURCES = \
|
||||
main.c \
|
||||
auth.c \
|
||||
ip.c \
|
||||
fillmd5-libcrypto.c \
|
||||
njit8021xclient.c \
|
||||
njit8021xclient.h \
|
||||
debug.h \
|
||||
md5-buildin/md5_one.c \
|
||||
md5-buildin/md5_dgst.c \
|
||||
md5-buildin/mem_clr.c \
|
||||
aes.h \
|
||||
aes.c \
|
||||
h3c_AES_MD5.h \
|
||||
h3c_AES_MD5.c \
|
||||
h3c_dict.h \
|
||||
$(NULL)
|
||||
CCOPT = $(V_CCOPT)
|
||||
DEFS = $(V_DEFS)
|
||||
INCLS = $(V_INCLS)
|
||||
client_CFLAGS = $(CCOPT) $(DEFS) $(INCLS)
|
||||
client_CFLAGS += $(libcrypto_CFLAGS)
|
||||
client_LDADD = $(LBL_LIBS)
|
||||
|
@ -1,59 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 功能:
|
||||
# 通过NetworkManager刷新IP地址激活默认的网络连接
|
||||
# 存在的问题:
|
||||
# 1、许多64位Linux操作系统不支持DBus和NetworkManager,这种情况下本脚本将无法正常运行
|
||||
# 2、由于njit-client程序尚不支持无线网络,故此处已经跳过所有的无线网络配置
|
||||
#
|
||||
# 当前代码由刘群<liuqun68@gmail.com>负责维护
|
||||
# 欢迎您帮助我们改进这个Python脚本,来信请寄:
|
||||
# njit8201xclient@googlegroups.com
|
||||
# http://groups.google.com/group/njit8021xclient?hl=zh-CN
|
||||
|
||||
|
||||
import sys
|
||||
import dbus
|
||||
|
||||
try:
|
||||
nm = dbus.SystemBus().get_object('org.freedesktop.NetworkManager',
|
||||
'/org/freedesktop/NetworkManager')
|
||||
except dbus.exceptions.DBusException, errmsg:
|
||||
sys.stderr.write(__file__ + ': Unable to find NetworkManager daemon from DBus: ' + errmsg)
|
||||
sys.exit(0xFF)
|
||||
|
||||
def GetProperty(property_name, object, interface_name):
|
||||
"""Get property of a dbus object through a dbus interface"""
|
||||
return dbus.Interface(object, 'org.freedesktop.DBus.Properties').Get(interface_name, property_name)
|
||||
|
||||
active_connections = GetProperty('ActiveConnections', nm, 'org.freedesktop.NetworkManager')
|
||||
if active_connections == []:
|
||||
sys.stderr.write(__file__ + ': Unable to find any NetworkManager configurations!')
|
||||
sys.exit(0xFF)
|
||||
|
||||
class ActiveConnectionInfo:
|
||||
pass
|
||||
|
||||
for connection_opath in active_connections:
|
||||
ac = ActiveConnectionInfo()
|
||||
ac.obj = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', connection_opath)
|
||||
ac.service = GetProperty('ServiceName', ac.obj, 'org.freedesktop.NetworkManager.Connection.Active')
|
||||
ac.connection = GetProperty('Connection', ac.obj, 'org.freedesktop.NetworkManager.Connection.Active')
|
||||
ac.devices = GetProperty('Devices', ac.obj, 'org.freedesktop.NetworkManager.Connection.Active')
|
||||
ac.spec = GetProperty('SpecificObject', ac.obj, 'org.freedesktop.NetworkManager.Connection.Active')
|
||||
nm_setting_service = dbus.SystemBus().get_object(ac.service, ac.connection)
|
||||
ac.settings = dbus.Interface(nm_setting_service, 'org.freedesktop.NetworkManagerSettings.Connection').GetSettings()
|
||||
|
||||
if ac.settings['connection']['type'] == '802-3-ethernet': # 只找出有线以太网连接连接(因njit-client尚不支持无线)
|
||||
for dev in ac.devices:
|
||||
print __file__ + ': Activating network connection and refreshing IP address...'
|
||||
print __file__ + ': Using NetworkManager configuration "' + ac.settings['connection']['id'] + '".'
|
||||
try:
|
||||
dbus.Interface(nm,'org.freedesktop.NetworkManager').ActivateConnection(ac.service, ac.connection, dev, ac.spec)
|
||||
sys.exit(0) # 正常退出
|
||||
except dbus.exceptions.DBusException, errmsg:
|
||||
sys.stderr.write(__file__ + ': Failed to activate "' + ac.settings['connection']['id'] + '": ' + errmsg)
|
||||
|
||||
sys.stderr.write(__file__ + ': Unable to find any wired network connections. Check your cables maybe?')
|
||||
|
@ -1,583 +0,0 @@
|
||||
/*
|
||||
|
||||
This is an implementation of the AES128 algorithm, specifically ECB and CBC mode.
|
||||
|
||||
The implementation is verified against the test vectors in:
|
||||
National Institute of Standards and Technology Special Publication 800-38A 2001 ED
|
||||
|
||||
ECB-AES128
|
||||
----------
|
||||
|
||||
plain-text:
|
||||
6bc1bee22e409f96e93d7e117393172a
|
||||
ae2d8a571e03ac9c9eb76fac45af8e51
|
||||
30c81c46a35ce411e5fbc1191a0a52ef
|
||||
f69f2445df4f9b17ad2b417be66c3710
|
||||
|
||||
key:
|
||||
2b7e151628aed2a6abf7158809cf4f3c
|
||||
|
||||
resulting cipher
|
||||
3ad77bb40d7a3660a89ecaf32466ef97
|
||||
f5d3d58503b9699de785895a96fdbaaf
|
||||
43b1cd7f598ece23881b00e3ed030688
|
||||
7b0c785e27e8ad3f8223207104725dd4
|
||||
|
||||
|
||||
NOTE: String length must be evenly divisible by 16byte (str_len % 16 == 0)
|
||||
You should pad the end of the string with zeros if this is not the case.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Includes: */
|
||||
/*****************************************************************************/
|
||||
#include <stdint.h>
|
||||
#include <string.h> // CBC mode, for memset
|
||||
#include "aes.h"
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Defines: */
|
||||
/*****************************************************************************/
|
||||
// The number of columns comprising a state in AES. This is a constant in AES. Value=4
|
||||
#define Nb 4
|
||||
// The number of 32 bit words in a key.
|
||||
#define Nk 4
|
||||
// Key length in bytes [128 bit]
|
||||
#define KEYLEN 16
|
||||
// The number of rounds in AES Cipher.
|
||||
#define Nr 10
|
||||
|
||||
// jcallan@github points out that declaring Multiply as a function
|
||||
// reduces code size considerably with the Keil ARM compiler.
|
||||
// See this link for more information: https://github.com/kokke/tiny-AES128-C/pull/3
|
||||
#ifndef MULTIPLY_AS_A_FUNCTION
|
||||
#define MULTIPLY_AS_A_FUNCTION 0
|
||||
#endif
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Private variables: */
|
||||
/*****************************************************************************/
|
||||
// state - array holding the intermediate results during decryption.
|
||||
typedef uint8_t state_t[4][4];
|
||||
static state_t* state;
|
||||
|
||||
// The array that stores the round keys.
|
||||
static uint8_t RoundKey[176];
|
||||
|
||||
// The Key input to the AES Program
|
||||
static const uint8_t* Key;
|
||||
|
||||
#if defined(CBC) && CBC
|
||||
// Initial Vector used only for CBC mode
|
||||
static uint8_t* Iv;
|
||||
#endif
|
||||
|
||||
// The lookup-tables are marked const so they can be placed in read-only storage instead of RAM
|
||||
// The numbers below can be computed dynamically trading ROM for RAM -
|
||||
// This can be useful in (embedded) bootloader applications, where ROM is often limited.
|
||||
static const uint8_t sbox[256] = {
|
||||
//0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
||||
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
||||
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
|
||||
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
|
||||
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
||||
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
|
||||
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
|
||||
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
||||
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
|
||||
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
|
||||
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
||||
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
||||
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
||||
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 };
|
||||
|
||||
static const uint8_t rsbox[256] =
|
||||
{ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
|
||||
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
|
||||
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
|
||||
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
|
||||
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
|
||||
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
|
||||
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
|
||||
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
|
||||
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
|
||||
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
|
||||
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
|
||||
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
|
||||
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
|
||||
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
|
||||
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
|
||||
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d };
|
||||
|
||||
|
||||
// The round constant word array, Rcon[i], contains the values given by
|
||||
// x to th e power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8)
|
||||
// Note that i starts at 1, not 0).
|
||||
static const uint8_t Rcon[255] = {
|
||||
0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a,
|
||||
0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39,
|
||||
0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
|
||||
0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8,
|
||||
0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef,
|
||||
0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
|
||||
0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b,
|
||||
0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3,
|
||||
0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
|
||||
0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
|
||||
0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35,
|
||||
0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
|
||||
0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04,
|
||||
0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63,
|
||||
0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
|
||||
0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb };
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Private functions: */
|
||||
/*****************************************************************************/
|
||||
static uint8_t getSBoxValue(uint8_t num)
|
||||
{
|
||||
return sbox[num];
|
||||
}
|
||||
|
||||
static uint8_t getSBoxInvert(uint8_t num)
|
||||
{
|
||||
return rsbox[num];
|
||||
}
|
||||
|
||||
// This function produces Nb(Nr+1) round keys. The round keys are used in each round to decrypt the states.
|
||||
static void KeyExpansion(void)
|
||||
{
|
||||
uint32_t i, j, k;
|
||||
uint8_t tempa[4]; // Used for the column/row operations
|
||||
|
||||
// The first round key is the key itself.
|
||||
for(i = 0; i < Nk; ++i)
|
||||
{
|
||||
RoundKey[(i * 4) + 0] = Key[(i * 4) + 0];
|
||||
RoundKey[(i * 4) + 1] = Key[(i * 4) + 1];
|
||||
RoundKey[(i * 4) + 2] = Key[(i * 4) + 2];
|
||||
RoundKey[(i * 4) + 3] = Key[(i * 4) + 3];
|
||||
}
|
||||
|
||||
// All other round keys are found from the previous round keys.
|
||||
for(; (i < (Nb * (Nr + 1))); ++i)
|
||||
{
|
||||
for(j = 0; j < 4; ++j)
|
||||
{
|
||||
tempa[j]=RoundKey[(i-1) * 4 + j];
|
||||
}
|
||||
if (i % Nk == 0)
|
||||
{
|
||||
// This function rotates the 4 bytes in a word to the left once.
|
||||
// [a0,a1,a2,a3] becomes [a1,a2,a3,a0]
|
||||
|
||||
// Function RotWord()
|
||||
{
|
||||
k = tempa[0];
|
||||
tempa[0] = tempa[1];
|
||||
tempa[1] = tempa[2];
|
||||
tempa[2] = tempa[3];
|
||||
tempa[3] = k;
|
||||
}
|
||||
|
||||
// SubWord() is a function that takes a four-byte input word and
|
||||
// applies the S-box to each of the four bytes to produce an output word.
|
||||
|
||||
// Function Subword()
|
||||
{
|
||||
tempa[0] = getSBoxValue(tempa[0]);
|
||||
tempa[1] = getSBoxValue(tempa[1]);
|
||||
tempa[2] = getSBoxValue(tempa[2]);
|
||||
tempa[3] = getSBoxValue(tempa[3]);
|
||||
}
|
||||
|
||||
tempa[0] = tempa[0] ^ Rcon[i/Nk];
|
||||
}
|
||||
else if (Nk > 6 && i % Nk == 4)
|
||||
{
|
||||
// Function Subword()
|
||||
{
|
||||
tempa[0] = getSBoxValue(tempa[0]);
|
||||
tempa[1] = getSBoxValue(tempa[1]);
|
||||
tempa[2] = getSBoxValue(tempa[2]);
|
||||
tempa[3] = getSBoxValue(tempa[3]);
|
||||
}
|
||||
}
|
||||
RoundKey[i * 4 + 0] = RoundKey[(i - Nk) * 4 + 0] ^ tempa[0];
|
||||
RoundKey[i * 4 + 1] = RoundKey[(i - Nk) * 4 + 1] ^ tempa[1];
|
||||
RoundKey[i * 4 + 2] = RoundKey[(i - Nk) * 4 + 2] ^ tempa[2];
|
||||
RoundKey[i * 4 + 3] = RoundKey[(i - Nk) * 4 + 3] ^ tempa[3];
|
||||
}
|
||||
}
|
||||
|
||||
// This function adds the round key to state.
|
||||
// The round key is added to the state by an XOR function.
|
||||
static void AddRoundKey(uint8_t round)
|
||||
{
|
||||
uint8_t i,j;
|
||||
for(i=0;i<4;++i)
|
||||
{
|
||||
for(j = 0; j < 4; ++j)
|
||||
{
|
||||
(*state)[i][j] ^= RoundKey[round * Nb * 4 + i * Nb + j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The SubBytes Function Substitutes the values in the
|
||||
// state matrix with values in an S-box.
|
||||
static void SubBytes(void)
|
||||
{
|
||||
uint8_t i, j;
|
||||
for(i = 0; i < 4; ++i)
|
||||
{
|
||||
for(j = 0; j < 4; ++j)
|
||||
{
|
||||
(*state)[j][i] = getSBoxValue((*state)[j][i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The ShiftRows() function shifts the rows in the state to the left.
|
||||
// Each row is shifted with different offset.
|
||||
// Offset = Row number. So the first row is not shifted.
|
||||
static void ShiftRows(void)
|
||||
{
|
||||
uint8_t temp;
|
||||
|
||||
// Rotate first row 1 columns to left
|
||||
temp = (*state)[0][1];
|
||||
(*state)[0][1] = (*state)[1][1];
|
||||
(*state)[1][1] = (*state)[2][1];
|
||||
(*state)[2][1] = (*state)[3][1];
|
||||
(*state)[3][1] = temp;
|
||||
|
||||
// Rotate second row 2 columns to left
|
||||
temp = (*state)[0][2];
|
||||
(*state)[0][2] = (*state)[2][2];
|
||||
(*state)[2][2] = temp;
|
||||
|
||||
temp = (*state)[1][2];
|
||||
(*state)[1][2] = (*state)[3][2];
|
||||
(*state)[3][2] = temp;
|
||||
|
||||
// Rotate third row 3 columns to left
|
||||
temp = (*state)[0][3];
|
||||
(*state)[0][3] = (*state)[3][3];
|
||||
(*state)[3][3] = (*state)[2][3];
|
||||
(*state)[2][3] = (*state)[1][3];
|
||||
(*state)[1][3] = temp;
|
||||
}
|
||||
|
||||
static uint8_t xtime(uint8_t x)
|
||||
{
|
||||
return ((x<<1) ^ (((x>>7) & 1) * 0x1b));
|
||||
}
|
||||
|
||||
// MixColumns function mixes the columns of the state matrix
|
||||
static void MixColumns(void)
|
||||
{
|
||||
uint8_t i;
|
||||
uint8_t Tmp,Tm,t;
|
||||
for(i = 0; i < 4; ++i)
|
||||
{
|
||||
t = (*state)[i][0];
|
||||
Tmp = (*state)[i][0] ^ (*state)[i][1] ^ (*state)[i][2] ^ (*state)[i][3] ;
|
||||
Tm = (*state)[i][0] ^ (*state)[i][1] ; Tm = xtime(Tm); (*state)[i][0] ^= Tm ^ Tmp ;
|
||||
Tm = (*state)[i][1] ^ (*state)[i][2] ; Tm = xtime(Tm); (*state)[i][1] ^= Tm ^ Tmp ;
|
||||
Tm = (*state)[i][2] ^ (*state)[i][3] ; Tm = xtime(Tm); (*state)[i][2] ^= Tm ^ Tmp ;
|
||||
Tm = (*state)[i][3] ^ t ; Tm = xtime(Tm); (*state)[i][3] ^= Tm ^ Tmp ;
|
||||
}
|
||||
}
|
||||
|
||||
// Multiply is used to multiply numbers in the field GF(2^8)
|
||||
#if MULTIPLY_AS_A_FUNCTION
|
||||
static uint8_t Multiply(uint8_t x, uint8_t y)
|
||||
{
|
||||
return (((y & 1) * x) ^
|
||||
((y>>1 & 1) * xtime(x)) ^
|
||||
((y>>2 & 1) * xtime(xtime(x))) ^
|
||||
((y>>3 & 1) * xtime(xtime(xtime(x)))) ^
|
||||
((y>>4 & 1) * xtime(xtime(xtime(xtime(x))))));
|
||||
}
|
||||
#else
|
||||
#define Multiply(x, y) \
|
||||
( ((y & 1) * x) ^ \
|
||||
((y>>1 & 1) * xtime(x)) ^ \
|
||||
((y>>2 & 1) * xtime(xtime(x))) ^ \
|
||||
((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ \
|
||||
((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))) \
|
||||
|
||||
#endif
|
||||
|
||||
// MixColumns function mixes the columns of the state matrix.
|
||||
// The method used to multiply may be difficult to understand for the inexperienced.
|
||||
// Please use the references to gain more information.
|
||||
static void InvMixColumns(void)
|
||||
{
|
||||
int i;
|
||||
uint8_t a,b,c,d;
|
||||
for(i=0;i<4;++i)
|
||||
{
|
||||
a = (*state)[i][0];
|
||||
b = (*state)[i][1];
|
||||
c = (*state)[i][2];
|
||||
d = (*state)[i][3];
|
||||
|
||||
(*state)[i][0] = Multiply(a, 0x0e) ^ Multiply(b, 0x0b) ^ Multiply(c, 0x0d) ^ Multiply(d, 0x09);
|
||||
(*state)[i][1] = Multiply(a, 0x09) ^ Multiply(b, 0x0e) ^ Multiply(c, 0x0b) ^ Multiply(d, 0x0d);
|
||||
(*state)[i][2] = Multiply(a, 0x0d) ^ Multiply(b, 0x09) ^ Multiply(c, 0x0e) ^ Multiply(d, 0x0b);
|
||||
(*state)[i][3] = Multiply(a, 0x0b) ^ Multiply(b, 0x0d) ^ Multiply(c, 0x09) ^ Multiply(d, 0x0e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// The SubBytes Function Substitutes the values in the
|
||||
// state matrix with values in an S-box.
|
||||
static void InvSubBytes(void)
|
||||
{
|
||||
uint8_t i,j;
|
||||
for(i=0;i<4;++i)
|
||||
{
|
||||
for(j=0;j<4;++j)
|
||||
{
|
||||
(*state)[j][i] = getSBoxInvert((*state)[j][i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void InvShiftRows(void)
|
||||
{
|
||||
uint8_t temp;
|
||||
|
||||
// Rotate first row 1 columns to right
|
||||
temp=(*state)[3][1];
|
||||
(*state)[3][1]=(*state)[2][1];
|
||||
(*state)[2][1]=(*state)[1][1];
|
||||
(*state)[1][1]=(*state)[0][1];
|
||||
(*state)[0][1]=temp;
|
||||
|
||||
// Rotate second row 2 columns to right
|
||||
temp=(*state)[0][2];
|
||||
(*state)[0][2]=(*state)[2][2];
|
||||
(*state)[2][2]=temp;
|
||||
|
||||
temp=(*state)[1][2];
|
||||
(*state)[1][2]=(*state)[3][2];
|
||||
(*state)[3][2]=temp;
|
||||
|
||||
// Rotate third row 3 columns to right
|
||||
temp=(*state)[0][3];
|
||||
(*state)[0][3]=(*state)[1][3];
|
||||
(*state)[1][3]=(*state)[2][3];
|
||||
(*state)[2][3]=(*state)[3][3];
|
||||
(*state)[3][3]=temp;
|
||||
}
|
||||
|
||||
|
||||
// Cipher is the main function that encrypts the PlainText.
|
||||
static void Cipher(void)
|
||||
{
|
||||
uint8_t round = 0;
|
||||
|
||||
// Add the First round key to the state before starting the rounds.
|
||||
AddRoundKey(0);
|
||||
|
||||
// There will be Nr rounds.
|
||||
// The first Nr-1 rounds are identical.
|
||||
// These Nr-1 rounds are executed in the loop below.
|
||||
for(round = 1; round < Nr; ++round)
|
||||
{
|
||||
SubBytes();
|
||||
ShiftRows();
|
||||
MixColumns();
|
||||
AddRoundKey(round);
|
||||
}
|
||||
|
||||
// The last round is given below.
|
||||
// The MixColumns function is not here in the last round.
|
||||
SubBytes();
|
||||
ShiftRows();
|
||||
AddRoundKey(Nr);
|
||||
}
|
||||
|
||||
static void InvCipher(void)
|
||||
{
|
||||
uint8_t round=0;
|
||||
|
||||
// Add the First round key to the state before starting the rounds.
|
||||
AddRoundKey(Nr);
|
||||
|
||||
// There will be Nr rounds.
|
||||
// The first Nr-1 rounds are identical.
|
||||
// These Nr-1 rounds are executed in the loop below.
|
||||
for(round=Nr-1;round>0;round--)
|
||||
{
|
||||
InvShiftRows();
|
||||
InvSubBytes();
|
||||
AddRoundKey(round);
|
||||
InvMixColumns();
|
||||
}
|
||||
|
||||
// The last round is given below.
|
||||
// The MixColumns function is not here in the last round.
|
||||
InvShiftRows();
|
||||
InvSubBytes();
|
||||
AddRoundKey(0);
|
||||
}
|
||||
|
||||
static void BlockCopy(uint8_t* output, uint8_t* input)
|
||||
{
|
||||
uint8_t i;
|
||||
for (i=0;i<KEYLEN;++i)
|
||||
{
|
||||
output[i] = input[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Public functions: */
|
||||
/*****************************************************************************/
|
||||
#if defined(ECB) && ECB
|
||||
|
||||
|
||||
void AES128_ECB_encrypt(uint8_t* input, const uint8_t* key, uint8_t* output)
|
||||
{
|
||||
// Copy input to output, and work in-memory on output
|
||||
BlockCopy(output, input);
|
||||
state = (state_t*)output;
|
||||
|
||||
Key = key;
|
||||
KeyExpansion();
|
||||
|
||||
// The next function call encrypts the PlainText with the Key using AES algorithm.
|
||||
Cipher();
|
||||
}
|
||||
|
||||
void AES128_ECB_decrypt(uint8_t* input, const uint8_t* key, uint8_t *output)
|
||||
{
|
||||
// Copy input to output, and work in-memory on output
|
||||
BlockCopy(output, input);
|
||||
state = (state_t*)output;
|
||||
|
||||
// The KeyExpansion routine must be called before encryption.
|
||||
Key = key;
|
||||
KeyExpansion();
|
||||
|
||||
InvCipher();
|
||||
}
|
||||
|
||||
|
||||
#endif // #if defined(ECB) && ECB
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if defined(CBC) && CBC
|
||||
|
||||
|
||||
static void XorWithIv(uint8_t* buf)
|
||||
{
|
||||
uint8_t i;
|
||||
for(i = 0; i < KEYLEN; ++i)
|
||||
{
|
||||
buf[i] ^= Iv[i];
|
||||
}
|
||||
}
|
||||
|
||||
void AES128_CBC_encrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv)
|
||||
{
|
||||
uintptr_t i;
|
||||
uint8_t remainders = length % KEYLEN; /* Remaining bytes in the last non-full block */
|
||||
|
||||
BlockCopy(output, input);
|
||||
state = (state_t*)output;
|
||||
|
||||
// Skip the key expansion if key is passed as 0
|
||||
if(0 != key)
|
||||
{
|
||||
Key = key;
|
||||
KeyExpansion();
|
||||
}
|
||||
|
||||
if(iv != 0)
|
||||
{
|
||||
Iv = (uint8_t*)iv;
|
||||
}
|
||||
|
||||
for(i = 0; i < length; i += KEYLEN)
|
||||
{
|
||||
XorWithIv(input);
|
||||
BlockCopy(output, input);
|
||||
state = (state_t*)output;
|
||||
Cipher();
|
||||
Iv = output;
|
||||
input += KEYLEN;
|
||||
output += KEYLEN;
|
||||
}
|
||||
|
||||
if(remainders)
|
||||
{
|
||||
BlockCopy(output, input);
|
||||
memset(output + remainders, 0, KEYLEN - remainders); /* add 0-padding */
|
||||
state = (state_t*)output;
|
||||
Cipher();
|
||||
}
|
||||
}
|
||||
|
||||
void AES128_CBC_decrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv)
|
||||
{
|
||||
uintptr_t i;
|
||||
uint8_t remainders = length % KEYLEN; /* Remaining bytes in the last non-full block */
|
||||
|
||||
BlockCopy(output, input);
|
||||
state = (state_t*)output;
|
||||
|
||||
// Skip the key expansion if key is passed as 0
|
||||
if(0 != key)
|
||||
{
|
||||
Key = key;
|
||||
KeyExpansion();
|
||||
}
|
||||
|
||||
// If iv is passed as 0, we continue to encrypt without re-setting the Iv
|
||||
if(iv != 0)
|
||||
{
|
||||
Iv = (uint8_t*)iv;
|
||||
}
|
||||
|
||||
for(i = 0; i < length; i += KEYLEN)
|
||||
{
|
||||
BlockCopy(output, input);
|
||||
state = (state_t*)output;
|
||||
InvCipher();
|
||||
XorWithIv(output);
|
||||
Iv = input;
|
||||
input += KEYLEN;
|
||||
output += KEYLEN;
|
||||
}
|
||||
|
||||
if(remainders)
|
||||
{
|
||||
BlockCopy(output, input);
|
||||
memset(output+remainders, 0, KEYLEN - remainders); /* add 0-padding */
|
||||
state = (state_t*)output;
|
||||
InvCipher();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif // #if defined(CBC) && CBC
|
||||
|
||||
|
@ -1,40 +0,0 @@
|
||||
#ifndef _AES_H_
|
||||
#define _AES_H_
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
// #define the macros below to 1/0 to enable/disable the mode of operation.
|
||||
//
|
||||
// CBC enables AES128 encryption in CBC-mode of operation and handles 0-padding.
|
||||
// ECB enables the basic ECB 16-byte block algorithm. Both can be enabled simultaneously.
|
||||
|
||||
// The #ifndef-guard allows it to be configured before #include'ing or at compile time.
|
||||
#ifndef CBC
|
||||
#define CBC 1
|
||||
#endif
|
||||
|
||||
#ifndef ECB
|
||||
#define ECB 1
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(ECB) && ECB
|
||||
|
||||
void AES128_ECB_encrypt(uint8_t* input, const uint8_t* key, uint8_t *output);
|
||||
void AES128_ECB_decrypt(uint8_t* input, const uint8_t* key, uint8_t *output);
|
||||
|
||||
#endif // #if defined(ECB) && ECB
|
||||
|
||||
|
||||
#if defined(CBC) && CBC
|
||||
|
||||
void AES128_CBC_encrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv);
|
||||
void AES128_CBC_decrypt_buffer(uint8_t* output, uint8_t* input, uint32_t length, const uint8_t* key, const uint8_t* iv);
|
||||
|
||||
#endif // #if defined(CBC) && CBC
|
||||
|
||||
|
||||
|
||||
#endif //_AES_H_
|
@ -1,727 +0,0 @@
|
||||
/* File: auth.c
|
||||
* ------------
|
||||
* 注:核心函数为Authentication(),由该函数执行801.1X认证
|
||||
*/
|
||||
|
||||
int Authentication(const char *UserName, const char *Password, const char *DeviceName);
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <time.h>
|
||||
#include "h3c_AES_MD5.h"
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <pcap.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/wait.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
// 自定义常量
|
||||
typedef enum {REQUEST=1, RESPONSE=2, SUCCESS=3, FAILURE=4, H3CDATA=10} EAP_Code;
|
||||
typedef enum {IDENTITY=1, NOTIFICATION=2, MD5=4, AVAILABLE=20} EAP_Type;
|
||||
typedef uint8_t EAP_ID;
|
||||
const uint8_t BroadcastAddr[6] = {0xff,0xff,0xff,0xff,0xff,0xff}; // 广播MAC地址
|
||||
const uint8_t MultcastAddr[6] = {0x01,0x80,0xc2,0x00,0x00,0x03}; // 多播MAC地址
|
||||
const char H3C_VERSION[16]="CH\x11V7.10-0313"; // 华为客户端版本号
|
||||
//const char H3C_KEY[64] ="HuaWei3COM1X"; // H3C的固定密钥
|
||||
const char H3C_KEY[64] ="Oly5D62FaE94W7"; // H3C的另一个固定密钥,网友取自MacOSX版本的iNode官方客户端
|
||||
|
||||
uint8_t AES_MD5req[32];
|
||||
uint8_t AES_MD5data[32];
|
||||
// 子函数声明
|
||||
static void SendStartPkt(pcap_t *adhandle, const uint8_t mac[]);
|
||||
static void SendLogoffPkt(pcap_t *adhandle, const uint8_t mac[]);
|
||||
static void SendResponseIdentity(pcap_t *adhandle,
|
||||
const uint8_t request[],
|
||||
const uint8_t ethhdr[],
|
||||
const uint8_t ip[4],
|
||||
const char username[]);
|
||||
|
||||
static void SendFirstResponseIdentity(pcap_t *adhandle,
|
||||
const uint8_t request[],
|
||||
const uint8_t ethhdr[],
|
||||
const uint8_t ip[4],
|
||||
const char username[]);
|
||||
static void SendResponseMD5(pcap_t *adhandle,
|
||||
const uint8_t request[],
|
||||
const uint8_t ethhdr[],
|
||||
const char username[],
|
||||
const char passwd[]);
|
||||
static void SendResponseAvailable(pcap_t *adhandle,
|
||||
const uint8_t request[],
|
||||
const uint8_t ethhdr[],
|
||||
const uint8_t ip[4],
|
||||
const char username[]);
|
||||
static void SendResponseNotification(pcap_t *handle,
|
||||
const uint8_t request[],
|
||||
const uint8_t ethhdr[]);
|
||||
|
||||
static void GetMacFromDevice(uint8_t mac[6], const char *devicename);
|
||||
|
||||
static void FillClientVersionArea(uint8_t area[]);
|
||||
static void FillWindowsVersionArea(uint8_t area[]);
|
||||
static void FillBase64Area(char area[]);
|
||||
// From fillmd5.c
|
||||
extern void FillMD5Area(uint8_t digest[],
|
||||
uint8_t id, const char passwd[], const uint8_t srcMD5[]);
|
||||
|
||||
// From ip.c
|
||||
extern void GetIpFromDevice(uint8_t ip[4], const char DeviceName[]);
|
||||
|
||||
int mode=1;//auto reconnect
|
||||
|
||||
/**
|
||||
* 函数:Authentication()
|
||||
*
|
||||
* 使用以太网进行802.1X认证(802.1X Authentication)
|
||||
* 该函数将不断循环,应答802.1X认证会话,直到遇到错误后才退出
|
||||
*/
|
||||
|
||||
int Authentication(const char *UserName, const char *Password, const char *DeviceName)
|
||||
{
|
||||
char errbuf[PCAP_ERRBUF_SIZE];
|
||||
pcap_t *adhandle; // adapter handle
|
||||
uint8_t MAC[6];
|
||||
char FilterStr[100];
|
||||
struct bpf_program fcode;
|
||||
const int DefaultTimeout=2000;//设置接收超时参数,单位ms
|
||||
|
||||
// NOTE: 这里没有检查网线是否已插好,网线插口可能接触不良
|
||||
|
||||
/* 打开适配器(网卡) */
|
||||
adhandle = pcap_open_live(DeviceName,65536,1,DefaultTimeout,errbuf);
|
||||
if (adhandle==NULL) {
|
||||
fprintf(stderr, "%s\n", errbuf);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* 查询本机MAC地址 */
|
||||
GetMacFromDevice(MAC, DeviceName);
|
||||
|
||||
/* 生成随机数 */
|
||||
srand((unsigned)time(NULL));
|
||||
|
||||
START_AUTHENTICATION:
|
||||
{
|
||||
/*
|
||||
* 设置过滤器:
|
||||
* 初始情况下只捕获发往本机的802.1X认证会话,不接收多播信息(避免误捕获其他客户端发出的多播信息)
|
||||
* 进入循环体前可以重设过滤器,那时再开始接收多播信息
|
||||
*/
|
||||
sprintf(FilterStr, "(ether proto 0x888e) and (ether dst host %02x:%02x:%02x:%02x:%02x:%02x)",
|
||||
MAC[0],MAC[1],MAC[2],MAC[3],MAC[4],MAC[5]);
|
||||
pcap_compile(adhandle, &fcode, FilterStr, 1, 0xff);
|
||||
pcap_setfilter(adhandle, &fcode);
|
||||
int i;
|
||||
int retcode;
|
||||
struct pcap_pkthdr *header = NULL;
|
||||
const uint8_t *captured = NULL;
|
||||
uint8_t ethhdr[14]={0}; // ethernet header
|
||||
uint8_t ip[4]={10,0,0,0}; // ip address
|
||||
|
||||
// 使用本机MAC地址生成伪装IP地址。
|
||||
ip[1] = MAC[2] ^ (uint8_t)rand();
|
||||
ip[2] = MAC[4] ^ (uint8_t)rand();
|
||||
ip[3] = MAC[5] ^ (uint8_t)rand();
|
||||
|
||||
/* 主动发起认证会话 */
|
||||
SendStartPkt(adhandle, MAC);
|
||||
DPRINTF("[ ] Client: Start.\n");
|
||||
|
||||
/* 等待认证服务器的回应 */
|
||||
bool serverIsFound = false;
|
||||
while (!serverIsFound)
|
||||
{
|
||||
retcode = pcap_next_ex(adhandle, &header, &captured);
|
||||
if (retcode==1 && (EAP_Code)captured[18]==REQUEST)
|
||||
serverIsFound = true;
|
||||
else
|
||||
{ // 延时后重试
|
||||
sleep(1);
|
||||
//DPRINTF(".");
|
||||
SendStartPkt(adhandle, MAC);
|
||||
// NOTE: 这里没有检查网线是否接触不良或已被拔下
|
||||
}
|
||||
}
|
||||
|
||||
// 填写应答包的报头(以后无须再修改)
|
||||
// 默认以单播方式应答802.1X认证设备发来的Request
|
||||
memcpy(ethhdr+0, captured+6, 6);
|
||||
memcpy(ethhdr+6, MAC, 6);
|
||||
ethhdr[12] = 0x88;
|
||||
ethhdr[13] = 0x8e;
|
||||
|
||||
// 收到的第一个包可能是Request Notification。取决于校方网络配置
|
||||
if ((EAP_Type)captured[22] == NOTIFICATION)
|
||||
{
|
||||
DPRINTF("[%d] Server: Request Notification!\n", captured[19]);
|
||||
// 发送Response Notification
|
||||
SendResponseNotification(adhandle, captured, ethhdr);
|
||||
DPRINTF(" Client: Response Notification.\n");
|
||||
|
||||
// 继续接收下一个Request包
|
||||
retcode = pcap_next_ex(adhandle, &header, &captured);
|
||||
assert(retcode==1);
|
||||
assert((EAP_Code)captured[18] == REQUEST);
|
||||
}
|
||||
|
||||
// 分情况应答下一个包
|
||||
if ((EAP_Type)captured[22] == IDENTITY)
|
||||
{ // 通常情况会收到包Request Identity,应回答Response Identity
|
||||
DPRINTF("[%d] Server: Request Identity!\n", captured[19]);
|
||||
GetIpFromDevice(ip, DeviceName);
|
||||
SendFirstResponseIdentity(adhandle, captured, ethhdr, ip, UserName);
|
||||
DPRINTF("[%d] Client: Response First Identity.\n", (EAP_ID)captured[19]);
|
||||
}
|
||||
else if ((EAP_Type)captured[22] == AVAILABLE)
|
||||
{ // 遇到AVAILABLE包时需要特殊处理
|
||||
// 中南财经政法大学目前使用的格式:
|
||||
// 收到第一个Request AVAILABLE时要回答Response Identity
|
||||
DPRINTF("[%d] Server: Request AVAILABLE!\n", captured[19]);
|
||||
GetIpFromDevice(ip, DeviceName);
|
||||
SendResponseIdentity(adhandle, captured, ethhdr, ip, UserName);
|
||||
DPRINTF("[%d] Client: Response Identity.\n", (EAP_ID)captured[19]);
|
||||
}
|
||||
|
||||
// 重设过滤器,只捕获华为802.1X认证设备发来的包(包括多播Request Identity / Request AVAILABLE)
|
||||
sprintf(FilterStr, "(ether proto 0x888e) and (ether src host %02x:%02x:%02x:%02x:%02x:%02x)",
|
||||
captured[6],captured[7],captured[8],captured[9],captured[10],captured[11]);
|
||||
pcap_compile(adhandle, &fcode, FilterStr, 1, 0xff);
|
||||
pcap_setfilter(adhandle, &fcode);
|
||||
|
||||
// 进入循环体
|
||||
for (;;)
|
||||
{
|
||||
// 调用pcap_next_ex()函数捕获数据包
|
||||
while (pcap_next_ex(adhandle, &header, &captured) != 1)
|
||||
{
|
||||
//DPRINTF("."); // 若捕获失败,则等1秒后重试
|
||||
sleep(1); // 直到成功捕获到一个数据包后再跳出
|
||||
// NOTE: 这里没有检查网线是否已被拔下或插口接触不良
|
||||
}
|
||||
|
||||
// 根据收到的Request,回复相应的Response包
|
||||
if ((EAP_Code)captured[18] == REQUEST)
|
||||
{
|
||||
switch ((EAP_Type)captured[22])
|
||||
{
|
||||
case IDENTITY:
|
||||
DPRINTF("[%d] Server: Request Identity!\n", (EAP_ID)captured[19]);
|
||||
GetIpFromDevice(ip, DeviceName);
|
||||
SendResponseIdentity(adhandle, captured, ethhdr, ip, UserName);
|
||||
DPRINTF("[%d] Client: Response Identity.\n", (EAP_ID)captured[19]);
|
||||
break;
|
||||
case AVAILABLE:
|
||||
DPRINTF("[%d] Server: Request AVAILABLE!\n", (EAP_ID)captured[19]);
|
||||
GetIpFromDevice(ip, DeviceName);
|
||||
SendResponseAvailable(adhandle, captured, ethhdr, ip, UserName);
|
||||
DPRINTF("[%d] Client: Response AVAILABLE.\n", (EAP_ID)captured[19]);
|
||||
break;
|
||||
case MD5:
|
||||
DPRINTF("[%d] Server: Request MD5-Challenge!\n", (EAP_ID)captured[19]);
|
||||
SendResponseMD5(adhandle, captured, ethhdr, UserName, Password);
|
||||
DPRINTF("[%d] Client: Response MD5-Challenge.\n", (EAP_ID)captured[19]);
|
||||
break;
|
||||
case NOTIFICATION:
|
||||
DPRINTF("[%d] Server: Request Notification!\n", captured[19]);
|
||||
SendResponseNotification(adhandle, captured, ethhdr);
|
||||
DPRINTF(" Client: Response Notification.\n");
|
||||
break;
|
||||
default:
|
||||
DPRINTF("[%d] Server: Request (type:%d)!\n", (EAP_ID)captured[19], (EAP_Type)captured[22]);
|
||||
DPRINTF("Error! Unexpected request type\n");
|
||||
exit(-1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((EAP_Code)captured[18] == FAILURE)
|
||||
{ // 处理认证失败信息
|
||||
uint8_t errtype = captured[22];
|
||||
uint8_t msgsize = captured[23];
|
||||
const char *msg = (const char*) &captured[24];
|
||||
DPRINTF("[%d] Server: Failure.\n", (EAP_ID)captured[19]);
|
||||
if (errtype==0x09 && msgsize>0)
|
||||
{ // 输出错误提示消息
|
||||
fprintf(stderr, "%s\n", msg);
|
||||
// 已知的几种错误如下
|
||||
// E2531:用户名不存在
|
||||
// E2535:Service is paused
|
||||
// E2542:该用户帐号已经在别处登录
|
||||
// E2547:接入时段限制
|
||||
// E2553:密码错误
|
||||
// E2602:认证会话不存在
|
||||
// E3137:客户端版本号无效
|
||||
|
||||
if (mode == 1)
|
||||
{
|
||||
goto START_AUTHENTICATION;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;//exit(-1);
|
||||
}
|
||||
}
|
||||
else if (errtype==0x08) // 可能网络无流量时朊务器结束此次802.1X认证会话
|
||||
|
||||
{ // 遇此情况客户端立刻发起新的认证会话
|
||||
goto START_AUTHENTICATION;
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINTF("errtype=0x%02x\n", errtype);
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
else if ((EAP_Code)captured[18] == SUCCESS)
|
||||
{
|
||||
DPRINTF("[%d] Server: Success.\n", captured[19]);
|
||||
}
|
||||
else if ((EAP_Code)captured[18] == 0x0A)
|
||||
{
|
||||
DPRINTF("[%d] Server: (H3C data)\n", captured[19]);
|
||||
if (captured[26] == 0x35)
|
||||
{
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
AES_MD5req[i] = captured[i + 27];
|
||||
}
|
||||
h3c_AES_MD5_decryption(AES_MD5data, AES_MD5req);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINTF("[%d] Server: (unknown data)\n", captured[19]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static
|
||||
void GetMacFromDevice(uint8_t mac[6], const char *devicename)
|
||||
{
|
||||
|
||||
int fd;
|
||||
int err;
|
||||
struct ifreq ifr;
|
||||
|
||||
fd = socket(PF_PACKET, SOCK_RAW, htons(0x0806));
|
||||
assert(fd != -1);
|
||||
|
||||
assert(strlen(devicename) < IFNAMSIZ);
|
||||
strncpy(ifr.ifr_name, devicename, IFNAMSIZ);
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
|
||||
err = ioctl(fd, SIOCGIFHWADDR, &ifr);
|
||||
assert(err != -1);
|
||||
memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
|
||||
|
||||
err = close(fd);
|
||||
assert(err != -1);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void SendStartPkt(pcap_t *handle, const uint8_t localmac[])
|
||||
{
|
||||
uint8_t packet[18];
|
||||
|
||||
// Ethernet Header (14 Bytes)
|
||||
memcpy(packet, BroadcastAddr, 6);
|
||||
memcpy(packet+6, localmac, 6);
|
||||
packet[12] = 0x88;
|
||||
packet[13] = 0x8e;
|
||||
|
||||
// EAPOL (4 Bytes)
|
||||
packet[14] = 0x01; // Version=1
|
||||
packet[15] = 0x01; // Type=Start
|
||||
packet[16] = packet[17] =0x00;// Length=0x0000
|
||||
|
||||
// 为了兼容不同院校的网络配置,这里发送两遍Start包
|
||||
// 1、广播发送Strat包
|
||||
pcap_sendpacket(handle, packet, sizeof(packet));
|
||||
// 2、多播发送Strat包
|
||||
//memcpy(packet, MultcastAddr, 6);
|
||||
//pcap_sendpacket(handle, packet, sizeof(packet));
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void SendResponseAvailable(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[])
|
||||
{
|
||||
int i;
|
||||
uint16_t eaplen;
|
||||
int usernamelen;
|
||||
uint8_t response[128];
|
||||
|
||||
assert((EAP_Code)request[18] == REQUEST);
|
||||
assert((EAP_Type)request[22] == AVAILABLE);
|
||||
|
||||
// Fill Ethernet header
|
||||
memcpy(response, ethhdr, 14);
|
||||
|
||||
// 802,1X Authentication
|
||||
// {
|
||||
response[14] = 0x1; // 802.1X Version 1
|
||||
response[15] = 0x0; // Type=0 (EAP Packet)
|
||||
//response[16~17]留空 // Length
|
||||
|
||||
// Extensible Authentication Protocol
|
||||
// {
|
||||
response[18] = (EAP_Code) RESPONSE; // Code
|
||||
response[19] = request[19]; // ID
|
||||
//response[20~21]留空 // Length
|
||||
response[22] = (EAP_Type) AVAILABLE; // Type
|
||||
// Type-Data
|
||||
// {
|
||||
i = 23;
|
||||
response[i++] = 0x00;// 上报是否使用代理
|
||||
response[i++] = 0x15; // 上传IP地址
|
||||
response[i++] = 0x04; //
|
||||
memcpy(response+i, ip, 4);//
|
||||
i += 4; //
|
||||
response[i++] = 0x06; // 携带版本号
|
||||
response[i++] = 0x07; //
|
||||
FillBase64Area((char*)response+i);//
|
||||
i += 28; //
|
||||
response[i++] = ' '; // 两个空格符
|
||||
response[i++] = ' '; //
|
||||
usernamelen = strlen(username);
|
||||
memcpy(response+i, username, usernamelen);//
|
||||
i += usernamelen; //
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// 补填前面留空的两处Length
|
||||
eaplen = htons(i-18);
|
||||
memcpy(response+16, &eaplen, sizeof(eaplen));
|
||||
memcpy(response+20, &eaplen, sizeof(eaplen));
|
||||
|
||||
// 发送
|
||||
pcap_sendpacket(handle, response, i);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void SendResponseIdentity(pcap_t *adhandle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[])
|
||||
{
|
||||
uint8_t response[256];
|
||||
size_t i;
|
||||
uint16_t eaplen;
|
||||
int usernamelen;
|
||||
|
||||
assert((EAP_Code)request[18] == REQUEST);
|
||||
assert((EAP_Type)request[22] == IDENTITY
|
||||
||(EAP_Type)request[22] == AVAILABLE); // 兼容中南财经政法大学情况
|
||||
|
||||
// Fill Ethernet header
|
||||
memcpy(response, ethhdr, 14);
|
||||
|
||||
// 802,1X Authentication
|
||||
// {
|
||||
response[14] = 0x1; // 802.1X Version 1
|
||||
response[15] = 0x0; // Type=0 (EAP Packet)
|
||||
//response[16~17]留空 // Length
|
||||
|
||||
// Extensible Authentication Protocol
|
||||
// {
|
||||
response[18] = (EAP_Code) RESPONSE; // Code
|
||||
response[19] = request[19]; // ID
|
||||
//response[20~21]留空 // Length
|
||||
response[22] = (EAP_Type) IDENTITY; // Type
|
||||
response[23] = 0x16;
|
||||
response[24] = 0x20;
|
||||
memcpy(response + 25, AES_MD5data, 32);
|
||||
// Type-Data
|
||||
// {
|
||||
i = 57;
|
||||
response[i++] = 0x15; // 上传IP地址
|
||||
response[i++] = 0x04; //
|
||||
memcpy(response+i, ip, 4);//
|
||||
i += 4; //
|
||||
response[i++] = 0x06; // 携带版本号
|
||||
response[i++] = 0x07; //
|
||||
FillBase64Area((char*)response+i);//
|
||||
i += 28; //
|
||||
response[i++] = ' '; // 两个空格符
|
||||
response[i++] = ' '; //
|
||||
usernamelen = strlen(username); //末尾添加用户名
|
||||
memcpy(response+i, username, usernamelen);
|
||||
i += usernamelen;
|
||||
assert(i <= sizeof(response));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// 补填前面留空的两处Length
|
||||
eaplen = htons(i-18);
|
||||
memcpy(response+16, &eaplen, sizeof(eaplen));
|
||||
memcpy(response+20, &eaplen, sizeof(eaplen));
|
||||
|
||||
// 发送
|
||||
pcap_sendpacket(adhandle, response, i);
|
||||
return;
|
||||
}
|
||||
|
||||
void SendFirstResponseIdentity(pcap_t *adhandle, const uint8_t request[], const uint8_t ethhdr[], const uint8_t ip[4], const char username[])
|
||||
{
|
||||
uint8_t response[128];
|
||||
size_t i;
|
||||
uint16_t eaplen;
|
||||
int usernamelen;
|
||||
|
||||
assert((EAP_Code)request[18] == REQUEST);
|
||||
assert((EAP_Type)request[22] == IDENTITY
|
||||
||(EAP_Type)request[22] == AVAILABLE); // 兼容中南财经政法大学情况
|
||||
|
||||
// Fill Ethernet header
|
||||
memcpy(response, ethhdr, 14);
|
||||
|
||||
// 802,1X Authentication
|
||||
// {
|
||||
response[14] = 0x1; // 802.1X Version 1
|
||||
response[15] = 0x0; // Type=0 (EAP Packet)
|
||||
//response[16~17]留空 // Length
|
||||
|
||||
// Extensible Authentication Protocol
|
||||
// {
|
||||
response[18] = (EAP_Code) RESPONSE; // Code
|
||||
response[19] = request[19]; // ID
|
||||
//response[20~21]留空 // Length
|
||||
response[22] = (EAP_Type) IDENTITY; // Type
|
||||
// Type-Data
|
||||
// {
|
||||
i = 23;
|
||||
//response[i++] = 0x15; // 上传IP地址
|
||||
//response[i++] = 0x04; //
|
||||
//memcpy(response+i, ip, 4);//
|
||||
//i += 4; //
|
||||
response[i++] = 0x06; // 携带版本号
|
||||
response[i++] = 0x07; //
|
||||
FillBase64Area((char*)response+i);//
|
||||
i += 28; //
|
||||
response[i++] = ' '; // 两个空格符
|
||||
response[i++] = ' '; //
|
||||
usernamelen = strlen(username); //末尾添加用户名
|
||||
memcpy(response+i, username, usernamelen);
|
||||
i += usernamelen;
|
||||
assert(i <= sizeof(response));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// 补填前面留空的两处Length
|
||||
eaplen = htons(i-18);
|
||||
memcpy(response+16, &eaplen, sizeof(eaplen));
|
||||
memcpy(response+20, &eaplen, sizeof(eaplen));
|
||||
|
||||
// 发送
|
||||
pcap_sendpacket(adhandle, response, i);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void SendResponseMD5(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[], const char username[], const char passwd[])
|
||||
{
|
||||
uint16_t eaplen;
|
||||
size_t usernamelen;
|
||||
size_t packetlen;
|
||||
uint8_t response[128];
|
||||
|
||||
assert((EAP_Code)request[18] == REQUEST);
|
||||
assert((EAP_Type)request[22] == MD5);
|
||||
|
||||
usernamelen = strlen(username);
|
||||
eaplen = htons(22+usernamelen);
|
||||
packetlen = 14+4+22+usernamelen; // ethhdr+EAPOL+EAP+usernamelen
|
||||
|
||||
// Fill Ethernet header
|
||||
memcpy(response, ethhdr, 14);
|
||||
|
||||
// 802,1X Authentication
|
||||
// {
|
||||
response[14] = 0x1; // 802.1X Version 1
|
||||
response[15] = 0x0; // Type=0 (EAP Packet)
|
||||
memcpy(response+16, &eaplen, sizeof(eaplen)); // Length
|
||||
|
||||
// Extensible Authentication Protocol
|
||||
// {
|
||||
response[18] = (EAP_Code) RESPONSE;// Code
|
||||
response[19] = request[19]; // ID
|
||||
response[20] = response[16]; // Length
|
||||
response[21] = response[17]; //
|
||||
response[22] = (EAP_Type) MD5; // Type
|
||||
response[23] = 16; // Value-Size: 16 Bytes
|
||||
FillMD5Area(response+24, request[19], passwd, request+24);
|
||||
memcpy(response+40, username, usernamelen);
|
||||
// }
|
||||
// }
|
||||
|
||||
pcap_sendpacket(handle, response, packetlen);
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void SendLogoffPkt(pcap_t *handle, const uint8_t localmac[])
|
||||
{
|
||||
uint8_t packet[18];
|
||||
|
||||
// Ethernet Header (14 Bytes)
|
||||
memcpy(packet, MultcastAddr, 6);
|
||||
memcpy(packet+6, localmac, 6);
|
||||
packet[12] = 0x88;
|
||||
packet[13] = 0x8e;
|
||||
|
||||
// EAPOL (4 Bytes)
|
||||
packet[14] = 0x01; // Version=1
|
||||
packet[15] = 0x02; // Type=Logoff
|
||||
packet[16] = packet[17] =0x00;// Length=0x0000
|
||||
|
||||
// 发包
|
||||
pcap_sendpacket(handle, packet, sizeof(packet));
|
||||
}
|
||||
|
||||
|
||||
// 函数: XOR(data[], datalen, key[], keylen)
|
||||
//
|
||||
// 使用密钥key[]对数据data[]进行异或加密
|
||||
//(注:该函数也可反向用于解密)
|
||||
static
|
||||
void XOR(uint8_t data[], unsigned dlen, const char key[], unsigned klen)
|
||||
{
|
||||
unsigned int i,j;
|
||||
|
||||
// 先按正序处理一遍
|
||||
for (i=0; i<dlen; i++)
|
||||
data[i] ^= key[i%klen];
|
||||
// 再按倒序处理第二遍
|
||||
for (i=dlen-1,j=0; j<dlen; i--,j++)
|
||||
data[i] ^= key[j%klen];
|
||||
}
|
||||
|
||||
|
||||
|
||||
static
|
||||
void FillClientVersionArea(uint8_t area[20])
|
||||
{
|
||||
uint32_t random;
|
||||
char RandomKey[8+1];
|
||||
|
||||
random = (uint32_t) time(NULL); // 注:可以选任意32位整数
|
||||
sprintf(RandomKey, "%08x", random);// 生成RandomKey[]字符串
|
||||
|
||||
// 第一轮异或运算,以RandomKey为密钥加密16字节
|
||||
memcpy(area, H3C_VERSION, sizeof(H3C_VERSION));
|
||||
XOR(area, 16, RandomKey, strlen(RandomKey));
|
||||
|
||||
// 此16字节加上4字节的random,组成总计20字节
|
||||
random = htonl(random); // (需调整为网络字节序)
|
||||
memcpy(area+16, &random, 4);
|
||||
|
||||
// 第二轮异或运算,以H3C_KEY为密钥加密前面生成的20字节
|
||||
XOR(area, 20, H3C_KEY, strlen(H3C_KEY));
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void FillWindowsVersionArea(uint8_t area[20])
|
||||
{
|
||||
const uint8_t WinVersion[20] = "r70393861";
|
||||
|
||||
memcpy(area, WinVersion, 20);
|
||||
XOR(area, 20, H3C_KEY, strlen(H3C_KEY));
|
||||
}
|
||||
|
||||
static
|
||||
void SendResponseNotification(pcap_t *handle, const uint8_t request[], const uint8_t ethhdr[])
|
||||
{
|
||||
uint8_t response[67];
|
||||
|
||||
assert((EAP_Code)request[18] == REQUEST);
|
||||
assert((EAP_Type)request[22] == NOTIFICATION);
|
||||
|
||||
// Fill Ethernet header
|
||||
memcpy(response, ethhdr, 14);
|
||||
|
||||
// 802,1X Authentication
|
||||
// {
|
||||
response[14] = 0x1; // 802.1X Version 1
|
||||
response[15] = 0x0; // Type=0 (EAP Packet)
|
||||
response[16] = 0x00; // Length
|
||||
response[17] = 0x31; //
|
||||
|
||||
// Extensible Authentication Protocol
|
||||
// {
|
||||
response[18] = (EAP_Code) RESPONSE; // Code
|
||||
response[19] = (EAP_ID) request[19]; // ID
|
||||
response[20] = response[16]; // Length
|
||||
response[21] = response[17]; //
|
||||
response[22] = (EAP_Type) NOTIFICATION; // Type
|
||||
|
||||
int i=23;
|
||||
/* Notification Data (44 Bytes) */
|
||||
// 其中前2+20字节为客户端版本
|
||||
response[i++] = 0x01; // type 0x01
|
||||
response[i++] = 22; // lenth
|
||||
FillClientVersionArea(response+i);
|
||||
i += 20;
|
||||
|
||||
// 最后2+20字节存储加密后的Windows操作系统版本号
|
||||
response[i++] = 0x02; // type 0x02
|
||||
response[i++] = 22; // length
|
||||
FillWindowsVersionArea(response+i);
|
||||
i += 20;
|
||||
// }
|
||||
// }
|
||||
|
||||
pcap_sendpacket(handle, response, sizeof(response));
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
void FillBase64Area(char area[])
|
||||
{
|
||||
uint8_t version[20];
|
||||
const char Tbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
"abcdefghijklmnopqrstuvwxyz"
|
||||
"0123456789+/"; // 标准的Base64字符映射表
|
||||
uint8_t c1,c2,c3;
|
||||
int i, j;
|
||||
|
||||
// 首先生成20字节加密过的H3C版本号信息
|
||||
FillClientVersionArea(version);
|
||||
|
||||
// 然后按照Base64编码法将前面生成的20字节数据转换为28字节ASCII字符
|
||||
i = 0;
|
||||
j = 0;
|
||||
while (j < 24)
|
||||
{
|
||||
c1 = version[i++];
|
||||
c2 = version[i++];
|
||||
c3 = version[i++];
|
||||
area[j++] = Tbl[ (c1&0xfc)>>2 ];
|
||||
area[j++] = Tbl[((c1&0x03)<<4)|((c2&0xf0)>>4) ];
|
||||
area[j++] = Tbl[ ((c2&0x0f)<<2)|((c3&0xc0)>>6)];
|
||||
area[j++] = Tbl[ c3&0x3f ];
|
||||
}
|
||||
c1 = version[i++];
|
||||
c2 = version[i++];
|
||||
area[24] = Tbl[ (c1&0xfc)>>2 ];
|
||||
area[25] = Tbl[((c1&0x03)<<4)|((c2&0xf0)>>4)];
|
||||
area[26] = Tbl[ ((c2&0x0f)<<2)];
|
||||
area[27] = '=';
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
AC_INIT([njit8021xclient],[1.0],[njit8021xclient@googlegroups.com],[],[https://github.com/liuqun/njit8021xclient])
|
||||
|
||||
AC_MSG_CHECKING([program prefix for $PACKAGE_NAME]);
|
||||
if test "x$program_prefix" = "x" || test $program_prefix = "NONE" ; then
|
||||
dnl 可执行文件前缀默认值
|
||||
program_prefix="njit-"
|
||||
fi
|
||||
AC_MSG_RESULT([$program_prefix])
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects])
|
||||
AC_LBL_C_INIT_BEFORE_CC(V_CCOPT, V_INCLS)
|
||||
AC_PROG_CC
|
||||
AM_PROG_CC_C_O
|
||||
AC_LBL_C_INIT(V_CCOPT, V_INCLS)
|
||||
AC_LBL_C_INLINE
|
||||
AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS)
|
||||
AC_SUBST(V_CCOPT)
|
||||
AC_SUBST(V_DEFS)
|
||||
AC_SUBST(V_GROUP)
|
||||
AC_SUBST(V_INCLS)
|
||||
AC_SUBST(V_PCAPDEP)
|
||||
PKG_CHECK_MODULES([libcrypto], [libcrypto])
|
||||
AC_CONFIG_HEADER([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
@ -1,35 +0,0 @@
|
||||
/* File: debug.h
|
||||
* -------------
|
||||
* 定义少量用于调试的宏函数
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
|
||||
/**
|
||||
* Macro: DPRINTF()
|
||||
*
|
||||
* Usage: 调用格式与printf()一致,支持变长参数表,例子如下:
|
||||
*
|
||||
* #include "debug.h"
|
||||
* ...
|
||||
* int errcode;
|
||||
* char message[] = "xxx failed!";
|
||||
* ...
|
||||
* DPRINTF("Debug message: errcode=%d\n", errcode);
|
||||
* DPRINTF("Debug message: $s\n", message);
|
||||
* exit(errcode);
|
||||
*
|
||||
* 在发布版中定义NDEBUG宏可以清除所有DPRINTF()信息
|
||||
* 注:宏NDEBUG源自C语言惯例
|
||||
*
|
||||
*/
|
||||
#ifdef NDEBUG
|
||||
# define DPRINTF(...)
|
||||
#else
|
||||
# include <stdio.h> // 导入函数原型fprintf(stderr,"%format",...)
|
||||
# define DPRINTF(...) fprintf(stderr, __VA_ARGS__)
|
||||
#endif
|
||||
|
||||
#endif // DEBUG_H
|
@ -1,29 +0,0 @@
|
||||
/* File:
|
||||
* ---------------
|
||||
* 调用openssl提供的MD5函数
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <openssl/md5.h>
|
||||
|
||||
|
||||
void FillMD5Area(uint8_t digest[], uint8_t id, const char passwd[], const uint8_t srcMD5[])
|
||||
{
|
||||
uint8_t msgbuf[128]; // msgbuf = ‘id‘ + ‘passwd’ + ‘srcMD5’
|
||||
size_t msglen;
|
||||
size_t passlen;
|
||||
|
||||
passlen = strlen(passwd);
|
||||
msglen = 1 + passlen + 16;
|
||||
assert(sizeof(msgbuf) >= msglen);
|
||||
|
||||
msgbuf[0] = id;
|
||||
memcpy(msgbuf+1, passwd, passlen);
|
||||
memcpy(msgbuf+1+passlen, srcMD5, 16);
|
||||
|
||||
(void) MD5(msgbuf, msglen, digest);
|
||||
}
|
||||
|
@ -1,29 +0,0 @@
|
||||
/* File: fillmd5.c
|
||||
* ---------------
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <gcrypt.h> // GNU cryptographic function library (libgcrypt)
|
||||
|
||||
|
||||
void FillMD5Area(uint8_t digest[], uint8_t id, const char passwd[], const uint8_t srcMD5[])
|
||||
{
|
||||
uint8_t msgbuf[128]; // msgbuf = ‘id‘ + ‘passwd’ + ‘srcMD5’
|
||||
size_t msglen;
|
||||
size_t passlen;
|
||||
|
||||
passlen = strlen(passwd);
|
||||
msglen = 1 + passlen + 16;
|
||||
assert(sizeof(msgbuf) >= msglen);
|
||||
|
||||
msgbuf[0] = id;
|
||||
memcpy(msgbuf+1, passwd, passlen);
|
||||
memcpy(msgbuf+1+passlen, srcMD5, 16);
|
||||
|
||||
// Calls libgcrypt function for MD5 generation
|
||||
gcry_md_hash_buffer(GCRY_MD_MD5, digest, msgbuf, msglen);
|
||||
}
|
||||
|
@ -1,152 +0,0 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <openssl/md5.h>
|
||||
#include "aes.h"
|
||||
#include "h3c_dict.h"
|
||||
#include "h3c_AES_MD5.h"
|
||||
|
||||
/* 大小端问题 */
|
||||
//大小端检测,如果 ENDIANNESS=='l' 则为小端
|
||||
static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };
|
||||
#define ENDIANNESS ((char)endian_test.mylong)
|
||||
//大小端转换
|
||||
#define BigLittleSwap32(A) ((((uint32_t)(A)&0xff000000)>>24)|\
|
||||
(((uint32_t)(A)&0x00ff0000)>>8)|\
|
||||
(((uint32_t)(A)&0x0000ff00)<<8)|\
|
||||
(((uint32_t)(A)&0x000000ff)<<24))
|
||||
//void main()
|
||||
//{
|
||||
// test();
|
||||
//}
|
||||
|
||||
int test() {
|
||||
unsigned char encrypt_data[32] = { 0xcf, 0xfe, 0x64, 0x73, 0xd5, 0x73, 0x3b, 0x1f, 0x9e, 0x9a, 0xee, 0x1a, 0x6b, 0x76, 0x47, 0xc8, 0x9e, 0x27, 0xc8, 0x92, 0x25, 0x78, 0xc4, 0xc8, 0x27, 0x03, 0x34, 0x50, 0xb6, 0x10, 0xb8, 0x35 };
|
||||
unsigned char decrypt_data[32];
|
||||
unsigned char i;
|
||||
|
||||
// decrypt
|
||||
h3c_AES_MD5_decryption(decrypt_data, encrypt_data);
|
||||
|
||||
// print
|
||||
printf("encrypted string = ");
|
||||
for (i = 0; i<32; ++i) {
|
||||
printf("%x%x", ((int)encrypt_data[i] >> 4) & 0xf,
|
||||
(int)encrypt_data[i] & 0xf);
|
||||
}
|
||||
printf("\n");
|
||||
printf("decrypted string = ");
|
||||
for (i = 0; i<32; ++i) {
|
||||
printf("%x%x", ((int)decrypt_data[i] >> 4) & 0xf,
|
||||
(int)decrypt_data[i] & 0xf);
|
||||
}
|
||||
// the decrypt_data should be 8719362833108a6e16b08e33943601542511372d8d1fb1ab31aa17059118a6ba
|
||||
getchar();
|
||||
return 0;
|
||||
}
|
||||
|
||||
//参考 h3c_AES_MD5.md 文档中对算法的说明
|
||||
int h3c_AES_MD5_decryption(unsigned char *decrypt_data, unsigned char *encrypt_data)
|
||||
{
|
||||
const unsigned char key[16] = { 0xEC, 0xD4, 0x4F, 0x7B, 0xC6, 0xDD, 0x7D, 0xDE, 0x2B, 0x7B, 0x51, 0xAB, 0x4A, 0x6F, 0x5A, 0x22 }; // AES_BLOCK_SIZE = 16
|
||||
unsigned char iv1[16] = { 'a', '@', '4', 'd', 'e', '%', '#', '1', 'a', 's', 'd', 'f', 's', 'd', '2', '4' }; // init vector
|
||||
unsigned char iv2[16] = { 'a', '@', '4', 'd', 'e', '%', '#', '1', 'a', 's', 'd', 'f', 's', 'd', '2', '4' }; //每次加密、解密后,IV会被改变!因此需要两组IV完成两次“独立的”解密
|
||||
unsigned int length_1;
|
||||
unsigned int length_2;
|
||||
unsigned char tmp0[32];
|
||||
unsigned char sig[255];
|
||||
unsigned char tmp2[16];
|
||||
unsigned char tmp3[16];
|
||||
// decrypt
|
||||
AES128_CBC_decrypt_buffer(tmp0, encrypt_data, 32, key, iv1);
|
||||
memcpy(decrypt_data, tmp0, 16);
|
||||
length_1 = *(tmp0 + 5);
|
||||
get_sig(*(uint32_t *)tmp0, *(tmp0 + 4), length_1, sig);
|
||||
MD5(sig, length_1, tmp2);
|
||||
|
||||
AES128_CBC_decrypt_buffer(tmp3, tmp0+16, 16, tmp2, iv2);
|
||||
|
||||
memcpy(decrypt_data + 16, tmp3, 16);
|
||||
|
||||
length_2 = *(tmp3 + 15);
|
||||
get_sig(*(uint32_t *)(tmp3 + 10), *(tmp3 + 14), length_2, sig + length_1);
|
||||
if (length_1 + length_2>32)
|
||||
{
|
||||
memcpy(decrypt_data, sig, 32);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(decrypt_data, sig, length_1 + length_2);
|
||||
}
|
||||
MD5(decrypt_data, 32, decrypt_data);//获取MD5摘要数据,将结果存到前16位中
|
||||
MD5(decrypt_data, 16, decrypt_data + 16);//将前一MD5的结果再做一次MD5,存到后16位
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// 查找表函数,根据索引值、偏移量以及长度查找序列
|
||||
char* get_sig(uint32_t index, int offset, int length, unsigned char* dst)
|
||||
{
|
||||
uint32_t index_tmp;
|
||||
const unsigned char *base_address;
|
||||
// printf("index = %x\n" ,index);
|
||||
|
||||
if (ENDIANNESS == 'l')
|
||||
{
|
||||
index_tmp = BigLittleSwap32(index); // 小端情况,如PC架构
|
||||
}
|
||||
else
|
||||
{
|
||||
index_tmp = index; // 大端序,如MIPS架构
|
||||
}
|
||||
switch (index_tmp) // this line works in mips.
|
||||
{
|
||||
case 0x15D0EADF:base_address = x15D0EADF; break;
|
||||
case 0x09F40DE7:base_address = x09F40DE7; break;
|
||||
case 0x189DF2CE:base_address = x189DF2CE; break;
|
||||
case 0x1A8AED5C:base_address = x1A8AED5C; break;
|
||||
case 0x2F40F9D8:base_address = x2F40F9D8; break;
|
||||
case 0x45941B98:base_address = x45941B98; break;
|
||||
case 0x359F23C3:base_address = x359F23C3; break;
|
||||
case 0x4167F618:base_address = x4167F618; break;
|
||||
case 0x4BEE2975:base_address = x4BEE2975; break;
|
||||
case 0x57F612DD:base_address = x57F612DD; break;
|
||||
case 0x36D426DD:base_address = x36D426DD; break;
|
||||
case 0x5E51B55F:base_address = x5E51B55F; break;
|
||||
case 0xF245C41D:base_address = xF245C41D; break;
|
||||
case 0x545CEFE0:base_address = x545CEFE0; break;
|
||||
case 0x5E08D0E0:base_address = x5E08D0E0; break;
|
||||
case 0x5E877108:base_address = x5E877108; break;
|
||||
case 0x7130F3A5:base_address = x7130F3A5; break;
|
||||
case 0x6DD9572F:base_address = x6DD9572F; break;
|
||||
case 0x67195BB6:base_address = x67195BB6; break;
|
||||
case 0x70886376:base_address = x70886376; break;
|
||||
case 0x7137CD3A:base_address = x7137CD3A; break;
|
||||
case 0xEF432FB9:base_address = xEF432FB9; break;
|
||||
case 0xED4B7E03:base_address = xED4B7E03; break;
|
||||
case 0xF1C07C91:base_address = xF1C07C91; break;
|
||||
case 0xE45C3124:base_address = xE45C3124; break;
|
||||
case 0xDAB58841:base_address = xDAB58841; break;
|
||||
case 0xDA58A32E:base_address = xDA58A32E; break;
|
||||
case 0xDF977247:base_address = xDF977247; break;
|
||||
case 0xEAE0E002:base_address = xEAE0E002; break;
|
||||
case 0xC3A46827:base_address = xC3A46827; break;
|
||||
case 0xB0F2918A:base_address = xB0F2918A; break;
|
||||
case 0xAF4ED407:base_address = xAF4ED407; break;
|
||||
case 0xBB9EC2E1:base_address = xBB9EC2E1; break;
|
||||
case 0xA8902F8B:base_address = xA8902F8B; break;
|
||||
case 0xA3747988:base_address = xA3747988; break;
|
||||
case 0x84E4BC95:base_address = x84E4BC95; break;
|
||||
case 0x763F4D5B:base_address = x763F4D5B; break;
|
||||
case 0x9F6C10A6:base_address = x9F6C10A6; break;
|
||||
case 0xA9407E26:base_address = xA9407E26; break;
|
||||
case 0xCCF59F07:base_address = xCCF59F07; break;
|
||||
default:
|
||||
printf("lookup dict failed.\n"); // 查表失败
|
||||
base_address = xCCF59F07;
|
||||
break;
|
||||
}
|
||||
memcpy(dst, base_address + offset, length);
|
||||
return dst;
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
#ifndef h3c_AES_MD5_
|
||||
#define h3c_AES_MD5_
|
||||
#include<stdint.h>
|
||||
int h3c_AES_MD5_decryption(unsigned char *decrypt_data, unsigned char *encrypt_data);
|
||||
int test();
|
||||
char* get_sig(uint32_t index, int offset, int length, unsigned char* dst);
|
||||
#endif
|
@ -1,41 +0,0 @@
|
||||
/* dictionary for inode 7.1 E0313 20161019*/
|
||||
const unsigned char x15D0EADF[] = { 0xC8, 0x0F, 0x84, 0xFA, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xEF, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x33, 0xF6, 0x84, 0xD2, 0x74, 0x3B, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x34, 0x8D, 0x34, 0x07, 0x3A, 0xDA, 0x75, 0x65, 0x8D, 0x04, 0x36, 0x8D, 0x7C, 0x07, 0x01, 0x84, 0xD2, 0x74, 0x06, 0x03, 0xF8, 0x46, 0xFF, 0x45, 0x0C, 0x8D, 0x04, 0x3E, 0x8D, 0x3C, 0x06, 0x84, 0xDB, 0x74, 0x09, 0x03, 0xF0, 0x03, 0xFE, 0x8D, 0x34, 0x07, 0x47, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC5, 0x8D, 0x14, 0x06, 0x03, 0xFA, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x46, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x73, 0x8B, 0xFF, 0x8A, 0x19, 0x8D, 0x14, 0x3E, 0x8D, 0x44, 0x10, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x1F, 0x41, 0x80, 0x39, 0x00, 0x74, 0x76, 0x8D, 0x44, 0x10, 0x01, 0x8B, 0x55, 0x0C, 0x8D, 0x34, 0x07, 0x47, 0x89, 0x4D, 0xF8, 0xEB, 0x3D, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x14, 0x78, 0x03, 0xF2, 0x8A, 0x55, 0x0B, 0x3A, 0xDA, 0x75, 0x1B, 0x84, 0xD2, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x3E, 0x8D, 0x44, 0x10, 0x01, 0x84, 0xDB, 0x74, 0x1A, 0x8D, 0x04, 0x3E, 0x8D, 0x3C, 0x06, 0x41, 0xEB, 0x11, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8B, 0xF8, 0x40, 0x46, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x8F, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5F, 0x8B, 0xE5, 0x5D, };
|
||||
const unsigned char x09F40DE7[] = { 0x8B, 0x7D, 0x08, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xF8, 0x0F, 0x84, 0xE6, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xDB, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x8D, 0x70, 0x01, 0x8D, 0x48, 0x02, 0x84, 0xD2, 0x74, 0x41, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x37, 0x3A, 0xDA, 0x75, 0x5E, 0x8D, 0x44, 0x31, 0x01, 0x83, 0xC1, 0x02, 0x8D, 0x1C, 0x31, 0x03, 0xC3, 0x84, 0xD2, 0x74, 0x09, 0x03, 0xC8, 0xFF, 0x45, 0x0C, 0x8D, 0x74, 0x0E, 0x02, 0x8D, 0x0C, 0x30, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x07, 0x8D, 0x14, 0x01, 0x03, 0xF2, 0x41, 0x47, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xBF, 0x03, 0xC8, 0x03, 0xF1, 0x8B, 0x4D, 0x0C, 0x8A, 0x11, 0x84, 0xD2, 0x74, 0x57, 0x8A, 0x0F, 0x8B, 0xD8, 0x40, 0x80, 0xF9, 0x2A, 0x75, 0x1D, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x63, 0x8B, 0x55, 0x0C, 0x03, 0xC6, 0x42, 0x89, 0x7D, 0xF8, 0x89, 0x55, 0xFC, 0xEB, 0x30, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x03, 0xDE, 0x03, 0xC3, 0x3A, 0xCA, 0x75, 0x0F, 0x84, 0xD2, 0x74, 0x04, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xC9, 0x74, 0x13, 0x47, 0xEB, 0x10, 0x8B, 0x4D, 0xFC, 0x8B, 0x7D, 0xF8, 0x8B, 0xC6, 0x46, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x8A, 0x11, 0x84, 0xD2, 0x75, 0xA9, 0x80, 0x3F, 0x2A, 0x75, 0x09, 0x8D, 0x49, 0x00, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0xCC, 0xCC, };
|
||||
const unsigned char x189DF2CE[] = { 0x00, 0x00, 0x8B, 0x4D, 0x0C, 0x3B, 0xC8, 0x0F, 0x84, 0xDD, 0x00, 0x00, 0x00, 0x8A, 0x09, 0x53, 0x56, 0x57, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x8B, 0xF7, 0x84, 0xC9, 0x74, 0x40, 0x8A, 0x1A, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x36, 0x8D, 0x1C, 0x06, 0x03, 0xFB, 0x38, 0x4D, 0x0B, 0x75, 0x57, 0x8D, 0x5C, 0x3E, 0x01, 0x03, 0xC3, 0x84, 0xC9, 0x74, 0x07, 0xFF, 0x45, 0x0C, 0x8D, 0x44, 0x3E, 0x03, 0x8D, 0x34, 0x38, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x08, 0x8D, 0x74, 0x38, 0x01, 0x83, 0xC0, 0x02, 0x42, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0xC0, 0x8D, 0x34, 0x38, 0x8B, 0x45, 0x0C, 0x8A, 0x18, 0x84, 0xDB, 0x74, 0x5C, 0x8A, 0x0A, 0x8D, 0x04, 0x3E, 0x80, 0xF9, 0x2A, 0x75, 0x1E, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x65, 0x8B, 0x4D, 0x0C, 0x83, 0xC6, 0x03, 0x41, 0x89, 0x55, 0xF8, 0x89, 0x4D, 0xFC, 0xEB, 0x34, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xF0, 0x3A, 0xCB, 0x75, 0x15, 0x84, 0xDB, 0x74, 0x07, 0xFF, 0x45, 0x0C, 0x8D, 0x7C, 0x00, 0x01, 0x84, 0xC9, 0x74, 0x16, 0x8D, 0x70, 0x01, 0x42, 0xEB, 0x10, 0x8B, 0x55, 0xF8, 0x8D, 0x70, 0x01, 0x8B, 0x45, 0xFC, 0x89, 0x45, 0x0C, 0x40, 0x89, 0x45, 0xFC, 0x8B, 0x45, 0x0C, 0x8A, 0x18, 0x84, 0xDB, 0x75, 0xA4, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, 0x3A, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x02, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x8B, 0xE5, 0x5D, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x08, 0x8B, };
|
||||
const unsigned char x1A8AED5C[] = { 0x33, 0xC0, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xED, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xE2, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x57, 0x8D, 0x70, 0x01, 0x84, 0xD2, 0x74, 0x40, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x36, 0x8B, 0xF8, 0x40, 0x89, 0x45, 0xF4, 0x3A, 0xDA, 0x75, 0x58, 0x8D, 0x1C, 0x07, 0x8D, 0x74, 0x1E, 0x01, 0x84, 0xD2, 0x74, 0x0A, 0x8B, 0xF8, 0x03, 0xF7, 0xFF, 0x45, 0x0C, 0x8D, 0x04, 0x37, 0x03, 0xF8, 0x03, 0xF7, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x04, 0x46, 0x8B, 0xC6, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC0, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x40, 0x84, 0xDB, 0x74, 0x67, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x11, 0x8B, 0xF8, 0x40, 0x80, 0xFA, 0x2A, 0x75, 0x1B, 0x41, 0x80, 0x39, 0x00, 0x74, 0x6A, 0x8B, 0x55, 0x0C, 0x03, 0xF0, 0x03, 0xC6, 0x89, 0x4D, 0xF8, 0xEB, 0x38, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x34, 0x07, 0x8D, 0x04, 0x37, 0x3A, 0xD3, 0x75, 0x18, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x3C, 0x30, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xD2, 0x74, 0x1A, 0x03, 0xF8, 0x8D, 0x74, 0x3E, 0x01, 0x41, 0xEB, 0x11, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x03, 0xF8, 0x03, 0xF7, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0x9F, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x8B, };
|
||||
const unsigned char x2F40F9D8[] = { 0xF8, 0x89, 0x75, 0xFC, 0x3B, 0xCE, 0x0F, 0x84, 0xFD, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD6, 0x0F, 0x84, 0xF2, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x8D, 0x46, 0x04, 0x84, 0xD2, 0x74, 0x36, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x2C, 0x3A, 0xDA, 0x75, 0x68, 0x8D, 0x58, 0x01, 0x8B, 0xF0, 0x8B, 0xFB, 0x84, 0xD2, 0x74, 0x06, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x47, 0x03, 0xC7, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x06, 0x8D, 0x04, 0x70, 0x8B, 0xF3, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xCA, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x03, 0xF0, 0x8D, 0x3C, 0x06, 0x46, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x7A, 0xEB, 0x06, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x19, 0x8D, 0x14, 0x3E, 0x8D, 0x44, 0x10, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x21, 0x41, 0x80, 0x39, 0x00, 0x74, 0x77, 0x8D, 0x3C, 0x02, 0x8D, 0x14, 0x78, 0x8D, 0x74, 0x16, 0x01, 0x8B, 0x55, 0x0C, 0x89, 0x4D, 0xF8, 0xEB, 0x3C, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8A, 0x55, 0x0B, 0x8D, 0x34, 0x07, 0x47, 0x3A, 0xDA, 0x75, 0x18, 0x84, 0xD2, 0x74, 0x09, 0x8D, 0x14, 0x06, 0x03, 0xFA, 0x46, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x1B, 0x8B, 0xF8, 0x40, 0x46, 0x41, 0xEB, 0x14, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x03, 0xF7, 0x03, 0xC6, 0x8B, 0xF7, 0x47, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x8E, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5B, 0xB8, };
|
||||
const unsigned char x45941B98[] = { 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x3B, 0xDA, 0x0F, 0x84, 0xDA, 0x00, 0x00, 0x00, 0x8A, 0x0B, 0x56, 0x33, 0xF6, 0x8D, 0x42, 0x01, 0x84, 0xC9, 0x74, 0x38, 0x8A, 0x1F, 0x80, 0xFB, 0x2A, 0x74, 0x2E, 0x3A, 0xD9, 0x75, 0x21, 0x46, 0x84, 0xC9, 0x74, 0x03, 0xFF, 0x45, 0x0C, 0x8D, 0x4E, 0x01, 0x8B, 0xC1, 0x84, 0xDB, 0x74, 0x05, 0x8B, 0xC6, 0x8B, 0xF1, 0x47, 0x8B, 0x5D, 0x0C, 0x8A, 0x0B, 0x84, 0xC9, 0x75, 0xD6, 0xEB, 0x0C, 0x5E, 0x5F, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0x5D, 0x0C, 0x8A, 0x0B, 0x03, 0xC6, 0x46, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x74, 0x5E, 0x8A, 0x0F, 0x03, 0xC6, 0x8D, 0x54, 0x02, 0x01, 0x80, 0xF9, 0x2A, 0x75, 0x14, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x6B, 0x8B, 0xC2, 0x42, 0x83, 0xC6, 0x02, 0x89, 0x7D, 0xF8, 0x8D, 0x4B, 0x01, 0xEB, 0x31, 0x8A, 0x5D, 0x0B, 0x8B, 0xD0, 0x8D, 0x04, 0x16, 0x3A, 0xCB, 0x75, 0x16, 0x84, 0xDB, 0x8B, 0x5D, 0x0C, 0x74, 0x05, 0x46, 0x43, 0x89, 0x5D, 0x0C, 0x84, 0xC9, 0x74, 0x18, 0x8B, 0xF0, 0x40, 0x47, 0xEB, 0x12, 0x8B, 0x4D, 0xFC, 0x8B, 0x7D, 0xF8, 0x8B, 0xD9, 0x8B, 0xF0, 0x40, 0x89, 0x5D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8A, 0x0B, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x75, 0xA2, 0x80, 0x3F, 0x2A, 0x75, 0x0D, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5E, 0x5F, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5F, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x08, 0x8B, 0x4D, 0x08, };
|
||||
const unsigned char x359F23C3[] = { 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xEB, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xE0, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x84, 0xD2, 0x74, 0x3B, 0x90, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x33, 0x8B, 0xF8, 0x3A, 0xDA, 0x75, 0x5E, 0x47, 0x8D, 0x44, 0x46, 0x01, 0x84, 0xD2, 0x74, 0x0E, 0x8D, 0x14, 0x37, 0x03, 0xC2, 0x03, 0xF8, 0xFF, 0x45, 0x0C, 0x8D, 0x74, 0x3E, 0x01, 0x8B, 0xF8, 0x40, 0x84, 0xDB, 0x74, 0x06, 0x03, 0xF8, 0x03, 0xF7, 0x40, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC6, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x8B, 0xF8, 0x40, 0x84, 0xDB, 0x74, 0x6C, 0x8D, 0x14, 0x07, 0x03, 0xF2, 0x8A, 0x11, 0x80, 0xFA, 0x2A, 0x75, 0x22, 0x41, 0x80, 0x39, 0x00, 0x74, 0x73, 0x8D, 0x54, 0x07, 0x01, 0x8D, 0x74, 0x56, 0x01, 0x8B, 0x55, 0x0C, 0x83, 0xC7, 0x02, 0x89, 0x4D, 0xF8, 0xEB, 0x3A, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xF8, 0x40, 0x89, 0x45, 0x08, 0x3A, 0xD3, 0x75, 0x17, 0x84, 0xDB, 0x74, 0x09, 0x8B, 0x7D, 0x08, 0x8B, 0xC6, 0x46, 0xFF, 0x45, 0x0C, 0x84, 0xD2, 0x74, 0x1A, 0x8B, 0xF8, 0x40, 0x41, 0xEB, 0x14, 0x8B, 0x55, 0xFC, 0x8D, 0x0C, 0x07, 0x8D, 0x74, 0x0E, 0x01, 0x8B, 0x4D, 0xF8, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0x94, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0xCC, 0xCC, };
|
||||
const unsigned char x4167F618[] = { 0xEC, 0x83, 0xEC, 0x08, 0x8B, 0x4D, 0x08, 0x33, 0xC0, 0x56, 0x33, 0xF6, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xE4, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xD9, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x8D, 0x78, 0x01, 0x84, 0xD2, 0x74, 0x44, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x3A, 0x8D, 0x1C, 0x7E, 0x03, 0xC3, 0x38, 0x55, 0x0B, 0x75, 0x51, 0x8D, 0x1C, 0x38, 0x03, 0xF3, 0x40, 0x84, 0xD2, 0x74, 0x09, 0x40, 0x03, 0xF0, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x30, 0x8D, 0x14, 0x38, 0x03, 0xF2, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x08, 0x8B, 0xC6, 0x46, 0x03, 0xC6, 0x8B, 0xFE, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xBC, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x40, 0x84, 0xDB, 0x74, 0x56, 0x8A, 0x11, 0x03, 0xC6, 0x80, 0xFA, 0x2A, 0x75, 0x17, 0x41, 0x80, 0x39, 0x00, 0x74, 0x65, 0x8B, 0x55, 0x0C, 0x89, 0x4D, 0xF8, 0xEB, 0x2E, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x3A, 0xD3, 0x75, 0x18, 0x84, 0xDB, 0x74, 0x0B, 0xFF, 0x45, 0x0C, 0x8D, 0x5C, 0x00, 0x01, 0x8D, 0x74, 0x1E, 0x01, 0x84, 0xD2, 0x74, 0x16, 0x46, 0x40, 0x41, 0xEB, 0x11, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8D, 0x44, 0x30, 0x01, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0xAA, 0x80, 0x39, 0x2A, 0x75, 0x0B, 0xEB, 0x03, 0x8D, 0x49, 0x00, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, };
|
||||
const unsigned char x4BEE2975[] = { 0x8B, 0x4D, 0x08, 0x33, 0xC0, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xFA, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xEF, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x57, 0x8B, 0xF8, 0x8D, 0x70, 0x03, 0x84, 0xD2, 0x74, 0x39, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x32, 0x8D, 0x3C, 0x30, 0x3A, 0xDA, 0x75, 0x5C, 0x8D, 0x47, 0x01, 0x8D, 0x7C, 0x7E, 0x01, 0x84, 0xD2, 0x74, 0x06, 0x8B, 0xC7, 0x47, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x30, 0x03, 0xFA, 0x40, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC7, 0x8D, 0x14, 0x38, 0x03, 0xF2, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x40, 0x84, 0xD2, 0x74, 0x6F, 0x90, 0x8D, 0x1C, 0x7E, 0x03, 0xC3, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x75, 0x1E, 0x41, 0x80, 0x39, 0x00, 0x74, 0x75, 0x8D, 0x14, 0x38, 0x8D, 0x74, 0x16, 0x01, 0x8B, 0x55, 0x0C, 0x89, 0x4D, 0xF8, 0xEB, 0x40, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xFE, 0x46, 0x40, 0x89, 0x75, 0x08, 0x3A, 0xDA, 0x75, 0x19, 0x84, 0xD2, 0x74, 0x09, 0x8D, 0x14, 0x38, 0x03, 0xF2, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x1F, 0x8D, 0x14, 0x7E, 0x03, 0xC2, 0x41, 0xEB, 0x17, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x03, 0xC7, 0x03, 0xF0, 0x8D, 0x04, 0x37, 0x8B, 0x7D, 0x08, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0x92, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, };
|
||||
const unsigned char x57F612DD[] = { 0x4D, 0x08, 0x33, 0xD2, 0x57, 0x89, 0x55, 0xF8, 0x89, 0x55, 0xFC, 0x8D, 0x42, 0x01, 0x3B, 0xCA, 0x0F, 0x84, 0xE7, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xFA, 0x0F, 0x84, 0xDC, 0x00, 0x00, 0x00, 0x8A, 0x17, 0x53, 0x56, 0x8B, 0xF0, 0x84, 0xD2, 0x74, 0x2D, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x26, 0x8B, 0xF0, 0x40, 0x3A, 0xDA, 0x75, 0x55, 0x84, 0xD2, 0x74, 0x07, 0xFF, 0x45, 0x0C, 0x8D, 0x44, 0x36, 0x01, 0x8B, 0xF0, 0x40, 0x84, 0xDB, 0x74, 0x04, 0x8B, 0xF0, 0x40, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xD3, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x8D, 0x3C, 0x06, 0x46, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x70, 0x90, 0x8A, 0x19, 0x8D, 0x14, 0x37, 0x8D, 0x44, 0x10, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x20, 0x41, 0x80, 0x39, 0x00, 0x74, 0x74, 0x8D, 0x3C, 0x06, 0x46, 0x8D, 0x14, 0x37, 0x03, 0xC2, 0x8B, 0x55, 0x0C, 0x89, 0x4D, 0xF8, 0xEB, 0x39, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xC2, 0x8A, 0x55, 0x0B, 0x8D, 0x34, 0x07, 0x3A, 0xDA, 0x75, 0x16, 0x84, 0xD2, 0x74, 0x07, 0x8B, 0xF0, 0x40, 0x47, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x1A, 0x8D, 0x3C, 0x06, 0x46, 0x41, 0xEB, 0x13, 0x8B, 0x55, 0xFC, 0x8D, 0x0C, 0x07, 0x03, 0xF1, 0x8B, 0x4D, 0xF8, 0x89, 0x55, 0x0C, 0x47, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x91, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x5F, };
|
||||
const unsigned char x36D426DD[] = { 0x57, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xD0, 0x0F, 0x84, 0xFD, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xF8, 0x0F, 0x84, 0xF2, 0x00, 0x00, 0x00, 0x53, 0x8A, 0x1F, 0x56, 0x8D, 0x48, 0x02, 0x8D, 0x70, 0x0D, 0x8D, 0x41, 0x05, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x74, 0x3B, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1A, 0x80, 0xFB, 0x2A, 0x74, 0x2D, 0x8A, 0x45, 0x0B, 0x3A, 0xD8, 0x75, 0x59, 0x83, 0xC1, 0x02, 0x84, 0xC0, 0x74, 0x04, 0x41, 0xFF, 0x45, 0x0C, 0x8D, 0x04, 0x31, 0x41, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x34, 0x08, 0x8D, 0x0C, 0x30, 0x42, 0x8B, 0x7D, 0x0C, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x75, 0xCC, 0x8D, 0x34, 0x08, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x8D, 0x3C, 0x30, 0x40, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x74, 0x6B, 0x8A, 0x1A, 0x8D, 0x0C, 0x38, 0x8D, 0x74, 0x0E, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x1B, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x70, 0x8D, 0x74, 0x0E, 0x01, 0x8B, 0x4D, 0x0C, 0x89, 0x55, 0xF8, 0xEB, 0x3B, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8A, 0x4D, 0x0B, 0x8B, 0xC7, 0x47, 0x3A, 0xD9, 0x75, 0x1A, 0x84, 0xC9, 0x74, 0x09, 0xFF, 0x45, 0x0C, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x84, 0xDB, 0x74, 0x1B, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x42, 0xEB, 0x12, 0x8B, 0x4D, 0xFC, 0x8D, 0x14, 0x7E, 0x03, 0xC2, 0x8B, 0x55, 0xF8, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x75, 0x95, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, 0x3A, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x02, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, };
|
||||
const unsigned char x5E51B55F[] = { 0x7D, 0x08, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x8D, 0x70, 0x01, 0x3B, 0xF8, 0x0F, 0x84, 0xF3, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xE8, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x8D, 0x48, 0x02, 0x84, 0xD2, 0x74, 0x40, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x36, 0x8B, 0xF0, 0x40, 0x3A, 0xDA, 0x75, 0x6A, 0x8D, 0x1C, 0x06, 0x8D, 0x4C, 0x19, 0x01, 0x84, 0xD2, 0x74, 0x06, 0x8B, 0xF0, 0x40, 0xFF, 0x45, 0x0C, 0x80, 0x7D, 0x0B, 0x00, 0x8D, 0x14, 0x06, 0x8D, 0x4C, 0x11, 0x01, 0x74, 0x08, 0x8D, 0x70, 0x01, 0x8D, 0x44, 0x41, 0x01, 0x47, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC0, 0x8D, 0x14, 0x0E, 0x46, 0x03, 0xC2, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x03, 0xCE, 0x03, 0xC1, 0x8D, 0x4C, 0x06, 0x01, 0x8D, 0x44, 0x0E, 0x02, 0x84, 0xD2, 0x74, 0x5E, 0x8B, 0xFF, 0x8A, 0x1F, 0x8B, 0xF0, 0x40, 0x89, 0x75, 0x08, 0x80, 0xFB, 0x2A, 0x75, 0x1A, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x62, 0x8B, 0x55, 0x0C, 0x8B, 0xC1, 0x41, 0x89, 0x7D, 0xF8, 0xEB, 0x31, 0x5B, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x03, 0xF0, 0x03, 0xCE, 0x3A, 0xDA, 0x75, 0x16, 0x84, 0xD2, 0x74, 0x0A, 0x8B, 0x45, 0x08, 0xFF, 0x45, 0x0C, 0x8D, 0x44, 0x08, 0x01, 0x84, 0xDB, 0x74, 0x12, 0x40, 0x47, 0xEB, 0x0E, 0x8B, 0x55, 0xFC, 0x8B, 0x7D, 0xF8, 0x40, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xA4, 0x80, 0x3F, 0x2A, 0x75, 0x06, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5B, 0x5F, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5B, 0x5F, 0xB8, 0x01, 0x00, 0x00, };
|
||||
const unsigned char xF245C41D[] = { 0xF6, 0x57, 0x33, 0xFF, 0x89, 0x75, 0xF8, 0x89, 0x75, 0xFC, 0x3B, 0xCE, 0x0F, 0x84, 0xF3, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD6, 0x0F, 0x84, 0xE8, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x8D, 0x46, 0x01, 0x84, 0xD2, 0x74, 0x3D, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x36, 0x3A, 0xDA, 0x75, 0x66, 0x8D, 0x7C, 0x30, 0x01, 0x83, 0xC0, 0x02, 0x84, 0xD2, 0x74, 0x0F, 0x8D, 0x14, 0x38, 0x03, 0xD6, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x56, 0x8D, 0x44, 0x10, 0x01, 0x8D, 0x3C, 0x30, 0x40, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC3, 0x8B, 0x5D, 0x0C, 0x8D, 0x14, 0x38, 0x03, 0xF2, 0x8A, 0x13, 0x40, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x6A, 0x8A, 0x11, 0x8B, 0xFE, 0x46, 0x80, 0xFA, 0x2A, 0x75, 0x21, 0x41, 0x80, 0x39, 0x00, 0x74, 0x73, 0x8D, 0x74, 0x47, 0x02, 0x03, 0xF6, 0x83, 0xC0, 0x02, 0x43, 0x89, 0x4D, 0xF8, 0x89, 0x5D, 0xFC, 0xEB, 0x3C, 0x5B, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x5C, 0x30, 0x01, 0x03, 0xFB, 0x8A, 0x5D, 0x0B, 0x83, 0xC0, 0x02, 0x3A, 0xD3, 0x75, 0x13, 0x84, 0xDB, 0x74, 0x08, 0x8D, 0x1C, 0x7E, 0x03, 0xC3, 0xFF, 0x45, 0x0C, 0x84, 0xD2, 0x74, 0x13, 0x41, 0xEB, 0x0D, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8D, 0x04, 0x37, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x96, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5B, 0x5F, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5B, 0x5F, 0xB8, 0x01, 0x00, 0x00, 0x00, };
|
||||
const unsigned char x545CEFE0[] = { 0xC9, 0x57, 0x8B, 0x7D, 0x08, 0x33, 0xF6, 0x89, 0x4D, 0xF8, 0x89, 0x4D, 0xFC, 0x3B, 0xF9, 0x0F, 0x84, 0xE7, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x3B, 0xD9, 0x0F, 0x84, 0xDC, 0x00, 0x00, 0x00, 0x8A, 0x13, 0x8D, 0x41, 0x01, 0x84, 0xD2, 0x74, 0x41, 0x8A, 0x1F, 0x80, 0xFB, 0x2A, 0x74, 0x37, 0x8D, 0x34, 0x01, 0x3A, 0xDA, 0x0F, 0x85, 0xC1, 0x00, 0x00, 0x00, 0x84, 0xD2, 0x74, 0x05, 0x03, 0xCE, 0xFF, 0x45, 0x0C, 0x8B, 0xC6, 0x8D, 0x74, 0x71, 0x02, 0x83, 0xC1, 0x02, 0x8D, 0x14, 0x01, 0x8D, 0x74, 0x16, 0x01, 0x84, 0xDB, 0x74, 0x04, 0x03, 0xF2, 0x41, 0x47, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x84, 0xD2, 0x75, 0xC4, 0xEB, 0x03, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x03, 0xCE, 0x03, 0xC1, 0x84, 0xD2, 0x74, 0x63, 0x8D, 0x49, 0x00, 0x8D, 0x0C, 0x30, 0x89, 0x4D, 0x08, 0x8A, 0x0F, 0x40, 0x80, 0xF9, 0x2A, 0x75, 0x11, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x65, 0x8D, 0x53, 0x01, 0x89, 0x7D, 0xF8, 0x89, 0x55, 0xFC, 0xEB, 0x3B, 0xFF, 0x45, 0x08, 0x8B, 0xC6, 0x46, 0x3A, 0xCA, 0x75, 0x20, 0x8B, 0x5D, 0x0C, 0x84, 0xD2, 0x74, 0x04, 0x43, 0x89, 0x5D, 0x0C, 0x84, 0xC9, 0x74, 0x22, 0x8B, 0x4D, 0x08, 0x8D, 0x14, 0x31, 0x03, 0xC2, 0x03, 0xC8, 0x8D, 0x74, 0x0E, 0x02, 0x47, 0xEB, 0x11, 0x8B, 0x4D, 0xFC, 0x8B, 0x7D, 0xF8, 0x8B, 0xD9, 0x41, 0x8B, 0xC6, 0x89, 0x5D, 0x0C, 0x89, 0x4D, 0xFC, 0x8A, 0x13, 0x84, 0xD2, 0x75, 0xA0, 0x80, 0x3F, 0x2A, 0x75, 0x06, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0x33, 0xC0, };
|
||||
const unsigned char x5E08D0E0[] = { 0x4D, 0x08, 0x33, 0xC0, 0x56, 0x89, 0x45, 0xF4, 0x89, 0x45, 0xFC, 0x8D, 0x70, 0x01, 0x3B, 0xC8, 0x0F, 0x84, 0x07, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xFC, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x8D, 0x46, 0x01, 0x84, 0xD2, 0x74, 0x47, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x3D, 0x8D, 0x3C, 0x06, 0x46, 0x3A, 0xDA, 0x75, 0x67, 0x8D, 0x1C, 0x70, 0x03, 0xFB, 0x8D, 0x1C, 0x07, 0x03, 0xF3, 0x84, 0xD2, 0x74, 0x0B, 0xFF, 0x45, 0x0C, 0x8D, 0x54, 0x37, 0x01, 0x8D, 0x44, 0x10, 0x01, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x0D, 0x8D, 0x54, 0x77, 0x01, 0x03, 0xD6, 0x03, 0xD0, 0x8D, 0x44, 0x50, 0x02, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xB9, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x03, 0xF0, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x77, 0x8A, 0x11, 0x8B, 0xF8, 0x40, 0x46, 0x80, 0xFA, 0x2A, 0x75, 0x22, 0x41, 0x80, 0x39, 0x00, 0x0F, 0x84, 0x7B, 0x00, 0x00, 0x00, 0x8D, 0x14, 0x3E, 0x03, 0xC2, 0x46, 0x43, 0x89, 0x4D, 0xF4, 0x89, 0x5D, 0xFC, 0xEB, 0x47, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x1C, 0x3E, 0x89, 0x5D, 0xF8, 0x8D, 0x44, 0x18, 0x01, 0x8A, 0x5D, 0x0B, 0x3A, 0xD3, 0x75, 0x1D, 0x84, 0xDB, 0x74, 0x0F, 0x03, 0x45, 0xF8, 0x46, 0x03, 0xC6, 0x46, 0x03, 0xC6, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x06, 0x84, 0xD2, 0x74, 0x16, 0x8D, 0x34, 0x07, 0x41, 0xEB, 0x10, 0x8B, 0x55, 0xFC, 0x8B, 0x45, 0xF8, 0x8B, 0x4D, 0xF4, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x89, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, };
|
||||
const unsigned char x5E877108[] = { 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xF9, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xEE, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x57, 0x33, 0xFF, 0x8D, 0x70, 0x01, 0x84, 0xD2, 0x74, 0x43, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x3C, 0x40, 0x3A, 0xDA, 0x75, 0x68, 0x8D, 0x7C, 0x06, 0x01, 0x83, 0xC6, 0x02, 0x84, 0xD2, 0x74, 0x0D, 0xFF, 0x45, 0x0C, 0x8B, 0xF7, 0x8D, 0x7C, 0x7F, 0x01, 0x8D, 0x44, 0x3F, 0x01, 0x8D, 0x14, 0x3E, 0x8D, 0x44, 0x10, 0x01, 0x84, 0xDB, 0x74, 0x0B, 0x8B, 0xF7, 0x8D, 0x7C, 0x7F, 0x01, 0x8D, 0x44, 0x3F, 0x01, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xBD, 0x8D, 0x14, 0x3E, 0x03, 0xC2, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x46, 0x84, 0xD2, 0x74, 0x69, 0x8A, 0x19, 0x03, 0xF7, 0x8D, 0x44, 0x30, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x1E, 0x41, 0x80, 0x39, 0x00, 0x74, 0x6F, 0x8B, 0x55, 0x0C, 0x8D, 0x74, 0x07, 0x01, 0x8B, 0xF8, 0x40, 0x89, 0x4D, 0xF8, 0xEB, 0x3A, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x34, 0x07, 0x47, 0x3A, 0xDA, 0x75, 0x1A, 0x84, 0xD2, 0x74, 0x09, 0xFF, 0x45, 0x0C, 0x8D, 0x04, 0x3E, 0x8D, 0x3C, 0x06, 0x84, 0xDB, 0x74, 0x1C, 0x8D, 0x14, 0x3E, 0x03, 0xC2, 0x46, 0x41, 0xEB, 0x13, 0x8B, 0x55, 0xFC, 0x8D, 0x0C, 0x3E, 0x03, 0xC1, 0x8B, 0x4D, 0xF8, 0x46, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0x97, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, };
|
||||
const unsigned char x7130F3A5[] = { 0x33, 0xC0, 0x57, 0x89, 0x45, 0xF4, 0x89, 0x45, 0xF8, 0x3B, 0xD0, 0x0F, 0x84, 0x26, 0x01, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xF8, 0x0F, 0x84, 0x1B, 0x01, 0x00, 0x00, 0x53, 0x8A, 0x1F, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x56, 0x8B, 0xF0, 0x8D, 0x48, 0x01, 0x88, 0x5D, 0xFF, 0x84, 0xDB, 0x74, 0x50, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1A, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x40, 0x8A, 0x5D, 0xFF, 0x8D, 0x0C, 0x4E, 0x03, 0xC1, 0x38, 0x5D, 0x0B, 0x75, 0x6F, 0x8B, 0xCE, 0x46, 0x8D, 0x7C, 0x30, 0x01, 0x03, 0xCF, 0x83, 0xC0, 0x02, 0x84, 0xDB, 0x74, 0x06, 0x8B, 0xC1, 0x41, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x30, 0x03, 0xCF, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x05, 0x8B, 0xCE, 0x46, 0x40, 0x42, 0x8B, 0x7D, 0x0C, 0x8A, 0x1F, 0x88, 0x5D, 0xFF, 0x84, 0xDB, 0x75, 0xB6, 0x8D, 0x34, 0x08, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x8D, 0x3C, 0x30, 0x84, 0xC9, 0x74, 0x76, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1A, 0x80, 0xFB, 0x2A, 0x75, 0x28, 0x42, 0x80, 0x3A, 0x00, 0x0F, 0x84, 0x83, 0x00, 0x00, 0x00, 0x8D, 0x0C, 0x38, 0x03, 0xF1, 0x40, 0x8D, 0x0C, 0x38, 0x8D, 0x74, 0x0E, 0x01, 0x8B, 0x4D, 0x0C, 0x89, 0x55, 0xF4, 0xEB, 0x3C, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x3A, 0xD9, 0x75, 0x19, 0x84, 0xC9, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x0C, 0x38, 0x8D, 0x74, 0x0E, 0x01, 0x84, 0xDB, 0x74, 0x1B, 0x8D, 0x04, 0x37, 0x47, 0x42, 0xEB, 0x14, 0x8B, 0x4D, 0xF8, 0x8D, 0x14, 0x38, 0x8D, 0x74, 0x16, 0x01, 0x8B, 0x55, 0xF4, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xF8, 0x8B, 0x4D, 0x0C, };
|
||||
const unsigned char x6DD9572F[] = { 0x89, 0x75, 0xFC, 0x3B, 0xCE, 0x0F, 0x84, 0x06, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD6, 0x0F, 0x84, 0xFB, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x8D, 0x46, 0x01, 0x8D, 0x7E, 0x02, 0x84, 0xD2, 0x74, 0x4A, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x40, 0x8D, 0x1C, 0x38, 0x8D, 0x74, 0x1E, 0x01, 0x38, 0x55, 0x0B, 0x75, 0x68, 0x8D, 0x1C, 0x7E, 0x03, 0xC3, 0x84, 0xD2, 0x74, 0x0A, 0x8D, 0x44, 0x37, 0x01, 0x8B, 0xFE, 0x46, 0xFF, 0x45, 0x0C, 0x80, 0x7D, 0x0B, 0x00, 0x8D, 0x14, 0x38, 0x8D, 0x74, 0x16, 0x01, 0x74, 0x0B, 0x03, 0xF2, 0x40, 0x8D, 0x14, 0x38, 0x8D, 0x74, 0x16, 0x01, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xB6, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x8B, 0xFE, 0x46, 0x40, 0x84, 0xDB, 0x74, 0x6C, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x14, 0x30, 0x03, 0xFA, 0x8A, 0x11, 0x40, 0x80, 0xFA, 0x2A, 0x75, 0x1D, 0x41, 0x80, 0x39, 0x00, 0x74, 0x71, 0x8B, 0x55, 0x0C, 0x03, 0xC7, 0x8D, 0x74, 0x06, 0x01, 0x89, 0x4D, 0xF8, 0xEB, 0x35, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x3A, 0xD3, 0x75, 0x19, 0x84, 0xDB, 0x74, 0x08, 0x8D, 0x1C, 0x7E, 0x03, 0xC3, 0xFF, 0x45, 0x0C, 0x84, 0xD2, 0x74, 0x19, 0x8D, 0x14, 0x38, 0x03, 0xF2, 0x40, 0x41, 0xEB, 0x10, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x89, 0x55, 0x0C, 0x8B, 0xC7, 0x47, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0x9A, 0x80, 0x39, 0x2A, 0x75, 0x0B, 0xEB, 0x03, 0x8D, 0x49, 0x00, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, };
|
||||
const unsigned char x67195BB6[] = { 0x0C, 0x8B, 0x4D, 0x08, 0x33, 0xC0, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xF8, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xED, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x57, 0x8D, 0x70, 0x01, 0x84, 0xD2, 0x74, 0x43, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x39, 0x8D, 0x3C, 0x30, 0x3A, 0xDA, 0x75, 0x5F, 0x8D, 0x1C, 0x37, 0x47, 0x8D, 0x44, 0x18, 0x01, 0x84, 0xD2, 0x74, 0x09, 0x8D, 0x78, 0x01, 0x8B, 0xC6, 0x46, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x37, 0x03, 0xC2, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x09, 0x8D, 0x74, 0x07, 0x02, 0x8D, 0x44, 0x37, 0x02, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xBD, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x8B, 0xF8, 0x40, 0x84, 0xD2, 0x74, 0x6D, 0x90, 0x8D, 0x1C, 0x46, 0x03, 0xFB, 0x80, 0x39, 0x2A, 0x75, 0x1F, 0x41, 0x80, 0x39, 0x00, 0x74, 0x75, 0x8B, 0x55, 0x0C, 0x03, 0xF7, 0x47, 0x03, 0xF7, 0x8D, 0x04, 0x37, 0x89, 0x4D, 0xF8, 0xEB, 0x3F, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x1C, 0x07, 0x89, 0x5D, 0xF4, 0x8D, 0x74, 0x1E, 0x01, 0x8A, 0x19, 0x3A, 0xDA, 0x75, 0x1A, 0x84, 0xD2, 0x74, 0x09, 0x8B, 0x75, 0xF4, 0xFF, 0x45, 0x0C, 0x8D, 0x04, 0x37, 0x84, 0xDB, 0x74, 0x19, 0x8D, 0x14, 0x37, 0x03, 0xC2, 0x47, 0x41, 0xEB, 0x10, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8B, 0xF8, 0x40, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0x94, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, };
|
||||
const unsigned char x70886376[] = { 0x45, 0xFC, 0x3B, 0xF8, 0x0F, 0x84, 0xE9, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xDE, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x8D, 0x70, 0x01, 0x84, 0xD2, 0x74, 0x47, 0x8A, 0x1F, 0x80, 0xFB, 0x2A, 0x74, 0x40, 0x03, 0xC6, 0x8D, 0x44, 0x01, 0x01, 0x89, 0x45, 0x08, 0x3A, 0xDA, 0x75, 0x62, 0x8B, 0xC6, 0x8D, 0x4E, 0x01, 0x84, 0xD2, 0x74, 0x0B, 0x8B, 0xC1, 0x8B, 0x4D, 0x08, 0x03, 0xC8, 0x40, 0xFF, 0x45, 0x0C, 0x03, 0xC8, 0x8D, 0x34, 0x08, 0x84, 0xDB, 0x74, 0x0D, 0x8D, 0x14, 0x30, 0x03, 0xCA, 0x8D, 0x74, 0x08, 0x01, 0x83, 0xC0, 0x02, 0x47, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xB9, 0x8B, 0x55, 0x0C, 0x03, 0xC8, 0x03, 0xF1, 0x8A, 0x0A, 0x40, 0x84, 0xC9, 0x74, 0x59, 0x8A, 0x1F, 0x8D, 0x14, 0x30, 0x8D, 0x34, 0x10, 0x80, 0xFB, 0x2A, 0x75, 0x1D, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x5F, 0x8B, 0x4D, 0x0C, 0x8D, 0x46, 0x01, 0x83, 0xC6, 0x02, 0x89, 0x7D, 0xF8, 0xEB, 0x2B, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x04, 0x16, 0x46, 0x3A, 0xD9, 0x75, 0x0E, 0x84, 0xC9, 0x74, 0x03, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x13, 0x47, 0xEB, 0x10, 0x8B, 0x4D, 0xFC, 0x8B, 0x7D, 0xF8, 0x8B, 0xC6, 0x46, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x0A, 0x84, 0xC9, 0x75, 0xA7, 0x80, 0x3F, 0x2A, 0x75, 0x06, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0xCC, 0xCC, 0xCC, 0xCC, 0x55, 0x8B, };
|
||||
const unsigned char x7137CD3A[] = { 0x00, 0x8B, 0x4D, 0x0C, 0x3B, 0xCE, 0x0F, 0x84, 0x06, 0x01, 0x00, 0x00, 0x8A, 0x09, 0x53, 0x8D, 0x46, 0x01, 0x84, 0xC9, 0x74, 0x42, 0x8A, 0x1A, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x38, 0x8B, 0xC6, 0x3A, 0xD9, 0x75, 0x72, 0x8D, 0x74, 0x77, 0x01, 0x40, 0x8D, 0x1C, 0x30, 0x8D, 0x7C, 0x1F, 0x01, 0x84, 0xC9, 0x74, 0x06, 0x8B, 0xC6, 0x46, 0xFF, 0x45, 0x0C, 0x8D, 0x0C, 0x38, 0x03, 0xF1, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x07, 0x8D, 0x0C, 0x38, 0x03, 0xF1, 0x40, 0x42, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0xBE, 0x8B, 0x4D, 0x0C, 0x80, 0x39, 0x00, 0x8D, 0x3C, 0x30, 0x8D, 0x34, 0x38, 0x74, 0x79, 0x8A, 0x1A, 0x8D, 0x0C, 0x30, 0x8D, 0x4C, 0x0F, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x2D, 0x42, 0x80, 0x3A, 0x00, 0x0F, 0x84, 0x88, 0x00, 0x00, 0x00, 0x8D, 0x3C, 0x71, 0x03, 0xC7, 0x8D, 0x3C, 0x30, 0x03, 0xCF, 0x40, 0x8D, 0x3C, 0x30, 0x8D, 0x7C, 0x39, 0x01, 0x8B, 0x4D, 0x0C, 0x89, 0x55, 0xF8, 0xEB, 0x3B, 0x5B, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x3C, 0x30, 0x8D, 0x7C, 0x39, 0x01, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x3A, 0xD9, 0x75, 0x15, 0x84, 0xC9, 0x74, 0x07, 0x8D, 0x04, 0x3E, 0x46, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x17, 0x8B, 0xC6, 0x46, 0x42, 0xEB, 0x11, 0x8B, 0x4D, 0xFC, 0x8B, 0x55, 0xF8, 0x8D, 0x04, 0x3E, 0x46, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x80, 0x39, 0x00, 0x75, 0x87, 0x40, 0x80, 0x3A, 0x2A, 0x75, 0x13, 0x8D, 0x4C, 0x38, 0x01, 0x83, 0xC0, 0x02, 0x03, 0xC8, 0x42, 0x80, 0x3A, 0x2A, 0x8D, 0x7C, 0x0F, 0x01, 0x74, 0xED, 0x33, 0xC0, 0x38, 0x02, 0x5B, 0x5F, 0x0F, 0x94, };
|
||||
const unsigned char xEF432FB9[] = { 0x8B, 0x4D, 0x08, 0x33, 0xC0, 0x56, 0x33, 0xF6, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xE4, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xD9, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x84, 0xD2, 0x74, 0x3D, 0x90, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x35, 0x8D, 0x7C, 0x06, 0x01, 0x3A, 0xDA, 0x75, 0x56, 0x8B, 0xF0, 0x40, 0x84, 0xD2, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x37, 0x8D, 0x44, 0x10, 0x01, 0x8D, 0x14, 0x37, 0x03, 0xC2, 0x84, 0xDB, 0x74, 0x0A, 0x8B, 0xF0, 0x40, 0x03, 0xF8, 0x8D, 0x74, 0x3E, 0x02, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC4, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x46, 0x84, 0xD2, 0x74, 0x60, 0x8A, 0x19, 0x8B, 0xFE, 0x80, 0xFB, 0x2A, 0x75, 0x1F, 0x41, 0x80, 0x39, 0x00, 0x74, 0x6F, 0x8B, 0x55, 0x0C, 0x8D, 0x74, 0x76, 0x01, 0x8D, 0x44, 0x36, 0x01, 0x89, 0x4D, 0xF8, 0xEB, 0x34, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x70, 0x01, 0x83, 0xC0, 0x02, 0x3A, 0xDA, 0x75, 0x14, 0x84, 0xD2, 0x74, 0x06, 0x8B, 0xF0, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x17, 0x40, 0x8B, 0xF0, 0x41, 0xEB, 0x11, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8D, 0x74, 0x07, 0x02, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xA0, 0x80, 0x39, 0x2A, 0x75, 0x0B, 0xEB, 0x03, 0x8D, 0x49, 0x00, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, };
|
||||
const unsigned char xED4B7E03[] = { 0x4D, 0x08, 0x57, 0x33, 0xFF, 0x89, 0x7D, 0xF8, 0x89, 0x7D, 0xFC, 0x3B, 0xCF, 0x0F, 0x84, 0x06, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD7, 0x0F, 0x84, 0xFB, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x8D, 0x47, 0x01, 0x8D, 0x77, 0x02, 0x84, 0xD2, 0x74, 0x4B, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x41, 0x8D, 0x34, 0x38, 0x3A, 0xDA, 0x75, 0x6B, 0x8D, 0x1C, 0x77, 0x8D, 0x44, 0x18, 0x01, 0x84, 0xD2, 0x74, 0x0C, 0x8D, 0x3C, 0x30, 0x8D, 0x34, 0x38, 0x03, 0xF6, 0x40, 0xFF, 0x45, 0x0C, 0x80, 0x7D, 0x0B, 0x00, 0x8D, 0x14, 0x30, 0x8D, 0x7C, 0x17, 0x01, 0x74, 0x0D, 0x8D, 0x34, 0x3A, 0x8D, 0x54, 0x38, 0x01, 0x03, 0xF2, 0x83, 0xC0, 0x02, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xB5, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x8D, 0x3C, 0x30, 0x8D, 0x34, 0x38, 0x84, 0xD2, 0x74, 0x6B, 0x8D, 0x49, 0x00, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x75, 0x21, 0x41, 0x80, 0x39, 0x00, 0x74, 0x77, 0x8D, 0x14, 0x77, 0x8D, 0x44, 0x10, 0x02, 0x8B, 0x55, 0x0C, 0x8B, 0xF7, 0x47, 0x89, 0x4D, 0xF8, 0xEB, 0x3C, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xC6, 0x46, 0x89, 0x75, 0x08, 0x3A, 0xDA, 0x75, 0x19, 0x84, 0xD2, 0x74, 0x0A, 0x03, 0xC7, 0x03, 0xF0, 0x8B, 0x45, 0x08, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x1B, 0x8D, 0x34, 0x38, 0x40, 0x41, 0xEB, 0x14, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x03, 0xC6, 0x03, 0xF8, 0x8B, 0x45, 0x08, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0x98, 0x80, 0x39, 0x2A, 0x75, 0x09, 0x8D, 0x49, 0x00, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, };
|
||||
const unsigned char xF1C07C91[] = { 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x0C, 0x06, 0x03, 0xF9, 0x46, 0x42, 0x03, 0xF0, 0x03, 0xFE, 0xEB, 0x0D, 0x8B, 0x4D, 0xFC, 0x8B, 0x55, 0xF8, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0x9F, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, 0x3A, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x02, 0x5B, 0x5F, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5B, 0x5F, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0xCC, 0xCC, 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x0C, 0x8B, 0x55, 0x08, 0x33, 0xC0, 0x57, 0x89, 0x45, 0xF4, 0x89, 0x45, 0xF8, 0x3B, 0xD0, 0x0F, 0x84, 0x0B, 0x01, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xF8, 0x0F, 0x84, 0x00, 0x01, 0x00, 0x00, 0x53, 0x8A, 0x1F, 0x56, 0xBE, 0x04, 0x00, 0x00, 0x00, 0x8D, 0x48, 0x0E, 0x8B, 0xC6, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x74, 0x48, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1A, 0x88, 0x5D, 0xFF, 0x80, 0xFB, 0x2A, 0x74, 0x38, 0x8A, 0x5D, 0x0B, 0x40, 0x38, 0x5D, 0xFF, 0x75, 0x63, 0x03, 0xF0, 0x8D, 0x0C, 0x30, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x04, 0x31, 0x41, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x30, 0x03, 0xCF, 0x40, 0x80, 0x7D, 0xFF, 0x00, 0x74, 0x07, 0x8D, 0x3C, 0x30, 0x03, 0xCF, 0x40, 0x42, 0x8B, 0x7D, 0x0C, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x75, 0xBE, 0x8B, 0x5D, 0x0C, 0x8D, 0x34, 0x08, 0x8A, 0x0B, 0x8D, 0x3C, 0x30, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x74, 0x6C, 0x8D, 0x0C, 0x30, 0x03, 0xF9, 0x8A, 0x0A, 0x80, 0xF9, 0x2A, 0x75, 0x1F, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x73, 0x8B, 0xC6, };
|
||||
const unsigned char xE45C3124[] = { 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xF7, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xEC, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x8D, 0x78, 0x01, 0x84, 0xD2, 0x74, 0x47, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x40, 0x8D, 0x1C, 0x70, 0x03, 0xFB, 0x8A, 0x19, 0x3A, 0xDA, 0x75, 0x64, 0x03, 0xF7, 0x8D, 0x44, 0x30, 0x01, 0x8D, 0x34, 0x07, 0x47, 0x84, 0xD2, 0x74, 0x09, 0x8D, 0x14, 0x07, 0x03, 0xF2, 0x47, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x37, 0x03, 0xC2, 0x47, 0x84, 0xDB, 0x74, 0x0B, 0x8B, 0xF0, 0x40, 0x8D, 0x14, 0x70, 0x8D, 0x7C, 0x17, 0x01, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xB9, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x46, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x68, 0x8A, 0x19, 0x8B, 0xFE, 0x46, 0x89, 0x75, 0xF4, 0x80, 0xFB, 0x2A, 0x75, 0x1E, 0x41, 0x80, 0x39, 0x00, 0x74, 0x6E, 0x8B, 0x55, 0x0C, 0x03, 0xF8, 0x03, 0xF7, 0x8D, 0x46, 0x01, 0x89, 0x4D, 0xF8, 0xEB, 0x36, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x14, 0x37, 0x8D, 0x44, 0x10, 0x01, 0x8D, 0x34, 0x02, 0x8A, 0x55, 0x0B, 0x3A, 0xDA, 0x75, 0x0E, 0x84, 0xD2, 0x74, 0x03, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x15, 0x41, 0xEB, 0x12, 0x8B, 0x75, 0xF4, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x03, 0xF0, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x98, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, };
|
||||
const unsigned char xDAB58841[] = { 0x01, 0x3B, 0xF8, 0x0F, 0x84, 0xF1, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x3B, 0xD8, 0x0F, 0x84, 0xE6, 0x00, 0x00, 0x00, 0x8A, 0x13, 0x8B, 0xCE, 0x8D, 0x46, 0x02, 0x84, 0xD2, 0x74, 0x50, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x43, 0x8D, 0x04, 0x31, 0x41, 0x3A, 0xDA, 0x0F, 0x85, 0xC5, 0x00, 0x00, 0x00, 0x8D, 0x1C, 0x08, 0x03, 0xF3, 0x8D, 0x1C, 0x4E, 0x8D, 0x44, 0x18, 0x01, 0x8B, 0x5D, 0x0C, 0x84, 0xD2, 0x74, 0x0A, 0x03, 0xC8, 0x43, 0x8D, 0x74, 0x0E, 0x01, 0x89, 0x5D, 0x0C, 0x8D, 0x0C, 0x30, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x08, 0x8D, 0x34, 0x08, 0x8B, 0xCE, 0x46, 0x40, 0x47, 0x8A, 0x13, 0x84, 0xD2, 0x75, 0xB5, 0xEB, 0x03, 0x8B, 0x5D, 0x0C, 0x80, 0x3B, 0x00, 0x8D, 0x34, 0x08, 0x74, 0x58, 0x8D, 0x49, 0x00, 0x8A, 0x0F, 0x8D, 0x14, 0x30, 0x40, 0x89, 0x55, 0x08, 0x80, 0xF9, 0x2A, 0x75, 0x14, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x60, 0x8D, 0x53, 0x01, 0x8B, 0xC6, 0x46, 0x89, 0x7D, 0xF8, 0x89, 0x55, 0xFC, 0xEB, 0x2E, 0x8D, 0x14, 0x56, 0x03, 0xC2, 0x8A, 0x13, 0x3A, 0xCA, 0x75, 0x10, 0x84, 0xD2, 0x74, 0x03, 0x46, 0x40, 0x43, 0x84, 0xC9, 0x74, 0x18, 0x46, 0x40, 0x47, 0xEB, 0x13, 0x8B, 0x4D, 0xFC, 0x8B, 0x45, 0x08, 0x8B, 0x7D, 0xF8, 0x8B, 0xD9, 0x41, 0x8D, 0x44, 0x30, 0x01, 0x89, 0x4D, 0xFC, 0x80, 0x3B, 0x00, 0x75, 0xAB, 0x80, 0x3F, 0x2A, 0x75, 0x0C, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, };
|
||||
const unsigned char xDA58A32E[] = { 0xEC, 0x83, 0xEC, 0x08, 0x8B, 0x4D, 0x08, 0x57, 0x33, 0xFF, 0x89, 0x7D, 0xF8, 0x89, 0x7D, 0xFC, 0x3B, 0xCF, 0x0F, 0x84, 0xEE, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD7, 0x0F, 0x84, 0xE3, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0xBE, 0x01, 0x00, 0x00, 0x00, 0x8B, 0xC6, 0x84, 0xD2, 0x74, 0x45, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x3E, 0x8B, 0xC6, 0x3A, 0xDA, 0x75, 0x62, 0x03, 0xF7, 0x40, 0x84, 0xD2, 0x74, 0x10, 0x8D, 0x14, 0x30, 0x03, 0xFA, 0x40, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x30, 0x8D, 0x7C, 0x17, 0x01, 0x8D, 0x14, 0x30, 0x8D, 0x7C, 0x17, 0x01, 0x84, 0xDB, 0x74, 0x0D, 0x8D, 0x34, 0x38, 0x8D, 0x54, 0x30, 0x01, 0x03, 0xFA, 0x83, 0xC0, 0x02, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xBB, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x03, 0xF0, 0x84, 0xDB, 0x74, 0x5F, 0x8A, 0x11, 0x8D, 0x3C, 0x30, 0x40, 0x80, 0xFA, 0x2A, 0x75, 0x1D, 0x41, 0x80, 0x39, 0x00, 0x74, 0x67, 0x8B, 0x55, 0x0C, 0x83, 0xC6, 0x02, 0x83, 0xC0, 0x02, 0x89, 0x4D, 0xF8, 0xEB, 0x33, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x34, 0x38, 0x8D, 0x3C, 0x30, 0x3A, 0xD3, 0x75, 0x15, 0x84, 0xDB, 0x74, 0x07, 0x8B, 0xFE, 0x46, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xD2, 0x74, 0x15, 0x8D, 0x04, 0x37, 0x41, 0xEB, 0x0F, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8B, 0xC7, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0xA1, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5B, 0xB8, 0x01, 0x00, 0x00, };
|
||||
const unsigned char xDF977247[] = { 0xEC, 0x08, 0x56, 0x33, 0xF6, 0x57, 0x8B, 0x7D, 0x08, 0x89, 0x75, 0xF8, 0x89, 0x75, 0xFC, 0x3B, 0xFE, 0x0F, 0x84, 0xE5, 0x00, 0x00, 0x00, 0x8B, 0x4D, 0x0C, 0x3B, 0xCE, 0x0F, 0x84, 0xDA, 0x00, 0x00, 0x00, 0x8A, 0x09, 0x53, 0x8D, 0x46, 0x01, 0x84, 0xC9, 0x74, 0x30, 0x8A, 0x1F, 0x80, 0xFB, 0x2A, 0x74, 0x29, 0x03, 0xF0, 0x3A, 0xD9, 0x75, 0x50, 0x8D, 0x54, 0x06, 0x01, 0x8D, 0x04, 0x16, 0x84, 0xC9, 0x74, 0x03, 0xFF, 0x45, 0x0C, 0x03, 0xF0, 0x8D, 0x74, 0x32, 0x01, 0x84, 0xDB, 0x74, 0x02, 0x40, 0x47, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0xD0, 0x8B, 0x55, 0x0C, 0x8A, 0x0A, 0x8B, 0xC6, 0x46, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x74, 0x68, 0x90, 0x8A, 0x17, 0x8D, 0x0C, 0x30, 0x40, 0x80, 0xFA, 0x2A, 0x75, 0x1B, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x73, 0x03, 0xC8, 0x03, 0xF1, 0x8B, 0x4D, 0x0C, 0x89, 0x7D, 0xF8, 0xEB, 0x3A, 0x5B, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xC8, 0x40, 0x8D, 0x1C, 0x46, 0x03, 0xCB, 0x8A, 0x5D, 0x0B, 0x3A, 0xD3, 0x75, 0x19, 0x84, 0xDB, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x1C, 0x01, 0x8D, 0x74, 0x1E, 0x01, 0x84, 0xD2, 0x74, 0x14, 0x03, 0xCE, 0x03, 0xC1, 0x47, 0xEB, 0x0D, 0x8B, 0x4D, 0xFC, 0x8B, 0x7D, 0xF8, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x0A, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x75, 0x99, 0x80, 0x3F, 0x2A, 0x75, 0x0A, 0x8D, 0x64, 0x24, 0x00, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5B, 0x5F, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5B, 0x5F, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x33, 0xC0, 0x5E, };
|
||||
const unsigned char xEAE0E002[] = { 0xEC, 0x0C, 0x8B, 0x55, 0x08, 0x33, 0xC9, 0x57, 0x89, 0x4D, 0xF4, 0x89, 0x4D, 0xF8, 0x3B, 0xD1, 0x0F, 0x84, 0xFE, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xF9, 0x0F, 0x84, 0xF3, 0x00, 0x00, 0x00, 0x53, 0x8A, 0x1F, 0x56, 0x8D, 0x41, 0x01, 0x8D, 0x71, 0x02, 0x88, 0x5D, 0xFF, 0x84, 0xDB, 0x74, 0x41, 0x8A, 0x1A, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x37, 0x8A, 0x5D, 0xFF, 0x38, 0x5D, 0x0B, 0x75, 0x67, 0x8D, 0x0C, 0x46, 0x03, 0xC8, 0x8D, 0x34, 0x08, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x04, 0x0E, 0x46, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x08, 0x03, 0xF7, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x04, 0x8B, 0xC6, 0x46, 0x42, 0x8B, 0x7D, 0x0C, 0x8A, 0x1F, 0x88, 0x5D, 0xFF, 0x84, 0xDB, 0x75, 0xBF, 0x8D, 0x3C, 0x30, 0x8D, 0x7C, 0x79, 0x01, 0x8D, 0x4C, 0x38, 0x01, 0x03, 0xF1, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x83, 0xC0, 0x02, 0x84, 0xC9, 0x74, 0x63, 0x8A, 0x1A, 0x03, 0xF0, 0x8D, 0x7C, 0x37, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x1B, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x69, 0x8B, 0x4D, 0x0C, 0x8D, 0x34, 0x38, 0x40, 0x89, 0x55, 0xF4, 0xEB, 0x37, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x34, 0x38, 0x40, 0x3A, 0xD9, 0x75, 0x16, 0x84, 0xC9, 0x74, 0x07, 0x8B, 0xF7, 0x47, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x1B, 0x8B, 0xF7, 0x47, 0x40, 0x42, 0xEB, 0x14, 0x8B, 0x4D, 0xF8, 0x8B, 0x55, 0xF4, 0x8D, 0x44, 0x3E, 0x01, 0x8B, 0xF7, 0x47, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xF8, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0x9D, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, 0x3A, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x02, 0x5E, 0x5B, };
|
||||
const unsigned char xC3A46827[] = { 0x33, 0xC0, 0x57, 0x8B, 0x7D, 0x08, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xF8, 0x0F, 0x84, 0xF5, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x3B, 0xD8, 0x0F, 0x84, 0xEA, 0x00, 0x00, 0x00, 0x8A, 0x13, 0x56, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x8D, 0x70, 0x02, 0x8B, 0xC1, 0x84, 0xD2, 0x74, 0x47, 0x8A, 0x1F, 0x80, 0xFB, 0x2A, 0x74, 0x3D, 0x8D, 0x34, 0x08, 0x03, 0xC6, 0x3A, 0xDA, 0x75, 0x2B, 0x8B, 0xC8, 0x40, 0x84, 0xD2, 0x74, 0x09, 0x03, 0xC8, 0xFF, 0x45, 0x0C, 0x8D, 0x74, 0x0E, 0x01, 0x8D, 0x50, 0x01, 0x8B, 0xCA, 0x84, 0xDB, 0x74, 0x07, 0x03, 0xC6, 0x03, 0xC8, 0x8B, 0xC2, 0x47, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x84, 0xD2, 0x75, 0xC7, 0xEB, 0x0C, 0x5E, 0x5F, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0x5D, 0x0C, 0x8D, 0x14, 0x08, 0x8D, 0x4C, 0x16, 0x01, 0x8D, 0x34, 0x0A, 0x8A, 0x13, 0x40, 0x84, 0xD2, 0x74, 0x57, 0x90, 0x8D, 0x1C, 0x08, 0x03, 0xF3, 0x8A, 0x1F, 0x40, 0x80, 0xFB, 0x2A, 0x75, 0x0E, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x61, 0x8B, 0x55, 0x0C, 0x89, 0x7D, 0xF8, 0xEB, 0x2B, 0x8D, 0x0C, 0x30, 0x8D, 0x34, 0x08, 0x3A, 0xDA, 0x75, 0x18, 0x84, 0xD2, 0x74, 0x07, 0x8D, 0x04, 0x0E, 0x46, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x19, 0x8D, 0x14, 0x30, 0x03, 0xCA, 0x40, 0x47, 0xEB, 0x10, 0x8B, 0x55, 0xFC, 0x8B, 0x7D, 0xF8, 0x89, 0x55, 0x0C, 0x8B, 0xC6, 0x46, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xAA, 0x80, 0x3F, 0x2A, 0x75, 0x0B, 0xEB, 0x03, 0x8D, 0x49, 0x00, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5E, 0x5F, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5F, 0xB8, };
|
||||
const unsigned char xB0F2918A[] = { 0x8B, 0xEC, 0x83, 0xEC, 0x08, 0x8B, 0x55, 0x08, 0x33, 0xC0, 0x56, 0x57, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x8D, 0x70, 0x02, 0x3B, 0xD0, 0x0F, 0x84, 0xF8, 0x00, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xF8, 0x0F, 0x84, 0xED, 0x00, 0x00, 0x00, 0x53, 0x8A, 0x1F, 0x8D, 0x46, 0x02, 0x8D, 0x4E, 0x01, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x74, 0x43, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1A, 0x80, 0xFB, 0x2A, 0x74, 0x35, 0x8D, 0x34, 0x01, 0x8D, 0x04, 0x31, 0x8A, 0x4D, 0x0B, 0x3A, 0xD9, 0x75, 0x5B, 0x84, 0xC9, 0x74, 0x06, 0x8B, 0xC6, 0x46, 0xFF, 0x45, 0x0C, 0x8B, 0xC8, 0x40, 0x84, 0xDB, 0x74, 0x0B, 0x8D, 0x0C, 0x30, 0x8D, 0x74, 0x01, 0x01, 0x8D, 0x04, 0x31, 0x42, 0x8B, 0x7D, 0x0C, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x75, 0xC4, 0x03, 0xC8, 0x8D, 0x7C, 0x0E, 0x01, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x40, 0x84, 0xC9, 0x74, 0x65, 0x8D, 0x64, 0x24, 0x00, 0x8A, 0x1A, 0x8B, 0xF0, 0x80, 0xFB, 0x2A, 0x75, 0x1F, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x6B, 0x8B, 0x4D, 0x0C, 0x8D, 0x44, 0x40, 0x01, 0x8D, 0x7C, 0x00, 0x01, 0x89, 0x55, 0xF8, 0xEB, 0x35, 0x5B, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x03, 0xC7, 0x46, 0x3A, 0xD9, 0x75, 0x1C, 0x84, 0xC9, 0x74, 0x07, 0x8D, 0x04, 0x3E, 0x46, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x0C, 0x06, 0x03, 0xF9, 0x46, 0x42, 0x03, 0xF0, 0x03, 0xFE, 0xEB, 0x0D, 0x8B, 0x4D, 0xFC, 0x8B, 0x55, 0xF8, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0x9F, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, 0x3A, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x02, 0x5B, };
|
||||
const unsigned char xAF4ED407[] = { 0x08, 0x33, 0xC0, 0x56, 0x33, 0xF6, 0x57, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x8D, 0x78, 0x01, 0x3B, 0xC8, 0x0F, 0x84, 0xE6, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xDB, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x84, 0xD2, 0x74, 0x3C, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x35, 0x8D, 0x1C, 0x37, 0x03, 0xC3, 0x8A, 0x19, 0x47, 0x3A, 0xDA, 0x75, 0x5A, 0x03, 0xC7, 0x8D, 0x74, 0x06, 0x01, 0x84, 0xD2, 0x74, 0x03, 0xFF, 0x45, 0x0C, 0x03, 0xC6, 0x47, 0x84, 0xDB, 0x74, 0x0C, 0x8D, 0x3C, 0x30, 0x40, 0x8D, 0x14, 0x07, 0x8D, 0x74, 0x16, 0x01, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC4, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x03, 0xFE, 0x03, 0xC7, 0x84, 0xDB, 0x74, 0x66, 0xEB, 0x03, 0x8D, 0x49, 0x00, 0x8A, 0x11, 0x8D, 0x3C, 0x30, 0x40, 0x80, 0xFA, 0x2A, 0x75, 0x1D, 0x41, 0x80, 0x39, 0x00, 0x74, 0x69, 0x8B, 0x55, 0x0C, 0x03, 0xF8, 0x8D, 0x74, 0x3E, 0x01, 0x89, 0x4D, 0xF8, 0xEB, 0x35, 0x5B, 0x5F, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xF8, 0x40, 0x3A, 0xD3, 0x75, 0x19, 0x84, 0xDB, 0x74, 0x08, 0x8D, 0x1C, 0x46, 0x03, 0xFB, 0xFF, 0x45, 0x0C, 0x84, 0xD2, 0x74, 0x19, 0x8D, 0x34, 0x07, 0x8D, 0x04, 0x37, 0x41, 0xEB, 0x10, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8B, 0xC6, 0x46, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0x9F, 0x80, 0x39, 0x2A, 0x75, 0x06, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5B, 0x5F, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5B, 0x5F, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x33, };
|
||||
const unsigned char xBB9EC2E1[] = { 0x84, 0x08, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD1, 0x0F, 0x84, 0xFD, 0x00, 0x00, 0x00, 0x53, 0x8A, 0x1A, 0x56, 0x8B, 0xF0, 0x8B, 0xC8, 0x88, 0x5D, 0xFF, 0x84, 0xDB, 0x74, 0x4A, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x3D, 0x8A, 0x5D, 0xFF, 0x38, 0x5D, 0x0B, 0x75, 0x69, 0x8D, 0x48, 0x01, 0x83, 0xC0, 0x02, 0x89, 0x45, 0xF0, 0x84, 0xDB, 0x74, 0x0C, 0x03, 0xC1, 0x8B, 0x4D, 0xF0, 0x8D, 0x74, 0x06, 0x01, 0x03, 0xC6, 0x42, 0x8D, 0x1C, 0x01, 0x03, 0xF3, 0x41, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x07, 0x8D, 0x34, 0x01, 0x8D, 0x04, 0x31, 0x47, 0x8A, 0x1A, 0x88, 0x5D, 0xFF, 0x84, 0xDB, 0x75, 0xB9, 0x89, 0x55, 0x0C, 0x8A, 0x1A, 0x8D, 0x04, 0x31, 0x84, 0xDB, 0x74, 0x76, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x0F, 0x88, 0x4D, 0x0B, 0x80, 0xF9, 0x2A, 0x75, 0x21, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x79, 0x8D, 0x48, 0x01, 0x83, 0xC0, 0x02, 0x03, 0xC8, 0x03, 0xF1, 0x89, 0x7D, 0xF4, 0x8D, 0x4A, 0x01, 0xEB, 0x45, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x48, 0x01, 0x83, 0xC0, 0x02, 0x38, 0x5D, 0x0B, 0x75, 0x22, 0x84, 0xDB, 0x74, 0x0E, 0x8D, 0x14, 0x46, 0x03, 0xCA, 0x8B, 0x55, 0x0C, 0x42, 0x89, 0x55, 0x0C, 0xEB, 0x03, 0x8B, 0x55, 0x0C, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x19, 0x03, 0xC8, 0x03, 0xF1, 0x47, 0xEB, 0x12, 0x8B, 0x7D, 0xF4, 0x8D, 0x04, 0x31, 0x8B, 0x4D, 0xF8, 0x8B, 0xD1, 0x89, 0x55, 0x0C, 0x41, 0x89, 0x4D, 0xF8, 0x8A, 0x1A, 0x84, 0xDB, 0x75, 0x90, 0x80, 0x3F, 0x2A, 0x75, 0x06, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, };
|
||||
const unsigned char xA8902F8B[] = { 0x08, 0x53, 0x56, 0x33, 0xF6, 0x57, 0x8B, 0x7D, 0x08, 0x89, 0x75, 0xF8, 0x89, 0x75, 0xFC, 0x3B, 0xFE, 0x0F, 0x84, 0xF4, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x3B, 0xDE, 0x0F, 0x84, 0xE9, 0x00, 0x00, 0x00, 0x8A, 0x13, 0x8D, 0x46, 0x01, 0x8D, 0x4E, 0x02, 0x84, 0xD2, 0x74, 0x4E, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x41, 0x3A, 0xDA, 0x0F, 0x85, 0xCB, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x8D, 0x41, 0x01, 0x83, 0xC1, 0x02, 0x84, 0xD2, 0x74, 0x0E, 0x03, 0xCE, 0x8D, 0x4C, 0x09, 0x01, 0x8D, 0x04, 0x31, 0x41, 0x43, 0x89, 0x5D, 0x0C, 0x8D, 0x14, 0x08, 0x03, 0xF2, 0x40, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x0A, 0x03, 0xC8, 0x8D, 0x74, 0x0E, 0x01, 0x03, 0xCE, 0x40, 0x47, 0x8A, 0x13, 0x84, 0xD2, 0x75, 0xB7, 0xEB, 0x03, 0x8B, 0x5D, 0x0C, 0x8D, 0x0C, 0x4E, 0x03, 0xC1, 0x80, 0x3B, 0x00, 0x74, 0x59, 0xEB, 0x03, 0x8D, 0x49, 0x00, 0x8A, 0x0F, 0x8D, 0x14, 0x30, 0x40, 0x89, 0x55, 0x08, 0x80, 0xF9, 0x2A, 0x75, 0x14, 0x47, 0x80, 0x3F, 0x00, 0x74, 0x60, 0x8D, 0x53, 0x01, 0x83, 0xC0, 0x02, 0x89, 0x7D, 0xF8, 0x89, 0x55, 0xFC, 0xEB, 0x2D, 0x03, 0xD0, 0x03, 0xF2, 0x8A, 0x13, 0x40, 0x3A, 0xCA, 0x75, 0x15, 0x84, 0xD2, 0x74, 0x09, 0x8B, 0x55, 0x08, 0x8D, 0x14, 0x56, 0x03, 0xC2, 0x43, 0x84, 0xC9, 0x74, 0x11, 0x40, 0x47, 0xEB, 0x0D, 0x8B, 0x4D, 0xFC, 0x8B, 0x7D, 0xF8, 0x40, 0x8B, 0xD9, 0x41, 0x89, 0x4D, 0xFC, 0x80, 0x3B, 0x00, 0x75, 0xAC, 0x80, 0x3F, 0x2A, 0x75, 0x0D, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x47, 0x80, 0x3F, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x07, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, };
|
||||
const unsigned char xA3747988[] = { 0x8D, 0x42, 0x01, 0x3B, 0xCA, 0x0F, 0x84, 0xF3, 0x00, 0x00, 0x00, 0x8B, 0x5D, 0x0C, 0x3B, 0xDA, 0x0F, 0x84, 0xE8, 0x00, 0x00, 0x00, 0x56, 0x8D, 0x72, 0x02, 0x8A, 0x13, 0x57, 0x8B, 0xF8, 0x84, 0xD2, 0x74, 0x3B, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x74, 0x34, 0x8B, 0xF7, 0x3A, 0xDA, 0x75, 0x62, 0x8D, 0x7C, 0x78, 0x02, 0x83, 0xC0, 0x02, 0x84, 0xD2, 0x74, 0x09, 0x8D, 0x34, 0x38, 0x8B, 0xC6, 0x46, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x30, 0x03, 0xFA, 0x40, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x34, 0x38, 0x8B, 0xC6, 0x46, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC5, 0x8D, 0x14, 0x30, 0x8D, 0x7C, 0x17, 0x01, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x74, 0x68, 0x8D, 0x1C, 0x77, 0x03, 0xC3, 0x8A, 0x19, 0x80, 0xFB, 0x2A, 0x75, 0x21, 0x41, 0x80, 0x39, 0x00, 0x74, 0x72, 0x8B, 0x55, 0x0C, 0x8D, 0x04, 0x3E, 0x8D, 0x7C, 0x30, 0x01, 0x8D, 0x34, 0x38, 0x89, 0x4D, 0xF8, 0xEB, 0x37, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x3C, 0x30, 0x8D, 0x34, 0x38, 0x3A, 0xDA, 0x75, 0x18, 0x84, 0xD2, 0x74, 0x07, 0x8B, 0xF7, 0x47, 0x40, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x19, 0x8D, 0x14, 0x30, 0x03, 0xFA, 0x40, 0x41, 0xEB, 0x10, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8B, 0xC6, 0x46, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0x98, 0x80, 0x39, 0x2A, 0x75, 0x09, 0x8D, 0x49, 0x00, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5F, 0x5E, 0x0F, 0x94, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5E, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x33, 0xC0, };
|
||||
const unsigned char x84E4BC95[] = { 0x33, 0xF6, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xD0, 0x0F, 0x84, 0xF5, 0x00, 0x00, 0x00, 0x8B, 0x4D, 0x0C, 0x3B, 0xC8, 0x0F, 0x84, 0xEA, 0x00, 0x00, 0x00, 0x53, 0x8A, 0x19, 0x84, 0xDB, 0x74, 0x3B, 0x8B, 0xFF, 0x8A, 0x0A, 0x88, 0x4D, 0x0B, 0x80, 0xF9, 0x2A, 0x74, 0x2F, 0x8D, 0x0C, 0x06, 0x38, 0x5D, 0x0B, 0x75, 0x63, 0x8D, 0x04, 0x4E, 0x41, 0x8D, 0x44, 0x00, 0x02, 0x84, 0xDB, 0x74, 0x06, 0x8B, 0xC8, 0x40, 0xFF, 0x45, 0x0C, 0x03, 0xC1, 0x80, 0x7D, 0x0B, 0x00, 0x8D, 0x34, 0x01, 0x74, 0x01, 0x42, 0x8B, 0x4D, 0x0C, 0x8A, 0x19, 0x84, 0xDB, 0x75, 0xC7, 0x8B, 0x4D, 0x0C, 0x8A, 0x19, 0x03, 0xF0, 0x57, 0x8B, 0xF8, 0x40, 0x46, 0x84, 0xDB, 0x74, 0x73, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x0C, 0x3E, 0x03, 0xC1, 0x8A, 0x0A, 0x46, 0x80, 0xF9, 0x2A, 0x75, 0x20, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x72, 0x8D, 0x0C, 0x78, 0x03, 0xF1, 0x8D, 0x0C, 0x06, 0x03, 0xF9, 0x8B, 0x4D, 0x0C, 0x89, 0x55, 0xF8, 0xEB, 0x39, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xF8, 0x40, 0x83, 0xC6, 0x02, 0x3A, 0xCB, 0x75, 0x1B, 0x84, 0xDB, 0x74, 0x09, 0x8D, 0x3C, 0x06, 0x8B, 0xF7, 0x47, 0xFF, 0x45, 0x0C, 0x84, 0xC9, 0x74, 0x1B, 0x8D, 0x0C, 0x3E, 0x8D, 0x44, 0x08, 0x01, 0x42, 0xEB, 0x11, 0x8B, 0x4D, 0xFC, 0x8B, 0x55, 0xF8, 0x8B, 0xF8, 0x40, 0x89, 0x4D, 0x0C, 0x46, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x8A, 0x19, 0x84, 0xDB, 0x75, 0x94, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, 0x3A, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x02, 0x5F, 0x5B, 0x0F, 0x94, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x5F, 0x5B, 0xB8, 0x01, 0x00, 0x00, 0x00, };
|
||||
const unsigned char x763F4D5B[] = { 0xEC, 0x08, 0x8B, 0x4D, 0x08, 0x33, 0xC0, 0x56, 0x33, 0xF6, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0x04, 0x01, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xF9, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x57, 0x33, 0xFF, 0x84, 0xD2, 0x74, 0x3B, 0x80, 0x39, 0x2A, 0x74, 0x36, 0x8D, 0x1C, 0x3E, 0x03, 0xC3, 0x8A, 0x19, 0x46, 0x3A, 0xDA, 0x75, 0x64, 0x03, 0xF0, 0x8D, 0x7C, 0x37, 0x01, 0x84, 0xD2, 0x74, 0x07, 0xFF, 0x45, 0x0C, 0x8D, 0x7C, 0x37, 0x01, 0x8D, 0x34, 0x38, 0x40, 0x84, 0xDB, 0x74, 0x08, 0x8D, 0x04, 0x3E, 0x8D, 0x34, 0x38, 0x40, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC5, 0x8B, 0x5D, 0x0C, 0x8D, 0x14, 0x06, 0x03, 0xFA, 0x8A, 0x13, 0x46, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x74, 0x79, 0x8B, 0xFF, 0x8D, 0x14, 0x3E, 0x03, 0xC2, 0x8A, 0x11, 0x80, 0xFA, 0x2A, 0x75, 0x23, 0x41, 0x80, 0x39, 0x00, 0x0F, 0x84, 0x7E, 0x00, 0x00, 0x00, 0x8D, 0x44, 0x3E, 0x01, 0x8B, 0xF0, 0x40, 0x43, 0x89, 0x4D, 0xF8, 0x89, 0x5D, 0xFC, 0xEB, 0x45, 0x5F, 0x5B, 0x33, 0xC0, 0x5E, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x5C, 0x3E, 0x01, 0x03, 0xC3, 0x8A, 0x5D, 0x0B, 0x83, 0xC6, 0x02, 0x3A, 0xD3, 0x75, 0x18, 0x84, 0xDB, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x1C, 0x06, 0x8D, 0x7C, 0x1F, 0x01, 0x84, 0xD2, 0x74, 0x1A, 0x8B, 0xF0, 0x40, 0x41, 0xEB, 0x14, 0x8B, 0x55, 0xFC, 0x8D, 0x0C, 0x06, 0x89, 0x55, 0x0C, 0x42, 0x8D, 0x7C, 0x0F, 0x01, 0x8B, 0x4D, 0xF8, 0x89, 0x55, 0xFC, 0x8B, 0x5D, 0x0C, 0x8A, 0x13, 0x88, 0x55, 0x0B, 0x84, 0xD2, 0x75, 0x89, 0x80, 0x39, 0x2A, 0x75, 0x0A, 0x8D, 0x64, 0x24, 0x00, 0x41, 0x80, 0x39, 0x2A, };
|
||||
const unsigned char x9F6C10A6[] = { 0x08, 0x8B, 0x55, 0x08, 0x33, 0xC0, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xD0, 0x0F, 0x84, 0x07, 0x01, 0x00, 0x00, 0x8B, 0x4D, 0x0C, 0x3B, 0xC8, 0x0F, 0x84, 0xFC, 0x00, 0x00, 0x00, 0x8A, 0x09, 0x53, 0x56, 0xBE, 0x01, 0x00, 0x00, 0x00, 0x8B, 0xC6, 0x57, 0x8B, 0xF8, 0x84, 0xC9, 0x74, 0x42, 0x8A, 0x1A, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x38, 0x8B, 0xC6, 0x46, 0x3A, 0xD9, 0x75, 0x64, 0x8D, 0x5C, 0x37, 0x01, 0x03, 0xC3, 0x83, 0xC7, 0x02, 0x84, 0xC9, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x0C, 0x07, 0x8D, 0x74, 0x0E, 0x01, 0x80, 0x7D, 0x0B, 0x00, 0x8D, 0x0C, 0x07, 0x8D, 0x74, 0x0E, 0x01, 0x74, 0x04, 0x8B, 0xF8, 0x40, 0x42, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x84, 0xC9, 0x75, 0xBE, 0x8B, 0x4D, 0x0C, 0x8B, 0xF8, 0x40, 0x80, 0x39, 0x00, 0x74, 0x71, 0x8A, 0x1A, 0x8D, 0x0C, 0x07, 0x8D, 0x74, 0x0E, 0x01, 0x80, 0xFB, 0x2A, 0x75, 0x23, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x7D, 0x8D, 0x04, 0x0F, 0x03, 0xF8, 0x8D, 0x74, 0x39, 0x01, 0x8B, 0x4D, 0x0C, 0x8B, 0xF8, 0x40, 0x89, 0x55, 0xF8, 0xEB, 0x3D, 0x5F, 0x5E, 0x33, 0xC0, 0x5B, 0x8B, 0xE5, 0x5D, 0xC3, 0x03, 0xF1, 0x8B, 0x4D, 0x0C, 0x8A, 0x09, 0x47, 0x3A, 0xD9, 0x75, 0x19, 0x84, 0xC9, 0x74, 0x07, 0x8B, 0xC6, 0x46, 0x47, 0xFF, 0x45, 0x0C, 0x84, 0xDB, 0x74, 0x1D, 0x03, 0xC6, 0x03, 0xF8, 0x8D, 0x47, 0x01, 0x42, 0xEB, 0x13, 0x8B, 0x4D, 0xFC, 0x8B, 0x55, 0xF8, 0x8D, 0x34, 0x07, 0x8D, 0x04, 0x37, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xFC, 0x8B, 0x4D, 0x0C, 0x80, 0x39, 0x00, 0x75, 0x8F, 0x80, 0x3A, 0x2A, 0x75, 0x0D, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x42, 0x80, 0x3A, 0x2A, 0x74, };
|
||||
const unsigned char xA9407E26[] = { 0x4D, 0x08, 0x33, 0xC0, 0x57, 0x33, 0xFF, 0x89, 0x45, 0xF8, 0x89, 0x45, 0xFC, 0x3B, 0xC8, 0x0F, 0x84, 0xF4, 0x00, 0x00, 0x00, 0x8B, 0x55, 0x0C, 0x3B, 0xD0, 0x0F, 0x84, 0xE9, 0x00, 0x00, 0x00, 0x8A, 0x12, 0x53, 0x56, 0x8D, 0x70, 0x01, 0x84, 0xD2, 0x74, 0x39, 0x8A, 0x19, 0x88, 0x5D, 0x0B, 0x80, 0xFB, 0x2A, 0x74, 0x2F, 0x3A, 0xDA, 0x75, 0x5C, 0x8D, 0x1C, 0x06, 0x46, 0x8D, 0x7C, 0x5F, 0x01, 0x84, 0xD2, 0x74, 0x05, 0xFF, 0x45, 0x0C, 0x8B, 0xF0, 0x8D, 0x04, 0x3E, 0x46, 0x80, 0x7D, 0x0B, 0x00, 0x74, 0x07, 0x8D, 0x3C, 0x06, 0x8D, 0x04, 0x3E, 0x41, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0xC7, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x03, 0xF0, 0x8D, 0x74, 0x37, 0x01, 0x84, 0xD2, 0x74, 0x6A, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x19, 0x8D, 0x3C, 0x30, 0x80, 0xFB, 0x2A, 0x75, 0x1B, 0x41, 0x80, 0x39, 0x00, 0x74, 0x74, 0x8B, 0x55, 0x0C, 0x8D, 0x44, 0x37, 0x01, 0x89, 0x4D, 0xF8, 0xEB, 0x3B, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8B, 0xC6, 0x46, 0x47, 0x3A, 0xDA, 0x75, 0x1B, 0x84, 0xD2, 0x74, 0x0A, 0xFF, 0x45, 0x0C, 0x8D, 0x14, 0x07, 0x8D, 0x74, 0x16, 0x01, 0x84, 0xDB, 0x74, 0x1C, 0x03, 0xF8, 0x8D, 0x74, 0x3E, 0x01, 0x41, 0xEB, 0x13, 0x8B, 0x55, 0xFC, 0x8B, 0x4D, 0xF8, 0x8D, 0x34, 0x07, 0x8D, 0x04, 0x37, 0x89, 0x55, 0x0C, 0x42, 0x89, 0x55, 0xFC, 0x8B, 0x55, 0x0C, 0x8A, 0x12, 0x84, 0xD2, 0x75, 0x9C, 0x80, 0x39, 0x2A, 0x75, 0x0D, 0x8D, 0xA4, 0x24, 0x00, 0x00, 0x00, 0x00, 0x41, 0x80, 0x39, 0x2A, 0x74, 0xFA, 0x33, 0xC0, 0x38, 0x01, 0x5E, 0x5B, 0x0F, 0x94, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x5E, 0x5B, 0xB8, };
|
||||
const unsigned char xCCF59F07[] = { 0x55, 0x08, 0x33, 0xC0, 0x57, 0x89, 0x45, 0xF4, 0x89, 0x45, 0xF8, 0x3B, 0xD0, 0x0F, 0x84, 0x0B, 0x01, 0x00, 0x00, 0x8B, 0x7D, 0x0C, 0x3B, 0xF8, 0x0F, 0x84, 0x00, 0x01, 0x00, 0x00, 0x53, 0x8A, 0x1F, 0x56, 0xBE, 0x04, 0x00, 0x00, 0x00, 0x8D, 0x48, 0x0E, 0x8B, 0xC6, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x74, 0x48, 0x8D, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x1A, 0x88, 0x5D, 0xFF, 0x80, 0xFB, 0x2A, 0x74, 0x38, 0x8A, 0x5D, 0x0B, 0x40, 0x38, 0x5D, 0xFF, 0x75, 0x63, 0x03, 0xF0, 0x8D, 0x0C, 0x30, 0x84, 0xDB, 0x74, 0x07, 0x8D, 0x04, 0x31, 0x41, 0xFF, 0x45, 0x0C, 0x8D, 0x3C, 0x30, 0x03, 0xCF, 0x40, 0x80, 0x7D, 0xFF, 0x00, 0x74, 0x07, 0x8D, 0x3C, 0x30, 0x03, 0xCF, 0x40, 0x42, 0x8B, 0x7D, 0x0C, 0x8A, 0x1F, 0x88, 0x5D, 0x0B, 0x84, 0xDB, 0x75, 0xBE, 0x8B, 0x5D, 0x0C, 0x8D, 0x34, 0x08, 0x8A, 0x0B, 0x8D, 0x3C, 0x30, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x74, 0x6C, 0x8D, 0x0C, 0x30, 0x03, 0xF9, 0x8A, 0x0A, 0x80, 0xF9, 0x2A, 0x75, 0x1F, 0x42, 0x80, 0x3A, 0x00, 0x74, 0x73, 0x8B, 0xC6, 0x46, 0x03, 0xC6, 0x43, 0x8B, 0xFE, 0x89, 0x55, 0xF4, 0x89, 0x5D, 0xF8, 0xEB, 0x3E, 0x5E, 0x5B, 0x33, 0xC0, 0x5F, 0x8B, 0xE5, 0x5D, 0xC3, 0x8D, 0x5C, 0x30, 0x01, 0x03, 0xFB, 0x8A, 0x5D, 0x0B, 0x83, 0xC0, 0x02, 0x3A, 0xCB, 0x75, 0x14, 0x84, 0xDB, 0x74, 0x03, 0xFF, 0x45, 0x0C, 0x84, 0xC9, 0x74, 0x1A, 0x8D, 0x0C, 0x38, 0x03, 0xF1, 0x40, 0x42, 0xEB, 0x11, 0x8B, 0x4D, 0xF8, 0x8B, 0x55, 0xF4, 0x8B, 0xFE, 0x46, 0x40, 0x89, 0x4D, 0x0C, 0x41, 0x89, 0x4D, 0xF8, 0x8B, 0x5D, 0x0C, 0x8A, 0x0B, 0x88, 0x4D, 0x0B, 0x84, 0xC9, 0x75, 0x94, 0x80, 0x3A, 0x2A, 0x75, 0x06, 0x42, 0x80, };
|
@ -1,44 +0,0 @@
|
||||
/* File: ip.c
|
||||
* ----------
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <net/if.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
void GetIpFromDevice(uint8_t ip[4], const char DeviceName[])
|
||||
{
|
||||
int fd;
|
||||
struct ifreq ifr;
|
||||
|
||||
assert(strlen(DeviceName) <= IFNAMSIZ);
|
||||
|
||||
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
assert(fd>0);
|
||||
|
||||
strncpy(ifr.ifr_name, DeviceName, IFNAMSIZ);
|
||||
ifr.ifr_addr.sa_family = AF_INET;
|
||||
if (ioctl(fd, SIOCGIFADDR, &ifr) == 0)
|
||||
{
|
||||
struct sockaddr_in *p = (void*) &(ifr.ifr_addr);
|
||||
memcpy(ip, &(p->sin_addr), 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 查询不到IP时默认填零处理
|
||||
memset(ip, 0x00, 4);
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
Note:
|
||||
"tcpdump-aclocal.m4"来源自tcpdump代码中的aclocal.m4,它给autoconf提供检测libpcap的所有宏
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,61 +0,0 @@
|
||||
/* File: main.c
|
||||
* ------------
|
||||
* 校园网802.1X客户端命令行
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
/* 子函数声明 */
|
||||
int Authentication(const char *UserName, const char *Password, const char *DeviceName);
|
||||
|
||||
|
||||
/**
|
||||
* 函数:main()
|
||||
*
|
||||
* 检查程序的执行权限,检查命令行参数格式。
|
||||
* 允许的调用格式包括:
|
||||
* njit-client username password
|
||||
* njit-client username password eth0
|
||||
* njit-client username password eth1
|
||||
* 若没有从命令行指定网卡,则默认将使用eth0
|
||||
*/
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
char *UserName;
|
||||
char *Password;
|
||||
char *DeviceName;
|
||||
|
||||
/* 检查当前是否具有root权限 */
|
||||
if (getuid() != 0) {
|
||||
fprintf(stderr, "抱歉,运行本客户端程序需要root权限\n");
|
||||
fprintf(stderr, "(RedHat/Fedora下使用su命令切换为root)\n");
|
||||
fprintf(stderr, "(Ubuntu/Debian下在命令前添加sudo)\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/* 检查命令行参数格式 */
|
||||
if (argc<3 || argc>4) {
|
||||
fprintf(stderr, "命令行参数错误!\n");
|
||||
fprintf(stderr, "正确的调用格式例子如下:\n");
|
||||
fprintf(stderr, " %s username password\n", argv[0]);
|
||||
fprintf(stderr, " %s username password eth0\n", argv[0]);
|
||||
fprintf(stderr, " %s username password eth1\n", argv[0]);
|
||||
fprintf(stderr, "(注:若不指明网卡,默认情况下将使用eth0)\n");
|
||||
exit(-1);
|
||||
} else if (argc == 4) {
|
||||
DeviceName = argv[3]; // 允许从命令行指定设备名
|
||||
} else {
|
||||
DeviceName = "eth0"; // 缺省情况下使用的设备
|
||||
}
|
||||
UserName = argv[1];
|
||||
Password = argv[2];
|
||||
|
||||
/* 调用子函数完成802.1X认证 */
|
||||
Authentication(UserName, Password, DeviceName);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
bin_PROGRAMS = md5test \
|
||||
$(NULL)
|
||||
md5test_SOURCES = md5test.c \
|
||||
md5_one.c \
|
||||
md5_dgst.c \
|
||||
mem_clr.c \
|
||||
$(NULL)
|
||||
md5test_CFLAGS = $(NULL)
|
||||
md5test_CFLAGS += $(libcrypto_CFLAGS)
|
||||
md5test_LDADD = $(NULL)
|
||||
md5test_LDADD += $(NULL)
|
||||
|
@ -1,12 +0,0 @@
|
||||
AC_INIT([md5test],[1.0],[njit8021xclient@googlegroups.com],[],[https://github.com/liuqun/njit8021xclient])
|
||||
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
|
||||
AC_PROG_MKDIR_P
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_CC
|
||||
PKG_CHECK_MODULES([libcrypto], [libcrypto])
|
||||
AC_CONFIG_HEADER([config.h])
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
@ -1,20 +0,0 @@
|
||||
#!/bin/sh
|
||||
echo "帮助您自动生成可发布的源码包..."
|
||||
|
||||
echo "1、调用automake和autoconf等标准工具"
|
||||
autoreconf --install
|
||||
if test $? != 0 ; then
|
||||
echo "缺少标准开发工具automake autoconf,请先安装开发工具"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "2、调用./configure脚本自动完成各项检查"
|
||||
./configure
|
||||
if test $? != 0 ; then
|
||||
echo "缺少开发库,请参考Install.html文档安装所有开发工具"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo "3、调用make工具生成tar.gz源代码压缩包"
|
||||
make dist --quiet
|
||||
ls *.tar.gz || ls *.tar.bz2
|
@ -1,573 +0,0 @@
|
||||
/* crypto/md5/md5_dgst.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <openssl/e_os2.h>
|
||||
#include <openssl/md5.h>
|
||||
#include <openssl/opensslv.h>
|
||||
|
||||
#ifndef MD5_LONG_LOG2
|
||||
#define MD5_LONG_LOG2 2 /* default to 32 bits */
|
||||
#endif
|
||||
|
||||
|
||||
#define DATA_ORDER_IS_LITTLE_ENDIAN
|
||||
|
||||
typedef MD5_LONG HASH_LONG;
|
||||
typedef MD5_CTX HASH_CTX;
|
||||
const int HASH_CBLOCK=MD5_CBLOCK;
|
||||
|
||||
static int HASH_Update (HASH_CTX *c, const void *data, size_t len);
|
||||
static void HASH_Transform (HASH_CTX *c, const unsigned char *data);
|
||||
static int HASH_FINAL (unsigned char *md, HASH_CTX *c);
|
||||
static void HASH_MAKE_STRING (HASH_CTX *c, unsigned char *s);
|
||||
static void HASH_BLOCK_DATA_ORDER (MD5_CTX *c, const void *p, size_t num);
|
||||
|
||||
|
||||
//#include "md32_common.h"
|
||||
|
||||
/*
|
||||
* Engage compiler specific rotate intrinsic function if available.
|
||||
*/
|
||||
#undef ROTATE
|
||||
#ifndef PEDANTIC
|
||||
# if defined(_MSC_VER) || defined(__ICC)
|
||||
# define ROTATE(a,n) _lrotl(a,n)
|
||||
# elif defined(__MWERKS__)
|
||||
# if defined(__POWERPC__)
|
||||
# define ROTATE(a,n) __rlwinm(a,n,0,31)
|
||||
# elif defined(__MC68K__)
|
||||
/* Motorola specific tweak. <appro@fy.chalmers.se> */
|
||||
# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
|
||||
# else
|
||||
# define ROTATE(a,n) __rol(a,n)
|
||||
# endif
|
||||
# elif defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||
/*
|
||||
* Some GNU C inline assembler templates. Note that these are
|
||||
* rotates by *constant* number of bits! But that's exactly
|
||||
* what we need here...
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
|
||||
# define ROTATE(a,n) ({ register unsigned int ret; \
|
||||
asm ( \
|
||||
"roll %1,%0" \
|
||||
: "=r"(ret) \
|
||||
: "I"(n), "0"((unsigned int)(a)) \
|
||||
: "cc"); \
|
||||
ret; \
|
||||
})
|
||||
# elif defined(_ARCH_PPC) || defined(_ARCH_PPC64) || \
|
||||
defined(__powerpc) || defined(__ppc__) || defined(__powerpc64__)
|
||||
# define ROTATE(a,n) ({ register unsigned int ret; \
|
||||
asm ( \
|
||||
"rlwinm %0,%1,%2,0,31" \
|
||||
: "=r"(ret) \
|
||||
: "r"(a), "I"(n)); \
|
||||
ret; \
|
||||
})
|
||||
# elif defined(__s390x__)
|
||||
# define ROTATE(a,n) ({ register unsigned int ret; \
|
||||
asm ("rll %0,%1,%2" \
|
||||
: "=r"(ret) \
|
||||
: "r"(a), "I"(n)); \
|
||||
ret; \
|
||||
})
|
||||
# endif
|
||||
# endif
|
||||
#endif /* PEDANTIC */
|
||||
|
||||
#ifndef ROTATE
|
||||
#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
|
||||
#endif
|
||||
|
||||
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
||||
|
||||
#ifndef PEDANTIC
|
||||
# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||
# if ((defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)) || \
|
||||
(defined(__x86_64) || defined(__x86_64__))
|
||||
# if !defined(B_ENDIAN)
|
||||
/*
|
||||
* This gives ~30-40% performance improvement in SHA-256 compiled
|
||||
* with gcc [on P4]. Well, first macro to be frank. We can pull
|
||||
* this trick on x86* platforms only, because these CPUs can fetch
|
||||
* unaligned data without raising an exception.
|
||||
*/
|
||||
# define HOST_c2l(c,l) ({ unsigned int r=*((const unsigned int *)(c)); \
|
||||
asm ("bswapl %0":"=r"(r):"0"(r)); \
|
||||
(c)+=4; (l)=r; })
|
||||
# define HOST_l2c(l,c) ({ unsigned int r=(l); \
|
||||
asm ("bswapl %0":"=r"(r):"0"(r)); \
|
||||
*((unsigned int *)(c))=r; (c)+=4; r; })
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#if defined(__s390__) || defined(__s390x__)
|
||||
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
|
||||
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
|
||||
#endif
|
||||
|
||||
#ifndef HOST_c2l
|
||||
#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \
|
||||
l|=(((unsigned long)(*((c)++)))<<16), \
|
||||
l|=(((unsigned long)(*((c)++)))<< 8), \
|
||||
l|=(((unsigned long)(*((c)++))) ), \
|
||||
l)
|
||||
#endif
|
||||
#ifndef HOST_l2c
|
||||
#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l) )&0xff), \
|
||||
l)
|
||||
#endif
|
||||
|
||||
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
|
||||
#ifndef PEDANTIC
|
||||
# if defined(__GNUC__) && __GNUC__>=2 && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||
# if defined(__s390x__)
|
||||
# define HOST_c2l(c,l) ({ asm ("lrv %0,%1" \
|
||||
:"=d"(l) :"m"(*(const unsigned int *)(c)));\
|
||||
(c)+=4; (l); })
|
||||
# define HOST_l2c(l,c) ({ asm ("strv %1,%0" \
|
||||
:"=m"(*(unsigned int *)(c)) :"d"(l));\
|
||||
(c)+=4; (l); })
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
|
||||
# ifndef B_ENDIAN
|
||||
/* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
|
||||
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
|
||||
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef HOST_c2l
|
||||
#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \
|
||||
l|=(((unsigned long)(*((c)++)))<< 8), \
|
||||
l|=(((unsigned long)(*((c)++)))<<16), \
|
||||
l|=(((unsigned long)(*((c)++)))<<24), \
|
||||
l)
|
||||
#endif
|
||||
#ifndef HOST_l2c
|
||||
#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>> 8)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>16)&0xff), \
|
||||
*((c)++)=(unsigned char)(((l)>>24)&0xff), \
|
||||
l)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Time for some action:-)
|
||||
*/
|
||||
static
|
||||
int HASH_UPDATE (HASH_CTX *c, const void *data_, size_t len)
|
||||
{
|
||||
const unsigned char *data=data_;
|
||||
unsigned char *p;
|
||||
HASH_LONG l;
|
||||
size_t n;
|
||||
|
||||
if (len==0) return 1;
|
||||
|
||||
l=(c->Nl+(((HASH_LONG)len)<<3))&0xffffffffUL;
|
||||
/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
|
||||
* Wei Dai <weidai@eskimo.com> for pointing it out. */
|
||||
if (l < c->Nl) /* overflow */
|
||||
c->Nh++;
|
||||
c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */
|
||||
c->Nl=l;
|
||||
|
||||
n = c->num;
|
||||
if (n != 0)
|
||||
{
|
||||
p=(unsigned char *)c->data;
|
||||
|
||||
if (len >= HASH_CBLOCK || len+n >= HASH_CBLOCK)
|
||||
{
|
||||
memcpy (p+n,data,HASH_CBLOCK-n);
|
||||
HASH_BLOCK_DATA_ORDER (c,p,1);
|
||||
n = HASH_CBLOCK-n;
|
||||
data += n;
|
||||
len -= n;
|
||||
c->num = 0;
|
||||
memset (p,0,HASH_CBLOCK); /* keep it zeroed */
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (p+n,data,len);
|
||||
c->num += (unsigned int)len;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
n = len/HASH_CBLOCK;
|
||||
if (n > 0)
|
||||
{
|
||||
HASH_BLOCK_DATA_ORDER (c,data,n);
|
||||
n *= HASH_CBLOCK;
|
||||
data += n;
|
||||
len -= n;
|
||||
}
|
||||
|
||||
if (len != 0)
|
||||
{
|
||||
p = (unsigned char *)c->data;
|
||||
c->num = (unsigned int)len;
|
||||
memcpy (p,data,len);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static
|
||||
void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
|
||||
{
|
||||
HASH_BLOCK_DATA_ORDER (c,data,1);
|
||||
}
|
||||
|
||||
static
|
||||
int HASH_FINAL (unsigned char *md, HASH_CTX *c)
|
||||
{
|
||||
unsigned char *p = (unsigned char *)c->data;
|
||||
size_t n = c->num;
|
||||
|
||||
p[n] = 0x80; /* there is always room for one */
|
||||
n++;
|
||||
|
||||
if (n > (HASH_CBLOCK-8))
|
||||
{
|
||||
memset (p+n,0,HASH_CBLOCK-n);
|
||||
n=0;
|
||||
HASH_BLOCK_DATA_ORDER (c,p,1);
|
||||
}
|
||||
memset (p+n,0,HASH_CBLOCK-8-n);
|
||||
|
||||
p += HASH_CBLOCK-8;
|
||||
#if defined(DATA_ORDER_IS_BIG_ENDIAN)
|
||||
(void)HOST_l2c(c->Nh,p);
|
||||
(void)HOST_l2c(c->Nl,p);
|
||||
#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
|
||||
(void)HOST_l2c(c->Nl,p);
|
||||
(void)HOST_l2c(c->Nh,p);
|
||||
#endif
|
||||
p -= HASH_CBLOCK;
|
||||
HASH_BLOCK_DATA_ORDER (c,p,1);
|
||||
c->num=0;
|
||||
memset (p,0,HASH_CBLOCK);
|
||||
|
||||
HASH_MAKE_STRING(c,md);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static
|
||||
void HASH_MAKE_STRING (HASH_CTX *c, unsigned char *s)
|
||||
{
|
||||
unsigned long ll;
|
||||
ll=c->A;
|
||||
(void)HOST_l2c(ll,s);
|
||||
ll=c->B;
|
||||
(void)HOST_l2c(ll,s);
|
||||
ll=c->C;
|
||||
(void)HOST_l2c(ll,s);
|
||||
ll=c->D;
|
||||
(void)HOST_l2c(ll,s);
|
||||
return;
|
||||
}
|
||||
|
||||
static void md5_block_data_order (MD5_CTX *c, const void *p,size_t num);
|
||||
static
|
||||
void HASH_BLOCK_DATA_ORDER (MD5_CTX *c, const void *p, size_t num)
|
||||
{
|
||||
md5_block_data_order (c, p, num);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef MD32_REG_T
|
||||
#if defined(__alpha) || defined(__sparcv9) || defined(__mips)
|
||||
#define MD32_REG_T long
|
||||
/*
|
||||
* This comment was originaly written for MD5, which is why it
|
||||
* discusses A-D. But it basically applies to all 32-bit digests,
|
||||
* which is why it was moved to common header file.
|
||||
*
|
||||
* In case you wonder why A-D are declared as long and not
|
||||
* as MD5_LONG. Doing so results in slight performance
|
||||
* boost on LP64 architectures. The catch is we don't
|
||||
* really care if 32 MSBs of a 64-bit register get polluted
|
||||
* with eventual overflows as we *save* only 32 LSBs in
|
||||
* *either* case. Now declaring 'em long excuses the compiler
|
||||
* from keeping 32 MSBs zeroed resulting in 13% performance
|
||||
* improvement under SPARC Solaris7/64 and 5% under AlphaLinux.
|
||||
* Well, to be honest it should say that this *prevents*
|
||||
* performance degradation.
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
#else
|
||||
/*
|
||||
* Above is not absolute and there are LP64 compilers that
|
||||
* generate better code if MD32_REG_T is defined int. The above
|
||||
* pre-processor condition reflects the circumstances under which
|
||||
* the conclusion was made and is subject to further extension.
|
||||
* <appro@fy.chalmers.se>
|
||||
*/
|
||||
#define MD32_REG_T int
|
||||
#endif
|
||||
#endif
|
||||
//end md32_common.h
|
||||
|
||||
/*
|
||||
#define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
|
||||
#define G(x,y,z) (((x) & (z)) | ((y) & (~(z))))
|
||||
*/
|
||||
|
||||
/* As pointed out by Wei Dai <weidai@eskimo.com>, the above can be
|
||||
* simplified to the code below. Wei attributes these optimizations
|
||||
* to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
|
||||
*/
|
||||
#define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
|
||||
#define G(b,c,d) ((((b) ^ (c)) & (d)) ^ (c))
|
||||
#define H(b,c,d) ((b) ^ (c) ^ (d))
|
||||
#define I(b,c,d) (((~(d)) | (b)) ^ (c))
|
||||
|
||||
#define R0(a,b,c,d,k,s,t) { \
|
||||
a+=((k)+(t)+F((b),(c),(d))); \
|
||||
a=ROTATE(a,s); \
|
||||
a+=b; };\
|
||||
|
||||
#define R1(a,b,c,d,k,s,t) { \
|
||||
a+=((k)+(t)+G((b),(c),(d))); \
|
||||
a=ROTATE(a,s); \
|
||||
a+=b; };
|
||||
|
||||
#define R2(a,b,c,d,k,s,t) { \
|
||||
a+=((k)+(t)+H((b),(c),(d))); \
|
||||
a=ROTATE(a,s); \
|
||||
a+=b; };
|
||||
|
||||
#define R3(a,b,c,d,k,s,t) { \
|
||||
a+=((k)+(t)+I((b),(c),(d))); \
|
||||
a=ROTATE(a,s); \
|
||||
a+=b; };
|
||||
|
||||
const char MD5_version[]="MD5";
|
||||
|
||||
/* Implemented from RFC1321 The MD5 Message-Digest Algorithm
|
||||
*/
|
||||
|
||||
#define INIT_DATA_A (unsigned long)0x67452301L
|
||||
#define INIT_DATA_B (unsigned long)0xefcdab89L
|
||||
#define INIT_DATA_C (unsigned long)0x98badcfeL
|
||||
#define INIT_DATA_D (unsigned long)0x10325476L
|
||||
|
||||
int MD5_Init(MD5_CTX *c)
|
||||
{
|
||||
memset (c,0,sizeof(*c));
|
||||
c->A=INIT_DATA_A;
|
||||
c->B=INIT_DATA_B;
|
||||
c->C=INIT_DATA_C;
|
||||
c->D=INIT_DATA_D;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if !defined(MD5_ASM)
|
||||
#ifdef X
|
||||
#undef X
|
||||
#endif
|
||||
static
|
||||
void md5_block_data_order (MD5_CTX *c, const void *data_, size_t num)
|
||||
{
|
||||
const unsigned char *data=data_;
|
||||
register unsigned MD32_REG_T A,B,C,D,l;
|
||||
#ifndef MD32_XARRAY
|
||||
/* See comment in crypto/sha/sha_locl.h for details. */
|
||||
unsigned MD32_REG_T XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
|
||||
XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
|
||||
# define X(i) XX##i
|
||||
#else
|
||||
MD5_LONG XX[MD5_LBLOCK];
|
||||
# define X(i) XX[i]
|
||||
#endif
|
||||
|
||||
A=c->A;
|
||||
B=c->B;
|
||||
C=c->C;
|
||||
D=c->D;
|
||||
|
||||
for (;num--;)
|
||||
{
|
||||
HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l;
|
||||
/* Round 0 */
|
||||
R0(A,B,C,D,X( 0), 7,0xd76aa478L); HOST_c2l(data,l); X( 2)=l;
|
||||
R0(D,A,B,C,X( 1),12,0xe8c7b756L); HOST_c2l(data,l); X( 3)=l;
|
||||
R0(C,D,A,B,X( 2),17,0x242070dbL); HOST_c2l(data,l); X( 4)=l;
|
||||
R0(B,C,D,A,X( 3),22,0xc1bdceeeL); HOST_c2l(data,l); X( 5)=l;
|
||||
R0(A,B,C,D,X( 4), 7,0xf57c0fafL); HOST_c2l(data,l); X( 6)=l;
|
||||
R0(D,A,B,C,X( 5),12,0x4787c62aL); HOST_c2l(data,l); X( 7)=l;
|
||||
R0(C,D,A,B,X( 6),17,0xa8304613L); HOST_c2l(data,l); X( 8)=l;
|
||||
R0(B,C,D,A,X( 7),22,0xfd469501L); HOST_c2l(data,l); X( 9)=l;
|
||||
R0(A,B,C,D,X( 8), 7,0x698098d8L); HOST_c2l(data,l); X(10)=l;
|
||||
R0(D,A,B,C,X( 9),12,0x8b44f7afL); HOST_c2l(data,l); X(11)=l;
|
||||
R0(C,D,A,B,X(10),17,0xffff5bb1L); HOST_c2l(data,l); X(12)=l;
|
||||
R0(B,C,D,A,X(11),22,0x895cd7beL); HOST_c2l(data,l); X(13)=l;
|
||||
R0(A,B,C,D,X(12), 7,0x6b901122L); HOST_c2l(data,l); X(14)=l;
|
||||
R0(D,A,B,C,X(13),12,0xfd987193L); HOST_c2l(data,l); X(15)=l;
|
||||
R0(C,D,A,B,X(14),17,0xa679438eL);
|
||||
R0(B,C,D,A,X(15),22,0x49b40821L);
|
||||
/* Round 1 */
|
||||
R1(A,B,C,D,X( 1), 5,0xf61e2562L);
|
||||
R1(D,A,B,C,X( 6), 9,0xc040b340L);
|
||||
R1(C,D,A,B,X(11),14,0x265e5a51L);
|
||||
R1(B,C,D,A,X( 0),20,0xe9b6c7aaL);
|
||||
R1(A,B,C,D,X( 5), 5,0xd62f105dL);
|
||||
R1(D,A,B,C,X(10), 9,0x02441453L);
|
||||
R1(C,D,A,B,X(15),14,0xd8a1e681L);
|
||||
R1(B,C,D,A,X( 4),20,0xe7d3fbc8L);
|
||||
R1(A,B,C,D,X( 9), 5,0x21e1cde6L);
|
||||
R1(D,A,B,C,X(14), 9,0xc33707d6L);
|
||||
R1(C,D,A,B,X( 3),14,0xf4d50d87L);
|
||||
R1(B,C,D,A,X( 8),20,0x455a14edL);
|
||||
R1(A,B,C,D,X(13), 5,0xa9e3e905L);
|
||||
R1(D,A,B,C,X( 2), 9,0xfcefa3f8L);
|
||||
R1(C,D,A,B,X( 7),14,0x676f02d9L);
|
||||
R1(B,C,D,A,X(12),20,0x8d2a4c8aL);
|
||||
/* Round 2 */
|
||||
R2(A,B,C,D,X( 5), 4,0xfffa3942L);
|
||||
R2(D,A,B,C,X( 8),11,0x8771f681L);
|
||||
R2(C,D,A,B,X(11),16,0x6d9d6122L);
|
||||
R2(B,C,D,A,X(14),23,0xfde5380cL);
|
||||
R2(A,B,C,D,X( 1), 4,0xa4beea44L);
|
||||
R2(D,A,B,C,X( 4),11,0x4bdecfa9L);
|
||||
R2(C,D,A,B,X( 7),16,0xf6bb4b60L);
|
||||
R2(B,C,D,A,X(10),23,0xbebfbc70L);
|
||||
R2(A,B,C,D,X(13), 4,0x289b7ec6L);
|
||||
R2(D,A,B,C,X( 0),11,0xeaa127faL);
|
||||
R2(C,D,A,B,X( 3),16,0xd4ef3085L);
|
||||
R2(B,C,D,A,X( 6),23,0x04881d05L);
|
||||
R2(A,B,C,D,X( 9), 4,0xd9d4d039L);
|
||||
R2(D,A,B,C,X(12),11,0xe6db99e5L);
|
||||
R2(C,D,A,B,X(15),16,0x1fa27cf8L);
|
||||
R2(B,C,D,A,X( 2),23,0xc4ac5665L);
|
||||
/* Round 3 */
|
||||
R3(A,B,C,D,X( 0), 6,0xf4292244L);
|
||||
R3(D,A,B,C,X( 7),10,0x432aff97L);
|
||||
R3(C,D,A,B,X(14),15,0xab9423a7L);
|
||||
R3(B,C,D,A,X( 5),21,0xfc93a039L);
|
||||
R3(A,B,C,D,X(12), 6,0x655b59c3L);
|
||||
R3(D,A,B,C,X( 3),10,0x8f0ccc92L);
|
||||
R3(C,D,A,B,X(10),15,0xffeff47dL);
|
||||
R3(B,C,D,A,X( 1),21,0x85845dd1L);
|
||||
R3(A,B,C,D,X( 8), 6,0x6fa87e4fL);
|
||||
R3(D,A,B,C,X(15),10,0xfe2ce6e0L);
|
||||
R3(C,D,A,B,X( 6),15,0xa3014314L);
|
||||
R3(B,C,D,A,X(13),21,0x4e0811a1L);
|
||||
R3(A,B,C,D,X( 4), 6,0xf7537e82L);
|
||||
R3(D,A,B,C,X(11),10,0xbd3af235L);
|
||||
R3(C,D,A,B,X( 2),15,0x2ad7d2bbL);
|
||||
R3(B,C,D,A,X( 9),21,0xeb86d391L);
|
||||
|
||||
A = c->A += A;
|
||||
B = c->B += B;
|
||||
C = c->C += C;
|
||||
D = c->D += D;
|
||||
}
|
||||
}
|
||||
#endif /* !defined(MD5_ASM) */
|
||||
|
||||
#if defined(MD5_ASM)
|
||||
#error "TODO: The MD5_ASM code for x86 will be ported in njit-client sooner or later"
|
||||
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || defined(__INTEL__) || \
|
||||
defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64) || \
|
||||
defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
|
||||
static
|
||||
void md5_block_data_order (MD5_CTX *c, const void *p,size_t num)
|
||||
{
|
||||
md5_block_asm_data_order(c, p, num);
|
||||
return;
|
||||
}
|
||||
# else
|
||||
# error "md5_block_asm_data_order() has not been supported on your platform"
|
||||
# endif
|
||||
#endif /* defined(MD5_ASM) */
|
||||
|
||||
int MD5_Update (HASH_CTX *c, const void *data, size_t len)
|
||||
{
|
||||
return HASH_UPDATE (c, data, len);
|
||||
}
|
||||
|
||||
void MD5_Transform (HASH_CTX *c, const unsigned char *data)
|
||||
{
|
||||
HASH_TRANSFORM (c, data);
|
||||
return;
|
||||
}
|
||||
|
||||
int MD5_Final (unsigned char *md, HASH_CTX *c)
|
||||
{
|
||||
return HASH_FINAL (md, c);
|
||||
}
|
||||
|
@ -1,97 +0,0 @@
|
||||
/* crypto/md5/md5_one.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <openssl/md5.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
#ifdef CHARSET_EBCDIC
|
||||
#include <openssl/ebcdic.h>
|
||||
#endif
|
||||
|
||||
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md)
|
||||
{
|
||||
MD5_CTX c;
|
||||
static unsigned char m[MD5_DIGEST_LENGTH];
|
||||
|
||||
if (md == NULL) md=m;
|
||||
if (!MD5_Init(&c))
|
||||
return NULL;
|
||||
#ifndef CHARSET_EBCDIC
|
||||
MD5_Update(&c,d,n);
|
||||
#else
|
||||
{
|
||||
char temp[1024];
|
||||
unsigned long chunk;
|
||||
|
||||
while (n > 0)
|
||||
{
|
||||
chunk = (n > sizeof(temp)) ? sizeof(temp) : n;
|
||||
ebcdic2ascii(temp, d, chunk);
|
||||
MD5_Update(&c,temp,chunk);
|
||||
n -= chunk;
|
||||
d += chunk;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
MD5_Final(md,&c);
|
||||
OPENSSL_cleanse(&c,sizeof(c)); /* security consideration */
|
||||
return(md);
|
||||
}
|
||||
|
@ -1,134 +0,0 @@
|
||||
/* crypto/md5/md5test.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/md5.h>
|
||||
|
||||
static char *test[]={
|
||||
"",
|
||||
"a",
|
||||
"abc",
|
||||
"message digest",
|
||||
"abcdefghijklmnopqrstuvwxyz",
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
|
||||
"12345678901234567890123456789012345678901234567890123456789012345678901234567890",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static char *ret[]={
|
||||
"d41d8cd98f00b204e9800998ecf8427e",
|
||||
"0cc175b9c0f1b6a831c399e269772661",
|
||||
"900150983cd24fb0d6963f7d28e17f72",
|
||||
"f96b697d7cb7938d525a2f31aaf161d0",
|
||||
"c3fcd3d76192e4007dfb496cca67e13b",
|
||||
"d174ab98d277d9f5a5611c2c9f419d9f",
|
||||
"57edf4a22be3c955ac49da2e2107b67a",
|
||||
};
|
||||
|
||||
static char *pt(unsigned char *md);
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i,err=0;
|
||||
char **P,**R;
|
||||
char *p;
|
||||
unsigned char md[MD5_DIGEST_LENGTH];
|
||||
|
||||
P=test;
|
||||
R=ret;
|
||||
i=1;
|
||||
while (*P != NULL)
|
||||
{
|
||||
MD5(&(P[0][0]),strlen((char *)*P),md);
|
||||
p=pt(md);
|
||||
if (strcmp(p,(char *)*R) != 0)
|
||||
{
|
||||
printf("error calculating MD5 on '%s'\n",*P);
|
||||
printf("got %s instead of %s\n",p,*R);
|
||||
err++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("test %d ok\n",i);
|
||||
}
|
||||
i++;
|
||||
R++;
|
||||
P++;
|
||||
}
|
||||
|
||||
if (err>=1)
|
||||
{
|
||||
printf("Total error: %d\n", err);
|
||||
exit(err);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
static char *pt(unsigned char *md)
|
||||
{
|
||||
int i;
|
||||
static char buf[80];
|
||||
|
||||
for (i=0; i<MD5_DIGEST_LENGTH; i++)
|
||||
sprintf(&(buf[i*2]),"%02x",md[i]);
|
||||
return(buf);
|
||||
}
|
||||
|
@ -1,77 +0,0 @@
|
||||
/* crypto/mem_clr.c -*- mode:C; c-file-style: "eay" -*- */
|
||||
/* Written by Geoff Thorpe (geoff@geoffthorpe.net) for the OpenSSL
|
||||
* project 2002.
|
||||
*/
|
||||
/* ====================================================================
|
||||
* Copyright (c) 2001 The OpenSSL Project. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. All advertising materials mentioning features or use of this
|
||||
* software must display the following acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
|
||||
*
|
||||
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
||||
* endorse or promote products derived from this software without
|
||||
* prior written permission. For written permission, please contact
|
||||
* openssl-core@openssl.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "OpenSSL"
|
||||
* nor may "OpenSSL" appear in their names without prior written
|
||||
* permission of the OpenSSL Project.
|
||||
*
|
||||
* 6. Redistributions of any form whatsoever must retain the following
|
||||
* acknowledgment:
|
||||
* "This product includes software developed by the OpenSSL Project
|
||||
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
||||
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This product includes cryptographic software written by Eric Young
|
||||
* (eay@cryptsoft.com). This product includes software written by Tim
|
||||
* Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
unsigned char cleanse_ctr = 0;
|
||||
|
||||
void OPENSSL_cleanse(void *ptr, size_t len)
|
||||
{
|
||||
unsigned char *p = ptr;
|
||||
size_t loop = len, ctr = cleanse_ctr;
|
||||
while(loop--)
|
||||
{
|
||||
*(p++) = (unsigned char)ctr;
|
||||
ctr += (17 + ((size_t)p & 0xF));
|
||||
}
|
||||
p=memchr(ptr, (unsigned char)ctr, len);
|
||||
if(p)
|
||||
ctr += (63 + (size_t)p);
|
||||
cleanse_ctr = (unsigned char)ctr;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifndef PACKAGE_NAME
|
||||
#define PACKAGE_NAME ""
|
||||
#endif
|
||||
|
||||
#ifndef PACKAGE_VERSION
|
||||
#define PACKAGE_VERSION ""
|
||||
#endif
|
||||
|
||||
#ifndef LOCALEDIR
|
||||
#define LOCALEDIR "/usr/local/share/locale"
|
||||
#endif
|
||||
|
||||
#include "njit8021xclient.h"
|
||||
|
||||
const struct GlobalConfig g_config = {
|
||||
/*.package_name = */ PACKAGE_NAME,
|
||||
/*.package_version = */ PACKAGE_VERSION,
|
||||
/*.locale_dir = */ LOCALEDIR,
|
||||
};
|
||||
|
@ -1,10 +0,0 @@
|
||||
#ifndef NJIT8021XCLIENT_H
|
||||
#define NJIT8021XCLIENT_H
|
||||
|
||||
extern const struct GlobalConfig {
|
||||
const char *package_name;
|
||||
const char *package_version;
|
||||
const char *locale_dir;
|
||||
} g_config;
|
||||
|
||||
#endif//nJIT8021XCLIENT_H
|
@ -1,100 +0,0 @@
|
||||
# Makefile
|
||||
#
|
||||
|
||||
# Compiler options
|
||||
CC := gcc
|
||||
CFLAGS := -g -O0
|
||||
LDFLAGS :=
|
||||
EXEEXT :=
|
||||
|
||||
|
||||
# Useful commands
|
||||
XGETTEXT := xgettext
|
||||
MSGINIT := msginit
|
||||
MSGMERGE := msgmerge
|
||||
MSGFMT := msgfmt
|
||||
MKDIR := mkdir -p
|
||||
RM := rm -rf
|
||||
INSTALL := install
|
||||
INSTALL_PROGRAM := $(INSTALL)
|
||||
INSTALL_DATA := $(INSTALL) -m 644
|
||||
INSTALL_DIR := $(INSTALL) -d
|
||||
|
||||
# Installation configuration
|
||||
PACKAGE_NAME := njit-tests
|
||||
prefix := /usr/local
|
||||
exec_prefix := ${prefix}
|
||||
bindir := ${exec_prefix}/bin
|
||||
datarootdir := ${prefix}/share
|
||||
datadir := ${datarootdir}
|
||||
localedir := ${datarootdir}/locale
|
||||
|
||||
# Configure project files
|
||||
srcdir := .
|
||||
podir := $(srcdir)/po
|
||||
po_files := $(notdir $(wildcard $(podir)/*.po))
|
||||
languages := $(basename $(po_files))
|
||||
gmo_files := $(addsuffix .gmo, $(languages))
|
||||
vpath %.c $(srcdir)
|
||||
vpath %.h $(srcdir)
|
||||
vpath %.po $(podir)
|
||||
vpath %.pot $(podir)
|
||||
executable_files :=
|
||||
source_files :=
|
||||
object_files :=
|
||||
xml_files :=
|
||||
data_files :=
|
||||
|
||||
# Load all building dependences...
|
||||
.PHONY: all
|
||||
all:
|
||||
|
||||
-include $(srcdir)/*.mk
|
||||
|
||||
all: Makefile $(executable_files)
|
||||
|
||||
#------------------------------
|
||||
# Default building rules.
|
||||
%: %.o
|
||||
$(LINK.o) $^ $(LDLIBS) -o $@
|
||||
%.o: %.c
|
||||
$(COMPILE.c) $< -o $@
|
||||
%.pot: %.c
|
||||
$(XGETTEXT) --from-code=UTF-8 -k_ $^ --output-dir=$(podir) --output=$@
|
||||
%.gmo: %.po
|
||||
$(MSGFMT) --directory=$(podir) $(notdir $<) -o $@
|
||||
#------------------------------
|
||||
# make clean
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(RM) $(executable_files)
|
||||
$(RM) $(object_files)
|
||||
ifdef gmo_files
|
||||
$(RM) $(gmo_files)
|
||||
endif
|
||||
#------------------------------
|
||||
# make distclean
|
||||
.PHONY: distclean
|
||||
distclean: clean
|
||||
$(RM) config.log config.status
|
||||
#------------------------------
|
||||
# make update-po
|
||||
.PHONY: update-po
|
||||
update-po: $(po_files)
|
||||
#------------------------------
|
||||
# make install
|
||||
.PHONY: install install-exec install-data install-mo
|
||||
install: install-exec install-data install-mo
|
||||
install-exec: $(executable_files)
|
||||
$(INSTALL_DIR) $(bindir)
|
||||
$(INSTALL_PROGRAM) $(executable_files) $(bindir)
|
||||
install-data: $(data_files) $(xml_files)
|
||||
$(INSTALL_DIR) $(datadir)
|
||||
$(INSTALL_DATA) $(data_files) $(xml_files) $(datadir)
|
||||
install-mo: $(gmo_files)
|
||||
for i in $^ ; do \
|
||||
lang=`basename $$i .gmo` ; \
|
||||
$(INSTALL_DIR) $(localedir)/$$lang/LC_MESSAGES ; \
|
||||
$(INSTALL_DATA) $$i $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE_NAME).mo ; \
|
||||
done
|
||||
|
@ -1,61 +0,0 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <ifaddrs.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
#include <net/if_ether.h>
|
||||
#include <net/ethernet.h>
|
||||
#include <net/if_types.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
struct ifaddrs *ifap = NULL;
|
||||
struct ifaddrs *i = NULL;
|
||||
const struct sockaddr_dl *sdl = NULL;
|
||||
caddr_t addr;
|
||||
|
||||
if (getifaddrs(&ifap) != 0)
|
||||
{
|
||||
char reason[256]="";
|
||||
strerror_r(errno, reason, sizeof(reason));
|
||||
fprintf(stderr, "Error: %s: %s\n", "getifaddrs() failed", reason);
|
||||
return (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (i=ifap; i!=NULL; i=i->ifa_next)
|
||||
{
|
||||
sdl = (const struct sockaddr_dl *) i->ifa_addr;
|
||||
if (sdl != NULL
|
||||
&& sdl->sdl_family == AF_LINK
|
||||
&& sdl->sdl_type == IFT_ETHER
|
||||
&& sdl->sdl_alen == ETHER_ADDR_LEN)
|
||||
{
|
||||
addr = LLADDR(sdl);
|
||||
|
||||
if (i->ifa_name != NULL)
|
||||
{
|
||||
printf("%s", i->ifa_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s", "(unknown)");
|
||||
}
|
||||
printf("\t");
|
||||
printf("%02hhX:%02hhX:%02hhX:%02hhX:%02hhX:%02hhX\n",
|
||||
addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
|
||||
}
|
||||
}
|
||||
|
||||
freeifaddrs(ifap);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -1,17 +0,0 @@
|
||||
|
||||
local_source_files := ifchk.c
|
||||
local_object_files := $(local_source_files:.c=.o)
|
||||
local_executable_files := ifchk
|
||||
local_executable_files := $(addsuffix $(EXEEXT), $(local_executable_files))
|
||||
|
||||
$(local_executable_files): $(local_object_files)
|
||||
#-------------------------------------------------
|
||||
ifchk.pot: $(local_source_files)
|
||||
$(po_files): ifchk.pot
|
||||
$(MSGMERGE) --quiet --directory=$(podir) --update $(notdir $@) $(notdir $<)
|
||||
#-------------------------------------------------
|
||||
|
||||
executable_files += $(local_executable_files)
|
||||
source_files += $(local_source_files)
|
||||
object_files += $(local_object_files)
|
||||
|
@ -1,134 +0,0 @@
|
||||
/* crypto/md5/md5test.c */
|
||||
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
|
||||
* All rights reserved.
|
||||
*
|
||||
* This package is an SSL implementation written
|
||||
* by Eric Young (eay@cryptsoft.com).
|
||||
* The implementation was written so as to conform with Netscapes SSL.
|
||||
*
|
||||
* This library is free for commercial and non-commercial use as long as
|
||||
* the following conditions are aheared to. The following conditions
|
||||
* apply to all code found in this distribution, be it the RC4, RSA,
|
||||
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
|
||||
* included with this distribution is covered by the same copyright terms
|
||||
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
|
||||
*
|
||||
* Copyright remains Eric Young's, and as such any Copyright notices in
|
||||
* the code are not to be removed.
|
||||
* If this package is used in a product, Eric Young should be given attribution
|
||||
* as the author of the parts of the library used.
|
||||
* This can be in the form of a textual message at program startup or
|
||||
* in documentation (online or textual) provided with the package.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* "This product includes cryptographic software written by
|
||||
* Eric Young (eay@cryptsoft.com)"
|
||||
* The word 'cryptographic' can be left out if the rouines from the library
|
||||
* being used are not cryptographic related :-).
|
||||
* 4. If you include any Windows specific code (or a derivative thereof) from
|
||||
* the apps directory (application code) you must include an acknowledgement:
|
||||
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* The licence and distribution terms for any publically available version or
|
||||
* derivative of this code cannot be changed. i.e. this code cannot simply be
|
||||
* copied and put under another distribution licence
|
||||
* [including the GNU Public Licence.]
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <openssl/evp.h>
|
||||
#include <openssl/md5.h>
|
||||
|
||||
static char *test[]={
|
||||
"",
|
||||
"a",
|
||||
"abc",
|
||||
"message digest",
|
||||
"abcdefghijklmnopqrstuvwxyz",
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
|
||||
"12345678901234567890123456789012345678901234567890123456789012345678901234567890",
|
||||
NULL,
|
||||
};
|
||||
|
||||
static char *ret[]={
|
||||
"d41d8cd98f00b204e9800998ecf8427e",
|
||||
"0cc175b9c0f1b6a831c399e269772661",
|
||||
"900150983cd24fb0d6963f7d28e17f72",
|
||||
"f96b697d7cb7938d525a2f31aaf161d0",
|
||||
"c3fcd3d76192e4007dfb496cca67e13b",
|
||||
"d174ab98d277d9f5a5611c2c9f419d9f",
|
||||
"57edf4a22be3c955ac49da2e2107b67a",
|
||||
};
|
||||
|
||||
static char *pt(unsigned char *md);
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i,err=0;
|
||||
char **P,**R;
|
||||
char *p;
|
||||
unsigned char md[MD5_DIGEST_LENGTH];
|
||||
|
||||
P=test;
|
||||
R=ret;
|
||||
i=1;
|
||||
while (*P != NULL)
|
||||
{
|
||||
EVP_Digest(&(P[0][0]),strlen((char *)*P),md,NULL,EVP_md5(), NULL);
|
||||
p=pt(md);
|
||||
if (strcmp(p,(char *)*R) != 0)
|
||||
{
|
||||
printf("error calculating MD5 on '%s'\n",*P);
|
||||
printf("got %s instead of %s\n",p,*R);
|
||||
err++;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("test %d ok\n",i);
|
||||
}
|
||||
i++;
|
||||
R++;
|
||||
P++;
|
||||
}
|
||||
|
||||
if (err>=1)
|
||||
{
|
||||
printf("Total error: %d\n", err);
|
||||
exit(err);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
static char *pt(unsigned char *md)
|
||||
{
|
||||
int i;
|
||||
static char buf[80];
|
||||
|
||||
for (i=0; i<MD5_DIGEST_LENGTH; i++)
|
||||
sprintf(&(buf[i*2]),"%02x",md[i]);
|
||||
return(buf);
|
||||
}
|
||||
|
@ -1,16 +0,0 @@
|
||||
|
||||
local_source_files := md5test.c
|
||||
local_object_files := $(local_source_files:.c=.o)
|
||||
local_executable_files := md5test
|
||||
local_executable_files := $(addsuffix $(EXEEXT), $(local_executable_files))
|
||||
|
||||
$(local_executable_files): $(local_object_files)
|
||||
md5test.o: CFLAGS+=$(shell pkg-config libcrypto --cflags)
|
||||
#md5test: LDLIBS+=-lcrypto
|
||||
md5test: LDLIBS+=$(shell pkg-config libcrypto --libs)
|
||||
#-------------------------------------------------
|
||||
|
||||
executable_files += $(local_executable_files)
|
||||
source_files += $(local_source_files)
|
||||
object_files += $(local_object_files)
|
||||
|
@ -1,3 +1,4 @@
|
||||
#
|
||||
# Copyright (C) 2006-2018 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
@ -7,16 +8,15 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=rtl8192du
|
||||
PKG_VERSION:=2020-06-11
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/lwfinger/rtl8192du
|
||||
PKG_SOURCE_VERSION:=d6185ff4a242ebf553e9e9980da21591660e8f8c
|
||||
PKG_MIRROR_HASH:=8d7ca5ea8a6daa07ff9dbd8669337ee8b999fdbfb2a8d7216a2eb4d5601537fd
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.xz
|
||||
PKG_SOURCE_DATE:=2019-06-01
|
||||
PKG_SOURCE_VERSION:=54c95aaa23fe332afaa1ed4aacbb0db43aa3c7dd
|
||||
PKG_MIRROR_HASH:=d7cee3b7e8601c8e850570401628128f595faa4ad2895237708ba0e58bee3020
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_MAINTAINER:=Larry Finger <Larry.Finger@lwfinger.net>
|
||||
|
||||
STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h
|
||||
@ -24,22 +24,11 @@ STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backpor
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
NOSTDINC_FLAGS = \
|
||||
-I$(PKG_BUILD_DIR)/include \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211/uapi \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211 \
|
||||
-include backport/autoconf.h \
|
||||
-include backport/backport.h
|
||||
|
||||
NOSTDINC_FLAGS+=-DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT -DCONFIG_CONCURRENT_MODE -DBUILD_OPENWRT
|
||||
|
||||
define KernelPackage/rtl8192du
|
||||
SUBMENU:=Wireless Drivers
|
||||
TITLE:=Realtek RTL8192DU wireless USB 802.11n driver
|
||||
DEPENDS:=@USB_SUPPORT +kmod-cfg80211 +kmod-mac80211 +kmod-usb-core
|
||||
FILES:= $(PKG_BUILD_DIR)/8192du.$(LINUX_KMOD_SUFFIX)
|
||||
TITLE:=Realtek RTL8192DU support
|
||||
DEPENDS:=+kmod-cfg80211 +kmod-usb-core +@DRIVER_11N_SUPPORT
|
||||
FILES:= $(PKG_BUILD_DIR)/8192du.ko
|
||||
AUTOLOAD:=$(call AutoProbe,8192du)
|
||||
endef
|
||||
|
||||
@ -47,20 +36,27 @@ define KernelPackage/rtl8192du/description
|
||||
Kernel modules for the Realtek 8192DU USB 802.11n wireless USB adapters
|
||||
endef
|
||||
|
||||
NOSTDINC_FLAGS = \
|
||||
-I$(PKG_BUILD_DIR) \
|
||||
-I$(PKG_BUILD_DIR)/include \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211 \
|
||||
-I$(STAGING_DIR)/usr/include/mac80211/uapi \
|
||||
-include backport/autoconf.h \
|
||||
-include backport/backport.h
|
||||
|
||||
NOSTDINC_FLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT -DCONFIG_CONCURRENT_MODE -DBUILD_OPENWRT
|
||||
|
||||
define Build/Compile
|
||||
+$(MAKE) $(PKG_JOBS) -C $(LINUX_DIR) \
|
||||
$(KERNEL_MAKE_FLAGS) \
|
||||
CONFIG_RTL8192DU=m \
|
||||
NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
|
||||
M="$(PKG_BUILD_DIR)" \
|
||||
src="$(PKG_BUILD_DIR)" \
|
||||
TopDIR="$(PKG_BUILD_DIR)" \
|
||||
NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
|
||||
CONFIG_RTL8192DU=m \
|
||||
modules
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define KernelPackage/rtl8192du/install
|
||||
$(INSTALL_DIR) $(1)/lib/firmware/rtlwifi
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/rtl8192dufw.bin $(1)/lib/firmware/rtlwifi/
|
||||
|
@ -13,10 +13,9 @@ PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/scutclient/scutclient.git
|
||||
PKG_MIRROR_HASH:=31e598d418956e236de287834f9553026f7853b06c5ba091fbf6f933bc305116
|
||||
PKG_REV:=10d0c13cc5902925c479f1d50a68564c3129aebc
|
||||
PKG_SOURCE_VERSION:=36128216c63f8954371e64d78ff30bca5e73a882
|
||||
PKG_MIRROR_HASH:=ffce8508a7d083150d6484b7272ea832432dcfde9ad8773c2a6d1785bef41191
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_REV)
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
||||
@ -24,8 +23,6 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
||||
PKG_MAINTAINER:=Scutclient Project
|
||||
|
||||
PKG_LICENSE:=AGPL-3.0
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
@ -1,14 +0,0 @@
|
||||
|
||||
config option
|
||||
option enable '1'
|
||||
option debug '0'
|
||||
|
||||
config scutclient
|
||||
|
||||
config drcom
|
||||
option hostname 'Lenovo-PC'
|
||||
option server_auth_ip '202.38.210.131'
|
||||
option version '4472434f4d0096022a'
|
||||
option hash '2ec15ad258aee9604b18f2f8114da38db16efd00'
|
||||
option dns '222.201.130.30'
|
||||
option onlinehook '/etc/init.d/sysntpd restart'
|
@ -1,8 +0,0 @@
|
||||
. /lib/functions.sh
|
||||
. /lib/functions/network.sh
|
||||
network_find_wan wan_net_name
|
||||
[ "$ACTION" = "ifup" ] && \
|
||||
[ "$(uci get scutclient.@option[-1].enable)" = "1" ] && \
|
||||
[ "$wan_net_name" = "$INTERFACE" ] || exit 0
|
||||
pgrep -x /usr/bin/scutclient > /dev/null && exit 0
|
||||
/etc/init.d/scutclient restart
|
@ -1,113 +0,0 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
STOP=15
|
||||
USE_PROCD=1
|
||||
|
||||
SCUTCLIENT_PATH=/usr/bin/scutclient
|
||||
SCUTCLIENT_CONFIG=scutclient
|
||||
|
||||
extra_command "logoff" "Log off manually"
|
||||
|
||||
scutclient_validate_drcom() {
|
||||
uci_validate_section scutclient drcom "${1}" \
|
||||
'dns:ip4addr:222.201.130.30' \
|
||||
'hostname:string:Lenovo-PC' \
|
||||
'server_auth_ip:ip4addr:202.38.210.131' \
|
||||
'version:string:4472434f4d0096022a' \
|
||||
'onlinehook:string' \
|
||||
'offlinehook:string' \
|
||||
'nettime:string' \
|
||||
'hash:string:2ec15ad258aee9604b18f2f8114da38db16efd00' || exit 1
|
||||
}
|
||||
|
||||
scutclient_validate_scutclient() {
|
||||
uci_validate_section scutclient scutclient "${1}" \
|
||||
'username:string' \
|
||||
'password:string' \
|
||||
'interface:string:wan' || exit 1
|
||||
}
|
||||
|
||||
scutclient_validate_option() {
|
||||
uci_validate_section scutclient option "${1}" \
|
||||
'enable:bool:0' \
|
||||
'debug:bool:0' || exit 1
|
||||
}
|
||||
|
||||
scutclient_load_config() {
|
||||
config_load scutclient
|
||||
config_foreach scutclient_validate_option option
|
||||
config_foreach scutclient_validate_drcom drcom
|
||||
}
|
||||
|
||||
scutclient_start_instance() {
|
||||
local cfg="$1"
|
||||
local username password interface ifname
|
||||
scutclient_validate_scutclient "$cfg"
|
||||
uci_validate_section network interface "$interface" 'ifname:string'
|
||||
procd_open_instance "scutclient_${cfg}_${interface}"
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_set_param netdev $ifname
|
||||
procd_set_param command "$SCUTCLIENT_PATH"
|
||||
procd_append_param command --username "$username" \
|
||||
--password "$password" \
|
||||
--iface "$ifname" \
|
||||
--dns "$dns" \
|
||||
--hostname "$hostname" \
|
||||
--udp-server "$server_auth_ip" \
|
||||
--cli-version "$version" \
|
||||
--hash "$hash"
|
||||
[ "$debug" -ge 1 ] && procd_append_param command --debug
|
||||
[ -n "$onlinehook" ] && procd_append_param command --online-hook "$onlinehook"
|
||||
[ -n "$offlinehook" ] && procd_append_param command --offline-hook "$offlinehook"
|
||||
[ -n "$nettime" ] && procd_append_param command --net-time "$nettime"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
scutclient_add_triggers() {
|
||||
local cfg="$1"
|
||||
local username password interface
|
||||
scutclient_validate_scutclient "$cfg"
|
||||
procd_add_interface_trigger "interface.*" $interface /etc/init.d/scutclient restart
|
||||
}
|
||||
|
||||
scutclient_logoff() {
|
||||
local cfg="$1"
|
||||
local username password interface ifname
|
||||
scutclient_validate_scutclient "$cfg"
|
||||
uci_validate_section network interface "$interface" 'ifname:string'
|
||||
$SCUTCLIENT_PATH --iface $ifname --logoff
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
local enable debug
|
||||
config_load scutclient
|
||||
config_foreach scutclient_validate_option option
|
||||
config_foreach scutclient_add_triggers scutclient
|
||||
#wan force_link is enabled by default when configured as static IP, which won't trigger hotplug events.
|
||||
#Add wan6 and dhcp here as a backup.
|
||||
procd_add_interface_trigger "interface.*" wan6 /etc/init.d/scutclient restart
|
||||
procd_add_reload_trigger "dhcp"
|
||||
procd_add_reload_trigger "$SCUTCLIENT_CONFIG"
|
||||
procd_open_validate
|
||||
scutclient_validate_option
|
||||
scutclient_validate_scutclient
|
||||
scutclient_validate_drcom
|
||||
procd_close_validate
|
||||
}
|
||||
|
||||
start_service() {
|
||||
local dns hostname server_auth_ip version hash username password enable debug ifname authexe nettime
|
||||
scutclient_load_config
|
||||
[ $enable -eq 0 ] && exit
|
||||
config_foreach scutclient_start_instance scutclient
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
|
||||
boot() {
|
||||
return
|
||||
}
|
Loading…
Reference in New Issue
Block a user